Class: GoogleDrive::Spreadsheet

Inherits:
File
  • Object
show all
Includes:
Util
Defined in:
lib/google_drive/spreadsheet.rb

Overview

A spreadsheet.

e.g., Use methods spreadsheet_by_title, spreadsheet_by_url, create_spreadsheet in GoogleDrive::Session to get GoogleDrive::Spreadsheet object.

Constant Summary collapse

SUPPORTED_EXPORT_FORMAT =
Set.new(%w[xlsx csv pdf])

Constants included from Util

Util::EXT_TO_CONTENT_TYPE, Util::IMPORTABLE_CONTENT_TYPE_MAP

Instance Attribute Summary

Attributes inherited from File

#api_file

Instance Method Summary collapse

Methods included from Util

concat_url, construct_and_query, construct_query, convert_params, delegate_api_methods, encode_query, get_singleton_class, h

Methods inherited from File

#acl, #acl_feed_url, #available_content_types, #copy, #delete, #export_as_file, #export_as_string, #export_to_io, #human_url, #initialize, #inspect, #reload_metadata, #rename, #resource_id, #resource_type, #title, #update_from_file, #update_from_io, #update_from_string

Constructor Details

This class inherits a constructor from GoogleDrive::File

Instance Method Details

#add_worksheet(title, max_rows = 100, max_cols = 20, index: nil) ⇒ Object

Adds a new worksheet to the spreadsheet. Returns added GoogleDrive::Worksheet.

When index is specified, the worksheet is inserted at the given index.


79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
# File 'lib/google_drive/spreadsheet.rb', line 79

def add_worksheet(title, max_rows = 100, max_cols = 20, index: nil)
  (response,) = batch_update([{
    add_sheet: {
      properties: {
        title: title,
        index: index,
        grid_properties: {
          row_count: max_rows,
          column_count: max_cols,
        },
      },
    },
  }])
  Worksheet.new(@session, self, response.add_sheet.properties)
end

#batch_update(requests) ⇒ Object

Performs batch update of the spreadsheet.

requests is an Array of Google::Apis::SheetsV4::Request or its Hash equivalent. Returns an Array of Google::Apis::SheetsV4::Response.


126
127
128
129
130
131
132
133
# File 'lib/google_drive/spreadsheet.rb', line 126

def batch_update(requests)
  batch_request =
    Google::Apis::SheetsV4::BatchUpdateSpreadsheetRequest.new(
      requests: requests)
  batch_response =
    @session.sheets_service.batch_update_spreadsheet(id, batch_request)
  batch_response.replies
end

#document_feed_urlObject

URL of feed used in the deprecated document list feed API.


40
41
42
43
# File 'lib/google_drive/spreadsheet.rb', line 40

def document_feed_url
  'https://docs.google.com/feeds/documents/private/full/' +
    CGI.escape(resource_id)
end

#download_to_file(_path, _params = {}) ⇒ Object

Not available for GoogleDrive::Spreadsheet. Use export_as_file instead.

Raises:

  • (NotImplementedError)

96
97
98
99
100
101
102
# File 'lib/google_drive/spreadsheet.rb', line 96

def download_to_file(_path, _params = {})
  raise(
    NotImplementedError,
    'download_to_file is not available for GoogleDrive::Spreadsheet. ' \
    'Use export_as_file instead.'
  )
end

#download_to_io(_io, _params = {}) ⇒ Object

Not available for GoogleDrive::Spreadsheet. Use export_to_io instead.

Raises:

  • (NotImplementedError)

114
115
116
117
118
119
120
# File 'lib/google_drive/spreadsheet.rb', line 114

def download_to_io(_io, _params = {})
  raise(
    NotImplementedError,
    'download_to_io is not available for GoogleDrive::Spreadsheet. ' \
    'Use export_to_io instead.'
  )
end

#download_to_string(_params = {}) ⇒ Object

Not available for GoogleDrive::Spreadsheet. Use export_as_string instead.

Raises:

  • (NotImplementedError)

105
106
107
108
109
110
111
# File 'lib/google_drive/spreadsheet.rb', line 105

def download_to_string(_params = {})
  raise(
    NotImplementedError,
    'download_to_string is not available for GoogleDrive::Spreadsheet. ' \
    'Use export_as_string instead.'
  )
end

#keyObject

Key of the spreadsheet.


28
29
30
# File 'lib/google_drive/spreadsheet.rb', line 28

def key
  id
end

#spreadsheet_feed_urlObject

Spreadsheet feed URL of the spreadsheet.


46
47
48
# File 'lib/google_drive/spreadsheet.rb', line 46

def spreadsheet_feed_url
  'https://spreadsheets.google.com/feeds/spreadsheets/private/full/' + id
end

#worksheet_by_sheet_id(sheet_id) ⇒ Object Also known as: worksheet_by_gid

Returns a GoogleDrive::Worksheet with the given gid.

Returns nil if not found.


67
68
69
70
# File 'lib/google_drive/spreadsheet.rb', line 67

def worksheet_by_sheet_id(sheet_id)
  sheet_id = sheet_id.to_i
  worksheets.find { |ws| ws.sheet_id == sheet_id }
end

#worksheet_by_title(title) ⇒ Object

Returns a GoogleDrive::Worksheet with the given title in the spreadsheet.

Returns nil if not found. Returns the first one when multiple worksheets with the title are found.


60
61
62
# File 'lib/google_drive/spreadsheet.rb', line 60

def worksheet_by_title(title)
  worksheets.find { |ws| ws.title == title }
end

#worksheetsObject

Returns worksheets of the spreadsheet as array of GoogleDrive::Worksheet.


51
52
53
54
# File 'lib/google_drive/spreadsheet.rb', line 51

def worksheets
  api_spreadsheet = @session.sheets_service.get_spreadsheet(id, fields: 'sheets.properties')
  api_spreadsheet.sheets.map{ |s| Worksheet.new(@session, self, s.properties) }
end

#worksheets_feed_urlObject

URL of worksheet-based feed of the spreadsheet.


33
34
35
36
37
# File 'lib/google_drive/spreadsheet.rb', line 33

def worksheets_feed_url
  format(
    'https://spreadsheets.google.com/feeds/worksheets/%s/private/full', id
  )
end