# Copyright 2015 Google Inc. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. require 'date' require 'google/apis/core/base_service' require 'google/apis/core/json_representation' require 'google/apis/core/hashable' require 'google/apis/errors' module Google module Apis module SheetsV4 # Adds a new banded range to the spreadsheet. class AddBandingRequest include Google::Apis::Core::Hashable # A banded (alternating colors) range in a sheet. # Corresponds to the JSON property `bandedRange` # @return [Google::Apis::SheetsV4::BandedRange] attr_accessor :banded_range def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @banded_range = args[:banded_range] if args.key?(:banded_range) end end # The result of adding a banded range. class AddBandingResponse include Google::Apis::Core::Hashable # A banded (alternating colors) range in a sheet. # Corresponds to the JSON property `bandedRange` # @return [Google::Apis::SheetsV4::BandedRange] attr_accessor :banded_range def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @banded_range = args[:banded_range] if args.key?(:banded_range) end end # Adds a chart to a sheet in the spreadsheet. class AddChartRequest include Google::Apis::Core::Hashable # A chart embedded in a sheet. # Corresponds to the JSON property `chart` # @return [Google::Apis::SheetsV4::EmbeddedChart] attr_accessor :chart def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @chart = args[:chart] if args.key?(:chart) end end # The result of adding a chart to a spreadsheet. class AddChartResponse include Google::Apis::Core::Hashable # A chart embedded in a sheet. # Corresponds to the JSON property `chart` # @return [Google::Apis::SheetsV4::EmbeddedChart] attr_accessor :chart def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @chart = args[:chart] if args.key?(:chart) end end # Adds a new conditional format rule at the given index. All subsequent rules' # indexes are incremented. class AddConditionalFormatRuleRequest include Google::Apis::Core::Hashable # The zero-based index where the rule should be inserted. # Corresponds to the JSON property `index` # @return [Fixnum] attr_accessor :index # A rule describing a conditional format. # Corresponds to the JSON property `rule` # @return [Google::Apis::SheetsV4::ConditionalFormatRule] attr_accessor :rule def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @index = args[:index] if args.key?(:index) @rule = args[:rule] if args.key?(:rule) end end # Adds a data source. After the data source is added successfully, an associated # DATA_SOURCE sheet is created and an execution is triggered to refresh the # sheet to read data from the data source. The request requires an additional ` # bigquery.readonly` OAuth scope. class AddDataSourceRequest include Google::Apis::Core::Hashable # Information about an external data source in the spreadsheet. # Corresponds to the JSON property `dataSource` # @return [Google::Apis::SheetsV4::DataSource] attr_accessor :data_source def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @data_source = args[:data_source] if args.key?(:data_source) end end # The result of adding a data source. class AddDataSourceResponse include Google::Apis::Core::Hashable # The data execution status. A data execution is created to sync a data source # object with the latest data from a DataSource. It is usually scheduled to run # at background, you can check its state to tell if an execution completes There # are several scenarios where a data execution is triggered to run: * Adding a # data source creates an associated data source sheet as well as a data # execution to sync the data from the data source to the sheet. * Updating a # data source creates a data execution to refresh the associated data source # sheet similarly. * You can send refresh request to explicitly refresh one or # multiple data source objects. # Corresponds to the JSON property `dataExecutionStatus` # @return [Google::Apis::SheetsV4::DataExecutionStatus] attr_accessor :data_execution_status # Information about an external data source in the spreadsheet. # Corresponds to the JSON property `dataSource` # @return [Google::Apis::SheetsV4::DataSource] attr_accessor :data_source def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @data_execution_status = args[:data_execution_status] if args.key?(:data_execution_status) @data_source = args[:data_source] if args.key?(:data_source) end end # Creates a group over the specified range. If the requested range is a superset # of the range of an existing group G, then the depth of G is incremented and # this new group G' has the depth of that group. For example, a group [C:D, # depth 1] + [B:E] results in groups [B:E, depth 1] and [C:D, depth 2]. If the # requested range is a subset of the range of an existing group G, then the # depth of the new group G' becomes one greater than the depth of G. For example, # a group [B:E, depth 1] + [C:D] results in groups [B:E, depth 1] and [C:D, # depth 2]. If the requested range starts before and ends within, or starts # within and ends after, the range of an existing group G, then the range of the # existing group G becomes the union of the ranges, and the new group G' has # depth one greater than the depth of G and range as the intersection of the # ranges. For example, a group [B:D, depth 1] + [C:E] results in groups [B:E, # depth 1] and [C:D, depth 2]. class AddDimensionGroupRequest include Google::Apis::Core::Hashable # A range along a single dimension on a sheet. All indexes are zero-based. # Indexes are half open: the start index is inclusive and the end index is # exclusive. Missing indexes indicate the range is unbounded on that side. # Corresponds to the JSON property `range` # @return [Google::Apis::SheetsV4::DimensionRange] attr_accessor :range def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @range = args[:range] if args.key?(:range) end end # The result of adding a group. class AddDimensionGroupResponse include Google::Apis::Core::Hashable # All groups of a dimension after adding a group to that dimension. # Corresponds to the JSON property `dimensionGroups` # @return [Array] attr_accessor :dimension_groups def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @dimension_groups = args[:dimension_groups] if args.key?(:dimension_groups) end end # Adds a filter view. class AddFilterViewRequest include Google::Apis::Core::Hashable # A filter view. # Corresponds to the JSON property `filter` # @return [Google::Apis::SheetsV4::FilterView] attr_accessor :filter def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @filter = args[:filter] if args.key?(:filter) end end # The result of adding a filter view. class AddFilterViewResponse include Google::Apis::Core::Hashable # A filter view. # Corresponds to the JSON property `filter` # @return [Google::Apis::SheetsV4::FilterView] attr_accessor :filter def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @filter = args[:filter] if args.key?(:filter) end end # Adds a named range to the spreadsheet. class AddNamedRangeRequest include Google::Apis::Core::Hashable # A named range. # Corresponds to the JSON property `namedRange` # @return [Google::Apis::SheetsV4::NamedRange] attr_accessor :named_range def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @named_range = args[:named_range] if args.key?(:named_range) end end # The result of adding a named range. class AddNamedRangeResponse include Google::Apis::Core::Hashable # A named range. # Corresponds to the JSON property `namedRange` # @return [Google::Apis::SheetsV4::NamedRange] attr_accessor :named_range def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @named_range = args[:named_range] if args.key?(:named_range) end end # Adds a new protected range. class AddProtectedRangeRequest include Google::Apis::Core::Hashable # A protected range. # Corresponds to the JSON property `protectedRange` # @return [Google::Apis::SheetsV4::ProtectedRange] attr_accessor :protected_range def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @protected_range = args[:protected_range] if args.key?(:protected_range) end end # The result of adding a new protected range. class AddProtectedRangeResponse include Google::Apis::Core::Hashable # A protected range. # Corresponds to the JSON property `protectedRange` # @return [Google::Apis::SheetsV4::ProtectedRange] attr_accessor :protected_range def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @protected_range = args[:protected_range] if args.key?(:protected_range) end end # Adds a new sheet. When a sheet is added at a given index, all subsequent # sheets' indexes are incremented. To add an object sheet, use AddChartRequest # instead and specify EmbeddedObjectPosition.sheetId or EmbeddedObjectPosition. # newSheet. class AddSheetRequest include Google::Apis::Core::Hashable # Properties of a sheet. # Corresponds to the JSON property `properties` # @return [Google::Apis::SheetsV4::SheetProperties] attr_accessor :properties def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @properties = args[:properties] if args.key?(:properties) end end # The result of adding a sheet. class AddSheetResponse include Google::Apis::Core::Hashable # Properties of a sheet. # Corresponds to the JSON property `properties` # @return [Google::Apis::SheetsV4::SheetProperties] attr_accessor :properties def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @properties = args[:properties] if args.key?(:properties) end end # Adds a slicer to a sheet in the spreadsheet. class AddSlicerRequest include Google::Apis::Core::Hashable # A slicer in a sheet. # Corresponds to the JSON property `slicer` # @return [Google::Apis::SheetsV4::Slicer] attr_accessor :slicer def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @slicer = args[:slicer] if args.key?(:slicer) end end # The result of adding a slicer to a spreadsheet. class AddSlicerResponse include Google::Apis::Core::Hashable # A slicer in a sheet. # Corresponds to the JSON property `slicer` # @return [Google::Apis::SheetsV4::Slicer] attr_accessor :slicer def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @slicer = args[:slicer] if args.key?(:slicer) end end # Adds new cells after the last row with data in a sheet, inserting new rows # into the sheet if necessary. class AppendCellsRequest include Google::Apis::Core::Hashable # The fields of CellData that should be updated. At least one field must be # specified. The root is the CellData; 'row.values.' should not be specified. A # single `"*"` can be used as short-hand for listing every field. # Corresponds to the JSON property `fields` # @return [String] attr_accessor :fields # The data to append. # Corresponds to the JSON property `rows` # @return [Array] attr_accessor :rows # The sheet ID to append the data to. # Corresponds to the JSON property `sheetId` # @return [Fixnum] attr_accessor :sheet_id def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @fields = args[:fields] if args.key?(:fields) @rows = args[:rows] if args.key?(:rows) @sheet_id = args[:sheet_id] if args.key?(:sheet_id) end end # Appends rows or columns to the end of a sheet. class AppendDimensionRequest include Google::Apis::Core::Hashable # Whether rows or columns should be appended. # Corresponds to the JSON property `dimension` # @return [String] attr_accessor :dimension # The number of rows or columns to append. # Corresponds to the JSON property `length` # @return [Fixnum] attr_accessor :length # The sheet to append rows or columns to. # Corresponds to the JSON property `sheetId` # @return [Fixnum] attr_accessor :sheet_id def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @dimension = args[:dimension] if args.key?(:dimension) @length = args[:length] if args.key?(:length) @sheet_id = args[:sheet_id] if args.key?(:sheet_id) end end # The response when updating a range of values in a spreadsheet. class AppendValuesResponse include Google::Apis::Core::Hashable # The spreadsheet the updates were applied to. # Corresponds to the JSON property `spreadsheetId` # @return [String] attr_accessor :spreadsheet_id # The range (in A1 notation) of the table that values are being appended to ( # before the values were appended). Empty if no table was found. # Corresponds to the JSON property `tableRange` # @return [String] attr_accessor :table_range # The response when updating a range of values in a spreadsheet. # Corresponds to the JSON property `updates` # @return [Google::Apis::SheetsV4::UpdateValuesResponse] attr_accessor :updates def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @spreadsheet_id = args[:spreadsheet_id] if args.key?(:spreadsheet_id) @table_range = args[:table_range] if args.key?(:table_range) @updates = args[:updates] if args.key?(:updates) end end # Fills in more data based on existing data. class AutoFillRequest include Google::Apis::Core::Hashable # A range on a sheet. All indexes are zero-based. Indexes are half open, i.e. # the start index is inclusive and the end index is exclusive -- [start_index, # end_index). Missing indexes indicate the range is unbounded on that side. For # example, if `"Sheet1"` is sheet ID 0, then: `Sheet1!A1:A1 == sheet_id: 0, # start_row_index: 0, end_row_index: 1, start_column_index: 0, end_column_index: # 1` `Sheet1!A3:B4 == sheet_id: 0, start_row_index: 2, end_row_index: 4, # start_column_index: 0, end_column_index: 2` `Sheet1!A:B == sheet_id: 0, # start_column_index: 0, end_column_index: 2` `Sheet1!A5:B == sheet_id: 0, # start_row_index: 4, start_column_index: 0, end_column_index: 2` `Sheet1 == # sheet_id:0` The start index must always be less than or equal to the end index. # If the start index equals the end index, then the range is empty. Empty # ranges are typically not meaningful and are usually rendered in the UI as `# # REF!`. # Corresponds to the JSON property `range` # @return [Google::Apis::SheetsV4::GridRange] attr_accessor :range # A combination of a source range and how to extend that source. # Corresponds to the JSON property `sourceAndDestination` # @return [Google::Apis::SheetsV4::SourceAndDestination] attr_accessor :source_and_destination # True if we should generate data with the "alternate" series. This differs # based on the type and amount of source data. # Corresponds to the JSON property `useAlternateSeries` # @return [Boolean] attr_accessor :use_alternate_series alias_method :use_alternate_series?, :use_alternate_series def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @range = args[:range] if args.key?(:range) @source_and_destination = args[:source_and_destination] if args.key?(:source_and_destination) @use_alternate_series = args[:use_alternate_series] if args.key?(:use_alternate_series) end end # Automatically resizes one or more dimensions based on the contents of the # cells in that dimension. class AutoResizeDimensionsRequest include Google::Apis::Core::Hashable # A range along a single dimension on a DATA_SOURCE sheet. # Corresponds to the JSON property `dataSourceSheetDimensions` # @return [Google::Apis::SheetsV4::DataSourceSheetDimensionRange] attr_accessor :data_source_sheet_dimensions # A range along a single dimension on a sheet. All indexes are zero-based. # Indexes are half open: the start index is inclusive and the end index is # exclusive. Missing indexes indicate the range is unbounded on that side. # Corresponds to the JSON property `dimensions` # @return [Google::Apis::SheetsV4::DimensionRange] attr_accessor :dimensions def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @data_source_sheet_dimensions = args[:data_source_sheet_dimensions] if args.key?(:data_source_sheet_dimensions) @dimensions = args[:dimensions] if args.key?(:dimensions) end end # A banded (alternating colors) range in a sheet. class BandedRange include Google::Apis::Core::Hashable # The id of the banded range. # Corresponds to the JSON property `bandedRangeId` # @return [Fixnum] attr_accessor :banded_range_id # Properties referring a single dimension (either row or column). If both # BandedRange.row_properties and BandedRange.column_properties are set, the fill # colors are applied to cells according to the following rules: * header_color # and footer_color take priority over band colors. * first_band_color takes # priority over second_band_color. * row_properties takes priority over # column_properties. For example, the first row color takes priority over the # first column color, but the first column color takes priority over the second # row color. Similarly, the row header takes priority over the column header in # the top left cell, but the column header takes priority over the first row # color if the row header is not set. # Corresponds to the JSON property `columnProperties` # @return [Google::Apis::SheetsV4::BandingProperties] attr_accessor :column_properties # A range on a sheet. All indexes are zero-based. Indexes are half open, i.e. # the start index is inclusive and the end index is exclusive -- [start_index, # end_index). Missing indexes indicate the range is unbounded on that side. For # example, if `"Sheet1"` is sheet ID 0, then: `Sheet1!A1:A1 == sheet_id: 0, # start_row_index: 0, end_row_index: 1, start_column_index: 0, end_column_index: # 1` `Sheet1!A3:B4 == sheet_id: 0, start_row_index: 2, end_row_index: 4, # start_column_index: 0, end_column_index: 2` `Sheet1!A:B == sheet_id: 0, # start_column_index: 0, end_column_index: 2` `Sheet1!A5:B == sheet_id: 0, # start_row_index: 4, start_column_index: 0, end_column_index: 2` `Sheet1 == # sheet_id:0` The start index must always be less than or equal to the end index. # If the start index equals the end index, then the range is empty. Empty # ranges are typically not meaningful and are usually rendered in the UI as `# # REF!`. # Corresponds to the JSON property `range` # @return [Google::Apis::SheetsV4::GridRange] attr_accessor :range # Properties referring a single dimension (either row or column). If both # BandedRange.row_properties and BandedRange.column_properties are set, the fill # colors are applied to cells according to the following rules: * header_color # and footer_color take priority over band colors. * first_band_color takes # priority over second_band_color. * row_properties takes priority over # column_properties. For example, the first row color takes priority over the # first column color, but the first column color takes priority over the second # row color. Similarly, the row header takes priority over the column header in # the top left cell, but the column header takes priority over the first row # color if the row header is not set. # Corresponds to the JSON property `rowProperties` # @return [Google::Apis::SheetsV4::BandingProperties] attr_accessor :row_properties def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @banded_range_id = args[:banded_range_id] if args.key?(:banded_range_id) @column_properties = args[:column_properties] if args.key?(:column_properties) @range = args[:range] if args.key?(:range) @row_properties = args[:row_properties] if args.key?(:row_properties) end end # Properties referring a single dimension (either row or column). If both # BandedRange.row_properties and BandedRange.column_properties are set, the fill # colors are applied to cells according to the following rules: * header_color # and footer_color take priority over band colors. * first_band_color takes # priority over second_band_color. * row_properties takes priority over # column_properties. For example, the first row color takes priority over the # first column color, but the first column color takes priority over the second # row color. Similarly, the row header takes priority over the column header in # the top left cell, but the column header takes priority over the first row # color if the row header is not set. class BandingProperties include Google::Apis::Core::Hashable # Represents a color in the RGBA color space. This representation is designed # for simplicity of conversion to/from color representations in various # languages over compactness; for example, the fields of this representation can # be trivially provided to the constructor of "java.awt.Color" in Java; it can # also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha" # method in iOS; and, with just a little work, it can be easily formatted into a # CSS "rgba()" string in JavaScript, as well. Note: this proto does not carry # information about the absolute color space that should be used to interpret # the RGB value (e.g. sRGB, Adobe RGB, DCI-P3, BT.2020, etc.). By default, # applications SHOULD assume the sRGB color space. Note: when color equality # needs to be decided, implementations, unless documented otherwise, will treat # two colors to be equal if all their red, green, blue and alpha values each # differ by at most 1e-5. Example (Java): import com.google.type.Color; // ... # public static java.awt.Color fromProto(Color protocolor) ` float alpha = # protocolor.hasAlpha() ? protocolor.getAlpha().getValue() : 1.0; return new # java.awt.Color( protocolor.getRed(), protocolor.getGreen(), protocolor.getBlue( # ), alpha); ` public static Color toProto(java.awt.Color color) ` float red = ( # float) color.getRed(); float green = (float) color.getGreen(); float blue = ( # float) color.getBlue(); float denominator = 255.0; Color.Builder resultBuilder # = Color .newBuilder() .setRed(red / denominator) .setGreen(green / denominator) # .setBlue(blue / denominator); int alpha = color.getAlpha(); if (alpha != 255) # ` result.setAlpha( FloatValue .newBuilder() .setValue(((float) alpha) / # denominator) .build()); ` return resultBuilder.build(); ` // ... Example (iOS / # Obj-C): // ... static UIColor* fromProto(Color* protocolor) ` float red = [ # protocolor red]; float green = [protocolor green]; float blue = [protocolor # blue]; FloatValue* alpha_wrapper = [protocolor alpha]; float alpha = 1.0; if ( # alpha_wrapper != nil) ` alpha = [alpha_wrapper value]; ` return [UIColor # colorWithRed:red green:green blue:blue alpha:alpha]; ` static Color* toProto( # UIColor* color) ` CGFloat red, green, blue, alpha; if (![color getRed:&red # green:&green blue:&blue alpha:&alpha]) ` return nil; ` Color* result = [[Color # alloc] init]; [result setRed:red]; [result setGreen:green]; [result setBlue: # blue]; if (alpha <= 0.9999) ` [result setAlpha:floatWrapperWithValue(alpha)]; ` # [result autorelease]; return result; ` // ... Example (JavaScript): // ... # var protoToCssColor = function(rgb_color) ` var redFrac = rgb_color.red || 0.0; # var greenFrac = rgb_color.green || 0.0; var blueFrac = rgb_color.blue || 0.0; # var red = Math.floor(redFrac * 255); var green = Math.floor(greenFrac * 255); # var blue = Math.floor(blueFrac * 255); if (!('alpha' in rgb_color)) ` return # rgbToCssColor_(red, green, blue); ` var alphaFrac = rgb_color.alpha.value || 0. # 0; var rgbParams = [red, green, blue].join(','); return ['rgba(', rgbParams, ', # ', alphaFrac, ')'].join(''); `; var rgbToCssColor_ = function(red, green, blue) # ` var rgbNumber = new Number((red << 16) | (green << 8) | blue); var # hexString = rgbNumber.toString(16); var missingZeros = 6 - hexString.length; # var resultBuilder = ['#']; for (var i = 0; i < missingZeros; i++) ` # resultBuilder.push('0'); ` resultBuilder.push(hexString); return resultBuilder. # join(''); `; // ... # Corresponds to the JSON property `firstBandColor` # @return [Google::Apis::SheetsV4::Color] attr_accessor :first_band_color # A color value. # Corresponds to the JSON property `firstBandColorStyle` # @return [Google::Apis::SheetsV4::ColorStyle] attr_accessor :first_band_color_style # Represents a color in the RGBA color space. This representation is designed # for simplicity of conversion to/from color representations in various # languages over compactness; for example, the fields of this representation can # be trivially provided to the constructor of "java.awt.Color" in Java; it can # also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha" # method in iOS; and, with just a little work, it can be easily formatted into a # CSS "rgba()" string in JavaScript, as well. Note: this proto does not carry # information about the absolute color space that should be used to interpret # the RGB value (e.g. sRGB, Adobe RGB, DCI-P3, BT.2020, etc.). By default, # applications SHOULD assume the sRGB color space. Note: when color equality # needs to be decided, implementations, unless documented otherwise, will treat # two colors to be equal if all their red, green, blue and alpha values each # differ by at most 1e-5. Example (Java): import com.google.type.Color; // ... # public static java.awt.Color fromProto(Color protocolor) ` float alpha = # protocolor.hasAlpha() ? protocolor.getAlpha().getValue() : 1.0; return new # java.awt.Color( protocolor.getRed(), protocolor.getGreen(), protocolor.getBlue( # ), alpha); ` public static Color toProto(java.awt.Color color) ` float red = ( # float) color.getRed(); float green = (float) color.getGreen(); float blue = ( # float) color.getBlue(); float denominator = 255.0; Color.Builder resultBuilder # = Color .newBuilder() .setRed(red / denominator) .setGreen(green / denominator) # .setBlue(blue / denominator); int alpha = color.getAlpha(); if (alpha != 255) # ` result.setAlpha( FloatValue .newBuilder() .setValue(((float) alpha) / # denominator) .build()); ` return resultBuilder.build(); ` // ... Example (iOS / # Obj-C): // ... static UIColor* fromProto(Color* protocolor) ` float red = [ # protocolor red]; float green = [protocolor green]; float blue = [protocolor # blue]; FloatValue* alpha_wrapper = [protocolor alpha]; float alpha = 1.0; if ( # alpha_wrapper != nil) ` alpha = [alpha_wrapper value]; ` return [UIColor # colorWithRed:red green:green blue:blue alpha:alpha]; ` static Color* toProto( # UIColor* color) ` CGFloat red, green, blue, alpha; if (![color getRed:&red # green:&green blue:&blue alpha:&alpha]) ` return nil; ` Color* result = [[Color # alloc] init]; [result setRed:red]; [result setGreen:green]; [result setBlue: # blue]; if (alpha <= 0.9999) ` [result setAlpha:floatWrapperWithValue(alpha)]; ` # [result autorelease]; return result; ` // ... Example (JavaScript): // ... # var protoToCssColor = function(rgb_color) ` var redFrac = rgb_color.red || 0.0; # var greenFrac = rgb_color.green || 0.0; var blueFrac = rgb_color.blue || 0.0; # var red = Math.floor(redFrac * 255); var green = Math.floor(greenFrac * 255); # var blue = Math.floor(blueFrac * 255); if (!('alpha' in rgb_color)) ` return # rgbToCssColor_(red, green, blue); ` var alphaFrac = rgb_color.alpha.value || 0. # 0; var rgbParams = [red, green, blue].join(','); return ['rgba(', rgbParams, ', # ', alphaFrac, ')'].join(''); `; var rgbToCssColor_ = function(red, green, blue) # ` var rgbNumber = new Number((red << 16) | (green << 8) | blue); var # hexString = rgbNumber.toString(16); var missingZeros = 6 - hexString.length; # var resultBuilder = ['#']; for (var i = 0; i < missingZeros; i++) ` # resultBuilder.push('0'); ` resultBuilder.push(hexString); return resultBuilder. # join(''); `; // ... # Corresponds to the JSON property `footerColor` # @return [Google::Apis::SheetsV4::Color] attr_accessor :footer_color # A color value. # Corresponds to the JSON property `footerColorStyle` # @return [Google::Apis::SheetsV4::ColorStyle] attr_accessor :footer_color_style # Represents a color in the RGBA color space. This representation is designed # for simplicity of conversion to/from color representations in various # languages over compactness; for example, the fields of this representation can # be trivially provided to the constructor of "java.awt.Color" in Java; it can # also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha" # method in iOS; and, with just a little work, it can be easily formatted into a # CSS "rgba()" string in JavaScript, as well. Note: this proto does not carry # information about the absolute color space that should be used to interpret # the RGB value (e.g. sRGB, Adobe RGB, DCI-P3, BT.2020, etc.). By default, # applications SHOULD assume the sRGB color space. Note: when color equality # needs to be decided, implementations, unless documented otherwise, will treat # two colors to be equal if all their red, green, blue and alpha values each # differ by at most 1e-5. Example (Java): import com.google.type.Color; // ... # public static java.awt.Color fromProto(Color protocolor) ` float alpha = # protocolor.hasAlpha() ? protocolor.getAlpha().getValue() : 1.0; return new # java.awt.Color( protocolor.getRed(), protocolor.getGreen(), protocolor.getBlue( # ), alpha); ` public static Color toProto(java.awt.Color color) ` float red = ( # float) color.getRed(); float green = (float) color.getGreen(); float blue = ( # float) color.getBlue(); float denominator = 255.0; Color.Builder resultBuilder # = Color .newBuilder() .setRed(red / denominator) .setGreen(green / denominator) # .setBlue(blue / denominator); int alpha = color.getAlpha(); if (alpha != 255) # ` result.setAlpha( FloatValue .newBuilder() .setValue(((float) alpha) / # denominator) .build()); ` return resultBuilder.build(); ` // ... Example (iOS / # Obj-C): // ... static UIColor* fromProto(Color* protocolor) ` float red = [ # protocolor red]; float green = [protocolor green]; float blue = [protocolor # blue]; FloatValue* alpha_wrapper = [protocolor alpha]; float alpha = 1.0; if ( # alpha_wrapper != nil) ` alpha = [alpha_wrapper value]; ` return [UIColor # colorWithRed:red green:green blue:blue alpha:alpha]; ` static Color* toProto( # UIColor* color) ` CGFloat red, green, blue, alpha; if (![color getRed:&red # green:&green blue:&blue alpha:&alpha]) ` return nil; ` Color* result = [[Color # alloc] init]; [result setRed:red]; [result setGreen:green]; [result setBlue: # blue]; if (alpha <= 0.9999) ` [result setAlpha:floatWrapperWithValue(alpha)]; ` # [result autorelease]; return result; ` // ... Example (JavaScript): // ... # var protoToCssColor = function(rgb_color) ` var redFrac = rgb_color.red || 0.0; # var greenFrac = rgb_color.green || 0.0; var blueFrac = rgb_color.blue || 0.0; # var red = Math.floor(redFrac * 255); var green = Math.floor(greenFrac * 255); # var blue = Math.floor(blueFrac * 255); if (!('alpha' in rgb_color)) ` return # rgbToCssColor_(red, green, blue); ` var alphaFrac = rgb_color.alpha.value || 0. # 0; var rgbParams = [red, green, blue].join(','); return ['rgba(', rgbParams, ', # ', alphaFrac, ')'].join(''); `; var rgbToCssColor_ = function(red, green, blue) # ` var rgbNumber = new Number((red << 16) | (green << 8) | blue); var # hexString = rgbNumber.toString(16); var missingZeros = 6 - hexString.length; # var resultBuilder = ['#']; for (var i = 0; i < missingZeros; i++) ` # resultBuilder.push('0'); ` resultBuilder.push(hexString); return resultBuilder. # join(''); `; // ... # Corresponds to the JSON property `headerColor` # @return [Google::Apis::SheetsV4::Color] attr_accessor :header_color # A color value. # Corresponds to the JSON property `headerColorStyle` # @return [Google::Apis::SheetsV4::ColorStyle] attr_accessor :header_color_style # Represents a color in the RGBA color space. This representation is designed # for simplicity of conversion to/from color representations in various # languages over compactness; for example, the fields of this representation can # be trivially provided to the constructor of "java.awt.Color" in Java; it can # also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha" # method in iOS; and, with just a little work, it can be easily formatted into a # CSS "rgba()" string in JavaScript, as well. Note: this proto does not carry # information about the absolute color space that should be used to interpret # the RGB value (e.g. sRGB, Adobe RGB, DCI-P3, BT.2020, etc.). By default, # applications SHOULD assume the sRGB color space. Note: when color equality # needs to be decided, implementations, unless documented otherwise, will treat # two colors to be equal if all their red, green, blue and alpha values each # differ by at most 1e-5. Example (Java): import com.google.type.Color; // ... # public static java.awt.Color fromProto(Color protocolor) ` float alpha = # protocolor.hasAlpha() ? protocolor.getAlpha().getValue() : 1.0; return new # java.awt.Color( protocolor.getRed(), protocolor.getGreen(), protocolor.getBlue( # ), alpha); ` public static Color toProto(java.awt.Color color) ` float red = ( # float) color.getRed(); float green = (float) color.getGreen(); float blue = ( # float) color.getBlue(); float denominator = 255.0; Color.Builder resultBuilder # = Color .newBuilder() .setRed(red / denominator) .setGreen(green / denominator) # .setBlue(blue / denominator); int alpha = color.getAlpha(); if (alpha != 255) # ` result.setAlpha( FloatValue .newBuilder() .setValue(((float) alpha) / # denominator) .build()); ` return resultBuilder.build(); ` // ... Example (iOS / # Obj-C): // ... static UIColor* fromProto(Color* protocolor) ` float red = [ # protocolor red]; float green = [protocolor green]; float blue = [protocolor # blue]; FloatValue* alpha_wrapper = [protocolor alpha]; float alpha = 1.0; if ( # alpha_wrapper != nil) ` alpha = [alpha_wrapper value]; ` return [UIColor # colorWithRed:red green:green blue:blue alpha:alpha]; ` static Color* toProto( # UIColor* color) ` CGFloat red, green, blue, alpha; if (![color getRed:&red # green:&green blue:&blue alpha:&alpha]) ` return nil; ` Color* result = [[Color # alloc] init]; [result setRed:red]; [result setGreen:green]; [result setBlue: # blue]; if (alpha <= 0.9999) ` [result setAlpha:floatWrapperWithValue(alpha)]; ` # [result autorelease]; return result; ` // ... Example (JavaScript): // ... # var protoToCssColor = function(rgb_color) ` var redFrac = rgb_color.red || 0.0; # var greenFrac = rgb_color.green || 0.0; var blueFrac = rgb_color.blue || 0.0; # var red = Math.floor(redFrac * 255); var green = Math.floor(greenFrac * 255); # var blue = Math.floor(blueFrac * 255); if (!('alpha' in rgb_color)) ` return # rgbToCssColor_(red, green, blue); ` var alphaFrac = rgb_color.alpha.value || 0. # 0; var rgbParams = [red, green, blue].join(','); return ['rgba(', rgbParams, ', # ', alphaFrac, ')'].join(''); `; var rgbToCssColor_ = function(red, green, blue) # ` var rgbNumber = new Number((red << 16) | (green << 8) | blue); var # hexString = rgbNumber.toString(16); var missingZeros = 6 - hexString.length; # var resultBuilder = ['#']; for (var i = 0; i < missingZeros; i++) ` # resultBuilder.push('0'); ` resultBuilder.push(hexString); return resultBuilder. # join(''); `; // ... # Corresponds to the JSON property `secondBandColor` # @return [Google::Apis::SheetsV4::Color] attr_accessor :second_band_color # A color value. # Corresponds to the JSON property `secondBandColorStyle` # @return [Google::Apis::SheetsV4::ColorStyle] attr_accessor :second_band_color_style def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @first_band_color = args[:first_band_color] if args.key?(:first_band_color) @first_band_color_style = args[:first_band_color_style] if args.key?(:first_band_color_style) @footer_color = args[:footer_color] if args.key?(:footer_color) @footer_color_style = args[:footer_color_style] if args.key?(:footer_color_style) @header_color = args[:header_color] if args.key?(:header_color) @header_color_style = args[:header_color_style] if args.key?(:header_color_style) @second_band_color = args[:second_band_color] if args.key?(:second_band_color) @second_band_color_style = args[:second_band_color_style] if args.key?(:second_band_color_style) end end # Formatting options for baseline value. class BaselineValueFormat include Google::Apis::Core::Hashable # The comparison type of key value with baseline value. # Corresponds to the JSON property `comparisonType` # @return [String] attr_accessor :comparison_type # Description which is appended after the baseline value. This field is optional. # Corresponds to the JSON property `description` # @return [String] attr_accessor :description # Represents a color in the RGBA color space. This representation is designed # for simplicity of conversion to/from color representations in various # languages over compactness; for example, the fields of this representation can # be trivially provided to the constructor of "java.awt.Color" in Java; it can # also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha" # method in iOS; and, with just a little work, it can be easily formatted into a # CSS "rgba()" string in JavaScript, as well. Note: this proto does not carry # information about the absolute color space that should be used to interpret # the RGB value (e.g. sRGB, Adobe RGB, DCI-P3, BT.2020, etc.). By default, # applications SHOULD assume the sRGB color space. Note: when color equality # needs to be decided, implementations, unless documented otherwise, will treat # two colors to be equal if all their red, green, blue and alpha values each # differ by at most 1e-5. Example (Java): import com.google.type.Color; // ... # public static java.awt.Color fromProto(Color protocolor) ` float alpha = # protocolor.hasAlpha() ? protocolor.getAlpha().getValue() : 1.0; return new # java.awt.Color( protocolor.getRed(), protocolor.getGreen(), protocolor.getBlue( # ), alpha); ` public static Color toProto(java.awt.Color color) ` float red = ( # float) color.getRed(); float green = (float) color.getGreen(); float blue = ( # float) color.getBlue(); float denominator = 255.0; Color.Builder resultBuilder # = Color .newBuilder() .setRed(red / denominator) .setGreen(green / denominator) # .setBlue(blue / denominator); int alpha = color.getAlpha(); if (alpha != 255) # ` result.setAlpha( FloatValue .newBuilder() .setValue(((float) alpha) / # denominator) .build()); ` return resultBuilder.build(); ` // ... Example (iOS / # Obj-C): // ... static UIColor* fromProto(Color* protocolor) ` float red = [ # protocolor red]; float green = [protocolor green]; float blue = [protocolor # blue]; FloatValue* alpha_wrapper = [protocolor alpha]; float alpha = 1.0; if ( # alpha_wrapper != nil) ` alpha = [alpha_wrapper value]; ` return [UIColor # colorWithRed:red green:green blue:blue alpha:alpha]; ` static Color* toProto( # UIColor* color) ` CGFloat red, green, blue, alpha; if (![color getRed:&red # green:&green blue:&blue alpha:&alpha]) ` return nil; ` Color* result = [[Color # alloc] init]; [result setRed:red]; [result setGreen:green]; [result setBlue: # blue]; if (alpha <= 0.9999) ` [result setAlpha:floatWrapperWithValue(alpha)]; ` # [result autorelease]; return result; ` // ... Example (JavaScript): // ... # var protoToCssColor = function(rgb_color) ` var redFrac = rgb_color.red || 0.0; # var greenFrac = rgb_color.green || 0.0; var blueFrac = rgb_color.blue || 0.0; # var red = Math.floor(redFrac * 255); var green = Math.floor(greenFrac * 255); # var blue = Math.floor(blueFrac * 255); if (!('alpha' in rgb_color)) ` return # rgbToCssColor_(red, green, blue); ` var alphaFrac = rgb_color.alpha.value || 0. # 0; var rgbParams = [red, green, blue].join(','); return ['rgba(', rgbParams, ', # ', alphaFrac, ')'].join(''); `; var rgbToCssColor_ = function(red, green, blue) # ` var rgbNumber = new Number((red << 16) | (green << 8) | blue); var # hexString = rgbNumber.toString(16); var missingZeros = 6 - hexString.length; # var resultBuilder = ['#']; for (var i = 0; i < missingZeros; i++) ` # resultBuilder.push('0'); ` resultBuilder.push(hexString); return resultBuilder. # join(''); `; // ... # Corresponds to the JSON property `negativeColor` # @return [Google::Apis::SheetsV4::Color] attr_accessor :negative_color # A color value. # Corresponds to the JSON property `negativeColorStyle` # @return [Google::Apis::SheetsV4::ColorStyle] attr_accessor :negative_color_style # Position settings for text. # Corresponds to the JSON property `position` # @return [Google::Apis::SheetsV4::TextPosition] attr_accessor :position # Represents a color in the RGBA color space. This representation is designed # for simplicity of conversion to/from color representations in various # languages over compactness; for example, the fields of this representation can # be trivially provided to the constructor of "java.awt.Color" in Java; it can # also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha" # method in iOS; and, with just a little work, it can be easily formatted into a # CSS "rgba()" string in JavaScript, as well. Note: this proto does not carry # information about the absolute color space that should be used to interpret # the RGB value (e.g. sRGB, Adobe RGB, DCI-P3, BT.2020, etc.). By default, # applications SHOULD assume the sRGB color space. Note: when color equality # needs to be decided, implementations, unless documented otherwise, will treat # two colors to be equal if all their red, green, blue and alpha values each # differ by at most 1e-5. Example (Java): import com.google.type.Color; // ... # public static java.awt.Color fromProto(Color protocolor) ` float alpha = # protocolor.hasAlpha() ? protocolor.getAlpha().getValue() : 1.0; return new # java.awt.Color( protocolor.getRed(), protocolor.getGreen(), protocolor.getBlue( # ), alpha); ` public static Color toProto(java.awt.Color color) ` float red = ( # float) color.getRed(); float green = (float) color.getGreen(); float blue = ( # float) color.getBlue(); float denominator = 255.0; Color.Builder resultBuilder # = Color .newBuilder() .setRed(red / denominator) .setGreen(green / denominator) # .setBlue(blue / denominator); int alpha = color.getAlpha(); if (alpha != 255) # ` result.setAlpha( FloatValue .newBuilder() .setValue(((float) alpha) / # denominator) .build()); ` return resultBuilder.build(); ` // ... Example (iOS / # Obj-C): // ... static UIColor* fromProto(Color* protocolor) ` float red = [ # protocolor red]; float green = [protocolor green]; float blue = [protocolor # blue]; FloatValue* alpha_wrapper = [protocolor alpha]; float alpha = 1.0; if ( # alpha_wrapper != nil) ` alpha = [alpha_wrapper value]; ` return [UIColor # colorWithRed:red green:green blue:blue alpha:alpha]; ` static Color* toProto( # UIColor* color) ` CGFloat red, green, blue, alpha; if (![color getRed:&red # green:&green blue:&blue alpha:&alpha]) ` return nil; ` Color* result = [[Color # alloc] init]; [result setRed:red]; [result setGreen:green]; [result setBlue: # blue]; if (alpha <= 0.9999) ` [result setAlpha:floatWrapperWithValue(alpha)]; ` # [result autorelease]; return result; ` // ... Example (JavaScript): // ... # var protoToCssColor = function(rgb_color) ` var redFrac = rgb_color.red || 0.0; # var greenFrac = rgb_color.green || 0.0; var blueFrac = rgb_color.blue || 0.0; # var red = Math.floor(redFrac * 255); var green = Math.floor(greenFrac * 255); # var blue = Math.floor(blueFrac * 255); if (!('alpha' in rgb_color)) ` return # rgbToCssColor_(red, green, blue); ` var alphaFrac = rgb_color.alpha.value || 0. # 0; var rgbParams = [red, green, blue].join(','); return ['rgba(', rgbParams, ', # ', alphaFrac, ')'].join(''); `; var rgbToCssColor_ = function(red, green, blue) # ` var rgbNumber = new Number((red << 16) | (green << 8) | blue); var # hexString = rgbNumber.toString(16); var missingZeros = 6 - hexString.length; # var resultBuilder = ['#']; for (var i = 0; i < missingZeros; i++) ` # resultBuilder.push('0'); ` resultBuilder.push(hexString); return resultBuilder. # join(''); `; // ... # Corresponds to the JSON property `positiveColor` # @return [Google::Apis::SheetsV4::Color] attr_accessor :positive_color # A color value. # Corresponds to the JSON property `positiveColorStyle` # @return [Google::Apis::SheetsV4::ColorStyle] attr_accessor :positive_color_style # The format of a run of text in a cell. Absent values indicate that the field # isn't specified. # Corresponds to the JSON property `textFormat` # @return [Google::Apis::SheetsV4::TextFormat] attr_accessor :text_format def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @comparison_type = args[:comparison_type] if args.key?(:comparison_type) @description = args[:description] if args.key?(:description) @negative_color = args[:negative_color] if args.key?(:negative_color) @negative_color_style = args[:negative_color_style] if args.key?(:negative_color_style) @position = args[:position] if args.key?(:position) @positive_color = args[:positive_color] if args.key?(:positive_color) @positive_color_style = args[:positive_color_style] if args.key?(:positive_color_style) @text_format = args[:text_format] if args.key?(:text_format) end end # An axis of the chart. A chart may not have more than one axis per axis # position. class BasicChartAxis include Google::Apis::Core::Hashable # The format of a run of text in a cell. Absent values indicate that the field # isn't specified. # Corresponds to the JSON property `format` # @return [Google::Apis::SheetsV4::TextFormat] attr_accessor :format # The position of this axis. # Corresponds to the JSON property `position` # @return [String] attr_accessor :position # The title of this axis. If set, this overrides any title inferred from headers # of the data. # Corresponds to the JSON property `title` # @return [String] attr_accessor :title # Position settings for text. # Corresponds to the JSON property `titleTextPosition` # @return [Google::Apis::SheetsV4::TextPosition] attr_accessor :title_text_position # The options that define a "view window" for a chart (such as the visible # values in an axis). # Corresponds to the JSON property `viewWindowOptions` # @return [Google::Apis::SheetsV4::ChartAxisViewWindowOptions] attr_accessor :view_window_options def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @format = args[:format] if args.key?(:format) @position = args[:position] if args.key?(:position) @title = args[:title] if args.key?(:title) @title_text_position = args[:title_text_position] if args.key?(:title_text_position) @view_window_options = args[:view_window_options] if args.key?(:view_window_options) end end # The domain of a chart. For example, if charting stock prices over time, this # would be the date. class BasicChartDomain include Google::Apis::Core::Hashable # The data included in a domain or series. # Corresponds to the JSON property `domain` # @return [Google::Apis::SheetsV4::ChartData] attr_accessor :domain # True to reverse the order of the domain values (horizontal axis). # Corresponds to the JSON property `reversed` # @return [Boolean] attr_accessor :reversed alias_method :reversed?, :reversed def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @domain = args[:domain] if args.key?(:domain) @reversed = args[:reversed] if args.key?(:reversed) end end # A single series of data in a chart. For example, if charting stock prices over # time, multiple series may exist, one for the "Open Price", "High Price", "Low # Price" and "Close Price". class BasicChartSeries include Google::Apis::Core::Hashable # Represents a color in the RGBA color space. This representation is designed # for simplicity of conversion to/from color representations in various # languages over compactness; for example, the fields of this representation can # be trivially provided to the constructor of "java.awt.Color" in Java; it can # also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha" # method in iOS; and, with just a little work, it can be easily formatted into a # CSS "rgba()" string in JavaScript, as well. Note: this proto does not carry # information about the absolute color space that should be used to interpret # the RGB value (e.g. sRGB, Adobe RGB, DCI-P3, BT.2020, etc.). By default, # applications SHOULD assume the sRGB color space. Note: when color equality # needs to be decided, implementations, unless documented otherwise, will treat # two colors to be equal if all their red, green, blue and alpha values each # differ by at most 1e-5. Example (Java): import com.google.type.Color; // ... # public static java.awt.Color fromProto(Color protocolor) ` float alpha = # protocolor.hasAlpha() ? protocolor.getAlpha().getValue() : 1.0; return new # java.awt.Color( protocolor.getRed(), protocolor.getGreen(), protocolor.getBlue( # ), alpha); ` public static Color toProto(java.awt.Color color) ` float red = ( # float) color.getRed(); float green = (float) color.getGreen(); float blue = ( # float) color.getBlue(); float denominator = 255.0; Color.Builder resultBuilder # = Color .newBuilder() .setRed(red / denominator) .setGreen(green / denominator) # .setBlue(blue / denominator); int alpha = color.getAlpha(); if (alpha != 255) # ` result.setAlpha( FloatValue .newBuilder() .setValue(((float) alpha) / # denominator) .build()); ` return resultBuilder.build(); ` // ... Example (iOS / # Obj-C): // ... static UIColor* fromProto(Color* protocolor) ` float red = [ # protocolor red]; float green = [protocolor green]; float blue = [protocolor # blue]; FloatValue* alpha_wrapper = [protocolor alpha]; float alpha = 1.0; if ( # alpha_wrapper != nil) ` alpha = [alpha_wrapper value]; ` return [UIColor # colorWithRed:red green:green blue:blue alpha:alpha]; ` static Color* toProto( # UIColor* color) ` CGFloat red, green, blue, alpha; if (![color getRed:&red # green:&green blue:&blue alpha:&alpha]) ` return nil; ` Color* result = [[Color # alloc] init]; [result setRed:red]; [result setGreen:green]; [result setBlue: # blue]; if (alpha <= 0.9999) ` [result setAlpha:floatWrapperWithValue(alpha)]; ` # [result autorelease]; return result; ` // ... Example (JavaScript): // ... # var protoToCssColor = function(rgb_color) ` var redFrac = rgb_color.red || 0.0; # var greenFrac = rgb_color.green || 0.0; var blueFrac = rgb_color.blue || 0.0; # var red = Math.floor(redFrac * 255); var green = Math.floor(greenFrac * 255); # var blue = Math.floor(blueFrac * 255); if (!('alpha' in rgb_color)) ` return # rgbToCssColor_(red, green, blue); ` var alphaFrac = rgb_color.alpha.value || 0. # 0; var rgbParams = [red, green, blue].join(','); return ['rgba(', rgbParams, ', # ', alphaFrac, ')'].join(''); `; var rgbToCssColor_ = function(red, green, blue) # ` var rgbNumber = new Number((red << 16) | (green << 8) | blue); var # hexString = rgbNumber.toString(16); var missingZeros = 6 - hexString.length; # var resultBuilder = ['#']; for (var i = 0; i < missingZeros; i++) ` # resultBuilder.push('0'); ` resultBuilder.push(hexString); return resultBuilder. # join(''); `; // ... # Corresponds to the JSON property `color` # @return [Google::Apis::SheetsV4::Color] attr_accessor :color # A color value. # Corresponds to the JSON property `colorStyle` # @return [Google::Apis::SheetsV4::ColorStyle] attr_accessor :color_style # Settings for one set of data labels. Data labels are annotations that appear # next to a set of data, such as the points on a line chart, and provide # additional information about what the data represents, such as a text # representation of the value behind that point on the graph. # Corresponds to the JSON property `dataLabel` # @return [Google::Apis::SheetsV4::DataLabel] attr_accessor :data_label # Properties that describe the style of a line. # Corresponds to the JSON property `lineStyle` # @return [Google::Apis::SheetsV4::LineStyle] attr_accessor :line_style # The style of a point on the chart. # Corresponds to the JSON property `pointStyle` # @return [Google::Apis::SheetsV4::PointStyle] attr_accessor :point_style # The data included in a domain or series. # Corresponds to the JSON property `series` # @return [Google::Apis::SheetsV4::ChartData] attr_accessor :series # Style override settings for series data points. # Corresponds to the JSON property `styleOverrides` # @return [Array] attr_accessor :style_overrides # The minor axis that will specify the range of values for this series. For # example, if charting stocks over time, the "Volume" series may want to be # pinned to the right with the prices pinned to the left, because the scale of # trading volume is different than the scale of prices. It is an error to # specify an axis that isn't a valid minor axis for the chart's type. # Corresponds to the JSON property `targetAxis` # @return [String] attr_accessor :target_axis # The type of this series. Valid only if the chartType is COMBO. Different types # will change the way the series is visualized. Only LINE, AREA, and COLUMN are # supported. # Corresponds to the JSON property `type` # @return [String] attr_accessor :type def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @color = args[:color] if args.key?(:color) @color_style = args[:color_style] if args.key?(:color_style) @data_label = args[:data_label] if args.key?(:data_label) @line_style = args[:line_style] if args.key?(:line_style) @point_style = args[:point_style] if args.key?(:point_style) @series = args[:series] if args.key?(:series) @style_overrides = args[:style_overrides] if args.key?(:style_overrides) @target_axis = args[:target_axis] if args.key?(:target_axis) @type = args[:type] if args.key?(:type) end end # The specification for a basic chart. See BasicChartType for the list of charts # this supports. class BasicChartSpec include Google::Apis::Core::Hashable # The axis on the chart. # Corresponds to the JSON property `axis` # @return [Array] attr_accessor :axis # The type of the chart. # Corresponds to the JSON property `chartType` # @return [String] attr_accessor :chart_type # The behavior of tooltips and data highlighting when hovering on data and chart # area. # Corresponds to the JSON property `compareMode` # @return [String] attr_accessor :compare_mode # The domain of data this is charting. Only a single domain is supported. # Corresponds to the JSON property `domains` # @return [Array] attr_accessor :domains # The number of rows or columns in the data that are "headers". If not set, # Google Sheets will guess how many rows are headers based on the data. (Note # that BasicChartAxis.title may override the axis title inferred from the header # values.) # Corresponds to the JSON property `headerCount` # @return [Fixnum] attr_accessor :header_count # If some values in a series are missing, gaps may appear in the chart (e.g, # segments of lines in a line chart will be missing). To eliminate these gaps # set this to true. Applies to Line, Area, and Combo charts. # Corresponds to the JSON property `interpolateNulls` # @return [Boolean] attr_accessor :interpolate_nulls alias_method :interpolate_nulls?, :interpolate_nulls # The position of the chart legend. # Corresponds to the JSON property `legendPosition` # @return [String] attr_accessor :legend_position # Gets whether all lines should be rendered smooth or straight by default. # Applies to Line charts. # Corresponds to the JSON property `lineSmoothing` # @return [Boolean] attr_accessor :line_smoothing alias_method :line_smoothing?, :line_smoothing # The data this chart is visualizing. # Corresponds to the JSON property `series` # @return [Array] attr_accessor :series # The stacked type for charts that support vertical stacking. Applies to Area, # Bar, Column, Combo, and Stepped Area charts. # Corresponds to the JSON property `stackedType` # @return [String] attr_accessor :stacked_type # True to make the chart 3D. Applies to Bar and Column charts. # Corresponds to the JSON property `threeDimensional` # @return [Boolean] attr_accessor :three_dimensional alias_method :three_dimensional?, :three_dimensional # Settings for one set of data labels. Data labels are annotations that appear # next to a set of data, such as the points on a line chart, and provide # additional information about what the data represents, such as a text # representation of the value behind that point on the graph. # Corresponds to the JSON property `totalDataLabel` # @return [Google::Apis::SheetsV4::DataLabel] attr_accessor :total_data_label def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @axis = args[:axis] if args.key?(:axis) @chart_type = args[:chart_type] if args.key?(:chart_type) @compare_mode = args[:compare_mode] if args.key?(:compare_mode) @domains = args[:domains] if args.key?(:domains) @header_count = args[:header_count] if args.key?(:header_count) @interpolate_nulls = args[:interpolate_nulls] if args.key?(:interpolate_nulls) @legend_position = args[:legend_position] if args.key?(:legend_position) @line_smoothing = args[:line_smoothing] if args.key?(:line_smoothing) @series = args[:series] if args.key?(:series) @stacked_type = args[:stacked_type] if args.key?(:stacked_type) @three_dimensional = args[:three_dimensional] if args.key?(:three_dimensional) @total_data_label = args[:total_data_label] if args.key?(:total_data_label) end end # The default filter associated with a sheet. class BasicFilter include Google::Apis::Core::Hashable # The criteria for showing/hiding values per column. The map's key is the column # index, and the value is the criteria for that column. This field is deprecated # in favor of filter_specs. # Corresponds to the JSON property `criteria` # @return [Hash] attr_accessor :criteria # The filter criteria per column. Both criteria and filter_specs are populated # in responses. If both fields are specified in an update request, this field # takes precedence. # Corresponds to the JSON property `filterSpecs` # @return [Array] attr_accessor :filter_specs # A range on a sheet. All indexes are zero-based. Indexes are half open, i.e. # the start index is inclusive and the end index is exclusive -- [start_index, # end_index). Missing indexes indicate the range is unbounded on that side. For # example, if `"Sheet1"` is sheet ID 0, then: `Sheet1!A1:A1 == sheet_id: 0, # start_row_index: 0, end_row_index: 1, start_column_index: 0, end_column_index: # 1` `Sheet1!A3:B4 == sheet_id: 0, start_row_index: 2, end_row_index: 4, # start_column_index: 0, end_column_index: 2` `Sheet1!A:B == sheet_id: 0, # start_column_index: 0, end_column_index: 2` `Sheet1!A5:B == sheet_id: 0, # start_row_index: 4, start_column_index: 0, end_column_index: 2` `Sheet1 == # sheet_id:0` The start index must always be less than or equal to the end index. # If the start index equals the end index, then the range is empty. Empty # ranges are typically not meaningful and are usually rendered in the UI as `# # REF!`. # Corresponds to the JSON property `range` # @return [Google::Apis::SheetsV4::GridRange] attr_accessor :range # The sort order per column. Later specifications are used when values are equal # in the earlier specifications. # Corresponds to the JSON property `sortSpecs` # @return [Array] attr_accessor :sort_specs def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @criteria = args[:criteria] if args.key?(:criteria) @filter_specs = args[:filter_specs] if args.key?(:filter_specs) @range = args[:range] if args.key?(:range) @sort_specs = args[:sort_specs] if args.key?(:sort_specs) end end # Style override settings for a single series data point. class BasicSeriesDataPointStyleOverride include Google::Apis::Core::Hashable # Represents a color in the RGBA color space. This representation is designed # for simplicity of conversion to/from color representations in various # languages over compactness; for example, the fields of this representation can # be trivially provided to the constructor of "java.awt.Color" in Java; it can # also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha" # method in iOS; and, with just a little work, it can be easily formatted into a # CSS "rgba()" string in JavaScript, as well. Note: this proto does not carry # information about the absolute color space that should be used to interpret # the RGB value (e.g. sRGB, Adobe RGB, DCI-P3, BT.2020, etc.). By default, # applications SHOULD assume the sRGB color space. Note: when color equality # needs to be decided, implementations, unless documented otherwise, will treat # two colors to be equal if all their red, green, blue and alpha values each # differ by at most 1e-5. Example (Java): import com.google.type.Color; // ... # public static java.awt.Color fromProto(Color protocolor) ` float alpha = # protocolor.hasAlpha() ? protocolor.getAlpha().getValue() : 1.0; return new # java.awt.Color( protocolor.getRed(), protocolor.getGreen(), protocolor.getBlue( # ), alpha); ` public static Color toProto(java.awt.Color color) ` float red = ( # float) color.getRed(); float green = (float) color.getGreen(); float blue = ( # float) color.getBlue(); float denominator = 255.0; Color.Builder resultBuilder # = Color .newBuilder() .setRed(red / denominator) .setGreen(green / denominator) # .setBlue(blue / denominator); int alpha = color.getAlpha(); if (alpha != 255) # ` result.setAlpha( FloatValue .newBuilder() .setValue(((float) alpha) / # denominator) .build()); ` return resultBuilder.build(); ` // ... Example (iOS / # Obj-C): // ... static UIColor* fromProto(Color* protocolor) ` float red = [ # protocolor red]; float green = [protocolor green]; float blue = [protocolor # blue]; FloatValue* alpha_wrapper = [protocolor alpha]; float alpha = 1.0; if ( # alpha_wrapper != nil) ` alpha = [alpha_wrapper value]; ` return [UIColor # colorWithRed:red green:green blue:blue alpha:alpha]; ` static Color* toProto( # UIColor* color) ` CGFloat red, green, blue, alpha; if (![color getRed:&red # green:&green blue:&blue alpha:&alpha]) ` return nil; ` Color* result = [[Color # alloc] init]; [result setRed:red]; [result setGreen:green]; [result setBlue: # blue]; if (alpha <= 0.9999) ` [result setAlpha:floatWrapperWithValue(alpha)]; ` # [result autorelease]; return result; ` // ... Example (JavaScript): // ... # var protoToCssColor = function(rgb_color) ` var redFrac = rgb_color.red || 0.0; # var greenFrac = rgb_color.green || 0.0; var blueFrac = rgb_color.blue || 0.0; # var red = Math.floor(redFrac * 255); var green = Math.floor(greenFrac * 255); # var blue = Math.floor(blueFrac * 255); if (!('alpha' in rgb_color)) ` return # rgbToCssColor_(red, green, blue); ` var alphaFrac = rgb_color.alpha.value || 0. # 0; var rgbParams = [red, green, blue].join(','); return ['rgba(', rgbParams, ', # ', alphaFrac, ')'].join(''); `; var rgbToCssColor_ = function(red, green, blue) # ` var rgbNumber = new Number((red << 16) | (green << 8) | blue); var # hexString = rgbNumber.toString(16); var missingZeros = 6 - hexString.length; # var resultBuilder = ['#']; for (var i = 0; i < missingZeros; i++) ` # resultBuilder.push('0'); ` resultBuilder.push(hexString); return resultBuilder. # join(''); `; // ... # Corresponds to the JSON property `color` # @return [Google::Apis::SheetsV4::Color] attr_accessor :color # A color value. # Corresponds to the JSON property `colorStyle` # @return [Google::Apis::SheetsV4::ColorStyle] attr_accessor :color_style # Zero based index of the series data point. # Corresponds to the JSON property `index` # @return [Fixnum] attr_accessor :index # The style of a point on the chart. # Corresponds to the JSON property `pointStyle` # @return [Google::Apis::SheetsV4::PointStyle] attr_accessor :point_style def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @color = args[:color] if args.key?(:color) @color_style = args[:color_style] if args.key?(:color_style) @index = args[:index] if args.key?(:index) @point_style = args[:point_style] if args.key?(:point_style) end end # The request for clearing more than one range selected by a DataFilter in a # spreadsheet. class BatchClearValuesByDataFilterRequest include Google::Apis::Core::Hashable # The DataFilters used to determine which ranges to clear. # Corresponds to the JSON property `dataFilters` # @return [Array] attr_accessor :data_filters def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @data_filters = args[:data_filters] if args.key?(:data_filters) end end # The response when clearing a range of values selected with DataFilters in a # spreadsheet. class BatchClearValuesByDataFilterResponse include Google::Apis::Core::Hashable # The ranges that were cleared, in A1 notation. If the requests are for an # unbounded range or a ranger larger than the bounds of the sheet, this is the # actual ranges that were cleared, bounded to the sheet's limits. # Corresponds to the JSON property `clearedRanges` # @return [Array] attr_accessor :cleared_ranges # The spreadsheet the updates were applied to. # Corresponds to the JSON property `spreadsheetId` # @return [String] attr_accessor :spreadsheet_id def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @cleared_ranges = args[:cleared_ranges] if args.key?(:cleared_ranges) @spreadsheet_id = args[:spreadsheet_id] if args.key?(:spreadsheet_id) end end # The request for clearing more than one range of values in a spreadsheet. class BatchClearValuesRequest include Google::Apis::Core::Hashable # The ranges to clear, in A1 notation. # Corresponds to the JSON property `ranges` # @return [Array] attr_accessor :ranges def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @ranges = args[:ranges] if args.key?(:ranges) end end # The response when clearing a range of values in a spreadsheet. class BatchClearValuesResponse include Google::Apis::Core::Hashable # The ranges that were cleared, in A1 notation. If the requests are for an # unbounded range or a ranger larger than the bounds of the sheet, this is the # actual ranges that were cleared, bounded to the sheet's limits. # Corresponds to the JSON property `clearedRanges` # @return [Array] attr_accessor :cleared_ranges # The spreadsheet the updates were applied to. # Corresponds to the JSON property `spreadsheetId` # @return [String] attr_accessor :spreadsheet_id def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @cleared_ranges = args[:cleared_ranges] if args.key?(:cleared_ranges) @spreadsheet_id = args[:spreadsheet_id] if args.key?(:spreadsheet_id) end end # The request for retrieving a range of values in a spreadsheet selected by a # set of DataFilters. class BatchGetValuesByDataFilterRequest include Google::Apis::Core::Hashable # The data filters used to match the ranges of values to retrieve. Ranges that # match any of the specified data filters are included in the response. # Corresponds to the JSON property `dataFilters` # @return [Array] attr_accessor :data_filters # How dates, times, and durations should be represented in the output. This is # ignored if value_render_option is FORMATTED_VALUE. The default dateTime render # option is [DateTimeRenderOption.SERIAL_NUMBER]. # Corresponds to the JSON property `dateTimeRenderOption` # @return [String] attr_accessor :date_time_render_option # The major dimension that results should use. For example, if the spreadsheet # data is: `A1=1,B1=2,A2=3,B2=4`, then a request that selects that range and # sets `majorDimension=ROWS` returns `[[1,2],[3,4]]`, whereas a request that # sets `majorDimension=COLUMNS` returns `[[1,3],[2,4]]`. # Corresponds to the JSON property `majorDimension` # @return [String] attr_accessor :major_dimension # How values should be represented in the output. The default render option is # ValueRenderOption.FORMATTED_VALUE. # Corresponds to the JSON property `valueRenderOption` # @return [String] attr_accessor :value_render_option def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @data_filters = args[:data_filters] if args.key?(:data_filters) @date_time_render_option = args[:date_time_render_option] if args.key?(:date_time_render_option) @major_dimension = args[:major_dimension] if args.key?(:major_dimension) @value_render_option = args[:value_render_option] if args.key?(:value_render_option) end end # The response when retrieving more than one range of values in a spreadsheet # selected by DataFilters. class BatchGetValuesByDataFilterResponse include Google::Apis::Core::Hashable # The ID of the spreadsheet the data was retrieved from. # Corresponds to the JSON property `spreadsheetId` # @return [String] attr_accessor :spreadsheet_id # The requested values with the list of data filters that matched them. # Corresponds to the JSON property `valueRanges` # @return [Array] attr_accessor :value_ranges def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @spreadsheet_id = args[:spreadsheet_id] if args.key?(:spreadsheet_id) @value_ranges = args[:value_ranges] if args.key?(:value_ranges) end end # The response when retrieving more than one range of values in a spreadsheet. class BatchGetValuesResponse include Google::Apis::Core::Hashable # The ID of the spreadsheet the data was retrieved from. # Corresponds to the JSON property `spreadsheetId` # @return [String] attr_accessor :spreadsheet_id # The requested values. The order of the ValueRanges is the same as the order of # the requested ranges. # Corresponds to the JSON property `valueRanges` # @return [Array] attr_accessor :value_ranges def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @spreadsheet_id = args[:spreadsheet_id] if args.key?(:spreadsheet_id) @value_ranges = args[:value_ranges] if args.key?(:value_ranges) end end # The request for updating any aspect of a spreadsheet. class BatchUpdateSpreadsheetRequest include Google::Apis::Core::Hashable # Determines if the update response should include the spreadsheet resource. # Corresponds to the JSON property `includeSpreadsheetInResponse` # @return [Boolean] attr_accessor :include_spreadsheet_in_response alias_method :include_spreadsheet_in_response?, :include_spreadsheet_in_response # A list of updates to apply to the spreadsheet. Requests will be applied in the # order they are specified. If any request is not valid, no requests will be # applied. # Corresponds to the JSON property `requests` # @return [Array] attr_accessor :requests # True if grid data should be returned. Meaningful only if # include_spreadsheet_in_response is 'true'. This parameter is ignored if a # field mask was set in the request. # Corresponds to the JSON property `responseIncludeGridData` # @return [Boolean] attr_accessor :response_include_grid_data alias_method :response_include_grid_data?, :response_include_grid_data # Limits the ranges included in the response spreadsheet. Meaningful only if # include_spreadsheet_in_response is 'true'. # Corresponds to the JSON property `responseRanges` # @return [Array] attr_accessor :response_ranges def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @include_spreadsheet_in_response = args[:include_spreadsheet_in_response] if args.key?(:include_spreadsheet_in_response) @requests = args[:requests] if args.key?(:requests) @response_include_grid_data = args[:response_include_grid_data] if args.key?(:response_include_grid_data) @response_ranges = args[:response_ranges] if args.key?(:response_ranges) end end # The reply for batch updating a spreadsheet. class BatchUpdateSpreadsheetResponse include Google::Apis::Core::Hashable # The reply of the updates. This maps 1:1 with the updates, although replies to # some requests may be empty. # Corresponds to the JSON property `replies` # @return [Array] attr_accessor :replies # The spreadsheet the updates were applied to. # Corresponds to the JSON property `spreadsheetId` # @return [String] attr_accessor :spreadsheet_id # Resource that represents a spreadsheet. # Corresponds to the JSON property `updatedSpreadsheet` # @return [Google::Apis::SheetsV4::Spreadsheet] attr_accessor :updated_spreadsheet def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @replies = args[:replies] if args.key?(:replies) @spreadsheet_id = args[:spreadsheet_id] if args.key?(:spreadsheet_id) @updated_spreadsheet = args[:updated_spreadsheet] if args.key?(:updated_spreadsheet) end end # The request for updating more than one range of values in a spreadsheet. class BatchUpdateValuesByDataFilterRequest include Google::Apis::Core::Hashable # The new values to apply to the spreadsheet. If more than one range is matched # by the specified DataFilter the specified values are applied to all of those # ranges. # Corresponds to the JSON property `data` # @return [Array] attr_accessor :data # Determines if the update response should include the values of the cells that # were updated. By default, responses do not include the updated values. The ` # updatedData` field within each of the BatchUpdateValuesResponse.responses # contains the updated values. If the range to write was larger than the range # actually written, the response includes all values in the requested range ( # excluding trailing empty rows and columns). # Corresponds to the JSON property `includeValuesInResponse` # @return [Boolean] attr_accessor :include_values_in_response alias_method :include_values_in_response?, :include_values_in_response # Determines how dates, times, and durations in the response should be rendered. # This is ignored if response_value_render_option is FORMATTED_VALUE. The # default dateTime render option is DateTimeRenderOption.SERIAL_NUMBER. # Corresponds to the JSON property `responseDateTimeRenderOption` # @return [String] attr_accessor :response_date_time_render_option # Determines how values in the response should be rendered. The default render # option is ValueRenderOption.FORMATTED_VALUE. # Corresponds to the JSON property `responseValueRenderOption` # @return [String] attr_accessor :response_value_render_option # How the input data should be interpreted. # Corresponds to the JSON property `valueInputOption` # @return [String] attr_accessor :value_input_option def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @data = args[:data] if args.key?(:data) @include_values_in_response = args[:include_values_in_response] if args.key?(:include_values_in_response) @response_date_time_render_option = args[:response_date_time_render_option] if args.key?(:response_date_time_render_option) @response_value_render_option = args[:response_value_render_option] if args.key?(:response_value_render_option) @value_input_option = args[:value_input_option] if args.key?(:value_input_option) end end # The response when updating a range of values in a spreadsheet. class BatchUpdateValuesByDataFilterResponse include Google::Apis::Core::Hashable # The response for each range updated. # Corresponds to the JSON property `responses` # @return [Array] attr_accessor :responses # The spreadsheet the updates were applied to. # Corresponds to the JSON property `spreadsheetId` # @return [String] attr_accessor :spreadsheet_id # The total number of cells updated. # Corresponds to the JSON property `totalUpdatedCells` # @return [Fixnum] attr_accessor :total_updated_cells # The total number of columns where at least one cell in the column was updated. # Corresponds to the JSON property `totalUpdatedColumns` # @return [Fixnum] attr_accessor :total_updated_columns # The total number of rows where at least one cell in the row was updated. # Corresponds to the JSON property `totalUpdatedRows` # @return [Fixnum] attr_accessor :total_updated_rows # The total number of sheets where at least one cell in the sheet was updated. # Corresponds to the JSON property `totalUpdatedSheets` # @return [Fixnum] attr_accessor :total_updated_sheets def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @responses = args[:responses] if args.key?(:responses) @spreadsheet_id = args[:spreadsheet_id] if args.key?(:spreadsheet_id) @total_updated_cells = args[:total_updated_cells] if args.key?(:total_updated_cells) @total_updated_columns = args[:total_updated_columns] if args.key?(:total_updated_columns) @total_updated_rows = args[:total_updated_rows] if args.key?(:total_updated_rows) @total_updated_sheets = args[:total_updated_sheets] if args.key?(:total_updated_sheets) end end # The request for updating more than one range of values in a spreadsheet. class BatchUpdateValuesRequest include Google::Apis::Core::Hashable # The new values to apply to the spreadsheet. # Corresponds to the JSON property `data` # @return [Array] attr_accessor :data # Determines if the update response should include the values of the cells that # were updated. By default, responses do not include the updated values. The ` # updatedData` field within each of the BatchUpdateValuesResponse.responses # contains the updated values. If the range to write was larger than the range # actually written, the response includes all values in the requested range ( # excluding trailing empty rows and columns). # Corresponds to the JSON property `includeValuesInResponse` # @return [Boolean] attr_accessor :include_values_in_response alias_method :include_values_in_response?, :include_values_in_response # Determines how dates, times, and durations in the response should be rendered. # This is ignored if response_value_render_option is FORMATTED_VALUE. The # default dateTime render option is DateTimeRenderOption.SERIAL_NUMBER. # Corresponds to the JSON property `responseDateTimeRenderOption` # @return [String] attr_accessor :response_date_time_render_option # Determines how values in the response should be rendered. The default render # option is ValueRenderOption.FORMATTED_VALUE. # Corresponds to the JSON property `responseValueRenderOption` # @return [String] attr_accessor :response_value_render_option # How the input data should be interpreted. # Corresponds to the JSON property `valueInputOption` # @return [String] attr_accessor :value_input_option def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @data = args[:data] if args.key?(:data) @include_values_in_response = args[:include_values_in_response] if args.key?(:include_values_in_response) @response_date_time_render_option = args[:response_date_time_render_option] if args.key?(:response_date_time_render_option) @response_value_render_option = args[:response_value_render_option] if args.key?(:response_value_render_option) @value_input_option = args[:value_input_option] if args.key?(:value_input_option) end end # The response when updating a range of values in a spreadsheet. class BatchUpdateValuesResponse include Google::Apis::Core::Hashable # One UpdateValuesResponse per requested range, in the same order as the # requests appeared. # Corresponds to the JSON property `responses` # @return [Array] attr_accessor :responses # The spreadsheet the updates were applied to. # Corresponds to the JSON property `spreadsheetId` # @return [String] attr_accessor :spreadsheet_id # The total number of cells updated. # Corresponds to the JSON property `totalUpdatedCells` # @return [Fixnum] attr_accessor :total_updated_cells # The total number of columns where at least one cell in the column was updated. # Corresponds to the JSON property `totalUpdatedColumns` # @return [Fixnum] attr_accessor :total_updated_columns # The total number of rows where at least one cell in the row was updated. # Corresponds to the JSON property `totalUpdatedRows` # @return [Fixnum] attr_accessor :total_updated_rows # The total number of sheets where at least one cell in the sheet was updated. # Corresponds to the JSON property `totalUpdatedSheets` # @return [Fixnum] attr_accessor :total_updated_sheets def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @responses = args[:responses] if args.key?(:responses) @spreadsheet_id = args[:spreadsheet_id] if args.key?(:spreadsheet_id) @total_updated_cells = args[:total_updated_cells] if args.key?(:total_updated_cells) @total_updated_columns = args[:total_updated_columns] if args.key?(:total_updated_columns) @total_updated_rows = args[:total_updated_rows] if args.key?(:total_updated_rows) @total_updated_sheets = args[:total_updated_sheets] if args.key?(:total_updated_sheets) end end # The specification of a BigQuery data source that's connected to a sheet. class BigQueryDataSourceSpec include Google::Apis::Core::Hashable # The ID of a BigQuery enabled GCP project with a billing account attached. For # any queries executed against the data source, the project is charged. # Corresponds to the JSON property `projectId` # @return [String] attr_accessor :project_id # Specifies a custom BigQuery query. # Corresponds to the JSON property `querySpec` # @return [Google::Apis::SheetsV4::BigQueryQuerySpec] attr_accessor :query_spec # Specifies a BigQuery table definition. Only [native tables](https://cloud. # google.com/bigquery/docs/tables-intro) is allowed. # Corresponds to the JSON property `tableSpec` # @return [Google::Apis::SheetsV4::BigQueryTableSpec] attr_accessor :table_spec def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @project_id = args[:project_id] if args.key?(:project_id) @query_spec = args[:query_spec] if args.key?(:query_spec) @table_spec = args[:table_spec] if args.key?(:table_spec) end end # Specifies a custom BigQuery query. class BigQueryQuerySpec include Google::Apis::Core::Hashable # The raw query string. # Corresponds to the JSON property `rawQuery` # @return [String] attr_accessor :raw_query def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @raw_query = args[:raw_query] if args.key?(:raw_query) end end # Specifies a BigQuery table definition. Only [native tables](https://cloud. # google.com/bigquery/docs/tables-intro) is allowed. class BigQueryTableSpec include Google::Apis::Core::Hashable # The BigQuery dataset id. # Corresponds to the JSON property `datasetId` # @return [String] attr_accessor :dataset_id # The BigQuery table id. # Corresponds to the JSON property `tableId` # @return [String] attr_accessor :table_id # The ID of a BigQuery project the table belongs to. If not specified, the # project_id is assumed. # Corresponds to the JSON property `tableProjectId` # @return [String] attr_accessor :table_project_id def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @dataset_id = args[:dataset_id] if args.key?(:dataset_id) @table_id = args[:table_id] if args.key?(:table_id) @table_project_id = args[:table_project_id] if args.key?(:table_project_id) end end # A condition that can evaluate to true or false. BooleanConditions are used by # conditional formatting, data validation, and the criteria in filters. class BooleanCondition include Google::Apis::Core::Hashable # The type of condition. # Corresponds to the JSON property `type` # @return [String] attr_accessor :type # The values of the condition. The number of supported values depends on the # condition type. Some support zero values, others one or two values, and # ConditionType.ONE_OF_LIST supports an arbitrary number of values. # Corresponds to the JSON property `values` # @return [Array] attr_accessor :values def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @type = args[:type] if args.key?(:type) @values = args[:values] if args.key?(:values) end end # A rule that may or may not match, depending on the condition. class BooleanRule include Google::Apis::Core::Hashable # A condition that can evaluate to true or false. BooleanConditions are used by # conditional formatting, data validation, and the criteria in filters. # Corresponds to the JSON property `condition` # @return [Google::Apis::SheetsV4::BooleanCondition] attr_accessor :condition # The format of a cell. # Corresponds to the JSON property `format` # @return [Google::Apis::SheetsV4::CellFormat] attr_accessor :format def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @condition = args[:condition] if args.key?(:condition) @format = args[:format] if args.key?(:format) end end # A border along a cell. class Border include Google::Apis::Core::Hashable # Represents a color in the RGBA color space. This representation is designed # for simplicity of conversion to/from color representations in various # languages over compactness; for example, the fields of this representation can # be trivially provided to the constructor of "java.awt.Color" in Java; it can # also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha" # method in iOS; and, with just a little work, it can be easily formatted into a # CSS "rgba()" string in JavaScript, as well. Note: this proto does not carry # information about the absolute color space that should be used to interpret # the RGB value (e.g. sRGB, Adobe RGB, DCI-P3, BT.2020, etc.). By default, # applications SHOULD assume the sRGB color space. Note: when color equality # needs to be decided, implementations, unless documented otherwise, will treat # two colors to be equal if all their red, green, blue and alpha values each # differ by at most 1e-5. Example (Java): import com.google.type.Color; // ... # public static java.awt.Color fromProto(Color protocolor) ` float alpha = # protocolor.hasAlpha() ? protocolor.getAlpha().getValue() : 1.0; return new # java.awt.Color( protocolor.getRed(), protocolor.getGreen(), protocolor.getBlue( # ), alpha); ` public static Color toProto(java.awt.Color color) ` float red = ( # float) color.getRed(); float green = (float) color.getGreen(); float blue = ( # float) color.getBlue(); float denominator = 255.0; Color.Builder resultBuilder # = Color .newBuilder() .setRed(red / denominator) .setGreen(green / denominator) # .setBlue(blue / denominator); int alpha = color.getAlpha(); if (alpha != 255) # ` result.setAlpha( FloatValue .newBuilder() .setValue(((float) alpha) / # denominator) .build()); ` return resultBuilder.build(); ` // ... Example (iOS / # Obj-C): // ... static UIColor* fromProto(Color* protocolor) ` float red = [ # protocolor red]; float green = [protocolor green]; float blue = [protocolor # blue]; FloatValue* alpha_wrapper = [protocolor alpha]; float alpha = 1.0; if ( # alpha_wrapper != nil) ` alpha = [alpha_wrapper value]; ` return [UIColor # colorWithRed:red green:green blue:blue alpha:alpha]; ` static Color* toProto( # UIColor* color) ` CGFloat red, green, blue, alpha; if (![color getRed:&red # green:&green blue:&blue alpha:&alpha]) ` return nil; ` Color* result = [[Color # alloc] init]; [result setRed:red]; [result setGreen:green]; [result setBlue: # blue]; if (alpha <= 0.9999) ` [result setAlpha:floatWrapperWithValue(alpha)]; ` # [result autorelease]; return result; ` // ... Example (JavaScript): // ... # var protoToCssColor = function(rgb_color) ` var redFrac = rgb_color.red || 0.0; # var greenFrac = rgb_color.green || 0.0; var blueFrac = rgb_color.blue || 0.0; # var red = Math.floor(redFrac * 255); var green = Math.floor(greenFrac * 255); # var blue = Math.floor(blueFrac * 255); if (!('alpha' in rgb_color)) ` return # rgbToCssColor_(red, green, blue); ` var alphaFrac = rgb_color.alpha.value || 0. # 0; var rgbParams = [red, green, blue].join(','); return ['rgba(', rgbParams, ', # ', alphaFrac, ')'].join(''); `; var rgbToCssColor_ = function(red, green, blue) # ` var rgbNumber = new Number((red << 16) | (green << 8) | blue); var # hexString = rgbNumber.toString(16); var missingZeros = 6 - hexString.length; # var resultBuilder = ['#']; for (var i = 0; i < missingZeros; i++) ` # resultBuilder.push('0'); ` resultBuilder.push(hexString); return resultBuilder. # join(''); `; // ... # Corresponds to the JSON property `color` # @return [Google::Apis::SheetsV4::Color] attr_accessor :color # A color value. # Corresponds to the JSON property `colorStyle` # @return [Google::Apis::SheetsV4::ColorStyle] attr_accessor :color_style # The style of the border. # Corresponds to the JSON property `style` # @return [String] attr_accessor :style # The width of the border, in pixels. Deprecated; the width is determined by the # "style" field. # Corresponds to the JSON property `width` # @return [Fixnum] attr_accessor :width def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @color = args[:color] if args.key?(:color) @color_style = args[:color_style] if args.key?(:color_style) @style = args[:style] if args.key?(:style) @width = args[:width] if args.key?(:width) end end # The borders of the cell. class Borders include Google::Apis::Core::Hashable # A border along a cell. # Corresponds to the JSON property `bottom` # @return [Google::Apis::SheetsV4::Border] attr_accessor :bottom # A border along a cell. # Corresponds to the JSON property `left` # @return [Google::Apis::SheetsV4::Border] attr_accessor :left # A border along a cell. # Corresponds to the JSON property `right` # @return [Google::Apis::SheetsV4::Border] attr_accessor :right # A border along a cell. # Corresponds to the JSON property `top` # @return [Google::Apis::SheetsV4::Border] attr_accessor :top def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @bottom = args[:bottom] if args.key?(:bottom) @left = args[:left] if args.key?(:left) @right = args[:right] if args.key?(:right) @top = args[:top] if args.key?(:top) end end # A bubble chart. class BubbleChartSpec include Google::Apis::Core::Hashable # Represents a color in the RGBA color space. This representation is designed # for simplicity of conversion to/from color representations in various # languages over compactness; for example, the fields of this representation can # be trivially provided to the constructor of "java.awt.Color" in Java; it can # also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha" # method in iOS; and, with just a little work, it can be easily formatted into a # CSS "rgba()" string in JavaScript, as well. Note: this proto does not carry # information about the absolute color space that should be used to interpret # the RGB value (e.g. sRGB, Adobe RGB, DCI-P3, BT.2020, etc.). By default, # applications SHOULD assume the sRGB color space. Note: when color equality # needs to be decided, implementations, unless documented otherwise, will treat # two colors to be equal if all their red, green, blue and alpha values each # differ by at most 1e-5. Example (Java): import com.google.type.Color; // ... # public static java.awt.Color fromProto(Color protocolor) ` float alpha = # protocolor.hasAlpha() ? protocolor.getAlpha().getValue() : 1.0; return new # java.awt.Color( protocolor.getRed(), protocolor.getGreen(), protocolor.getBlue( # ), alpha); ` public static Color toProto(java.awt.Color color) ` float red = ( # float) color.getRed(); float green = (float) color.getGreen(); float blue = ( # float) color.getBlue(); float denominator = 255.0; Color.Builder resultBuilder # = Color .newBuilder() .setRed(red / denominator) .setGreen(green / denominator) # .setBlue(blue / denominator); int alpha = color.getAlpha(); if (alpha != 255) # ` result.setAlpha( FloatValue .newBuilder() .setValue(((float) alpha) / # denominator) .build()); ` return resultBuilder.build(); ` // ... Example (iOS / # Obj-C): // ... static UIColor* fromProto(Color* protocolor) ` float red = [ # protocolor red]; float green = [protocolor green]; float blue = [protocolor # blue]; FloatValue* alpha_wrapper = [protocolor alpha]; float alpha = 1.0; if ( # alpha_wrapper != nil) ` alpha = [alpha_wrapper value]; ` return [UIColor # colorWithRed:red green:green blue:blue alpha:alpha]; ` static Color* toProto( # UIColor* color) ` CGFloat red, green, blue, alpha; if (![color getRed:&red # green:&green blue:&blue alpha:&alpha]) ` return nil; ` Color* result = [[Color # alloc] init]; [result setRed:red]; [result setGreen:green]; [result setBlue: # blue]; if (alpha <= 0.9999) ` [result setAlpha:floatWrapperWithValue(alpha)]; ` # [result autorelease]; return result; ` // ... Example (JavaScript): // ... # var protoToCssColor = function(rgb_color) ` var redFrac = rgb_color.red || 0.0; # var greenFrac = rgb_color.green || 0.0; var blueFrac = rgb_color.blue || 0.0; # var red = Math.floor(redFrac * 255); var green = Math.floor(greenFrac * 255); # var blue = Math.floor(blueFrac * 255); if (!('alpha' in rgb_color)) ` return # rgbToCssColor_(red, green, blue); ` var alphaFrac = rgb_color.alpha.value || 0. # 0; var rgbParams = [red, green, blue].join(','); return ['rgba(', rgbParams, ', # ', alphaFrac, ')'].join(''); `; var rgbToCssColor_ = function(red, green, blue) # ` var rgbNumber = new Number((red << 16) | (green << 8) | blue); var # hexString = rgbNumber.toString(16); var missingZeros = 6 - hexString.length; # var resultBuilder = ['#']; for (var i = 0; i < missingZeros; i++) ` # resultBuilder.push('0'); ` resultBuilder.push(hexString); return resultBuilder. # join(''); `; // ... # Corresponds to the JSON property `bubbleBorderColor` # @return [Google::Apis::SheetsV4::Color] attr_accessor :bubble_border_color # A color value. # Corresponds to the JSON property `bubbleBorderColorStyle` # @return [Google::Apis::SheetsV4::ColorStyle] attr_accessor :bubble_border_color_style # The data included in a domain or series. # Corresponds to the JSON property `bubbleLabels` # @return [Google::Apis::SheetsV4::ChartData] attr_accessor :bubble_labels # The max radius size of the bubbles, in pixels. If specified, the field must be # a positive value. # Corresponds to the JSON property `bubbleMaxRadiusSize` # @return [Fixnum] attr_accessor :bubble_max_radius_size # The minimum radius size of the bubbles, in pixels. If specific, the field must # be a positive value. # Corresponds to the JSON property `bubbleMinRadiusSize` # @return [Fixnum] attr_accessor :bubble_min_radius_size # The opacity of the bubbles between 0 and 1.0. 0 is fully transparent and 1 is # fully opaque. # Corresponds to the JSON property `bubbleOpacity` # @return [Float] attr_accessor :bubble_opacity # The data included in a domain or series. # Corresponds to the JSON property `bubbleSizes` # @return [Google::Apis::SheetsV4::ChartData] attr_accessor :bubble_sizes # The format of a run of text in a cell. Absent values indicate that the field # isn't specified. # Corresponds to the JSON property `bubbleTextStyle` # @return [Google::Apis::SheetsV4::TextFormat] attr_accessor :bubble_text_style # The data included in a domain or series. # Corresponds to the JSON property `domain` # @return [Google::Apis::SheetsV4::ChartData] attr_accessor :domain # The data included in a domain or series. # Corresponds to the JSON property `groupIds` # @return [Google::Apis::SheetsV4::ChartData] attr_accessor :group_ids # Where the legend of the chart should be drawn. # Corresponds to the JSON property `legendPosition` # @return [String] attr_accessor :legend_position # The data included in a domain or series. # Corresponds to the JSON property `series` # @return [Google::Apis::SheetsV4::ChartData] attr_accessor :series def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @bubble_border_color = args[:bubble_border_color] if args.key?(:bubble_border_color) @bubble_border_color_style = args[:bubble_border_color_style] if args.key?(:bubble_border_color_style) @bubble_labels = args[:bubble_labels] if args.key?(:bubble_labels) @bubble_max_radius_size = args[:bubble_max_radius_size] if args.key?(:bubble_max_radius_size) @bubble_min_radius_size = args[:bubble_min_radius_size] if args.key?(:bubble_min_radius_size) @bubble_opacity = args[:bubble_opacity] if args.key?(:bubble_opacity) @bubble_sizes = args[:bubble_sizes] if args.key?(:bubble_sizes) @bubble_text_style = args[:bubble_text_style] if args.key?(:bubble_text_style) @domain = args[:domain] if args.key?(:domain) @group_ids = args[:group_ids] if args.key?(:group_ids) @legend_position = args[:legend_position] if args.key?(:legend_position) @series = args[:series] if args.key?(:series) end end # A candlestick chart. class CandlestickChartSpec include Google::Apis::Core::Hashable # The Candlestick chart data. Only one CandlestickData is supported. # Corresponds to the JSON property `data` # @return [Array] attr_accessor :data # The domain of a CandlestickChart. # Corresponds to the JSON property `domain` # @return [Google::Apis::SheetsV4::CandlestickDomain] attr_accessor :domain def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @data = args[:data] if args.key?(:data) @domain = args[:domain] if args.key?(:domain) end end # The Candlestick chart data, each containing the low, open, close, and high # values for a series. class CandlestickData include Google::Apis::Core::Hashable # The series of a CandlestickData. # Corresponds to the JSON property `closeSeries` # @return [Google::Apis::SheetsV4::CandlestickSeries] attr_accessor :close_series # The series of a CandlestickData. # Corresponds to the JSON property `highSeries` # @return [Google::Apis::SheetsV4::CandlestickSeries] attr_accessor :high_series # The series of a CandlestickData. # Corresponds to the JSON property `lowSeries` # @return [Google::Apis::SheetsV4::CandlestickSeries] attr_accessor :low_series # The series of a CandlestickData. # Corresponds to the JSON property `openSeries` # @return [Google::Apis::SheetsV4::CandlestickSeries] attr_accessor :open_series def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @close_series = args[:close_series] if args.key?(:close_series) @high_series = args[:high_series] if args.key?(:high_series) @low_series = args[:low_series] if args.key?(:low_series) @open_series = args[:open_series] if args.key?(:open_series) end end # The domain of a CandlestickChart. class CandlestickDomain include Google::Apis::Core::Hashable # The data included in a domain or series. # Corresponds to the JSON property `data` # @return [Google::Apis::SheetsV4::ChartData] attr_accessor :data # True to reverse the order of the domain values (horizontal axis). # Corresponds to the JSON property `reversed` # @return [Boolean] attr_accessor :reversed alias_method :reversed?, :reversed def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @data = args[:data] if args.key?(:data) @reversed = args[:reversed] if args.key?(:reversed) end end # The series of a CandlestickData. class CandlestickSeries include Google::Apis::Core::Hashable # The data included in a domain or series. # Corresponds to the JSON property `data` # @return [Google::Apis::SheetsV4::ChartData] attr_accessor :data def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @data = args[:data] if args.key?(:data) end end # Data about a specific cell. class CellData include Google::Apis::Core::Hashable # A data source formula. # Corresponds to the JSON property `dataSourceFormula` # @return [Google::Apis::SheetsV4::DataSourceFormula] attr_accessor :data_source_formula # A data source table, which allows the user to import a static table of data # from the DataSource into Sheets. This is also known as "Extract" in the Sheets # editor. # Corresponds to the JSON property `dataSourceTable` # @return [Google::Apis::SheetsV4::DataSourceTable] attr_accessor :data_source_table # A data validation rule. # Corresponds to the JSON property `dataValidation` # @return [Google::Apis::SheetsV4::DataValidationRule] attr_accessor :data_validation # The format of a cell. # Corresponds to the JSON property `effectiveFormat` # @return [Google::Apis::SheetsV4::CellFormat] attr_accessor :effective_format # The kinds of value that a cell in a spreadsheet can have. # Corresponds to the JSON property `effectiveValue` # @return [Google::Apis::SheetsV4::ExtendedValue] attr_accessor :effective_value # The formatted value of the cell. This is the value as it's shown to the user. # This field is read-only. # Corresponds to the JSON property `formattedValue` # @return [String] attr_accessor :formatted_value # A hyperlink this cell points to, if any. If the cell contains multiple # hyperlinks, this field will be empty. This field is read-only. To set it, use # a `=HYPERLINK` formula in the userEnteredValue.formulaValue field. # Corresponds to the JSON property `hyperlink` # @return [String] attr_accessor :hyperlink # Any note on the cell. # Corresponds to the JSON property `note` # @return [String] attr_accessor :note # A pivot table. # Corresponds to the JSON property `pivotTable` # @return [Google::Apis::SheetsV4::PivotTable] attr_accessor :pivot_table # Runs of rich text applied to subsections of the cell. Runs are only valid on # user entered strings, not formulas, bools, or numbers. Properties of a run # start at a specific index in the text and continue until the next run. Runs # will inherit the properties of the cell unless explicitly changed. When # writing, the new runs will overwrite any prior runs. When writing a new # user_entered_value, previous runs are erased. # Corresponds to the JSON property `textFormatRuns` # @return [Array] attr_accessor :text_format_runs # The format of a cell. # Corresponds to the JSON property `userEnteredFormat` # @return [Google::Apis::SheetsV4::CellFormat] attr_accessor :user_entered_format # The kinds of value that a cell in a spreadsheet can have. # Corresponds to the JSON property `userEnteredValue` # @return [Google::Apis::SheetsV4::ExtendedValue] attr_accessor :user_entered_value def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @data_source_formula = args[:data_source_formula] if args.key?(:data_source_formula) @data_source_table = args[:data_source_table] if args.key?(:data_source_table) @data_validation = args[:data_validation] if args.key?(:data_validation) @effective_format = args[:effective_format] if args.key?(:effective_format) @effective_value = args[:effective_value] if args.key?(:effective_value) @formatted_value = args[:formatted_value] if args.key?(:formatted_value) @hyperlink = args[:hyperlink] if args.key?(:hyperlink) @note = args[:note] if args.key?(:note) @pivot_table = args[:pivot_table] if args.key?(:pivot_table) @text_format_runs = args[:text_format_runs] if args.key?(:text_format_runs) @user_entered_format = args[:user_entered_format] if args.key?(:user_entered_format) @user_entered_value = args[:user_entered_value] if args.key?(:user_entered_value) end end # The format of a cell. class CellFormat include Google::Apis::Core::Hashable # Represents a color in the RGBA color space. This representation is designed # for simplicity of conversion to/from color representations in various # languages over compactness; for example, the fields of this representation can # be trivially provided to the constructor of "java.awt.Color" in Java; it can # also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha" # method in iOS; and, with just a little work, it can be easily formatted into a # CSS "rgba()" string in JavaScript, as well. Note: this proto does not carry # information about the absolute color space that should be used to interpret # the RGB value (e.g. sRGB, Adobe RGB, DCI-P3, BT.2020, etc.). By default, # applications SHOULD assume the sRGB color space. Note: when color equality # needs to be decided, implementations, unless documented otherwise, will treat # two colors to be equal if all their red, green, blue and alpha values each # differ by at most 1e-5. Example (Java): import com.google.type.Color; // ... # public static java.awt.Color fromProto(Color protocolor) ` float alpha = # protocolor.hasAlpha() ? protocolor.getAlpha().getValue() : 1.0; return new # java.awt.Color( protocolor.getRed(), protocolor.getGreen(), protocolor.getBlue( # ), alpha); ` public static Color toProto(java.awt.Color color) ` float red = ( # float) color.getRed(); float green = (float) color.getGreen(); float blue = ( # float) color.getBlue(); float denominator = 255.0; Color.Builder resultBuilder # = Color .newBuilder() .setRed(red / denominator) .setGreen(green / denominator) # .setBlue(blue / denominator); int alpha = color.getAlpha(); if (alpha != 255) # ` result.setAlpha( FloatValue .newBuilder() .setValue(((float) alpha) / # denominator) .build()); ` return resultBuilder.build(); ` // ... Example (iOS / # Obj-C): // ... static UIColor* fromProto(Color* protocolor) ` float red = [ # protocolor red]; float green = [protocolor green]; float blue = [protocolor # blue]; FloatValue* alpha_wrapper = [protocolor alpha]; float alpha = 1.0; if ( # alpha_wrapper != nil) ` alpha = [alpha_wrapper value]; ` return [UIColor # colorWithRed:red green:green blue:blue alpha:alpha]; ` static Color* toProto( # UIColor* color) ` CGFloat red, green, blue, alpha; if (![color getRed:&red # green:&green blue:&blue alpha:&alpha]) ` return nil; ` Color* result = [[Color # alloc] init]; [result setRed:red]; [result setGreen:green]; [result setBlue: # blue]; if (alpha <= 0.9999) ` [result setAlpha:floatWrapperWithValue(alpha)]; ` # [result autorelease]; return result; ` // ... Example (JavaScript): // ... # var protoToCssColor = function(rgb_color) ` var redFrac = rgb_color.red || 0.0; # var greenFrac = rgb_color.green || 0.0; var blueFrac = rgb_color.blue || 0.0; # var red = Math.floor(redFrac * 255); var green = Math.floor(greenFrac * 255); # var blue = Math.floor(blueFrac * 255); if (!('alpha' in rgb_color)) ` return # rgbToCssColor_(red, green, blue); ` var alphaFrac = rgb_color.alpha.value || 0. # 0; var rgbParams = [red, green, blue].join(','); return ['rgba(', rgbParams, ', # ', alphaFrac, ')'].join(''); `; var rgbToCssColor_ = function(red, green, blue) # ` var rgbNumber = new Number((red << 16) | (green << 8) | blue); var # hexString = rgbNumber.toString(16); var missingZeros = 6 - hexString.length; # var resultBuilder = ['#']; for (var i = 0; i < missingZeros; i++) ` # resultBuilder.push('0'); ` resultBuilder.push(hexString); return resultBuilder. # join(''); `; // ... # Corresponds to the JSON property `backgroundColor` # @return [Google::Apis::SheetsV4::Color] attr_accessor :background_color # A color value. # Corresponds to the JSON property `backgroundColorStyle` # @return [Google::Apis::SheetsV4::ColorStyle] attr_accessor :background_color_style # The borders of the cell. # Corresponds to the JSON property `borders` # @return [Google::Apis::SheetsV4::Borders] attr_accessor :borders # The horizontal alignment of the value in the cell. # Corresponds to the JSON property `horizontalAlignment` # @return [String] attr_accessor :horizontal_alignment # How a hyperlink, if it exists, should be displayed in the cell. # Corresponds to the JSON property `hyperlinkDisplayType` # @return [String] attr_accessor :hyperlink_display_type # The number format of a cell. # Corresponds to the JSON property `numberFormat` # @return [Google::Apis::SheetsV4::NumberFormat] attr_accessor :number_format # The amount of padding around the cell, in pixels. When updating padding, every # field must be specified. # Corresponds to the JSON property `padding` # @return [Google::Apis::SheetsV4::Padding] attr_accessor :padding # The direction of the text in the cell. # Corresponds to the JSON property `textDirection` # @return [String] attr_accessor :text_direction # The format of a run of text in a cell. Absent values indicate that the field # isn't specified. # Corresponds to the JSON property `textFormat` # @return [Google::Apis::SheetsV4::TextFormat] attr_accessor :text_format # The rotation applied to text in a cell. # Corresponds to the JSON property `textRotation` # @return [Google::Apis::SheetsV4::TextRotation] attr_accessor :text_rotation # The vertical alignment of the value in the cell. # Corresponds to the JSON property `verticalAlignment` # @return [String] attr_accessor :vertical_alignment # The wrap strategy for the value in the cell. # Corresponds to the JSON property `wrapStrategy` # @return [String] attr_accessor :wrap_strategy def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @background_color = args[:background_color] if args.key?(:background_color) @background_color_style = args[:background_color_style] if args.key?(:background_color_style) @borders = args[:borders] if args.key?(:borders) @horizontal_alignment = args[:horizontal_alignment] if args.key?(:horizontal_alignment) @hyperlink_display_type = args[:hyperlink_display_type] if args.key?(:hyperlink_display_type) @number_format = args[:number_format] if args.key?(:number_format) @padding = args[:padding] if args.key?(:padding) @text_direction = args[:text_direction] if args.key?(:text_direction) @text_format = args[:text_format] if args.key?(:text_format) @text_rotation = args[:text_rotation] if args.key?(:text_rotation) @vertical_alignment = args[:vertical_alignment] if args.key?(:vertical_alignment) @wrap_strategy = args[:wrap_strategy] if args.key?(:wrap_strategy) end end # The options that define a "view window" for a chart (such as the visible # values in an axis). class ChartAxisViewWindowOptions include Google::Apis::Core::Hashable # The maximum numeric value to be shown in this view window. If unset, will # automatically determine a maximum value that looks good for the data. # Corresponds to the JSON property `viewWindowMax` # @return [Float] attr_accessor :view_window_max # The minimum numeric value to be shown in this view window. If unset, will # automatically determine a minimum value that looks good for the data. # Corresponds to the JSON property `viewWindowMin` # @return [Float] attr_accessor :view_window_min # The view window's mode. # Corresponds to the JSON property `viewWindowMode` # @return [String] attr_accessor :view_window_mode def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @view_window_max = args[:view_window_max] if args.key?(:view_window_max) @view_window_min = args[:view_window_min] if args.key?(:view_window_min) @view_window_mode = args[:view_window_mode] if args.key?(:view_window_mode) end end # Custom number formatting options for chart attributes. class ChartCustomNumberFormatOptions include Google::Apis::Core::Hashable # Custom prefix to be prepended to the chart attribute. This field is optional. # Corresponds to the JSON property `prefix` # @return [String] attr_accessor :prefix # Custom suffix to be appended to the chart attribute. This field is optional. # Corresponds to the JSON property `suffix` # @return [String] attr_accessor :suffix def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @prefix = args[:prefix] if args.key?(:prefix) @suffix = args[:suffix] if args.key?(:suffix) end end # The data included in a domain or series. class ChartData include Google::Apis::Core::Hashable # The aggregation type for the series of a data source chart. Not supported for # regular charts. # Corresponds to the JSON property `aggregateType` # @return [String] attr_accessor :aggregate_type # An unique identifier that references a data source column. # Corresponds to the JSON property `columnReference` # @return [Google::Apis::SheetsV4::DataSourceColumnReference] attr_accessor :column_reference # An optional setting on the ChartData of the domain of a data source chart that # defines buckets for the values in the domain rather than breaking out each # individual value. For example, when plotting a data source chart, you can # specify a histogram rule on the domain (it should only contain numeric values), # grouping its values into buckets. Any values of a chart series that fall into # the same bucket are aggregated based on the aggregate_type. # Corresponds to the JSON property `groupRule` # @return [Google::Apis::SheetsV4::ChartGroupRule] attr_accessor :group_rule # Source ranges for a chart. # Corresponds to the JSON property `sourceRange` # @return [Google::Apis::SheetsV4::ChartSourceRange] attr_accessor :source_range def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @aggregate_type = args[:aggregate_type] if args.key?(:aggregate_type) @column_reference = args[:column_reference] if args.key?(:column_reference) @group_rule = args[:group_rule] if args.key?(:group_rule) @source_range = args[:source_range] if args.key?(:source_range) end end # Allows you to organize the date-time values in a source data column into # buckets based on selected parts of their date or time values. class ChartDateTimeRule include Google::Apis::Core::Hashable # The type of date-time grouping to apply. # Corresponds to the JSON property `type` # @return [String] attr_accessor :type def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @type = args[:type] if args.key?(:type) end end # An optional setting on the ChartData of the domain of a data source chart that # defines buckets for the values in the domain rather than breaking out each # individual value. For example, when plotting a data source chart, you can # specify a histogram rule on the domain (it should only contain numeric values), # grouping its values into buckets. Any values of a chart series that fall into # the same bucket are aggregated based on the aggregate_type. class ChartGroupRule include Google::Apis::Core::Hashable # Allows you to organize the date-time values in a source data column into # buckets based on selected parts of their date or time values. # Corresponds to the JSON property `dateTimeRule` # @return [Google::Apis::SheetsV4::ChartDateTimeRule] attr_accessor :date_time_rule # Allows you to organize numeric values in a source data column into buckets of # constant size. # Corresponds to the JSON property `histogramRule` # @return [Google::Apis::SheetsV4::ChartHistogramRule] attr_accessor :histogram_rule def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @date_time_rule = args[:date_time_rule] if args.key?(:date_time_rule) @histogram_rule = args[:histogram_rule] if args.key?(:histogram_rule) end end # Allows you to organize numeric values in a source data column into buckets of # constant size. class ChartHistogramRule include Google::Apis::Core::Hashable # The size of the buckets that are created. Must be positive. # Corresponds to the JSON property `intervalSize` # @return [Float] attr_accessor :interval_size # The maximum value at which items are placed into buckets. Values greater than # the maximum are grouped into a single bucket. If omitted, it is determined by # the maximum item value. # Corresponds to the JSON property `maxValue` # @return [Float] attr_accessor :max_value # The minimum value at which items are placed into buckets. Values that are less # than the minimum are grouped into a single bucket. If omitted, it is # determined by the minimum item value. # Corresponds to the JSON property `minValue` # @return [Float] attr_accessor :min_value def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @interval_size = args[:interval_size] if args.key?(:interval_size) @max_value = args[:max_value] if args.key?(:max_value) @min_value = args[:min_value] if args.key?(:min_value) end end # Source ranges for a chart. class ChartSourceRange include Google::Apis::Core::Hashable # The ranges of data for a series or domain. Exactly one dimension must have a # length of 1, and all sources in the list must have the same dimension with # length 1. The domain (if it exists) & all series must have the same number of # source ranges. If using more than one source range, then the source range at a # given offset must be in order and contiguous across the domain and series. For # example, these are valid configurations: domain sources: A1:A5 series1 sources: # B1:B5 series2 sources: D6:D10 domain sources: A1:A5, C10:C12 series1 sources: # B1:B5, D10:D12 series2 sources: C1:C5, E10:E12 # Corresponds to the JSON property `sources` # @return [Array] attr_accessor :sources def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @sources = args[:sources] if args.key?(:sources) end end # The specifications of a chart. class ChartSpec include Google::Apis::Core::Hashable # The alternative text that describes the chart. This is often used for # accessibility. # Corresponds to the JSON property `altText` # @return [String] attr_accessor :alt_text # Represents a color in the RGBA color space. This representation is designed # for simplicity of conversion to/from color representations in various # languages over compactness; for example, the fields of this representation can # be trivially provided to the constructor of "java.awt.Color" in Java; it can # also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha" # method in iOS; and, with just a little work, it can be easily formatted into a # CSS "rgba()" string in JavaScript, as well. Note: this proto does not carry # information about the absolute color space that should be used to interpret # the RGB value (e.g. sRGB, Adobe RGB, DCI-P3, BT.2020, etc.). By default, # applications SHOULD assume the sRGB color space. Note: when color equality # needs to be decided, implementations, unless documented otherwise, will treat # two colors to be equal if all their red, green, blue and alpha values each # differ by at most 1e-5. Example (Java): import com.google.type.Color; // ... # public static java.awt.Color fromProto(Color protocolor) ` float alpha = # protocolor.hasAlpha() ? protocolor.getAlpha().getValue() : 1.0; return new # java.awt.Color( protocolor.getRed(), protocolor.getGreen(), protocolor.getBlue( # ), alpha); ` public static Color toProto(java.awt.Color color) ` float red = ( # float) color.getRed(); float green = (float) color.getGreen(); float blue = ( # float) color.getBlue(); float denominator = 255.0; Color.Builder resultBuilder # = Color .newBuilder() .setRed(red / denominator) .setGreen(green / denominator) # .setBlue(blue / denominator); int alpha = color.getAlpha(); if (alpha != 255) # ` result.setAlpha( FloatValue .newBuilder() .setValue(((float) alpha) / # denominator) .build()); ` return resultBuilder.build(); ` // ... Example (iOS / # Obj-C): // ... static UIColor* fromProto(Color* protocolor) ` float red = [ # protocolor red]; float green = [protocolor green]; float blue = [protocolor # blue]; FloatValue* alpha_wrapper = [protocolor alpha]; float alpha = 1.0; if ( # alpha_wrapper != nil) ` alpha = [alpha_wrapper value]; ` return [UIColor # colorWithRed:red green:green blue:blue alpha:alpha]; ` static Color* toProto( # UIColor* color) ` CGFloat red, green, blue, alpha; if (![color getRed:&red # green:&green blue:&blue alpha:&alpha]) ` return nil; ` Color* result = [[Color # alloc] init]; [result setRed:red]; [result setGreen:green]; [result setBlue: # blue]; if (alpha <= 0.9999) ` [result setAlpha:floatWrapperWithValue(alpha)]; ` # [result autorelease]; return result; ` // ... Example (JavaScript): // ... # var protoToCssColor = function(rgb_color) ` var redFrac = rgb_color.red || 0.0; # var greenFrac = rgb_color.green || 0.0; var blueFrac = rgb_color.blue || 0.0; # var red = Math.floor(redFrac * 255); var green = Math.floor(greenFrac * 255); # var blue = Math.floor(blueFrac * 255); if (!('alpha' in rgb_color)) ` return # rgbToCssColor_(red, green, blue); ` var alphaFrac = rgb_color.alpha.value || 0. # 0; var rgbParams = [red, green, blue].join(','); return ['rgba(', rgbParams, ', # ', alphaFrac, ')'].join(''); `; var rgbToCssColor_ = function(red, green, blue) # ` var rgbNumber = new Number((red << 16) | (green << 8) | blue); var # hexString = rgbNumber.toString(16); var missingZeros = 6 - hexString.length; # var resultBuilder = ['#']; for (var i = 0; i < missingZeros; i++) ` # resultBuilder.push('0'); ` resultBuilder.push(hexString); return resultBuilder. # join(''); `; // ... # Corresponds to the JSON property `backgroundColor` # @return [Google::Apis::SheetsV4::Color] attr_accessor :background_color # A color value. # Corresponds to the JSON property `backgroundColorStyle` # @return [Google::Apis::SheetsV4::ColorStyle] attr_accessor :background_color_style # The specification for a basic chart. See BasicChartType for the list of charts # this supports. # Corresponds to the JSON property `basicChart` # @return [Google::Apis::SheetsV4::BasicChartSpec] attr_accessor :basic_chart # A bubble chart. # Corresponds to the JSON property `bubbleChart` # @return [Google::Apis::SheetsV4::BubbleChartSpec] attr_accessor :bubble_chart # A candlestick chart. # Corresponds to the JSON property `candlestickChart` # @return [Google::Apis::SheetsV4::CandlestickChartSpec] attr_accessor :candlestick_chart # Properties of a data source chart. # Corresponds to the JSON property `dataSourceChartProperties` # @return [Google::Apis::SheetsV4::DataSourceChartProperties] attr_accessor :data_source_chart_properties # The filters applied to the source data of the chart. Only supported for data # source charts. # Corresponds to the JSON property `filterSpecs` # @return [Array] attr_accessor :filter_specs # The name of the font to use by default for all chart text (e.g. title, axis # labels, legend). If a font is specified for a specific part of the chart it # will override this font name. # Corresponds to the JSON property `fontName` # @return [String] attr_accessor :font_name # Determines how the charts will use hidden rows or columns. # Corresponds to the JSON property `hiddenDimensionStrategy` # @return [String] attr_accessor :hidden_dimension_strategy # A histogram chart. A histogram chart groups data items into bins, displaying # each bin as a column of stacked items. Histograms are used to display the # distribution of a dataset. Each column of items represents a range into which # those items fall. The number of bins can be chosen automatically or specified # explicitly. # Corresponds to the JSON property `histogramChart` # @return [Google::Apis::SheetsV4::HistogramChartSpec] attr_accessor :histogram_chart # True to make a chart fill the entire space in which it's rendered with minimum # padding. False to use the default padding. (Not applicable to Geo and Org # charts.) # Corresponds to the JSON property `maximized` # @return [Boolean] attr_accessor :maximized alias_method :maximized?, :maximized # An org chart. Org charts require a unique set of labels in labels and may # optionally include parent_labels and tooltips. parent_labels contain, for each # node, the label identifying the parent node. tooltips contain, for each node, # an optional tooltip. For example, to describe an OrgChart with Alice as the # CEO, Bob as the President (reporting to Alice) and Cathy as VP of Sales (also # reporting to Alice), have labels contain "Alice", "Bob", "Cathy", # parent_labels contain "", "Alice", "Alice" and tooltips contain "CEO", " # President", "VP Sales". # Corresponds to the JSON property `orgChart` # @return [Google::Apis::SheetsV4::OrgChartSpec] attr_accessor :org_chart # A pie chart. # Corresponds to the JSON property `pieChart` # @return [Google::Apis::SheetsV4::PieChartSpec] attr_accessor :pie_chart # A scorecard chart. Scorecard charts are used to highlight key performance # indicators, known as KPIs, on the spreadsheet. A scorecard chart can represent # things like total sales, average cost, or a top selling item. You can specify # a single data value, or aggregate over a range of data. Percentage or absolute # difference from a baseline value can be highlighted, like changes over time. # Corresponds to the JSON property `scorecardChart` # @return [Google::Apis::SheetsV4::ScorecardChartSpec] attr_accessor :scorecard_chart # The order to sort the chart data by. Only a single sort spec is supported. # Only supported for data source charts. # Corresponds to the JSON property `sortSpecs` # @return [Array] attr_accessor :sort_specs # The subtitle of the chart. # Corresponds to the JSON property `subtitle` # @return [String] attr_accessor :subtitle # The format of a run of text in a cell. Absent values indicate that the field # isn't specified. # Corresponds to the JSON property `subtitleTextFormat` # @return [Google::Apis::SheetsV4::TextFormat] attr_accessor :subtitle_text_format # Position settings for text. # Corresponds to the JSON property `subtitleTextPosition` # @return [Google::Apis::SheetsV4::TextPosition] attr_accessor :subtitle_text_position # The title of the chart. # Corresponds to the JSON property `title` # @return [String] attr_accessor :title # The format of a run of text in a cell. Absent values indicate that the field # isn't specified. # Corresponds to the JSON property `titleTextFormat` # @return [Google::Apis::SheetsV4::TextFormat] attr_accessor :title_text_format # Position settings for text. # Corresponds to the JSON property `titleTextPosition` # @return [Google::Apis::SheetsV4::TextPosition] attr_accessor :title_text_position # A Treemap chart. # Corresponds to the JSON property `treemapChart` # @return [Google::Apis::SheetsV4::TreemapChartSpec] attr_accessor :treemap_chart # A waterfall chart. # Corresponds to the JSON property `waterfallChart` # @return [Google::Apis::SheetsV4::WaterfallChartSpec] attr_accessor :waterfall_chart def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @alt_text = args[:alt_text] if args.key?(:alt_text) @background_color = args[:background_color] if args.key?(:background_color) @background_color_style = args[:background_color_style] if args.key?(:background_color_style) @basic_chart = args[:basic_chart] if args.key?(:basic_chart) @bubble_chart = args[:bubble_chart] if args.key?(:bubble_chart) @candlestick_chart = args[:candlestick_chart] if args.key?(:candlestick_chart) @data_source_chart_properties = args[:data_source_chart_properties] if args.key?(:data_source_chart_properties) @filter_specs = args[:filter_specs] if args.key?(:filter_specs) @font_name = args[:font_name] if args.key?(:font_name) @hidden_dimension_strategy = args[:hidden_dimension_strategy] if args.key?(:hidden_dimension_strategy) @histogram_chart = args[:histogram_chart] if args.key?(:histogram_chart) @maximized = args[:maximized] if args.key?(:maximized) @org_chart = args[:org_chart] if args.key?(:org_chart) @pie_chart = args[:pie_chart] if args.key?(:pie_chart) @scorecard_chart = args[:scorecard_chart] if args.key?(:scorecard_chart) @sort_specs = args[:sort_specs] if args.key?(:sort_specs) @subtitle = args[:subtitle] if args.key?(:subtitle) @subtitle_text_format = args[:subtitle_text_format] if args.key?(:subtitle_text_format) @subtitle_text_position = args[:subtitle_text_position] if args.key?(:subtitle_text_position) @title = args[:title] if args.key?(:title) @title_text_format = args[:title_text_format] if args.key?(:title_text_format) @title_text_position = args[:title_text_position] if args.key?(:title_text_position) @treemap_chart = args[:treemap_chart] if args.key?(:treemap_chart) @waterfall_chart = args[:waterfall_chart] if args.key?(:waterfall_chart) end end # Clears the basic filter, if any exists on the sheet. class ClearBasicFilterRequest include Google::Apis::Core::Hashable # The sheet ID on which the basic filter should be cleared. # Corresponds to the JSON property `sheetId` # @return [Fixnum] attr_accessor :sheet_id def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @sheet_id = args[:sheet_id] if args.key?(:sheet_id) end end # The request for clearing a range of values in a spreadsheet. class ClearValuesRequest include Google::Apis::Core::Hashable def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) end end # The response when clearing a range of values in a spreadsheet. class ClearValuesResponse include Google::Apis::Core::Hashable # The range (in A1 notation) that was cleared. (If the request was for an # unbounded range or a ranger larger than the bounds of the sheet, this will be # the actual range that was cleared, bounded to the sheet's limits.) # Corresponds to the JSON property `clearedRange` # @return [String] attr_accessor :cleared_range # The spreadsheet the updates were applied to. # Corresponds to the JSON property `spreadsheetId` # @return [String] attr_accessor :spreadsheet_id def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @cleared_range = args[:cleared_range] if args.key?(:cleared_range) @spreadsheet_id = args[:spreadsheet_id] if args.key?(:spreadsheet_id) end end # Represents a color in the RGBA color space. This representation is designed # for simplicity of conversion to/from color representations in various # languages over compactness; for example, the fields of this representation can # be trivially provided to the constructor of "java.awt.Color" in Java; it can # also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha" # method in iOS; and, with just a little work, it can be easily formatted into a # CSS "rgba()" string in JavaScript, as well. Note: this proto does not carry # information about the absolute color space that should be used to interpret # the RGB value (e.g. sRGB, Adobe RGB, DCI-P3, BT.2020, etc.). By default, # applications SHOULD assume the sRGB color space. Note: when color equality # needs to be decided, implementations, unless documented otherwise, will treat # two colors to be equal if all their red, green, blue and alpha values each # differ by at most 1e-5. Example (Java): import com.google.type.Color; // ... # public static java.awt.Color fromProto(Color protocolor) ` float alpha = # protocolor.hasAlpha() ? protocolor.getAlpha().getValue() : 1.0; return new # java.awt.Color( protocolor.getRed(), protocolor.getGreen(), protocolor.getBlue( # ), alpha); ` public static Color toProto(java.awt.Color color) ` float red = ( # float) color.getRed(); float green = (float) color.getGreen(); float blue = ( # float) color.getBlue(); float denominator = 255.0; Color.Builder resultBuilder # = Color .newBuilder() .setRed(red / denominator) .setGreen(green / denominator) # .setBlue(blue / denominator); int alpha = color.getAlpha(); if (alpha != 255) # ` result.setAlpha( FloatValue .newBuilder() .setValue(((float) alpha) / # denominator) .build()); ` return resultBuilder.build(); ` // ... Example (iOS / # Obj-C): // ... static UIColor* fromProto(Color* protocolor) ` float red = [ # protocolor red]; float green = [protocolor green]; float blue = [protocolor # blue]; FloatValue* alpha_wrapper = [protocolor alpha]; float alpha = 1.0; if ( # alpha_wrapper != nil) ` alpha = [alpha_wrapper value]; ` return [UIColor # colorWithRed:red green:green blue:blue alpha:alpha]; ` static Color* toProto( # UIColor* color) ` CGFloat red, green, blue, alpha; if (![color getRed:&red # green:&green blue:&blue alpha:&alpha]) ` return nil; ` Color* result = [[Color # alloc] init]; [result setRed:red]; [result setGreen:green]; [result setBlue: # blue]; if (alpha <= 0.9999) ` [result setAlpha:floatWrapperWithValue(alpha)]; ` # [result autorelease]; return result; ` // ... Example (JavaScript): // ... # var protoToCssColor = function(rgb_color) ` var redFrac = rgb_color.red || 0.0; # var greenFrac = rgb_color.green || 0.0; var blueFrac = rgb_color.blue || 0.0; # var red = Math.floor(redFrac * 255); var green = Math.floor(greenFrac * 255); # var blue = Math.floor(blueFrac * 255); if (!('alpha' in rgb_color)) ` return # rgbToCssColor_(red, green, blue); ` var alphaFrac = rgb_color.alpha.value || 0. # 0; var rgbParams = [red, green, blue].join(','); return ['rgba(', rgbParams, ', # ', alphaFrac, ')'].join(''); `; var rgbToCssColor_ = function(red, green, blue) # ` var rgbNumber = new Number((red << 16) | (green << 8) | blue); var # hexString = rgbNumber.toString(16); var missingZeros = 6 - hexString.length; # var resultBuilder = ['#']; for (var i = 0; i < missingZeros; i++) ` # resultBuilder.push('0'); ` resultBuilder.push(hexString); return resultBuilder. # join(''); `; // ... class Color include Google::Apis::Core::Hashable # The fraction of this color that should be applied to the pixel. That is, the # final pixel color is defined by the equation: pixel color = alpha * (this # color) + (1.0 - alpha) * (background color) This means that a value of 1.0 # corresponds to a solid color, whereas a value of 0.0 corresponds to a # completely transparent color. This uses a wrapper message rather than a simple # float scalar so that it is possible to distinguish between a default value and # the value being unset. If omitted, this color object is to be rendered as a # solid color (as if the alpha value had been explicitly given with a value of 1. # 0). # Corresponds to the JSON property `alpha` # @return [Float] attr_accessor :alpha # The amount of blue in the color as a value in the interval [0, 1]. # Corresponds to the JSON property `blue` # @return [Float] attr_accessor :blue # The amount of green in the color as a value in the interval [0, 1]. # Corresponds to the JSON property `green` # @return [Float] attr_accessor :green # The amount of red in the color as a value in the interval [0, 1]. # Corresponds to the JSON property `red` # @return [Float] attr_accessor :red def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @alpha = args[:alpha] if args.key?(:alpha) @blue = args[:blue] if args.key?(:blue) @green = args[:green] if args.key?(:green) @red = args[:red] if args.key?(:red) end end # A color value. class ColorStyle include Google::Apis::Core::Hashable # Represents a color in the RGBA color space. This representation is designed # for simplicity of conversion to/from color representations in various # languages over compactness; for example, the fields of this representation can # be trivially provided to the constructor of "java.awt.Color" in Java; it can # also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha" # method in iOS; and, with just a little work, it can be easily formatted into a # CSS "rgba()" string in JavaScript, as well. Note: this proto does not carry # information about the absolute color space that should be used to interpret # the RGB value (e.g. sRGB, Adobe RGB, DCI-P3, BT.2020, etc.). By default, # applications SHOULD assume the sRGB color space. Note: when color equality # needs to be decided, implementations, unless documented otherwise, will treat # two colors to be equal if all their red, green, blue and alpha values each # differ by at most 1e-5. Example (Java): import com.google.type.Color; // ... # public static java.awt.Color fromProto(Color protocolor) ` float alpha = # protocolor.hasAlpha() ? protocolor.getAlpha().getValue() : 1.0; return new # java.awt.Color( protocolor.getRed(), protocolor.getGreen(), protocolor.getBlue( # ), alpha); ` public static Color toProto(java.awt.Color color) ` float red = ( # float) color.getRed(); float green = (float) color.getGreen(); float blue = ( # float) color.getBlue(); float denominator = 255.0; Color.Builder resultBuilder # = Color .newBuilder() .setRed(red / denominator) .setGreen(green / denominator) # .setBlue(blue / denominator); int alpha = color.getAlpha(); if (alpha != 255) # ` result.setAlpha( FloatValue .newBuilder() .setValue(((float) alpha) / # denominator) .build()); ` return resultBuilder.build(); ` // ... Example (iOS / # Obj-C): // ... static UIColor* fromProto(Color* protocolor) ` float red = [ # protocolor red]; float green = [protocolor green]; float blue = [protocolor # blue]; FloatValue* alpha_wrapper = [protocolor alpha]; float alpha = 1.0; if ( # alpha_wrapper != nil) ` alpha = [alpha_wrapper value]; ` return [UIColor # colorWithRed:red green:green blue:blue alpha:alpha]; ` static Color* toProto( # UIColor* color) ` CGFloat red, green, blue, alpha; if (![color getRed:&red # green:&green blue:&blue alpha:&alpha]) ` return nil; ` Color* result = [[Color # alloc] init]; [result setRed:red]; [result setGreen:green]; [result setBlue: # blue]; if (alpha <= 0.9999) ` [result setAlpha:floatWrapperWithValue(alpha)]; ` # [result autorelease]; return result; ` // ... Example (JavaScript): // ... # var protoToCssColor = function(rgb_color) ` var redFrac = rgb_color.red || 0.0; # var greenFrac = rgb_color.green || 0.0; var blueFrac = rgb_color.blue || 0.0; # var red = Math.floor(redFrac * 255); var green = Math.floor(greenFrac * 255); # var blue = Math.floor(blueFrac * 255); if (!('alpha' in rgb_color)) ` return # rgbToCssColor_(red, green, blue); ` var alphaFrac = rgb_color.alpha.value || 0. # 0; var rgbParams = [red, green, blue].join(','); return ['rgba(', rgbParams, ', # ', alphaFrac, ')'].join(''); `; var rgbToCssColor_ = function(red, green, blue) # ` var rgbNumber = new Number((red << 16) | (green << 8) | blue); var # hexString = rgbNumber.toString(16); var missingZeros = 6 - hexString.length; # var resultBuilder = ['#']; for (var i = 0; i < missingZeros; i++) ` # resultBuilder.push('0'); ` resultBuilder.push(hexString); return resultBuilder. # join(''); `; // ... # Corresponds to the JSON property `rgbColor` # @return [Google::Apis::SheetsV4::Color] attr_accessor :rgb_color # Theme color. # Corresponds to the JSON property `themeColor` # @return [String] attr_accessor :theme_color def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @rgb_color = args[:rgb_color] if args.key?(:rgb_color) @theme_color = args[:theme_color] if args.key?(:theme_color) end end # The value of the condition. class ConditionValue include Google::Apis::Core::Hashable # A relative date (based on the current date). Valid only if the type is # DATE_BEFORE, DATE_AFTER, DATE_ON_OR_BEFORE or DATE_ON_OR_AFTER. Relative dates # are not supported in data validation. They are supported only in conditional # formatting and conditional filters. # Corresponds to the JSON property `relativeDate` # @return [String] attr_accessor :relative_date # A value the condition is based on. The value is parsed as if the user typed # into a cell. Formulas are supported (and must begin with an `=` or a '+'). # Corresponds to the JSON property `userEnteredValue` # @return [String] attr_accessor :user_entered_value def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @relative_date = args[:relative_date] if args.key?(:relative_date) @user_entered_value = args[:user_entered_value] if args.key?(:user_entered_value) end end # A rule describing a conditional format. class ConditionalFormatRule include Google::Apis::Core::Hashable # A rule that may or may not match, depending on the condition. # Corresponds to the JSON property `booleanRule` # @return [Google::Apis::SheetsV4::BooleanRule] attr_accessor :boolean_rule # A rule that applies a gradient color scale format, based on the interpolation # points listed. The format of a cell will vary based on its contents as # compared to the values of the interpolation points. # Corresponds to the JSON property `gradientRule` # @return [Google::Apis::SheetsV4::GradientRule] attr_accessor :gradient_rule # The ranges that are formatted if the condition is true. All the ranges must be # on the same grid. # Corresponds to the JSON property `ranges` # @return [Array] attr_accessor :ranges def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @boolean_rule = args[:boolean_rule] if args.key?(:boolean_rule) @gradient_rule = args[:gradient_rule] if args.key?(:gradient_rule) @ranges = args[:ranges] if args.key?(:ranges) end end # Copies data from the source to the destination. class CopyPasteRequest include Google::Apis::Core::Hashable # A range on a sheet. All indexes are zero-based. Indexes are half open, i.e. # the start index is inclusive and the end index is exclusive -- [start_index, # end_index). Missing indexes indicate the range is unbounded on that side. For # example, if `"Sheet1"` is sheet ID 0, then: `Sheet1!A1:A1 == sheet_id: 0, # start_row_index: 0, end_row_index: 1, start_column_index: 0, end_column_index: # 1` `Sheet1!A3:B4 == sheet_id: 0, start_row_index: 2, end_row_index: 4, # start_column_index: 0, end_column_index: 2` `Sheet1!A:B == sheet_id: 0, # start_column_index: 0, end_column_index: 2` `Sheet1!A5:B == sheet_id: 0, # start_row_index: 4, start_column_index: 0, end_column_index: 2` `Sheet1 == # sheet_id:0` The start index must always be less than or equal to the end index. # If the start index equals the end index, then the range is empty. Empty # ranges are typically not meaningful and are usually rendered in the UI as `# # REF!`. # Corresponds to the JSON property `destination` # @return [Google::Apis::SheetsV4::GridRange] attr_accessor :destination # How that data should be oriented when pasting. # Corresponds to the JSON property `pasteOrientation` # @return [String] attr_accessor :paste_orientation # What kind of data to paste. # Corresponds to the JSON property `pasteType` # @return [String] attr_accessor :paste_type # A range on a sheet. All indexes are zero-based. Indexes are half open, i.e. # the start index is inclusive and the end index is exclusive -- [start_index, # end_index). Missing indexes indicate the range is unbounded on that side. For # example, if `"Sheet1"` is sheet ID 0, then: `Sheet1!A1:A1 == sheet_id: 0, # start_row_index: 0, end_row_index: 1, start_column_index: 0, end_column_index: # 1` `Sheet1!A3:B4 == sheet_id: 0, start_row_index: 2, end_row_index: 4, # start_column_index: 0, end_column_index: 2` `Sheet1!A:B == sheet_id: 0, # start_column_index: 0, end_column_index: 2` `Sheet1!A5:B == sheet_id: 0, # start_row_index: 4, start_column_index: 0, end_column_index: 2` `Sheet1 == # sheet_id:0` The start index must always be less than or equal to the end index. # If the start index equals the end index, then the range is empty. Empty # ranges are typically not meaningful and are usually rendered in the UI as `# # REF!`. # Corresponds to the JSON property `source` # @return [Google::Apis::SheetsV4::GridRange] attr_accessor :source def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @destination = args[:destination] if args.key?(:destination) @paste_orientation = args[:paste_orientation] if args.key?(:paste_orientation) @paste_type = args[:paste_type] if args.key?(:paste_type) @source = args[:source] if args.key?(:source) end end # The request to copy a sheet across spreadsheets. class CopySheetToAnotherSpreadsheetRequest include Google::Apis::Core::Hashable # The ID of the spreadsheet to copy the sheet to. # Corresponds to the JSON property `destinationSpreadsheetId` # @return [String] attr_accessor :destination_spreadsheet_id def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @destination_spreadsheet_id = args[:destination_spreadsheet_id] if args.key?(:destination_spreadsheet_id) end end # A request to create developer metadata. class CreateDeveloperMetadataRequest include Google::Apis::Core::Hashable # Developer metadata associated with a location or object in a spreadsheet. # Developer metadata may be used to associate arbitrary data with various parts # of a spreadsheet and will remain associated at those locations as they move # around and the spreadsheet is edited. For example, if developer metadata is # associated with row 5 and another row is then subsequently inserted above row # 5, that original metadata will still be associated with the row it was first # associated with (what is now row 6). If the associated object is deleted its # metadata is deleted too. # Corresponds to the JSON property `developerMetadata` # @return [Google::Apis::SheetsV4::DeveloperMetadata] attr_accessor :developer_metadata def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @developer_metadata = args[:developer_metadata] if args.key?(:developer_metadata) end end # The response from creating developer metadata. class CreateDeveloperMetadataResponse include Google::Apis::Core::Hashable # Developer metadata associated with a location or object in a spreadsheet. # Developer metadata may be used to associate arbitrary data with various parts # of a spreadsheet and will remain associated at those locations as they move # around and the spreadsheet is edited. For example, if developer metadata is # associated with row 5 and another row is then subsequently inserted above row # 5, that original metadata will still be associated with the row it was first # associated with (what is now row 6). If the associated object is deleted its # metadata is deleted too. # Corresponds to the JSON property `developerMetadata` # @return [Google::Apis::SheetsV4::DeveloperMetadata] attr_accessor :developer_metadata def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @developer_metadata = args[:developer_metadata] if args.key?(:developer_metadata) end end # Moves data from the source to the destination. class CutPasteRequest include Google::Apis::Core::Hashable # A coordinate in a sheet. All indexes are zero-based. # Corresponds to the JSON property `destination` # @return [Google::Apis::SheetsV4::GridCoordinate] attr_accessor :destination # What kind of data to paste. All the source data will be cut, regardless of # what is pasted. # Corresponds to the JSON property `pasteType` # @return [String] attr_accessor :paste_type # A range on a sheet. All indexes are zero-based. Indexes are half open, i.e. # the start index is inclusive and the end index is exclusive -- [start_index, # end_index). Missing indexes indicate the range is unbounded on that side. For # example, if `"Sheet1"` is sheet ID 0, then: `Sheet1!A1:A1 == sheet_id: 0, # start_row_index: 0, end_row_index: 1, start_column_index: 0, end_column_index: # 1` `Sheet1!A3:B4 == sheet_id: 0, start_row_index: 2, end_row_index: 4, # start_column_index: 0, end_column_index: 2` `Sheet1!A:B == sheet_id: 0, # start_column_index: 0, end_column_index: 2` `Sheet1!A5:B == sheet_id: 0, # start_row_index: 4, start_column_index: 0, end_column_index: 2` `Sheet1 == # sheet_id:0` The start index must always be less than or equal to the end index. # If the start index equals the end index, then the range is empty. Empty # ranges are typically not meaningful and are usually rendered in the UI as `# # REF!`. # Corresponds to the JSON property `source` # @return [Google::Apis::SheetsV4::GridRange] attr_accessor :source def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @destination = args[:destination] if args.key?(:destination) @paste_type = args[:paste_type] if args.key?(:paste_type) @source = args[:source] if args.key?(:source) end end # The data execution status. A data execution is created to sync a data source # object with the latest data from a DataSource. It is usually scheduled to run # at background, you can check its state to tell if an execution completes There # are several scenarios where a data execution is triggered to run: * Adding a # data source creates an associated data source sheet as well as a data # execution to sync the data from the data source to the sheet. * Updating a # data source creates a data execution to refresh the associated data source # sheet similarly. * You can send refresh request to explicitly refresh one or # multiple data source objects. class DataExecutionStatus include Google::Apis::Core::Hashable # The error code. # Corresponds to the JSON property `errorCode` # @return [String] attr_accessor :error_code # The error message, which may be empty. # Corresponds to the JSON property `errorMessage` # @return [String] attr_accessor :error_message # Gets the time the data last successfully refreshed. # Corresponds to the JSON property `lastRefreshTime` # @return [String] attr_accessor :last_refresh_time # The state of the data execution. # Corresponds to the JSON property `state` # @return [String] attr_accessor :state def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @error_code = args[:error_code] if args.key?(:error_code) @error_message = args[:error_message] if args.key?(:error_message) @last_refresh_time = args[:last_refresh_time] if args.key?(:last_refresh_time) @state = args[:state] if args.key?(:state) end end # Filter that describes what data should be selected or returned from a request. class DataFilter include Google::Apis::Core::Hashable # Selects data that matches the specified A1 range. # Corresponds to the JSON property `a1Range` # @return [String] attr_accessor :a1_range # Selects DeveloperMetadata that matches all of the specified fields. For # example, if only a metadata ID is specified this considers the # DeveloperMetadata with that particular unique ID. If a metadata key is # specified, this considers all developer metadata with that key. If a key, # visibility, and location type are all specified, this considers all developer # metadata with that key and visibility that are associated with a location of # that type. In general, this selects all DeveloperMetadata that matches the # intersection of all the specified fields; any field or combination of fields # may be specified. # Corresponds to the JSON property `developerMetadataLookup` # @return [Google::Apis::SheetsV4::DeveloperMetadataLookup] attr_accessor :developer_metadata_lookup # A range on a sheet. All indexes are zero-based. Indexes are half open, i.e. # the start index is inclusive and the end index is exclusive -- [start_index, # end_index). Missing indexes indicate the range is unbounded on that side. For # example, if `"Sheet1"` is sheet ID 0, then: `Sheet1!A1:A1 == sheet_id: 0, # start_row_index: 0, end_row_index: 1, start_column_index: 0, end_column_index: # 1` `Sheet1!A3:B4 == sheet_id: 0, start_row_index: 2, end_row_index: 4, # start_column_index: 0, end_column_index: 2` `Sheet1!A:B == sheet_id: 0, # start_column_index: 0, end_column_index: 2` `Sheet1!A5:B == sheet_id: 0, # start_row_index: 4, start_column_index: 0, end_column_index: 2` `Sheet1 == # sheet_id:0` The start index must always be less than or equal to the end index. # If the start index equals the end index, then the range is empty. Empty # ranges are typically not meaningful and are usually rendered in the UI as `# # REF!`. # Corresponds to the JSON property `gridRange` # @return [Google::Apis::SheetsV4::GridRange] attr_accessor :grid_range def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @a1_range = args[:a1_range] if args.key?(:a1_range) @developer_metadata_lookup = args[:developer_metadata_lookup] if args.key?(:developer_metadata_lookup) @grid_range = args[:grid_range] if args.key?(:grid_range) end end # A range of values whose location is specified by a DataFilter. class DataFilterValueRange include Google::Apis::Core::Hashable # Filter that describes what data should be selected or returned from a request. # Corresponds to the JSON property `dataFilter` # @return [Google::Apis::SheetsV4::DataFilter] attr_accessor :data_filter # The major dimension of the values. # Corresponds to the JSON property `majorDimension` # @return [String] attr_accessor :major_dimension # The data to be written. If the provided values exceed any of the ranges # matched by the data filter then the request fails. If the provided values are # less than the matched ranges only the specified values are written, existing # values in the matched ranges remain unaffected. # Corresponds to the JSON property `values` # @return [Array>] attr_accessor :values def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @data_filter = args[:data_filter] if args.key?(:data_filter) @major_dimension = args[:major_dimension] if args.key?(:major_dimension) @values = args[:values] if args.key?(:values) end end # Settings for one set of data labels. Data labels are annotations that appear # next to a set of data, such as the points on a line chart, and provide # additional information about what the data represents, such as a text # representation of the value behind that point on the graph. class DataLabel include Google::Apis::Core::Hashable # The data included in a domain or series. # Corresponds to the JSON property `customLabelData` # @return [Google::Apis::SheetsV4::ChartData] attr_accessor :custom_label_data # The placement of the data label relative to the labeled data. # Corresponds to the JSON property `placement` # @return [String] attr_accessor :placement # The format of a run of text in a cell. Absent values indicate that the field # isn't specified. # Corresponds to the JSON property `textFormat` # @return [Google::Apis::SheetsV4::TextFormat] attr_accessor :text_format # The type of the data label. # Corresponds to the JSON property `type` # @return [String] attr_accessor :type def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @custom_label_data = args[:custom_label_data] if args.key?(:custom_label_data) @placement = args[:placement] if args.key?(:placement) @text_format = args[:text_format] if args.key?(:text_format) @type = args[:type] if args.key?(:type) end end # Information about an external data source in the spreadsheet. class DataSource include Google::Apis::Core::Hashable # All calculated columns in the data source. # Corresponds to the JSON property `calculatedColumns` # @return [Array] attr_accessor :calculated_columns # The spreadsheet-scoped unique ID that identifies the data source. Example: # 1080547365. # Corresponds to the JSON property `dataSourceId` # @return [String] attr_accessor :data_source_id # The ID of the Sheet connected with the data source. The field cannot be # changed once set. When creating a data source, an associated DATA_SOURCE sheet # is also created, if the field is not specified, the ID of the created sheet # will be randomly generated. # Corresponds to the JSON property `sheetId` # @return [Fixnum] attr_accessor :sheet_id # This specifies the details of the data source. For example, for BigQuery, this # specifies information about the BigQuery source. # Corresponds to the JSON property `spec` # @return [Google::Apis::SheetsV4::DataSourceSpec] attr_accessor :spec def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @calculated_columns = args[:calculated_columns] if args.key?(:calculated_columns) @data_source_id = args[:data_source_id] if args.key?(:data_source_id) @sheet_id = args[:sheet_id] if args.key?(:sheet_id) @spec = args[:spec] if args.key?(:spec) end end # Properties of a data source chart. class DataSourceChartProperties include Google::Apis::Core::Hashable # The data execution status. A data execution is created to sync a data source # object with the latest data from a DataSource. It is usually scheduled to run # at background, you can check its state to tell if an execution completes There # are several scenarios where a data execution is triggered to run: * Adding a # data source creates an associated data source sheet as well as a data # execution to sync the data from the data source to the sheet. * Updating a # data source creates a data execution to refresh the associated data source # sheet similarly. * You can send refresh request to explicitly refresh one or # multiple data source objects. # Corresponds to the JSON property `dataExecutionStatus` # @return [Google::Apis::SheetsV4::DataExecutionStatus] attr_accessor :data_execution_status # ID of the data source that the chart is associated with. # Corresponds to the JSON property `dataSourceId` # @return [String] attr_accessor :data_source_id def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @data_execution_status = args[:data_execution_status] if args.key?(:data_execution_status) @data_source_id = args[:data_source_id] if args.key?(:data_source_id) end end # A column in a data source. class DataSourceColumn include Google::Apis::Core::Hashable # The formula of the calculated column. # Corresponds to the JSON property `formula` # @return [String] attr_accessor :formula # An unique identifier that references a data source column. # Corresponds to the JSON property `reference` # @return [Google::Apis::SheetsV4::DataSourceColumnReference] attr_accessor :reference def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @formula = args[:formula] if args.key?(:formula) @reference = args[:reference] if args.key?(:reference) end end # An unique identifier that references a data source column. class DataSourceColumnReference include Google::Apis::Core::Hashable # The display name of the column. It should be unique within a data source. # Corresponds to the JSON property `name` # @return [String] attr_accessor :name def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @name = args[:name] if args.key?(:name) end end # A data source formula. class DataSourceFormula include Google::Apis::Core::Hashable # The data execution status. A data execution is created to sync a data source # object with the latest data from a DataSource. It is usually scheduled to run # at background, you can check its state to tell if an execution completes There # are several scenarios where a data execution is triggered to run: * Adding a # data source creates an associated data source sheet as well as a data # execution to sync the data from the data source to the sheet. * Updating a # data source creates a data execution to refresh the associated data source # sheet similarly. * You can send refresh request to explicitly refresh one or # multiple data source objects. # Corresponds to the JSON property `dataExecutionStatus` # @return [Google::Apis::SheetsV4::DataExecutionStatus] attr_accessor :data_execution_status # The ID of the data source the formula is associated with. # Corresponds to the JSON property `dataSourceId` # @return [String] attr_accessor :data_source_id def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @data_execution_status = args[:data_execution_status] if args.key?(:data_execution_status) @data_source_id = args[:data_source_id] if args.key?(:data_source_id) end end # Reference to a data source object. class DataSourceObjectReference include Google::Apis::Core::Hashable # References to a data source chart. # Corresponds to the JSON property `chartId` # @return [Fixnum] attr_accessor :chart_id # A coordinate in a sheet. All indexes are zero-based. # Corresponds to the JSON property `dataSourceFormulaCell` # @return [Google::Apis::SheetsV4::GridCoordinate] attr_accessor :data_source_formula_cell # A coordinate in a sheet. All indexes are zero-based. # Corresponds to the JSON property `dataSourcePivotTableAnchorCell` # @return [Google::Apis::SheetsV4::GridCoordinate] attr_accessor :data_source_pivot_table_anchor_cell # A coordinate in a sheet. All indexes are zero-based. # Corresponds to the JSON property `dataSourceTableAnchorCell` # @return [Google::Apis::SheetsV4::GridCoordinate] attr_accessor :data_source_table_anchor_cell # References to a DATA_SOURCE sheet. # Corresponds to the JSON property `sheetId` # @return [String] attr_accessor :sheet_id def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @chart_id = args[:chart_id] if args.key?(:chart_id) @data_source_formula_cell = args[:data_source_formula_cell] if args.key?(:data_source_formula_cell) @data_source_pivot_table_anchor_cell = args[:data_source_pivot_table_anchor_cell] if args.key?(:data_source_pivot_table_anchor_cell) @data_source_table_anchor_cell = args[:data_source_table_anchor_cell] if args.key?(:data_source_table_anchor_cell) @sheet_id = args[:sheet_id] if args.key?(:sheet_id) end end # A list of references to data source objects. class DataSourceObjectReferences include Google::Apis::Core::Hashable # The references. # Corresponds to the JSON property `references` # @return [Array] attr_accessor :references def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @references = args[:references] if args.key?(:references) end end # A parameter in a data source's query. The parameter allows the user to pass in # values from the spreadsheet into a query. class DataSourceParameter include Google::Apis::Core::Hashable # Named parameter. Must be a legitimate identifier for the DataSource that # supports it. For example, [BigQuery identifier](https://cloud.google.com/ # bigquery/docs/reference/standard-sql/lexical#identifiers). # Corresponds to the JSON property `name` # @return [String] attr_accessor :name # ID of a NamedRange. Its size must be 1x1. # Corresponds to the JSON property `namedRangeId` # @return [String] attr_accessor :named_range_id # A range on a sheet. All indexes are zero-based. Indexes are half open, i.e. # the start index is inclusive and the end index is exclusive -- [start_index, # end_index). Missing indexes indicate the range is unbounded on that side. For # example, if `"Sheet1"` is sheet ID 0, then: `Sheet1!A1:A1 == sheet_id: 0, # start_row_index: 0, end_row_index: 1, start_column_index: 0, end_column_index: # 1` `Sheet1!A3:B4 == sheet_id: 0, start_row_index: 2, end_row_index: 4, # start_column_index: 0, end_column_index: 2` `Sheet1!A:B == sheet_id: 0, # start_column_index: 0, end_column_index: 2` `Sheet1!A5:B == sheet_id: 0, # start_row_index: 4, start_column_index: 0, end_column_index: 2` `Sheet1 == # sheet_id:0` The start index must always be less than or equal to the end index. # If the start index equals the end index, then the range is empty. Empty # ranges are typically not meaningful and are usually rendered in the UI as `# # REF!`. # Corresponds to the JSON property `range` # @return [Google::Apis::SheetsV4::GridRange] attr_accessor :range def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @name = args[:name] if args.key?(:name) @named_range_id = args[:named_range_id] if args.key?(:named_range_id) @range = args[:range] if args.key?(:range) end end # A schedule for data to refresh every day in a given time interval. class DataSourceRefreshDailySchedule include Google::Apis::Core::Hashable # Represents a time of day. The date and time zone are either not significant or # are specified elsewhere. An API may choose to allow leap seconds. Related # types are google.type.Date and `google.protobuf.Timestamp`. # Corresponds to the JSON property `startTime` # @return [Google::Apis::SheetsV4::TimeOfDay] attr_accessor :start_time def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @start_time = args[:start_time] if args.key?(:start_time) end end # A monthly schedule for data to refresh on specific days in the month in a # given time interval. class DataSourceRefreshMonthlySchedule include Google::Apis::Core::Hashable # Days of the month to refresh. Only 1-28 are supported, mapping to the 1st to # the 28th day. At lesat one day must be specified. # Corresponds to the JSON property `daysOfMonth` # @return [Array] attr_accessor :days_of_month # Represents a time of day. The date and time zone are either not significant or # are specified elsewhere. An API may choose to allow leap seconds. Related # types are google.type.Date and `google.protobuf.Timestamp`. # Corresponds to the JSON property `startTime` # @return [Google::Apis::SheetsV4::TimeOfDay] attr_accessor :start_time def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @days_of_month = args[:days_of_month] if args.key?(:days_of_month) @start_time = args[:start_time] if args.key?(:start_time) end end # Schedule for refreshing the data source. Data sources in the spreadsheet are # refreshed within a time interval. You can specify the start time by clicking # the Scheduled Refresh button in the Sheets editor, but the interval is fixed # at 4 hours. For example, if you specify a start time of 8am , the refresh will # take place between 8am and 12pm every day. class DataSourceRefreshSchedule include Google::Apis::Core::Hashable # A schedule for data to refresh every day in a given time interval. # Corresponds to the JSON property `dailySchedule` # @return [Google::Apis::SheetsV4::DataSourceRefreshDailySchedule] attr_accessor :daily_schedule # True if the refresh schedule is enabled, or false otherwise. # Corresponds to the JSON property `enabled` # @return [Boolean] attr_accessor :enabled alias_method :enabled?, :enabled # A monthly schedule for data to refresh on specific days in the month in a # given time interval. # Corresponds to the JSON property `monthlySchedule` # @return [Google::Apis::SheetsV4::DataSourceRefreshMonthlySchedule] attr_accessor :monthly_schedule # Represents a time interval, encoded as a Timestamp start (inclusive) and a # Timestamp end (exclusive). The start must be less than or equal to the end. # When the start equals the end, the interval is empty (matches no time). When # both start and end are unspecified, the interval matches any time. # Corresponds to the JSON property `nextRun` # @return [Google::Apis::SheetsV4::Interval] attr_accessor :next_run # The scope of the refresh. Must be ALL_DATA_SOURCES. # Corresponds to the JSON property `refreshScope` # @return [String] attr_accessor :refresh_scope # A weekly schedule for data to refresh on specific days in a given time # interval. # Corresponds to the JSON property `weeklySchedule` # @return [Google::Apis::SheetsV4::DataSourceRefreshWeeklySchedule] attr_accessor :weekly_schedule def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @daily_schedule = args[:daily_schedule] if args.key?(:daily_schedule) @enabled = args[:enabled] if args.key?(:enabled) @monthly_schedule = args[:monthly_schedule] if args.key?(:monthly_schedule) @next_run = args[:next_run] if args.key?(:next_run) @refresh_scope = args[:refresh_scope] if args.key?(:refresh_scope) @weekly_schedule = args[:weekly_schedule] if args.key?(:weekly_schedule) end end # A weekly schedule for data to refresh on specific days in a given time # interval. class DataSourceRefreshWeeklySchedule include Google::Apis::Core::Hashable # Days of the week to refresh. At least one day must be specified. # Corresponds to the JSON property `daysOfWeek` # @return [Array] attr_accessor :days_of_week # Represents a time of day. The date and time zone are either not significant or # are specified elsewhere. An API may choose to allow leap seconds. Related # types are google.type.Date and `google.protobuf.Timestamp`. # Corresponds to the JSON property `startTime` # @return [Google::Apis::SheetsV4::TimeOfDay] attr_accessor :start_time def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @days_of_week = args[:days_of_week] if args.key?(:days_of_week) @start_time = args[:start_time] if args.key?(:start_time) end end # A range along a single dimension on a DATA_SOURCE sheet. class DataSourceSheetDimensionRange include Google::Apis::Core::Hashable # The columns on the data source sheet. # Corresponds to the JSON property `columnReferences` # @return [Array] attr_accessor :column_references # The ID of the data source sheet the range is on. # Corresponds to the JSON property `sheetId` # @return [Fixnum] attr_accessor :sheet_id def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @column_references = args[:column_references] if args.key?(:column_references) @sheet_id = args[:sheet_id] if args.key?(:sheet_id) end end # Additional properties of a DATA_SOURCE sheet. class DataSourceSheetProperties include Google::Apis::Core::Hashable # The columns displayed on the sheet, corresponding to the values in RowData. # Corresponds to the JSON property `columns` # @return [Array] attr_accessor :columns # The data execution status. A data execution is created to sync a data source # object with the latest data from a DataSource. It is usually scheduled to run # at background, you can check its state to tell if an execution completes There # are several scenarios where a data execution is triggered to run: * Adding a # data source creates an associated data source sheet as well as a data # execution to sync the data from the data source to the sheet. * Updating a # data source creates a data execution to refresh the associated data source # sheet similarly. * You can send refresh request to explicitly refresh one or # multiple data source objects. # Corresponds to the JSON property `dataExecutionStatus` # @return [Google::Apis::SheetsV4::DataExecutionStatus] attr_accessor :data_execution_status # ID of the DataSource the sheet is connected to. # Corresponds to the JSON property `dataSourceId` # @return [String] attr_accessor :data_source_id def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @columns = args[:columns] if args.key?(:columns) @data_execution_status = args[:data_execution_status] if args.key?(:data_execution_status) @data_source_id = args[:data_source_id] if args.key?(:data_source_id) end end # This specifies the details of the data source. For example, for BigQuery, this # specifies information about the BigQuery source. class DataSourceSpec include Google::Apis::Core::Hashable # The specification of a BigQuery data source that's connected to a sheet. # Corresponds to the JSON property `bigQuery` # @return [Google::Apis::SheetsV4::BigQueryDataSourceSpec] attr_accessor :big_query # The parameters of the data source, used when querying the data source. # Corresponds to the JSON property `parameters` # @return [Array] attr_accessor :parameters def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @big_query = args[:big_query] if args.key?(:big_query) @parameters = args[:parameters] if args.key?(:parameters) end end # A data source table, which allows the user to import a static table of data # from the DataSource into Sheets. This is also known as "Extract" in the Sheets # editor. class DataSourceTable include Google::Apis::Core::Hashable # The type to select columns for the data source table. Defaults to SELECTED. # Corresponds to the JSON property `columnSelectionType` # @return [String] attr_accessor :column_selection_type # Columns selected for the data source table. The column_selection_type must be # SELECTED. # Corresponds to the JSON property `columns` # @return [Array] attr_accessor :columns # The data execution status. A data execution is created to sync a data source # object with the latest data from a DataSource. It is usually scheduled to run # at background, you can check its state to tell if an execution completes There # are several scenarios where a data execution is triggered to run: * Adding a # data source creates an associated data source sheet as well as a data # execution to sync the data from the data source to the sheet. * Updating a # data source creates a data execution to refresh the associated data source # sheet similarly. * You can send refresh request to explicitly refresh one or # multiple data source objects. # Corresponds to the JSON property `dataExecutionStatus` # @return [Google::Apis::SheetsV4::DataExecutionStatus] attr_accessor :data_execution_status # The ID of the data source the data source table is associated with. # Corresponds to the JSON property `dataSourceId` # @return [String] attr_accessor :data_source_id # Filter specifications in the data source table. # Corresponds to the JSON property `filterSpecs` # @return [Array] attr_accessor :filter_specs # The limit of rows to return. If not set, a default limit is applied. Please # refer to the Sheets editor for the default and max limit. # Corresponds to the JSON property `rowLimit` # @return [Fixnum] attr_accessor :row_limit # Sort specifications in the data source table. The result of the data source # table is sorted based on the sort specifications in order. # Corresponds to the JSON property `sortSpecs` # @return [Array] attr_accessor :sort_specs def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @column_selection_type = args[:column_selection_type] if args.key?(:column_selection_type) @columns = args[:columns] if args.key?(:columns) @data_execution_status = args[:data_execution_status] if args.key?(:data_execution_status) @data_source_id = args[:data_source_id] if args.key?(:data_source_id) @filter_specs = args[:filter_specs] if args.key?(:filter_specs) @row_limit = args[:row_limit] if args.key?(:row_limit) @sort_specs = args[:sort_specs] if args.key?(:sort_specs) end end # A data validation rule. class DataValidationRule include Google::Apis::Core::Hashable # A condition that can evaluate to true or false. BooleanConditions are used by # conditional formatting, data validation, and the criteria in filters. # Corresponds to the JSON property `condition` # @return [Google::Apis::SheetsV4::BooleanCondition] attr_accessor :condition # A message to show the user when adding data to the cell. # Corresponds to the JSON property `inputMessage` # @return [String] attr_accessor :input_message # True if the UI should be customized based on the kind of condition. If true, " # List" conditions will show a dropdown. # Corresponds to the JSON property `showCustomUi` # @return [Boolean] attr_accessor :show_custom_ui alias_method :show_custom_ui?, :show_custom_ui # True if invalid data should be rejected. # Corresponds to the JSON property `strict` # @return [Boolean] attr_accessor :strict alias_method :strict?, :strict def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @condition = args[:condition] if args.key?(:condition) @input_message = args[:input_message] if args.key?(:input_message) @show_custom_ui = args[:show_custom_ui] if args.key?(:show_custom_ui) @strict = args[:strict] if args.key?(:strict) end end # Allows you to organize the date-time values in a source data column into # buckets based on selected parts of their date or time values. For example, # consider a pivot table showing sales transactions by date: +----------+-------- # ------+ | Date | SUM of Sales | +----------+--------------+ | 1/1/2017 | $621. # 14 | | 2/3/2017 | $708.84 | | 5/8/2017 | $326.84 | ... +----------+------------ # --+ Applying a date-time group rule with a DateTimeRuleType of YEAR_MONTH # results in the following pivot table. +--------------+--------------+ | # Grouped Date | SUM of Sales | +--------------+--------------+ | 2017-Jan | $53, # 731.78 | | 2017-Feb | $83,475.32 | | 2017-Mar | $94,385.05 | ... +------------- # -+--------------+ class DateTimeRule include Google::Apis::Core::Hashable # The type of date-time grouping to apply. # Corresponds to the JSON property `type` # @return [String] attr_accessor :type def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @type = args[:type] if args.key?(:type) end end # Removes the banded range with the given ID from the spreadsheet. class DeleteBandingRequest include Google::Apis::Core::Hashable # The ID of the banded range to delete. # Corresponds to the JSON property `bandedRangeId` # @return [Fixnum] attr_accessor :banded_range_id def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @banded_range_id = args[:banded_range_id] if args.key?(:banded_range_id) end end # Deletes a conditional format rule at the given index. All subsequent rules' # indexes are decremented. class DeleteConditionalFormatRuleRequest include Google::Apis::Core::Hashable # The zero-based index of the rule to be deleted. # Corresponds to the JSON property `index` # @return [Fixnum] attr_accessor :index # The sheet the rule is being deleted from. # Corresponds to the JSON property `sheetId` # @return [Fixnum] attr_accessor :sheet_id def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @index = args[:index] if args.key?(:index) @sheet_id = args[:sheet_id] if args.key?(:sheet_id) end end # The result of deleting a conditional format rule. class DeleteConditionalFormatRuleResponse include Google::Apis::Core::Hashable # A rule describing a conditional format. # Corresponds to the JSON property `rule` # @return [Google::Apis::SheetsV4::ConditionalFormatRule] attr_accessor :rule def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @rule = args[:rule] if args.key?(:rule) end end # Deletes a data source. The request also deletes the associated data source # sheet, and unlinks all associated data source objects. class DeleteDataSourceRequest include Google::Apis::Core::Hashable # The ID of the data source to delete. # Corresponds to the JSON property `dataSourceId` # @return [String] attr_accessor :data_source_id def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @data_source_id = args[:data_source_id] if args.key?(:data_source_id) end end # A request to delete developer metadata. class DeleteDeveloperMetadataRequest include Google::Apis::Core::Hashable # Filter that describes what data should be selected or returned from a request. # Corresponds to the JSON property `dataFilter` # @return [Google::Apis::SheetsV4::DataFilter] attr_accessor :data_filter def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @data_filter = args[:data_filter] if args.key?(:data_filter) end end # The response from deleting developer metadata. class DeleteDeveloperMetadataResponse include Google::Apis::Core::Hashable # The metadata that was deleted. # Corresponds to the JSON property `deletedDeveloperMetadata` # @return [Array] attr_accessor :deleted_developer_metadata def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @deleted_developer_metadata = args[:deleted_developer_metadata] if args.key?(:deleted_developer_metadata) end end # Deletes a group over the specified range by decrementing the depth of the # dimensions in the range. For example, assume the sheet has a depth-1 group # over B:E and a depth-2 group over C:D. Deleting a group over D:E leaves the # sheet with a depth-1 group over B:D and a depth-2 group over C:C. class DeleteDimensionGroupRequest include Google::Apis::Core::Hashable # A range along a single dimension on a sheet. All indexes are zero-based. # Indexes are half open: the start index is inclusive and the end index is # exclusive. Missing indexes indicate the range is unbounded on that side. # Corresponds to the JSON property `range` # @return [Google::Apis::SheetsV4::DimensionRange] attr_accessor :range def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @range = args[:range] if args.key?(:range) end end # The result of deleting a group. class DeleteDimensionGroupResponse include Google::Apis::Core::Hashable # All groups of a dimension after deleting a group from that dimension. # Corresponds to the JSON property `dimensionGroups` # @return [Array] attr_accessor :dimension_groups def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @dimension_groups = args[:dimension_groups] if args.key?(:dimension_groups) end end # Deletes the dimensions from the sheet. class DeleteDimensionRequest include Google::Apis::Core::Hashable # A range along a single dimension on a sheet. All indexes are zero-based. # Indexes are half open: the start index is inclusive and the end index is # exclusive. Missing indexes indicate the range is unbounded on that side. # Corresponds to the JSON property `range` # @return [Google::Apis::SheetsV4::DimensionRange] attr_accessor :range def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @range = args[:range] if args.key?(:range) end end # Removes rows within this range that contain values in the specified columns # that are duplicates of values in any previous row. Rows with identical values # but different letter cases, formatting, or formulas are considered to be # duplicates. This request also removes duplicate rows hidden from view (for # example, due to a filter). When removing duplicates, the first instance of # each duplicate row scanning from the top downwards is kept in the resulting # range. Content outside of the specified range isn't removed, and rows # considered duplicates do not have to be adjacent to each other in the range. class DeleteDuplicatesRequest include Google::Apis::Core::Hashable # The columns in the range to analyze for duplicate values. If no columns are # selected then all columns are analyzed for duplicates. # Corresponds to the JSON property `comparisonColumns` # @return [Array] attr_accessor :comparison_columns # A range on a sheet. All indexes are zero-based. Indexes are half open, i.e. # the start index is inclusive and the end index is exclusive -- [start_index, # end_index). Missing indexes indicate the range is unbounded on that side. For # example, if `"Sheet1"` is sheet ID 0, then: `Sheet1!A1:A1 == sheet_id: 0, # start_row_index: 0, end_row_index: 1, start_column_index: 0, end_column_index: # 1` `Sheet1!A3:B4 == sheet_id: 0, start_row_index: 2, end_row_index: 4, # start_column_index: 0, end_column_index: 2` `Sheet1!A:B == sheet_id: 0, # start_column_index: 0, end_column_index: 2` `Sheet1!A5:B == sheet_id: 0, # start_row_index: 4, start_column_index: 0, end_column_index: 2` `Sheet1 == # sheet_id:0` The start index must always be less than or equal to the end index. # If the start index equals the end index, then the range is empty. Empty # ranges are typically not meaningful and are usually rendered in the UI as `# # REF!`. # Corresponds to the JSON property `range` # @return [Google::Apis::SheetsV4::GridRange] attr_accessor :range def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @comparison_columns = args[:comparison_columns] if args.key?(:comparison_columns) @range = args[:range] if args.key?(:range) end end # The result of removing duplicates in a range. class DeleteDuplicatesResponse include Google::Apis::Core::Hashable # The number of duplicate rows removed. # Corresponds to the JSON property `duplicatesRemovedCount` # @return [Fixnum] attr_accessor :duplicates_removed_count def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @duplicates_removed_count = args[:duplicates_removed_count] if args.key?(:duplicates_removed_count) end end # Deletes the embedded object with the given ID. class DeleteEmbeddedObjectRequest include Google::Apis::Core::Hashable # The ID of the embedded object to delete. # Corresponds to the JSON property `objectId` # @return [Fixnum] attr_accessor :object_id_prop def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @object_id_prop = args[:object_id_prop] if args.key?(:object_id_prop) end end # Deletes a particular filter view. class DeleteFilterViewRequest include Google::Apis::Core::Hashable # The ID of the filter to delete. # Corresponds to the JSON property `filterId` # @return [Fixnum] attr_accessor :filter_id def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @filter_id = args[:filter_id] if args.key?(:filter_id) end end # Removes the named range with the given ID from the spreadsheet. class DeleteNamedRangeRequest include Google::Apis::Core::Hashable # The ID of the named range to delete. # Corresponds to the JSON property `namedRangeId` # @return [String] attr_accessor :named_range_id def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @named_range_id = args[:named_range_id] if args.key?(:named_range_id) end end # Deletes the protected range with the given ID. class DeleteProtectedRangeRequest include Google::Apis::Core::Hashable # The ID of the protected range to delete. # Corresponds to the JSON property `protectedRangeId` # @return [Fixnum] attr_accessor :protected_range_id def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @protected_range_id = args[:protected_range_id] if args.key?(:protected_range_id) end end # Deletes a range of cells, shifting other cells into the deleted area. class DeleteRangeRequest include Google::Apis::Core::Hashable # A range on a sheet. All indexes are zero-based. Indexes are half open, i.e. # the start index is inclusive and the end index is exclusive -- [start_index, # end_index). Missing indexes indicate the range is unbounded on that side. For # example, if `"Sheet1"` is sheet ID 0, then: `Sheet1!A1:A1 == sheet_id: 0, # start_row_index: 0, end_row_index: 1, start_column_index: 0, end_column_index: # 1` `Sheet1!A3:B4 == sheet_id: 0, start_row_index: 2, end_row_index: 4, # start_column_index: 0, end_column_index: 2` `Sheet1!A:B == sheet_id: 0, # start_column_index: 0, end_column_index: 2` `Sheet1!A5:B == sheet_id: 0, # start_row_index: 4, start_column_index: 0, end_column_index: 2` `Sheet1 == # sheet_id:0` The start index must always be less than or equal to the end index. # If the start index equals the end index, then the range is empty. Empty # ranges are typically not meaningful and are usually rendered in the UI as `# # REF!`. # Corresponds to the JSON property `range` # @return [Google::Apis::SheetsV4::GridRange] attr_accessor :range # The dimension from which deleted cells will be replaced with. If ROWS, # existing cells will be shifted upward to replace the deleted cells. If COLUMNS, # existing cells will be shifted left to replace the deleted cells. # Corresponds to the JSON property `shiftDimension` # @return [String] attr_accessor :shift_dimension def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @range = args[:range] if args.key?(:range) @shift_dimension = args[:shift_dimension] if args.key?(:shift_dimension) end end # Deletes the requested sheet. class DeleteSheetRequest include Google::Apis::Core::Hashable # The ID of the sheet to delete. If the sheet is of SheetType.DATA_SOURCE type, # the associated DataSource is also deleted. # Corresponds to the JSON property `sheetId` # @return [Fixnum] attr_accessor :sheet_id def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @sheet_id = args[:sheet_id] if args.key?(:sheet_id) end end # Developer metadata associated with a location or object in a spreadsheet. # Developer metadata may be used to associate arbitrary data with various parts # of a spreadsheet and will remain associated at those locations as they move # around and the spreadsheet is edited. For example, if developer metadata is # associated with row 5 and another row is then subsequently inserted above row # 5, that original metadata will still be associated with the row it was first # associated with (what is now row 6). If the associated object is deleted its # metadata is deleted too. class DeveloperMetadata include Google::Apis::Core::Hashable # A location where metadata may be associated in a spreadsheet. # Corresponds to the JSON property `location` # @return [Google::Apis::SheetsV4::DeveloperMetadataLocation] attr_accessor :location # The spreadsheet-scoped unique ID that identifies the metadata. IDs may be # specified when metadata is created, otherwise one will be randomly generated # and assigned. Must be positive. # Corresponds to the JSON property `metadataId` # @return [Fixnum] attr_accessor :metadata_id # The metadata key. There may be multiple metadata in a spreadsheet with the # same key. Developer metadata must always have a key specified. # Corresponds to the JSON property `metadataKey` # @return [String] attr_accessor :metadata_key # Data associated with the metadata's key. # Corresponds to the JSON property `metadataValue` # @return [String] attr_accessor :metadata_value # The metadata visibility. Developer metadata must always have a visibility # specified. # Corresponds to the JSON property `visibility` # @return [String] attr_accessor :visibility def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @location = args[:location] if args.key?(:location) @metadata_id = args[:metadata_id] if args.key?(:metadata_id) @metadata_key = args[:metadata_key] if args.key?(:metadata_key) @metadata_value = args[:metadata_value] if args.key?(:metadata_value) @visibility = args[:visibility] if args.key?(:visibility) end end # A location where metadata may be associated in a spreadsheet. class DeveloperMetadataLocation include Google::Apis::Core::Hashable # A range along a single dimension on a sheet. All indexes are zero-based. # Indexes are half open: the start index is inclusive and the end index is # exclusive. Missing indexes indicate the range is unbounded on that side. # Corresponds to the JSON property `dimensionRange` # @return [Google::Apis::SheetsV4::DimensionRange] attr_accessor :dimension_range # The type of location this object represents. This field is read-only. # Corresponds to the JSON property `locationType` # @return [String] attr_accessor :location_type # The ID of the sheet when metadata is associated with an entire sheet. # Corresponds to the JSON property `sheetId` # @return [Fixnum] attr_accessor :sheet_id # True when metadata is associated with an entire spreadsheet. # Corresponds to the JSON property `spreadsheet` # @return [Boolean] attr_accessor :spreadsheet alias_method :spreadsheet?, :spreadsheet def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @dimension_range = args[:dimension_range] if args.key?(:dimension_range) @location_type = args[:location_type] if args.key?(:location_type) @sheet_id = args[:sheet_id] if args.key?(:sheet_id) @spreadsheet = args[:spreadsheet] if args.key?(:spreadsheet) end end # Selects DeveloperMetadata that matches all of the specified fields. For # example, if only a metadata ID is specified this considers the # DeveloperMetadata with that particular unique ID. If a metadata key is # specified, this considers all developer metadata with that key. If a key, # visibility, and location type are all specified, this considers all developer # metadata with that key and visibility that are associated with a location of # that type. In general, this selects all DeveloperMetadata that matches the # intersection of all the specified fields; any field or combination of fields # may be specified. class DeveloperMetadataLookup include Google::Apis::Core::Hashable # Determines how this lookup matches the location. If this field is specified as # EXACT, only developer metadata associated on the exact location specified is # matched. If this field is specified to INTERSECTING, developer metadata # associated on intersecting locations is also matched. If left unspecified, # this field assumes a default value of INTERSECTING. If this field is specified, # a metadataLocation must also be specified. # Corresponds to the JSON property `locationMatchingStrategy` # @return [String] attr_accessor :location_matching_strategy # Limits the selected developer metadata to those entries which are associated # with locations of the specified type. For example, when this field is # specified as ROW this lookup only considers developer metadata associated on # rows. If the field is left unspecified, all location types are considered. # This field cannot be specified as SPREADSHEET when the # locationMatchingStrategy is specified as INTERSECTING or when the # metadataLocation is specified as a non-spreadsheet location: spreadsheet # metadata cannot intersect any other developer metadata location. This field # also must be left unspecified when the locationMatchingStrategy is specified # as EXACT. # Corresponds to the JSON property `locationType` # @return [String] attr_accessor :location_type # Limits the selected developer metadata to that which has a matching # DeveloperMetadata.metadata_id. # Corresponds to the JSON property `metadataId` # @return [Fixnum] attr_accessor :metadata_id # Limits the selected developer metadata to that which has a matching # DeveloperMetadata.metadata_key. # Corresponds to the JSON property `metadataKey` # @return [String] attr_accessor :metadata_key # A location where metadata may be associated in a spreadsheet. # Corresponds to the JSON property `metadataLocation` # @return [Google::Apis::SheetsV4::DeveloperMetadataLocation] attr_accessor :metadata_location # Limits the selected developer metadata to that which has a matching # DeveloperMetadata.metadata_value. # Corresponds to the JSON property `metadataValue` # @return [String] attr_accessor :metadata_value # Limits the selected developer metadata to that which has a matching # DeveloperMetadata.visibility. If left unspecified, all developer metadata # visibile to the requesting project is considered. # Corresponds to the JSON property `visibility` # @return [String] attr_accessor :visibility def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @location_matching_strategy = args[:location_matching_strategy] if args.key?(:location_matching_strategy) @location_type = args[:location_type] if args.key?(:location_type) @metadata_id = args[:metadata_id] if args.key?(:metadata_id) @metadata_key = args[:metadata_key] if args.key?(:metadata_key) @metadata_location = args[:metadata_location] if args.key?(:metadata_location) @metadata_value = args[:metadata_value] if args.key?(:metadata_value) @visibility = args[:visibility] if args.key?(:visibility) end end # A group over an interval of rows or columns on a sheet, which can contain or # be contained within other groups. A group can be collapsed or expanded as a # unit on the sheet. class DimensionGroup include Google::Apis::Core::Hashable # This field is true if this group is collapsed. A collapsed group remains # collapsed if an overlapping group at a shallower depth is expanded. A true # value does not imply that all dimensions within the group are hidden, since a # dimension's visibility can change independently from this group property. # However, when this property is updated, all dimensions within it are set to # hidden if this field is true, or set to visible if this field is false. # Corresponds to the JSON property `collapsed` # @return [Boolean] attr_accessor :collapsed alias_method :collapsed?, :collapsed # The depth of the group, representing how many groups have a range that wholly # contains the range of this group. # Corresponds to the JSON property `depth` # @return [Fixnum] attr_accessor :depth # A range along a single dimension on a sheet. All indexes are zero-based. # Indexes are half open: the start index is inclusive and the end index is # exclusive. Missing indexes indicate the range is unbounded on that side. # Corresponds to the JSON property `range` # @return [Google::Apis::SheetsV4::DimensionRange] attr_accessor :range def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @collapsed = args[:collapsed] if args.key?(:collapsed) @depth = args[:depth] if args.key?(:depth) @range = args[:range] if args.key?(:range) end end # Properties about a dimension. class DimensionProperties include Google::Apis::Core::Hashable # An unique identifier that references a data source column. # Corresponds to the JSON property `dataSourceColumnReference` # @return [Google::Apis::SheetsV4::DataSourceColumnReference] attr_accessor :data_source_column_reference # The developer metadata associated with a single row or column. # Corresponds to the JSON property `developerMetadata` # @return [Array] attr_accessor :developer_metadata # True if this dimension is being filtered. This field is read-only. # Corresponds to the JSON property `hiddenByFilter` # @return [Boolean] attr_accessor :hidden_by_filter alias_method :hidden_by_filter?, :hidden_by_filter # True if this dimension is explicitly hidden. # Corresponds to the JSON property `hiddenByUser` # @return [Boolean] attr_accessor :hidden_by_user alias_method :hidden_by_user?, :hidden_by_user # The height (if a row) or width (if a column) of the dimension in pixels. # Corresponds to the JSON property `pixelSize` # @return [Fixnum] attr_accessor :pixel_size def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @data_source_column_reference = args[:data_source_column_reference] if args.key?(:data_source_column_reference) @developer_metadata = args[:developer_metadata] if args.key?(:developer_metadata) @hidden_by_filter = args[:hidden_by_filter] if args.key?(:hidden_by_filter) @hidden_by_user = args[:hidden_by_user] if args.key?(:hidden_by_user) @pixel_size = args[:pixel_size] if args.key?(:pixel_size) end end # A range along a single dimension on a sheet. All indexes are zero-based. # Indexes are half open: the start index is inclusive and the end index is # exclusive. Missing indexes indicate the range is unbounded on that side. class DimensionRange include Google::Apis::Core::Hashable # The dimension of the span. # Corresponds to the JSON property `dimension` # @return [String] attr_accessor :dimension # The end (exclusive) of the span, or not set if unbounded. # Corresponds to the JSON property `endIndex` # @return [Fixnum] attr_accessor :end_index # The sheet this span is on. # Corresponds to the JSON property `sheetId` # @return [Fixnum] attr_accessor :sheet_id # The start (inclusive) of the span, or not set if unbounded. # Corresponds to the JSON property `startIndex` # @return [Fixnum] attr_accessor :start_index def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @dimension = args[:dimension] if args.key?(:dimension) @end_index = args[:end_index] if args.key?(:end_index) @sheet_id = args[:sheet_id] if args.key?(:sheet_id) @start_index = args[:start_index] if args.key?(:start_index) end end # Duplicates a particular filter view. class DuplicateFilterViewRequest include Google::Apis::Core::Hashable # The ID of the filter being duplicated. # Corresponds to the JSON property `filterId` # @return [Fixnum] attr_accessor :filter_id def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @filter_id = args[:filter_id] if args.key?(:filter_id) end end # The result of a filter view being duplicated. class DuplicateFilterViewResponse include Google::Apis::Core::Hashable # A filter view. # Corresponds to the JSON property `filter` # @return [Google::Apis::SheetsV4::FilterView] attr_accessor :filter def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @filter = args[:filter] if args.key?(:filter) end end # Duplicates the contents of a sheet. class DuplicateSheetRequest include Google::Apis::Core::Hashable # The zero-based index where the new sheet should be inserted. The index of all # sheets after this are incremented. # Corresponds to the JSON property `insertSheetIndex` # @return [Fixnum] attr_accessor :insert_sheet_index # If set, the ID of the new sheet. If not set, an ID is chosen. If set, the ID # must not conflict with any existing sheet ID. If set, it must be non-negative. # Corresponds to the JSON property `newSheetId` # @return [Fixnum] attr_accessor :new_sheet_id # The name of the new sheet. If empty, a new name is chosen for you. # Corresponds to the JSON property `newSheetName` # @return [String] attr_accessor :new_sheet_name # The sheet to duplicate. If the source sheet is of DATA_SOURCE type, its # backing DataSource is also duplicated and associated with the new copy of the # sheet. No data execution is triggered, the grid data of this sheet is also # copied over but only available after the batch request completes. # Corresponds to the JSON property `sourceSheetId` # @return [Fixnum] attr_accessor :source_sheet_id def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @insert_sheet_index = args[:insert_sheet_index] if args.key?(:insert_sheet_index) @new_sheet_id = args[:new_sheet_id] if args.key?(:new_sheet_id) @new_sheet_name = args[:new_sheet_name] if args.key?(:new_sheet_name) @source_sheet_id = args[:source_sheet_id] if args.key?(:source_sheet_id) end end # The result of duplicating a sheet. class DuplicateSheetResponse include Google::Apis::Core::Hashable # Properties of a sheet. # Corresponds to the JSON property `properties` # @return [Google::Apis::SheetsV4::SheetProperties] attr_accessor :properties def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @properties = args[:properties] if args.key?(:properties) end end # The editors of a protected range. class Editors include Google::Apis::Core::Hashable # True if anyone in the document's domain has edit access to the protected range. # Domain protection is only supported on documents within a domain. # Corresponds to the JSON property `domainUsersCanEdit` # @return [Boolean] attr_accessor :domain_users_can_edit alias_method :domain_users_can_edit?, :domain_users_can_edit # The email addresses of groups with edit access to the protected range. # Corresponds to the JSON property `groups` # @return [Array] attr_accessor :groups # The email addresses of users with edit access to the protected range. # Corresponds to the JSON property `users` # @return [Array] attr_accessor :users def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @domain_users_can_edit = args[:domain_users_can_edit] if args.key?(:domain_users_can_edit) @groups = args[:groups] if args.key?(:groups) @users = args[:users] if args.key?(:users) end end # A chart embedded in a sheet. class EmbeddedChart include Google::Apis::Core::Hashable # A border along an embedded object. # Corresponds to the JSON property `border` # @return [Google::Apis::SheetsV4::EmbeddedObjectBorder] attr_accessor :border # The ID of the chart. # Corresponds to the JSON property `chartId` # @return [Fixnum] attr_accessor :chart_id # The position of an embedded object such as a chart. # Corresponds to the JSON property `position` # @return [Google::Apis::SheetsV4::EmbeddedObjectPosition] attr_accessor :position # The specifications of a chart. # Corresponds to the JSON property `spec` # @return [Google::Apis::SheetsV4::ChartSpec] attr_accessor :spec def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @border = args[:border] if args.key?(:border) @chart_id = args[:chart_id] if args.key?(:chart_id) @position = args[:position] if args.key?(:position) @spec = args[:spec] if args.key?(:spec) end end # A border along an embedded object. class EmbeddedObjectBorder include Google::Apis::Core::Hashable # Represents a color in the RGBA color space. This representation is designed # for simplicity of conversion to/from color representations in various # languages over compactness; for example, the fields of this representation can # be trivially provided to the constructor of "java.awt.Color" in Java; it can # also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha" # method in iOS; and, with just a little work, it can be easily formatted into a # CSS "rgba()" string in JavaScript, as well. Note: this proto does not carry # information about the absolute color space that should be used to interpret # the RGB value (e.g. sRGB, Adobe RGB, DCI-P3, BT.2020, etc.). By default, # applications SHOULD assume the sRGB color space. Note: when color equality # needs to be decided, implementations, unless documented otherwise, will treat # two colors to be equal if all their red, green, blue and alpha values each # differ by at most 1e-5. Example (Java): import com.google.type.Color; // ... # public static java.awt.Color fromProto(Color protocolor) ` float alpha = # protocolor.hasAlpha() ? protocolor.getAlpha().getValue() : 1.0; return new # java.awt.Color( protocolor.getRed(), protocolor.getGreen(), protocolor.getBlue( # ), alpha); ` public static Color toProto(java.awt.Color color) ` float red = ( # float) color.getRed(); float green = (float) color.getGreen(); float blue = ( # float) color.getBlue(); float denominator = 255.0; Color.Builder resultBuilder # = Color .newBuilder() .setRed(red / denominator) .setGreen(green / denominator) # .setBlue(blue / denominator); int alpha = color.getAlpha(); if (alpha != 255) # ` result.setAlpha( FloatValue .newBuilder() .setValue(((float) alpha) / # denominator) .build()); ` return resultBuilder.build(); ` // ... Example (iOS / # Obj-C): // ... static UIColor* fromProto(Color* protocolor) ` float red = [ # protocolor red]; float green = [protocolor green]; float blue = [protocolor # blue]; FloatValue* alpha_wrapper = [protocolor alpha]; float alpha = 1.0; if ( # alpha_wrapper != nil) ` alpha = [alpha_wrapper value]; ` return [UIColor # colorWithRed:red green:green blue:blue alpha:alpha]; ` static Color* toProto( # UIColor* color) ` CGFloat red, green, blue, alpha; if (![color getRed:&red # green:&green blue:&blue alpha:&alpha]) ` return nil; ` Color* result = [[Color # alloc] init]; [result setRed:red]; [result setGreen:green]; [result setBlue: # blue]; if (alpha <= 0.9999) ` [result setAlpha:floatWrapperWithValue(alpha)]; ` # [result autorelease]; return result; ` // ... Example (JavaScript): // ... # var protoToCssColor = function(rgb_color) ` var redFrac = rgb_color.red || 0.0; # var greenFrac = rgb_color.green || 0.0; var blueFrac = rgb_color.blue || 0.0; # var red = Math.floor(redFrac * 255); var green = Math.floor(greenFrac * 255); # var blue = Math.floor(blueFrac * 255); if (!('alpha' in rgb_color)) ` return # rgbToCssColor_(red, green, blue); ` var alphaFrac = rgb_color.alpha.value || 0. # 0; var rgbParams = [red, green, blue].join(','); return ['rgba(', rgbParams, ', # ', alphaFrac, ')'].join(''); `; var rgbToCssColor_ = function(red, green, blue) # ` var rgbNumber = new Number((red << 16) | (green << 8) | blue); var # hexString = rgbNumber.toString(16); var missingZeros = 6 - hexString.length; # var resultBuilder = ['#']; for (var i = 0; i < missingZeros; i++) ` # resultBuilder.push('0'); ` resultBuilder.push(hexString); return resultBuilder. # join(''); `; // ... # Corresponds to the JSON property `color` # @return [Google::Apis::SheetsV4::Color] attr_accessor :color # A color value. # Corresponds to the JSON property `colorStyle` # @return [Google::Apis::SheetsV4::ColorStyle] attr_accessor :color_style def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @color = args[:color] if args.key?(:color) @color_style = args[:color_style] if args.key?(:color_style) end end # The position of an embedded object such as a chart. class EmbeddedObjectPosition include Google::Apis::Core::Hashable # If true, the embedded object is put on a new sheet whose ID is chosen for you. # Used only when writing. # Corresponds to the JSON property `newSheet` # @return [Boolean] attr_accessor :new_sheet alias_method :new_sheet?, :new_sheet # The location an object is overlaid on top of a grid. # Corresponds to the JSON property `overlayPosition` # @return [Google::Apis::SheetsV4::OverlayPosition] attr_accessor :overlay_position # The sheet this is on. Set only if the embedded object is on its own sheet. # Must be non-negative. # Corresponds to the JSON property `sheetId` # @return [Fixnum] attr_accessor :sheet_id def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @new_sheet = args[:new_sheet] if args.key?(:new_sheet) @overlay_position = args[:overlay_position] if args.key?(:overlay_position) @sheet_id = args[:sheet_id] if args.key?(:sheet_id) end end # An error in a cell. class ErrorValue include Google::Apis::Core::Hashable # A message with more information about the error (in the spreadsheet's locale). # Corresponds to the JSON property `message` # @return [String] attr_accessor :message # The type of error. # Corresponds to the JSON property `type` # @return [String] attr_accessor :type def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @message = args[:message] if args.key?(:message) @type = args[:type] if args.key?(:type) end end # The kinds of value that a cell in a spreadsheet can have. class ExtendedValue include Google::Apis::Core::Hashable # Represents a boolean value. # Corresponds to the JSON property `boolValue` # @return [Boolean] attr_accessor :bool_value alias_method :bool_value?, :bool_value # An error in a cell. # Corresponds to the JSON property `errorValue` # @return [Google::Apis::SheetsV4::ErrorValue] attr_accessor :error_value # Represents a formula. # Corresponds to the JSON property `formulaValue` # @return [String] attr_accessor :formula_value # Represents a double value. Note: Dates, Times and DateTimes are represented as # doubles in "serial number" format. # Corresponds to the JSON property `numberValue` # @return [Float] attr_accessor :number_value # Represents a string value. Leading single quotes are not included. For example, # if the user typed `'123` into the UI, this would be represented as a ` # stringValue` of `"123"`. # Corresponds to the JSON property `stringValue` # @return [String] attr_accessor :string_value def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @bool_value = args[:bool_value] if args.key?(:bool_value) @error_value = args[:error_value] if args.key?(:error_value) @formula_value = args[:formula_value] if args.key?(:formula_value) @number_value = args[:number_value] if args.key?(:number_value) @string_value = args[:string_value] if args.key?(:string_value) end end # Criteria for showing/hiding rows in a filter or filter view. class FilterCriteria include Google::Apis::Core::Hashable # A condition that can evaluate to true or false. BooleanConditions are used by # conditional formatting, data validation, and the criteria in filters. # Corresponds to the JSON property `condition` # @return [Google::Apis::SheetsV4::BooleanCondition] attr_accessor :condition # Values that should be hidden. # Corresponds to the JSON property `hiddenValues` # @return [Array] attr_accessor :hidden_values # Represents a color in the RGBA color space. This representation is designed # for simplicity of conversion to/from color representations in various # languages over compactness; for example, the fields of this representation can # be trivially provided to the constructor of "java.awt.Color" in Java; it can # also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha" # method in iOS; and, with just a little work, it can be easily formatted into a # CSS "rgba()" string in JavaScript, as well. Note: this proto does not carry # information about the absolute color space that should be used to interpret # the RGB value (e.g. sRGB, Adobe RGB, DCI-P3, BT.2020, etc.). By default, # applications SHOULD assume the sRGB color space. Note: when color equality # needs to be decided, implementations, unless documented otherwise, will treat # two colors to be equal if all their red, green, blue and alpha values each # differ by at most 1e-5. Example (Java): import com.google.type.Color; // ... # public static java.awt.Color fromProto(Color protocolor) ` float alpha = # protocolor.hasAlpha() ? protocolor.getAlpha().getValue() : 1.0; return new # java.awt.Color( protocolor.getRed(), protocolor.getGreen(), protocolor.getBlue( # ), alpha); ` public static Color toProto(java.awt.Color color) ` float red = ( # float) color.getRed(); float green = (float) color.getGreen(); float blue = ( # float) color.getBlue(); float denominator = 255.0; Color.Builder resultBuilder # = Color .newBuilder() .setRed(red / denominator) .setGreen(green / denominator) # .setBlue(blue / denominator); int alpha = color.getAlpha(); if (alpha != 255) # ` result.setAlpha( FloatValue .newBuilder() .setValue(((float) alpha) / # denominator) .build()); ` return resultBuilder.build(); ` // ... Example (iOS / # Obj-C): // ... static UIColor* fromProto(Color* protocolor) ` float red = [ # protocolor red]; float green = [protocolor green]; float blue = [protocolor # blue]; FloatValue* alpha_wrapper = [protocolor alpha]; float alpha = 1.0; if ( # alpha_wrapper != nil) ` alpha = [alpha_wrapper value]; ` return [UIColor # colorWithRed:red green:green blue:blue alpha:alpha]; ` static Color* toProto( # UIColor* color) ` CGFloat red, green, blue, alpha; if (![color getRed:&red # green:&green blue:&blue alpha:&alpha]) ` return nil; ` Color* result = [[Color # alloc] init]; [result setRed:red]; [result setGreen:green]; [result setBlue: # blue]; if (alpha <= 0.9999) ` [result setAlpha:floatWrapperWithValue(alpha)]; ` # [result autorelease]; return result; ` // ... Example (JavaScript): // ... # var protoToCssColor = function(rgb_color) ` var redFrac = rgb_color.red || 0.0; # var greenFrac = rgb_color.green || 0.0; var blueFrac = rgb_color.blue || 0.0; # var red = Math.floor(redFrac * 255); var green = Math.floor(greenFrac * 255); # var blue = Math.floor(blueFrac * 255); if (!('alpha' in rgb_color)) ` return # rgbToCssColor_(red, green, blue); ` var alphaFrac = rgb_color.alpha.value || 0. # 0; var rgbParams = [red, green, blue].join(','); return ['rgba(', rgbParams, ', # ', alphaFrac, ')'].join(''); `; var rgbToCssColor_ = function(red, green, blue) # ` var rgbNumber = new Number((red << 16) | (green << 8) | blue); var # hexString = rgbNumber.toString(16); var missingZeros = 6 - hexString.length; # var resultBuilder = ['#']; for (var i = 0; i < missingZeros; i++) ` # resultBuilder.push('0'); ` resultBuilder.push(hexString); return resultBuilder. # join(''); `; // ... # Corresponds to the JSON property `visibleBackgroundColor` # @return [Google::Apis::SheetsV4::Color] attr_accessor :visible_background_color # A color value. # Corresponds to the JSON property `visibleBackgroundColorStyle` # @return [Google::Apis::SheetsV4::ColorStyle] attr_accessor :visible_background_color_style # Represents a color in the RGBA color space. This representation is designed # for simplicity of conversion to/from color representations in various # languages over compactness; for example, the fields of this representation can # be trivially provided to the constructor of "java.awt.Color" in Java; it can # also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha" # method in iOS; and, with just a little work, it can be easily formatted into a # CSS "rgba()" string in JavaScript, as well. Note: this proto does not carry # information about the absolute color space that should be used to interpret # the RGB value (e.g. sRGB, Adobe RGB, DCI-P3, BT.2020, etc.). By default, # applications SHOULD assume the sRGB color space. Note: when color equality # needs to be decided, implementations, unless documented otherwise, will treat # two colors to be equal if all their red, green, blue and alpha values each # differ by at most 1e-5. Example (Java): import com.google.type.Color; // ... # public static java.awt.Color fromProto(Color protocolor) ` float alpha = # protocolor.hasAlpha() ? protocolor.getAlpha().getValue() : 1.0; return new # java.awt.Color( protocolor.getRed(), protocolor.getGreen(), protocolor.getBlue( # ), alpha); ` public static Color toProto(java.awt.Color color) ` float red = ( # float) color.getRed(); float green = (float) color.getGreen(); float blue = ( # float) color.getBlue(); float denominator = 255.0; Color.Builder resultBuilder # = Color .newBuilder() .setRed(red / denominator) .setGreen(green / denominator) # .setBlue(blue / denominator); int alpha = color.getAlpha(); if (alpha != 255) # ` result.setAlpha( FloatValue .newBuilder() .setValue(((float) alpha) / # denominator) .build()); ` return resultBuilder.build(); ` // ... Example (iOS / # Obj-C): // ... static UIColor* fromProto(Color* protocolor) ` float red = [ # protocolor red]; float green = [protocolor green]; float blue = [protocolor # blue]; FloatValue* alpha_wrapper = [protocolor alpha]; float alpha = 1.0; if ( # alpha_wrapper != nil) ` alpha = [alpha_wrapper value]; ` return [UIColor # colorWithRed:red green:green blue:blue alpha:alpha]; ` static Color* toProto( # UIColor* color) ` CGFloat red, green, blue, alpha; if (![color getRed:&red # green:&green blue:&blue alpha:&alpha]) ` return nil; ` Color* result = [[Color # alloc] init]; [result setRed:red]; [result setGreen:green]; [result setBlue: # blue]; if (alpha <= 0.9999) ` [result setAlpha:floatWrapperWithValue(alpha)]; ` # [result autorelease]; return result; ` // ... Example (JavaScript): // ... # var protoToCssColor = function(rgb_color) ` var redFrac = rgb_color.red || 0.0; # var greenFrac = rgb_color.green || 0.0; var blueFrac = rgb_color.blue || 0.0; # var red = Math.floor(redFrac * 255); var green = Math.floor(greenFrac * 255); # var blue = Math.floor(blueFrac * 255); if (!('alpha' in rgb_color)) ` return # rgbToCssColor_(red, green, blue); ` var alphaFrac = rgb_color.alpha.value || 0. # 0; var rgbParams = [red, green, blue].join(','); return ['rgba(', rgbParams, ', # ', alphaFrac, ')'].join(''); `; var rgbToCssColor_ = function(red, green, blue) # ` var rgbNumber = new Number((red << 16) | (green << 8) | blue); var # hexString = rgbNumber.toString(16); var missingZeros = 6 - hexString.length; # var resultBuilder = ['#']; for (var i = 0; i < missingZeros; i++) ` # resultBuilder.push('0'); ` resultBuilder.push(hexString); return resultBuilder. # join(''); `; // ... # Corresponds to the JSON property `visibleForegroundColor` # @return [Google::Apis::SheetsV4::Color] attr_accessor :visible_foreground_color # A color value. # Corresponds to the JSON property `visibleForegroundColorStyle` # @return [Google::Apis::SheetsV4::ColorStyle] attr_accessor :visible_foreground_color_style def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @condition = args[:condition] if args.key?(:condition) @hidden_values = args[:hidden_values] if args.key?(:hidden_values) @visible_background_color = args[:visible_background_color] if args.key?(:visible_background_color) @visible_background_color_style = args[:visible_background_color_style] if args.key?(:visible_background_color_style) @visible_foreground_color = args[:visible_foreground_color] if args.key?(:visible_foreground_color) @visible_foreground_color_style = args[:visible_foreground_color_style] if args.key?(:visible_foreground_color_style) end end # The filter criteria associated with a specific column. class FilterSpec include Google::Apis::Core::Hashable # The column index. # Corresponds to the JSON property `columnIndex` # @return [Fixnum] attr_accessor :column_index # An unique identifier that references a data source column. # Corresponds to the JSON property `dataSourceColumnReference` # @return [Google::Apis::SheetsV4::DataSourceColumnReference] attr_accessor :data_source_column_reference # Criteria for showing/hiding rows in a filter or filter view. # Corresponds to the JSON property `filterCriteria` # @return [Google::Apis::SheetsV4::FilterCriteria] attr_accessor :filter_criteria def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @column_index = args[:column_index] if args.key?(:column_index) @data_source_column_reference = args[:data_source_column_reference] if args.key?(:data_source_column_reference) @filter_criteria = args[:filter_criteria] if args.key?(:filter_criteria) end end # A filter view. class FilterView include Google::Apis::Core::Hashable # The criteria for showing/hiding values per column. The map's key is the column # index, and the value is the criteria for that column. This field is deprecated # in favor of filter_specs. # Corresponds to the JSON property `criteria` # @return [Hash] attr_accessor :criteria # The filter criteria for showing/hiding values per column. Both criteria and # filter_specs are populated in responses. If both fields are specified in an # update request, this field takes precedence. # Corresponds to the JSON property `filterSpecs` # @return [Array] attr_accessor :filter_specs # The ID of the filter view. # Corresponds to the JSON property `filterViewId` # @return [Fixnum] attr_accessor :filter_view_id # The named range this filter view is backed by, if any. When writing, only one # of range or named_range_id may be set. # Corresponds to the JSON property `namedRangeId` # @return [String] attr_accessor :named_range_id # A range on a sheet. All indexes are zero-based. Indexes are half open, i.e. # the start index is inclusive and the end index is exclusive -- [start_index, # end_index). Missing indexes indicate the range is unbounded on that side. For # example, if `"Sheet1"` is sheet ID 0, then: `Sheet1!A1:A1 == sheet_id: 0, # start_row_index: 0, end_row_index: 1, start_column_index: 0, end_column_index: # 1` `Sheet1!A3:B4 == sheet_id: 0, start_row_index: 2, end_row_index: 4, # start_column_index: 0, end_column_index: 2` `Sheet1!A:B == sheet_id: 0, # start_column_index: 0, end_column_index: 2` `Sheet1!A5:B == sheet_id: 0, # start_row_index: 4, start_column_index: 0, end_column_index: 2` `Sheet1 == # sheet_id:0` The start index must always be less than or equal to the end index. # If the start index equals the end index, then the range is empty. Empty # ranges are typically not meaningful and are usually rendered in the UI as `# # REF!`. # Corresponds to the JSON property `range` # @return [Google::Apis::SheetsV4::GridRange] attr_accessor :range # The sort order per column. Later specifications are used when values are equal # in the earlier specifications. # Corresponds to the JSON property `sortSpecs` # @return [Array] attr_accessor :sort_specs # The name of the filter view. # Corresponds to the JSON property `title` # @return [String] attr_accessor :title def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @criteria = args[:criteria] if args.key?(:criteria) @filter_specs = args[:filter_specs] if args.key?(:filter_specs) @filter_view_id = args[:filter_view_id] if args.key?(:filter_view_id) @named_range_id = args[:named_range_id] if args.key?(:named_range_id) @range = args[:range] if args.key?(:range) @sort_specs = args[:sort_specs] if args.key?(:sort_specs) @title = args[:title] if args.key?(:title) end end # Finds and replaces data in cells over a range, sheet, or all sheets. class FindReplaceRequest include Google::Apis::Core::Hashable # True to find/replace over all sheets. # Corresponds to the JSON property `allSheets` # @return [Boolean] attr_accessor :all_sheets alias_method :all_sheets?, :all_sheets # The value to search. # Corresponds to the JSON property `find` # @return [String] attr_accessor :find # True if the search should include cells with formulas. False to skip cells # with formulas. # Corresponds to the JSON property `includeFormulas` # @return [Boolean] attr_accessor :include_formulas alias_method :include_formulas?, :include_formulas # True if the search is case sensitive. # Corresponds to the JSON property `matchCase` # @return [Boolean] attr_accessor :match_case alias_method :match_case?, :match_case # True if the find value should match the entire cell. # Corresponds to the JSON property `matchEntireCell` # @return [Boolean] attr_accessor :match_entire_cell alias_method :match_entire_cell?, :match_entire_cell # A range on a sheet. All indexes are zero-based. Indexes are half open, i.e. # the start index is inclusive and the end index is exclusive -- [start_index, # end_index). Missing indexes indicate the range is unbounded on that side. For # example, if `"Sheet1"` is sheet ID 0, then: `Sheet1!A1:A1 == sheet_id: 0, # start_row_index: 0, end_row_index: 1, start_column_index: 0, end_column_index: # 1` `Sheet1!A3:B4 == sheet_id: 0, start_row_index: 2, end_row_index: 4, # start_column_index: 0, end_column_index: 2` `Sheet1!A:B == sheet_id: 0, # start_column_index: 0, end_column_index: 2` `Sheet1!A5:B == sheet_id: 0, # start_row_index: 4, start_column_index: 0, end_column_index: 2` `Sheet1 == # sheet_id:0` The start index must always be less than or equal to the end index. # If the start index equals the end index, then the range is empty. Empty # ranges are typically not meaningful and are usually rendered in the UI as `# # REF!`. # Corresponds to the JSON property `range` # @return [Google::Apis::SheetsV4::GridRange] attr_accessor :range # The value to use as the replacement. # Corresponds to the JSON property `replacement` # @return [String] attr_accessor :replacement # True if the find value is a regex. The regular expression and replacement # should follow Java regex rules at https://docs.oracle.com/javase/8/docs/api/ # java/util/regex/Pattern.html. The replacement string is allowed to refer to # capturing groups. For example, if one cell has the contents `"Google Sheets"` # and another has `"Google Docs"`, then searching for `"o.* (.*)"` with a # replacement of `"$1 Rocks"` would change the contents of the cells to `" # GSheets Rocks"` and `"GDocs Rocks"` respectively. # Corresponds to the JSON property `searchByRegex` # @return [Boolean] attr_accessor :search_by_regex alias_method :search_by_regex?, :search_by_regex # The sheet to find/replace over. # Corresponds to the JSON property `sheetId` # @return [Fixnum] attr_accessor :sheet_id def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @all_sheets = args[:all_sheets] if args.key?(:all_sheets) @find = args[:find] if args.key?(:find) @include_formulas = args[:include_formulas] if args.key?(:include_formulas) @match_case = args[:match_case] if args.key?(:match_case) @match_entire_cell = args[:match_entire_cell] if args.key?(:match_entire_cell) @range = args[:range] if args.key?(:range) @replacement = args[:replacement] if args.key?(:replacement) @search_by_regex = args[:search_by_regex] if args.key?(:search_by_regex) @sheet_id = args[:sheet_id] if args.key?(:sheet_id) end end # The result of the find/replace. class FindReplaceResponse include Google::Apis::Core::Hashable # The number of formula cells changed. # Corresponds to the JSON property `formulasChanged` # @return [Fixnum] attr_accessor :formulas_changed # The number of occurrences (possibly multiple within a cell) changed. For # example, if replacing `"e"` with `"o"` in `"Google Sheets"`, this would be `"3" # ` because `"Google Sheets"` -> `"Googlo Shoots"`. # Corresponds to the JSON property `occurrencesChanged` # @return [Fixnum] attr_accessor :occurrences_changed # The number of rows changed. # Corresponds to the JSON property `rowsChanged` # @return [Fixnum] attr_accessor :rows_changed # The number of sheets changed. # Corresponds to the JSON property `sheetsChanged` # @return [Fixnum] attr_accessor :sheets_changed # The number of non-formula cells changed. # Corresponds to the JSON property `valuesChanged` # @return [Fixnum] attr_accessor :values_changed def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @formulas_changed = args[:formulas_changed] if args.key?(:formulas_changed) @occurrences_changed = args[:occurrences_changed] if args.key?(:occurrences_changed) @rows_changed = args[:rows_changed] if args.key?(:rows_changed) @sheets_changed = args[:sheets_changed] if args.key?(:sheets_changed) @values_changed = args[:values_changed] if args.key?(:values_changed) end end # The request for retrieving a Spreadsheet. class GetSpreadsheetByDataFilterRequest include Google::Apis::Core::Hashable # The DataFilters used to select which ranges to retrieve from the spreadsheet. # Corresponds to the JSON property `dataFilters` # @return [Array] attr_accessor :data_filters # True if grid data should be returned. This parameter is ignored if a field # mask was set in the request. # Corresponds to the JSON property `includeGridData` # @return [Boolean] attr_accessor :include_grid_data alias_method :include_grid_data?, :include_grid_data def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @data_filters = args[:data_filters] if args.key?(:data_filters) @include_grid_data = args[:include_grid_data] if args.key?(:include_grid_data) end end # A rule that applies a gradient color scale format, based on the interpolation # points listed. The format of a cell will vary based on its contents as # compared to the values of the interpolation points. class GradientRule include Google::Apis::Core::Hashable # A single interpolation point on a gradient conditional format. These pin the # gradient color scale according to the color, type and value chosen. # Corresponds to the JSON property `maxpoint` # @return [Google::Apis::SheetsV4::InterpolationPoint] attr_accessor :maxpoint # A single interpolation point on a gradient conditional format. These pin the # gradient color scale according to the color, type and value chosen. # Corresponds to the JSON property `midpoint` # @return [Google::Apis::SheetsV4::InterpolationPoint] attr_accessor :midpoint # A single interpolation point on a gradient conditional format. These pin the # gradient color scale according to the color, type and value chosen. # Corresponds to the JSON property `minpoint` # @return [Google::Apis::SheetsV4::InterpolationPoint] attr_accessor :minpoint def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @maxpoint = args[:maxpoint] if args.key?(:maxpoint) @midpoint = args[:midpoint] if args.key?(:midpoint) @minpoint = args[:minpoint] if args.key?(:minpoint) end end # A coordinate in a sheet. All indexes are zero-based. class GridCoordinate include Google::Apis::Core::Hashable # The column index of the coordinate. # Corresponds to the JSON property `columnIndex` # @return [Fixnum] attr_accessor :column_index # The row index of the coordinate. # Corresponds to the JSON property `rowIndex` # @return [Fixnum] attr_accessor :row_index # The sheet this coordinate is on. # Corresponds to the JSON property `sheetId` # @return [Fixnum] attr_accessor :sheet_id def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @column_index = args[:column_index] if args.key?(:column_index) @row_index = args[:row_index] if args.key?(:row_index) @sheet_id = args[:sheet_id] if args.key?(:sheet_id) end end # Data in the grid, as well as metadata about the dimensions. class GridData include Google::Apis::Core::Hashable # Metadata about the requested columns in the grid, starting with the column in # start_column. # Corresponds to the JSON property `columnMetadata` # @return [Array] attr_accessor :column_metadata # The data in the grid, one entry per row, starting with the row in startRow. # The values in RowData will correspond to columns starting at start_column. # Corresponds to the JSON property `rowData` # @return [Array] attr_accessor :row_data # Metadata about the requested rows in the grid, starting with the row in # start_row. # Corresponds to the JSON property `rowMetadata` # @return [Array] attr_accessor :row_metadata # The first column this GridData refers to, zero-based. # Corresponds to the JSON property `startColumn` # @return [Fixnum] attr_accessor :start_column # The first row this GridData refers to, zero-based. # Corresponds to the JSON property `startRow` # @return [Fixnum] attr_accessor :start_row def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @column_metadata = args[:column_metadata] if args.key?(:column_metadata) @row_data = args[:row_data] if args.key?(:row_data) @row_metadata = args[:row_metadata] if args.key?(:row_metadata) @start_column = args[:start_column] if args.key?(:start_column) @start_row = args[:start_row] if args.key?(:start_row) end end # Properties of a grid. class GridProperties include Google::Apis::Core::Hashable # The number of columns in the grid. # Corresponds to the JSON property `columnCount` # @return [Fixnum] attr_accessor :column_count # True if the column grouping control toggle is shown after the group. # Corresponds to the JSON property `columnGroupControlAfter` # @return [Boolean] attr_accessor :column_group_control_after alias_method :column_group_control_after?, :column_group_control_after # The number of columns that are frozen in the grid. # Corresponds to the JSON property `frozenColumnCount` # @return [Fixnum] attr_accessor :frozen_column_count # The number of rows that are frozen in the grid. # Corresponds to the JSON property `frozenRowCount` # @return [Fixnum] attr_accessor :frozen_row_count # True if the grid isn't showing gridlines in the UI. # Corresponds to the JSON property `hideGridlines` # @return [Boolean] attr_accessor :hide_gridlines alias_method :hide_gridlines?, :hide_gridlines # The number of rows in the grid. # Corresponds to the JSON property `rowCount` # @return [Fixnum] attr_accessor :row_count # True if the row grouping control toggle is shown after the group. # Corresponds to the JSON property `rowGroupControlAfter` # @return [Boolean] attr_accessor :row_group_control_after alias_method :row_group_control_after?, :row_group_control_after def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @column_count = args[:column_count] if args.key?(:column_count) @column_group_control_after = args[:column_group_control_after] if args.key?(:column_group_control_after) @frozen_column_count = args[:frozen_column_count] if args.key?(:frozen_column_count) @frozen_row_count = args[:frozen_row_count] if args.key?(:frozen_row_count) @hide_gridlines = args[:hide_gridlines] if args.key?(:hide_gridlines) @row_count = args[:row_count] if args.key?(:row_count) @row_group_control_after = args[:row_group_control_after] if args.key?(:row_group_control_after) end end # A range on a sheet. All indexes are zero-based. Indexes are half open, i.e. # the start index is inclusive and the end index is exclusive -- [start_index, # end_index). Missing indexes indicate the range is unbounded on that side. For # example, if `"Sheet1"` is sheet ID 0, then: `Sheet1!A1:A1 == sheet_id: 0, # start_row_index: 0, end_row_index: 1, start_column_index: 0, end_column_index: # 1` `Sheet1!A3:B4 == sheet_id: 0, start_row_index: 2, end_row_index: 4, # start_column_index: 0, end_column_index: 2` `Sheet1!A:B == sheet_id: 0, # start_column_index: 0, end_column_index: 2` `Sheet1!A5:B == sheet_id: 0, # start_row_index: 4, start_column_index: 0, end_column_index: 2` `Sheet1 == # sheet_id:0` The start index must always be less than or equal to the end index. # If the start index equals the end index, then the range is empty. Empty # ranges are typically not meaningful and are usually rendered in the UI as `# # REF!`. class GridRange include Google::Apis::Core::Hashable # The end column (exclusive) of the range, or not set if unbounded. # Corresponds to the JSON property `endColumnIndex` # @return [Fixnum] attr_accessor :end_column_index # The end row (exclusive) of the range, or not set if unbounded. # Corresponds to the JSON property `endRowIndex` # @return [Fixnum] attr_accessor :end_row_index # The sheet this range is on. # Corresponds to the JSON property `sheetId` # @return [Fixnum] attr_accessor :sheet_id # The start column (inclusive) of the range, or not set if unbounded. # Corresponds to the JSON property `startColumnIndex` # @return [Fixnum] attr_accessor :start_column_index # The start row (inclusive) of the range, or not set if unbounded. # Corresponds to the JSON property `startRowIndex` # @return [Fixnum] attr_accessor :start_row_index def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @end_column_index = args[:end_column_index] if args.key?(:end_column_index) @end_row_index = args[:end_row_index] if args.key?(:end_row_index) @sheet_id = args[:sheet_id] if args.key?(:sheet_id) @start_column_index = args[:start_column_index] if args.key?(:start_column_index) @start_row_index = args[:start_row_index] if args.key?(:start_row_index) end end # A histogram chart. A histogram chart groups data items into bins, displaying # each bin as a column of stacked items. Histograms are used to display the # distribution of a dataset. Each column of items represents a range into which # those items fall. The number of bins can be chosen automatically or specified # explicitly. class HistogramChartSpec include Google::Apis::Core::Hashable # By default the bucket size (the range of values stacked in a single column) is # chosen automatically, but it may be overridden here. E.g., A bucket size of 1. # 5 results in buckets from 0 - 1.5, 1.5 - 3.0, etc. Cannot be negative. This # field is optional. # Corresponds to the JSON property `bucketSize` # @return [Float] attr_accessor :bucket_size # The position of the chart legend. # Corresponds to the JSON property `legendPosition` # @return [String] attr_accessor :legend_position # The outlier percentile is used to ensure that outliers do not adversely affect # the calculation of bucket sizes. For example, setting an outlier percentile of # 0.05 indicates that the top and bottom 5% of values when calculating buckets. # The values are still included in the chart, they will be added to the first or # last buckets instead of their own buckets. Must be between 0.0 and 0.5. # Corresponds to the JSON property `outlierPercentile` # @return [Float] attr_accessor :outlier_percentile # The series for a histogram may be either a single series of values to be # bucketed or multiple series, each of the same length, containing the name of # the series followed by the values to be bucketed for that series. # Corresponds to the JSON property `series` # @return [Array] attr_accessor :series # Whether horizontal divider lines should be displayed between items in each # column. # Corresponds to the JSON property `showItemDividers` # @return [Boolean] attr_accessor :show_item_dividers alias_method :show_item_dividers?, :show_item_dividers def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @bucket_size = args[:bucket_size] if args.key?(:bucket_size) @legend_position = args[:legend_position] if args.key?(:legend_position) @outlier_percentile = args[:outlier_percentile] if args.key?(:outlier_percentile) @series = args[:series] if args.key?(:series) @show_item_dividers = args[:show_item_dividers] if args.key?(:show_item_dividers) end end # Allows you to organize the numeric values in a source data column into buckets # of a constant size. All values from HistogramRule.start to HistogramRule.end # are placed into groups of size HistogramRule.interval. In addition, all values # below HistogramRule.start are placed in one group, and all values above # HistogramRule.end are placed in another. Only HistogramRule.interval is # required, though if HistogramRule.start and HistogramRule.end are both # provided, HistogramRule.start must be less than HistogramRule.end. For example, # a pivot table showing average purchase amount by age that has 50+ rows: +----- # +-------------------+ | Age | AVERAGE of Amount | +-----+-------------------+ | # 16 | $27.13 | | 17 | $5.24 | | 18 | $20.15 | ... +-----+-------------------+ # could be turned into a pivot table that looks like the one below by applying a # histogram group rule with a HistogramRule.start of 25, an HistogramRule. # interval of 20, and an HistogramRule.end of 65. +-------------+---------------- # ---+ | Grouped Age | AVERAGE of Amount | +-------------+-------------------+ | # < 25 | $19.34 | | 25-45 | $31.43 | | 45-65 | $35.87 | | > 65 | $27.55 | +------ # -------+-------------------+ | Grand Total | $29.12 | +-------------+---------- # ---------+ class HistogramRule include Google::Apis::Core::Hashable # The maximum value at which items are placed into buckets of constant size. # Values above end are lumped into a single bucket. This field is optional. # Corresponds to the JSON property `end` # @return [Float] attr_accessor :end # The size of the buckets that are created. Must be positive. # Corresponds to the JSON property `interval` # @return [Float] attr_accessor :interval # The minimum value at which items are placed into buckets of constant size. # Values below start are lumped into a single bucket. This field is optional. # Corresponds to the JSON property `start` # @return [Float] attr_accessor :start def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @end = args[:end] if args.key?(:end) @interval = args[:interval] if args.key?(:interval) @start = args[:start] if args.key?(:start) end end # A histogram series containing the series color and data. class HistogramSeries include Google::Apis::Core::Hashable # Represents a color in the RGBA color space. This representation is designed # for simplicity of conversion to/from color representations in various # languages over compactness; for example, the fields of this representation can # be trivially provided to the constructor of "java.awt.Color" in Java; it can # also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha" # method in iOS; and, with just a little work, it can be easily formatted into a # CSS "rgba()" string in JavaScript, as well. Note: this proto does not carry # information about the absolute color space that should be used to interpret # the RGB value (e.g. sRGB, Adobe RGB, DCI-P3, BT.2020, etc.). By default, # applications SHOULD assume the sRGB color space. Note: when color equality # needs to be decided, implementations, unless documented otherwise, will treat # two colors to be equal if all their red, green, blue and alpha values each # differ by at most 1e-5. Example (Java): import com.google.type.Color; // ... # public static java.awt.Color fromProto(Color protocolor) ` float alpha = # protocolor.hasAlpha() ? protocolor.getAlpha().getValue() : 1.0; return new # java.awt.Color( protocolor.getRed(), protocolor.getGreen(), protocolor.getBlue( # ), alpha); ` public static Color toProto(java.awt.Color color) ` float red = ( # float) color.getRed(); float green = (float) color.getGreen(); float blue = ( # float) color.getBlue(); float denominator = 255.0; Color.Builder resultBuilder # = Color .newBuilder() .setRed(red / denominator) .setGreen(green / denominator) # .setBlue(blue / denominator); int alpha = color.getAlpha(); if (alpha != 255) # ` result.setAlpha( FloatValue .newBuilder() .setValue(((float) alpha) / # denominator) .build()); ` return resultBuilder.build(); ` // ... Example (iOS / # Obj-C): // ... static UIColor* fromProto(Color* protocolor) ` float red = [ # protocolor red]; float green = [protocolor green]; float blue = [protocolor # blue]; FloatValue* alpha_wrapper = [protocolor alpha]; float alpha = 1.0; if ( # alpha_wrapper != nil) ` alpha = [alpha_wrapper value]; ` return [UIColor # colorWithRed:red green:green blue:blue alpha:alpha]; ` static Color* toProto( # UIColor* color) ` CGFloat red, green, blue, alpha; if (![color getRed:&red # green:&green blue:&blue alpha:&alpha]) ` return nil; ` Color* result = [[Color # alloc] init]; [result setRed:red]; [result setGreen:green]; [result setBlue: # blue]; if (alpha <= 0.9999) ` [result setAlpha:floatWrapperWithValue(alpha)]; ` # [result autorelease]; return result; ` // ... Example (JavaScript): // ... # var protoToCssColor = function(rgb_color) ` var redFrac = rgb_color.red || 0.0; # var greenFrac = rgb_color.green || 0.0; var blueFrac = rgb_color.blue || 0.0; # var red = Math.floor(redFrac * 255); var green = Math.floor(greenFrac * 255); # var blue = Math.floor(blueFrac * 255); if (!('alpha' in rgb_color)) ` return # rgbToCssColor_(red, green, blue); ` var alphaFrac = rgb_color.alpha.value || 0. # 0; var rgbParams = [red, green, blue].join(','); return ['rgba(', rgbParams, ', # ', alphaFrac, ')'].join(''); `; var rgbToCssColor_ = function(red, green, blue) # ` var rgbNumber = new Number((red << 16) | (green << 8) | blue); var # hexString = rgbNumber.toString(16); var missingZeros = 6 - hexString.length; # var resultBuilder = ['#']; for (var i = 0; i < missingZeros; i++) ` # resultBuilder.push('0'); ` resultBuilder.push(hexString); return resultBuilder. # join(''); `; // ... # Corresponds to the JSON property `barColor` # @return [Google::Apis::SheetsV4::Color] attr_accessor :bar_color # A color value. # Corresponds to the JSON property `barColorStyle` # @return [Google::Apis::SheetsV4::ColorStyle] attr_accessor :bar_color_style # The data included in a domain or series. # Corresponds to the JSON property `data` # @return [Google::Apis::SheetsV4::ChartData] attr_accessor :data def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @bar_color = args[:bar_color] if args.key?(:bar_color) @bar_color_style = args[:bar_color_style] if args.key?(:bar_color_style) @data = args[:data] if args.key?(:data) end end # Inserts rows or columns in a sheet at a particular index. class InsertDimensionRequest include Google::Apis::Core::Hashable # Whether dimension properties should be extended from the dimensions before or # after the newly inserted dimensions. True to inherit from the dimensions # before (in which case the start index must be greater than 0), and false to # inherit from the dimensions after. For example, if row index 0 has red # background and row index 1 has a green background, then inserting 2 rows at # index 1 can inherit either the green or red background. If `inheritFromBefore` # is true, the two new rows will be red (because the row before the insertion # point was red), whereas if `inheritFromBefore` is false, the two new rows will # be green (because the row after the insertion point was green). # Corresponds to the JSON property `inheritFromBefore` # @return [Boolean] attr_accessor :inherit_from_before alias_method :inherit_from_before?, :inherit_from_before # A range along a single dimension on a sheet. All indexes are zero-based. # Indexes are half open: the start index is inclusive and the end index is # exclusive. Missing indexes indicate the range is unbounded on that side. # Corresponds to the JSON property `range` # @return [Google::Apis::SheetsV4::DimensionRange] attr_accessor :range def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @inherit_from_before = args[:inherit_from_before] if args.key?(:inherit_from_before) @range = args[:range] if args.key?(:range) end end # Inserts cells into a range, shifting the existing cells over or down. class InsertRangeRequest include Google::Apis::Core::Hashable # A range on a sheet. All indexes are zero-based. Indexes are half open, i.e. # the start index is inclusive and the end index is exclusive -- [start_index, # end_index). Missing indexes indicate the range is unbounded on that side. For # example, if `"Sheet1"` is sheet ID 0, then: `Sheet1!A1:A1 == sheet_id: 0, # start_row_index: 0, end_row_index: 1, start_column_index: 0, end_column_index: # 1` `Sheet1!A3:B4 == sheet_id: 0, start_row_index: 2, end_row_index: 4, # start_column_index: 0, end_column_index: 2` `Sheet1!A:B == sheet_id: 0, # start_column_index: 0, end_column_index: 2` `Sheet1!A5:B == sheet_id: 0, # start_row_index: 4, start_column_index: 0, end_column_index: 2` `Sheet1 == # sheet_id:0` The start index must always be less than or equal to the end index. # If the start index equals the end index, then the range is empty. Empty # ranges are typically not meaningful and are usually rendered in the UI as `# # REF!`. # Corresponds to the JSON property `range` # @return [Google::Apis::SheetsV4::GridRange] attr_accessor :range # The dimension which will be shifted when inserting cells. If ROWS, existing # cells will be shifted down. If COLUMNS, existing cells will be shifted right. # Corresponds to the JSON property `shiftDimension` # @return [String] attr_accessor :shift_dimension def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @range = args[:range] if args.key?(:range) @shift_dimension = args[:shift_dimension] if args.key?(:shift_dimension) end end # A single interpolation point on a gradient conditional format. These pin the # gradient color scale according to the color, type and value chosen. class InterpolationPoint include Google::Apis::Core::Hashable # Represents a color in the RGBA color space. This representation is designed # for simplicity of conversion to/from color representations in various # languages over compactness; for example, the fields of this representation can # be trivially provided to the constructor of "java.awt.Color" in Java; it can # also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha" # method in iOS; and, with just a little work, it can be easily formatted into a # CSS "rgba()" string in JavaScript, as well. Note: this proto does not carry # information about the absolute color space that should be used to interpret # the RGB value (e.g. sRGB, Adobe RGB, DCI-P3, BT.2020, etc.). By default, # applications SHOULD assume the sRGB color space. Note: when color equality # needs to be decided, implementations, unless documented otherwise, will treat # two colors to be equal if all their red, green, blue and alpha values each # differ by at most 1e-5. Example (Java): import com.google.type.Color; // ... # public static java.awt.Color fromProto(Color protocolor) ` float alpha = # protocolor.hasAlpha() ? protocolor.getAlpha().getValue() : 1.0; return new # java.awt.Color( protocolor.getRed(), protocolor.getGreen(), protocolor.getBlue( # ), alpha); ` public static Color toProto(java.awt.Color color) ` float red = ( # float) color.getRed(); float green = (float) color.getGreen(); float blue = ( # float) color.getBlue(); float denominator = 255.0; Color.Builder resultBuilder # = Color .newBuilder() .setRed(red / denominator) .setGreen(green / denominator) # .setBlue(blue / denominator); int alpha = color.getAlpha(); if (alpha != 255) # ` result.setAlpha( FloatValue .newBuilder() .setValue(((float) alpha) / # denominator) .build()); ` return resultBuilder.build(); ` // ... Example (iOS / # Obj-C): // ... static UIColor* fromProto(Color* protocolor) ` float red = [ # protocolor red]; float green = [protocolor green]; float blue = [protocolor # blue]; FloatValue* alpha_wrapper = [protocolor alpha]; float alpha = 1.0; if ( # alpha_wrapper != nil) ` alpha = [alpha_wrapper value]; ` return [UIColor # colorWithRed:red green:green blue:blue alpha:alpha]; ` static Color* toProto( # UIColor* color) ` CGFloat red, green, blue, alpha; if (![color getRed:&red # green:&green blue:&blue alpha:&alpha]) ` return nil; ` Color* result = [[Color # alloc] init]; [result setRed:red]; [result setGreen:green]; [result setBlue: # blue]; if (alpha <= 0.9999) ` [result setAlpha:floatWrapperWithValue(alpha)]; ` # [result autorelease]; return result; ` // ... Example (JavaScript): // ... # var protoToCssColor = function(rgb_color) ` var redFrac = rgb_color.red || 0.0; # var greenFrac = rgb_color.green || 0.0; var blueFrac = rgb_color.blue || 0.0; # var red = Math.floor(redFrac * 255); var green = Math.floor(greenFrac * 255); # var blue = Math.floor(blueFrac * 255); if (!('alpha' in rgb_color)) ` return # rgbToCssColor_(red, green, blue); ` var alphaFrac = rgb_color.alpha.value || 0. # 0; var rgbParams = [red, green, blue].join(','); return ['rgba(', rgbParams, ', # ', alphaFrac, ')'].join(''); `; var rgbToCssColor_ = function(red, green, blue) # ` var rgbNumber = new Number((red << 16) | (green << 8) | blue); var # hexString = rgbNumber.toString(16); var missingZeros = 6 - hexString.length; # var resultBuilder = ['#']; for (var i = 0; i < missingZeros; i++) ` # resultBuilder.push('0'); ` resultBuilder.push(hexString); return resultBuilder. # join(''); `; // ... # Corresponds to the JSON property `color` # @return [Google::Apis::SheetsV4::Color] attr_accessor :color # A color value. # Corresponds to the JSON property `colorStyle` # @return [Google::Apis::SheetsV4::ColorStyle] attr_accessor :color_style # How the value should be interpreted. # Corresponds to the JSON property `type` # @return [String] attr_accessor :type # The value this interpolation point uses. May be a formula. Unused if type is # MIN or MAX. # Corresponds to the JSON property `value` # @return [String] attr_accessor :value def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @color = args[:color] if args.key?(:color) @color_style = args[:color_style] if args.key?(:color_style) @type = args[:type] if args.key?(:type) @value = args[:value] if args.key?(:value) end end # Represents a time interval, encoded as a Timestamp start (inclusive) and a # Timestamp end (exclusive). The start must be less than or equal to the end. # When the start equals the end, the interval is empty (matches no time). When # both start and end are unspecified, the interval matches any time. class Interval include Google::Apis::Core::Hashable # Optional. Exclusive end of the interval. If specified, a Timestamp matching # this interval will have to be before the end. # Corresponds to the JSON property `endTime` # @return [String] attr_accessor :end_time # Optional. Inclusive start of the interval. If specified, a Timestamp matching # this interval will have to be the same or after the start. # Corresponds to the JSON property `startTime` # @return [String] attr_accessor :start_time def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @end_time = args[:end_time] if args.key?(:end_time) @start_time = args[:start_time] if args.key?(:start_time) end end # Settings to control how circular dependencies are resolved with iterative # calculation. class IterativeCalculationSettings include Google::Apis::Core::Hashable # When iterative calculation is enabled and successive results differ by less # than this threshold value, the calculation rounds stop. # Corresponds to the JSON property `convergenceThreshold` # @return [Float] attr_accessor :convergence_threshold # When iterative calculation is enabled, the maximum number of calculation # rounds to perform. # Corresponds to the JSON property `maxIterations` # @return [Fixnum] attr_accessor :max_iterations def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @convergence_threshold = args[:convergence_threshold] if args.key?(:convergence_threshold) @max_iterations = args[:max_iterations] if args.key?(:max_iterations) end end # Formatting options for key value. class KeyValueFormat include Google::Apis::Core::Hashable # Position settings for text. # Corresponds to the JSON property `position` # @return [Google::Apis::SheetsV4::TextPosition] attr_accessor :position # The format of a run of text in a cell. Absent values indicate that the field # isn't specified. # Corresponds to the JSON property `textFormat` # @return [Google::Apis::SheetsV4::TextFormat] attr_accessor :text_format def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @position = args[:position] if args.key?(:position) @text_format = args[:text_format] if args.key?(:text_format) end end # Properties that describe the style of a line. class LineStyle include Google::Apis::Core::Hashable # The dash type of the line. # Corresponds to the JSON property `type` # @return [String] attr_accessor :type # The thickness of the line, in px. # Corresponds to the JSON property `width` # @return [Fixnum] attr_accessor :width def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @type = args[:type] if args.key?(:type) @width = args[:width] if args.key?(:width) end end # Allows you to manually organize the values in a source data column into # buckets with names of your choosing. For example, a pivot table that # aggregates population by state: +-------+-------------------+ | State | SUM of # Population | +-------+-------------------+ | AK | 0.7 | | AL | 4.8 | | AR | 2. # 9 | ... +-------+-------------------+ could be turned into a pivot table that # aggregates population by time zone by providing a list of groups (for example, # groupName = 'Central', items = ['AL', 'AR', 'IA', ...]) to a manual group rule. # Note that a similar effect could be achieved by adding a time zone column to # the source data and adjusting the pivot table. +-----------+------------------- # + | Time Zone | SUM of Population | +-----------+-------------------+ | # Central | 106.3 | | Eastern | 151.9 | | Mountain | 17.4 | ... +-----------+---- # ---------------+ class ManualRule include Google::Apis::Core::Hashable # The list of group names and the corresponding items from the source data that # map to each group name. # Corresponds to the JSON property `groups` # @return [Array] attr_accessor :groups def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @groups = args[:groups] if args.key?(:groups) end end # A group name and a list of items from the source data that should be placed in # the group with this name. class ManualRuleGroup include Google::Apis::Core::Hashable # The kinds of value that a cell in a spreadsheet can have. # Corresponds to the JSON property `groupName` # @return [Google::Apis::SheetsV4::ExtendedValue] attr_accessor :group_name # The items in the source data that should be placed into this group. Each item # may be a string, number, or boolean. Items may appear in at most one group # within a given ManualRule. Items that do not appear in any group will appear # on their own. # Corresponds to the JSON property `items` # @return [Array] attr_accessor :items def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @group_name = args[:group_name] if args.key?(:group_name) @items = args[:items] if args.key?(:items) end end # A developer metadata entry and the data filters specified in the original # request that matched it. class MatchedDeveloperMetadata include Google::Apis::Core::Hashable # All filters matching the returned developer metadata. # Corresponds to the JSON property `dataFilters` # @return [Array] attr_accessor :data_filters # Developer metadata associated with a location or object in a spreadsheet. # Developer metadata may be used to associate arbitrary data with various parts # of a spreadsheet and will remain associated at those locations as they move # around and the spreadsheet is edited. For example, if developer metadata is # associated with row 5 and another row is then subsequently inserted above row # 5, that original metadata will still be associated with the row it was first # associated with (what is now row 6). If the associated object is deleted its # metadata is deleted too. # Corresponds to the JSON property `developerMetadata` # @return [Google::Apis::SheetsV4::DeveloperMetadata] attr_accessor :developer_metadata def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @data_filters = args[:data_filters] if args.key?(:data_filters) @developer_metadata = args[:developer_metadata] if args.key?(:developer_metadata) end end # A value range that was matched by one or more data filers. class MatchedValueRange include Google::Apis::Core::Hashable # The DataFilters from the request that matched the range of values. # Corresponds to the JSON property `dataFilters` # @return [Array] attr_accessor :data_filters # Data within a range of the spreadsheet. # Corresponds to the JSON property `valueRange` # @return [Google::Apis::SheetsV4::ValueRange] attr_accessor :value_range def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @data_filters = args[:data_filters] if args.key?(:data_filters) @value_range = args[:value_range] if args.key?(:value_range) end end # Merges all cells in the range. class MergeCellsRequest include Google::Apis::Core::Hashable # How the cells should be merged. # Corresponds to the JSON property `mergeType` # @return [String] attr_accessor :merge_type # A range on a sheet. All indexes are zero-based. Indexes are half open, i.e. # the start index is inclusive and the end index is exclusive -- [start_index, # end_index). Missing indexes indicate the range is unbounded on that side. For # example, if `"Sheet1"` is sheet ID 0, then: `Sheet1!A1:A1 == sheet_id: 0, # start_row_index: 0, end_row_index: 1, start_column_index: 0, end_column_index: # 1` `Sheet1!A3:B4 == sheet_id: 0, start_row_index: 2, end_row_index: 4, # start_column_index: 0, end_column_index: 2` `Sheet1!A:B == sheet_id: 0, # start_column_index: 0, end_column_index: 2` `Sheet1!A5:B == sheet_id: 0, # start_row_index: 4, start_column_index: 0, end_column_index: 2` `Sheet1 == # sheet_id:0` The start index must always be less than or equal to the end index. # If the start index equals the end index, then the range is empty. Empty # ranges are typically not meaningful and are usually rendered in the UI as `# # REF!`. # Corresponds to the JSON property `range` # @return [Google::Apis::SheetsV4::GridRange] attr_accessor :range def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @merge_type = args[:merge_type] if args.key?(:merge_type) @range = args[:range] if args.key?(:range) end end # Moves one or more rows or columns. class MoveDimensionRequest include Google::Apis::Core::Hashable # The zero-based start index of where to move the source data to, based on the # coordinates *before* the source data is removed from the grid. Existing data # will be shifted down or right (depending on the dimension) to make room for # the moved dimensions. The source dimensions are removed from the grid, so the # the data may end up in a different index than specified. For example, given ` # A1..A5` of `0, 1, 2, 3, 4` and wanting to move `"1"` and `"2"` to between `"3"` # and `"4"`, the source would be `ROWS [1..3)`,and the destination index would # be `"4"` (the zero-based index of row 5). The end result would be `A1..A5` of ` # 0, 3, 1, 2, 4`. # Corresponds to the JSON property `destinationIndex` # @return [Fixnum] attr_accessor :destination_index # A range along a single dimension on a sheet. All indexes are zero-based. # Indexes are half open: the start index is inclusive and the end index is # exclusive. Missing indexes indicate the range is unbounded on that side. # Corresponds to the JSON property `source` # @return [Google::Apis::SheetsV4::DimensionRange] attr_accessor :source def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @destination_index = args[:destination_index] if args.key?(:destination_index) @source = args[:source] if args.key?(:source) end end # A named range. class NamedRange include Google::Apis::Core::Hashable # The name of the named range. # Corresponds to the JSON property `name` # @return [String] attr_accessor :name # The ID of the named range. # Corresponds to the JSON property `namedRangeId` # @return [String] attr_accessor :named_range_id # A range on a sheet. All indexes are zero-based. Indexes are half open, i.e. # the start index is inclusive and the end index is exclusive -- [start_index, # end_index). Missing indexes indicate the range is unbounded on that side. For # example, if `"Sheet1"` is sheet ID 0, then: `Sheet1!A1:A1 == sheet_id: 0, # start_row_index: 0, end_row_index: 1, start_column_index: 0, end_column_index: # 1` `Sheet1!A3:B4 == sheet_id: 0, start_row_index: 2, end_row_index: 4, # start_column_index: 0, end_column_index: 2` `Sheet1!A:B == sheet_id: 0, # start_column_index: 0, end_column_index: 2` `Sheet1!A5:B == sheet_id: 0, # start_row_index: 4, start_column_index: 0, end_column_index: 2` `Sheet1 == # sheet_id:0` The start index must always be less than or equal to the end index. # If the start index equals the end index, then the range is empty. Empty # ranges are typically not meaningful and are usually rendered in the UI as `# # REF!`. # Corresponds to the JSON property `range` # @return [Google::Apis::SheetsV4::GridRange] attr_accessor :range def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @name = args[:name] if args.key?(:name) @named_range_id = args[:named_range_id] if args.key?(:named_range_id) @range = args[:range] if args.key?(:range) end end # The number format of a cell. class NumberFormat include Google::Apis::Core::Hashable # Pattern string used for formatting. If not set, a default pattern based on the # user's locale will be used if necessary for the given type. See the [Date and # Number Formats guide](/sheets/api/guides/formats) for more information about # the supported patterns. # Corresponds to the JSON property `pattern` # @return [String] attr_accessor :pattern # The type of the number format. When writing, this field must be set. # Corresponds to the JSON property `type` # @return [String] attr_accessor :type def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @pattern = args[:pattern] if args.key?(:pattern) @type = args[:type] if args.key?(:type) end end # An org chart. Org charts require a unique set of labels in labels and may # optionally include parent_labels and tooltips. parent_labels contain, for each # node, the label identifying the parent node. tooltips contain, for each node, # an optional tooltip. For example, to describe an OrgChart with Alice as the # CEO, Bob as the President (reporting to Alice) and Cathy as VP of Sales (also # reporting to Alice), have labels contain "Alice", "Bob", "Cathy", # parent_labels contain "", "Alice", "Alice" and tooltips contain "CEO", " # President", "VP Sales". class OrgChartSpec include Google::Apis::Core::Hashable # The data included in a domain or series. # Corresponds to the JSON property `labels` # @return [Google::Apis::SheetsV4::ChartData] attr_accessor :labels # Represents a color in the RGBA color space. This representation is designed # for simplicity of conversion to/from color representations in various # languages over compactness; for example, the fields of this representation can # be trivially provided to the constructor of "java.awt.Color" in Java; it can # also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha" # method in iOS; and, with just a little work, it can be easily formatted into a # CSS "rgba()" string in JavaScript, as well. Note: this proto does not carry # information about the absolute color space that should be used to interpret # the RGB value (e.g. sRGB, Adobe RGB, DCI-P3, BT.2020, etc.). By default, # applications SHOULD assume the sRGB color space. Note: when color equality # needs to be decided, implementations, unless documented otherwise, will treat # two colors to be equal if all their red, green, blue and alpha values each # differ by at most 1e-5. Example (Java): import com.google.type.Color; // ... # public static java.awt.Color fromProto(Color protocolor) ` float alpha = # protocolor.hasAlpha() ? protocolor.getAlpha().getValue() : 1.0; return new # java.awt.Color( protocolor.getRed(), protocolor.getGreen(), protocolor.getBlue( # ), alpha); ` public static Color toProto(java.awt.Color color) ` float red = ( # float) color.getRed(); float green = (float) color.getGreen(); float blue = ( # float) color.getBlue(); float denominator = 255.0; Color.Builder resultBuilder # = Color .newBuilder() .setRed(red / denominator) .setGreen(green / denominator) # .setBlue(blue / denominator); int alpha = color.getAlpha(); if (alpha != 255) # ` result.setAlpha( FloatValue .newBuilder() .setValue(((float) alpha) / # denominator) .build()); ` return resultBuilder.build(); ` // ... Example (iOS / # Obj-C): // ... static UIColor* fromProto(Color* protocolor) ` float red = [ # protocolor red]; float green = [protocolor green]; float blue = [protocolor # blue]; FloatValue* alpha_wrapper = [protocolor alpha]; float alpha = 1.0; if ( # alpha_wrapper != nil) ` alpha = [alpha_wrapper value]; ` return [UIColor # colorWithRed:red green:green blue:blue alpha:alpha]; ` static Color* toProto( # UIColor* color) ` CGFloat red, green, blue, alpha; if (![color getRed:&red # green:&green blue:&blue alpha:&alpha]) ` return nil; ` Color* result = [[Color # alloc] init]; [result setRed:red]; [result setGreen:green]; [result setBlue: # blue]; if (alpha <= 0.9999) ` [result setAlpha:floatWrapperWithValue(alpha)]; ` # [result autorelease]; return result; ` // ... Example (JavaScript): // ... # var protoToCssColor = function(rgb_color) ` var redFrac = rgb_color.red || 0.0; # var greenFrac = rgb_color.green || 0.0; var blueFrac = rgb_color.blue || 0.0; # var red = Math.floor(redFrac * 255); var green = Math.floor(greenFrac * 255); # var blue = Math.floor(blueFrac * 255); if (!('alpha' in rgb_color)) ` return # rgbToCssColor_(red, green, blue); ` var alphaFrac = rgb_color.alpha.value || 0. # 0; var rgbParams = [red, green, blue].join(','); return ['rgba(', rgbParams, ', # ', alphaFrac, ')'].join(''); `; var rgbToCssColor_ = function(red, green, blue) # ` var rgbNumber = new Number((red << 16) | (green << 8) | blue); var # hexString = rgbNumber.toString(16); var missingZeros = 6 - hexString.length; # var resultBuilder = ['#']; for (var i = 0; i < missingZeros; i++) ` # resultBuilder.push('0'); ` resultBuilder.push(hexString); return resultBuilder. # join(''); `; // ... # Corresponds to the JSON property `nodeColor` # @return [Google::Apis::SheetsV4::Color] attr_accessor :node_color # A color value. # Corresponds to the JSON property `nodeColorStyle` # @return [Google::Apis::SheetsV4::ColorStyle] attr_accessor :node_color_style # The size of the org chart nodes. # Corresponds to the JSON property `nodeSize` # @return [String] attr_accessor :node_size # The data included in a domain or series. # Corresponds to the JSON property `parentLabels` # @return [Google::Apis::SheetsV4::ChartData] attr_accessor :parent_labels # Represents a color in the RGBA color space. This representation is designed # for simplicity of conversion to/from color representations in various # languages over compactness; for example, the fields of this representation can # be trivially provided to the constructor of "java.awt.Color" in Java; it can # also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha" # method in iOS; and, with just a little work, it can be easily formatted into a # CSS "rgba()" string in JavaScript, as well. Note: this proto does not carry # information about the absolute color space that should be used to interpret # the RGB value (e.g. sRGB, Adobe RGB, DCI-P3, BT.2020, etc.). By default, # applications SHOULD assume the sRGB color space. Note: when color equality # needs to be decided, implementations, unless documented otherwise, will treat # two colors to be equal if all their red, green, blue and alpha values each # differ by at most 1e-5. Example (Java): import com.google.type.Color; // ... # public static java.awt.Color fromProto(Color protocolor) ` float alpha = # protocolor.hasAlpha() ? protocolor.getAlpha().getValue() : 1.0; return new # java.awt.Color( protocolor.getRed(), protocolor.getGreen(), protocolor.getBlue( # ), alpha); ` public static Color toProto(java.awt.Color color) ` float red = ( # float) color.getRed(); float green = (float) color.getGreen(); float blue = ( # float) color.getBlue(); float denominator = 255.0; Color.Builder resultBuilder # = Color .newBuilder() .setRed(red / denominator) .setGreen(green / denominator) # .setBlue(blue / denominator); int alpha = color.getAlpha(); if (alpha != 255) # ` result.setAlpha( FloatValue .newBuilder() .setValue(((float) alpha) / # denominator) .build()); ` return resultBuilder.build(); ` // ... Example (iOS / # Obj-C): // ... static UIColor* fromProto(Color* protocolor) ` float red = [ # protocolor red]; float green = [protocolor green]; float blue = [protocolor # blue]; FloatValue* alpha_wrapper = [protocolor alpha]; float alpha = 1.0; if ( # alpha_wrapper != nil) ` alpha = [alpha_wrapper value]; ` return [UIColor # colorWithRed:red green:green blue:blue alpha:alpha]; ` static Color* toProto( # UIColor* color) ` CGFloat red, green, blue, alpha; if (![color getRed:&red # green:&green blue:&blue alpha:&alpha]) ` return nil; ` Color* result = [[Color # alloc] init]; [result setRed:red]; [result setGreen:green]; [result setBlue: # blue]; if (alpha <= 0.9999) ` [result setAlpha:floatWrapperWithValue(alpha)]; ` # [result autorelease]; return result; ` // ... Example (JavaScript): // ... # var protoToCssColor = function(rgb_color) ` var redFrac = rgb_color.red || 0.0; # var greenFrac = rgb_color.green || 0.0; var blueFrac = rgb_color.blue || 0.0; # var red = Math.floor(redFrac * 255); var green = Math.floor(greenFrac * 255); # var blue = Math.floor(blueFrac * 255); if (!('alpha' in rgb_color)) ` return # rgbToCssColor_(red, green, blue); ` var alphaFrac = rgb_color.alpha.value || 0. # 0; var rgbParams = [red, green, blue].join(','); return ['rgba(', rgbParams, ', # ', alphaFrac, ')'].join(''); `; var rgbToCssColor_ = function(red, green, blue) # ` var rgbNumber = new Number((red << 16) | (green << 8) | blue); var # hexString = rgbNumber.toString(16); var missingZeros = 6 - hexString.length; # var resultBuilder = ['#']; for (var i = 0; i < missingZeros; i++) ` # resultBuilder.push('0'); ` resultBuilder.push(hexString); return resultBuilder. # join(''); `; // ... # Corresponds to the JSON property `selectedNodeColor` # @return [Google::Apis::SheetsV4::Color] attr_accessor :selected_node_color # A color value. # Corresponds to the JSON property `selectedNodeColorStyle` # @return [Google::Apis::SheetsV4::ColorStyle] attr_accessor :selected_node_color_style # The data included in a domain or series. # Corresponds to the JSON property `tooltips` # @return [Google::Apis::SheetsV4::ChartData] attr_accessor :tooltips def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @labels = args[:labels] if args.key?(:labels) @node_color = args[:node_color] if args.key?(:node_color) @node_color_style = args[:node_color_style] if args.key?(:node_color_style) @node_size = args[:node_size] if args.key?(:node_size) @parent_labels = args[:parent_labels] if args.key?(:parent_labels) @selected_node_color = args[:selected_node_color] if args.key?(:selected_node_color) @selected_node_color_style = args[:selected_node_color_style] if args.key?(:selected_node_color_style) @tooltips = args[:tooltips] if args.key?(:tooltips) end end # The location an object is overlaid on top of a grid. class OverlayPosition include Google::Apis::Core::Hashable # A coordinate in a sheet. All indexes are zero-based. # Corresponds to the JSON property `anchorCell` # @return [Google::Apis::SheetsV4::GridCoordinate] attr_accessor :anchor_cell # The height of the object, in pixels. Defaults to 371. # Corresponds to the JSON property `heightPixels` # @return [Fixnum] attr_accessor :height_pixels # The horizontal offset, in pixels, that the object is offset from the anchor # cell. # Corresponds to the JSON property `offsetXPixels` # @return [Fixnum] attr_accessor :offset_x_pixels # The vertical offset, in pixels, that the object is offset from the anchor cell. # Corresponds to the JSON property `offsetYPixels` # @return [Fixnum] attr_accessor :offset_y_pixels # The width of the object, in pixels. Defaults to 600. # Corresponds to the JSON property `widthPixels` # @return [Fixnum] attr_accessor :width_pixels def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @anchor_cell = args[:anchor_cell] if args.key?(:anchor_cell) @height_pixels = args[:height_pixels] if args.key?(:height_pixels) @offset_x_pixels = args[:offset_x_pixels] if args.key?(:offset_x_pixels) @offset_y_pixels = args[:offset_y_pixels] if args.key?(:offset_y_pixels) @width_pixels = args[:width_pixels] if args.key?(:width_pixels) end end # The amount of padding around the cell, in pixels. When updating padding, every # field must be specified. class Padding include Google::Apis::Core::Hashable # The bottom padding of the cell. # Corresponds to the JSON property `bottom` # @return [Fixnum] attr_accessor :bottom # The left padding of the cell. # Corresponds to the JSON property `left` # @return [Fixnum] attr_accessor :left # The right padding of the cell. # Corresponds to the JSON property `right` # @return [Fixnum] attr_accessor :right # The top padding of the cell. # Corresponds to the JSON property `top` # @return [Fixnum] attr_accessor :top def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @bottom = args[:bottom] if args.key?(:bottom) @left = args[:left] if args.key?(:left) @right = args[:right] if args.key?(:right) @top = args[:top] if args.key?(:top) end end # Inserts data into the spreadsheet starting at the specified coordinate. class PasteDataRequest include Google::Apis::Core::Hashable # A coordinate in a sheet. All indexes are zero-based. # Corresponds to the JSON property `coordinate` # @return [Google::Apis::SheetsV4::GridCoordinate] attr_accessor :coordinate # The data to insert. # Corresponds to the JSON property `data` # @return [String] attr_accessor :data # The delimiter in the data. # Corresponds to the JSON property `delimiter` # @return [String] attr_accessor :delimiter # True if the data is HTML. # Corresponds to the JSON property `html` # @return [Boolean] attr_accessor :html alias_method :html?, :html # How the data should be pasted. # Corresponds to the JSON property `type` # @return [String] attr_accessor :type def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @coordinate = args[:coordinate] if args.key?(:coordinate) @data = args[:data] if args.key?(:data) @delimiter = args[:delimiter] if args.key?(:delimiter) @html = args[:html] if args.key?(:html) @type = args[:type] if args.key?(:type) end end # A pie chart. class PieChartSpec include Google::Apis::Core::Hashable # The data included in a domain or series. # Corresponds to the JSON property `domain` # @return [Google::Apis::SheetsV4::ChartData] attr_accessor :domain # Where the legend of the pie chart should be drawn. # Corresponds to the JSON property `legendPosition` # @return [String] attr_accessor :legend_position # The size of the hole in the pie chart. # Corresponds to the JSON property `pieHole` # @return [Float] attr_accessor :pie_hole # The data included in a domain or series. # Corresponds to the JSON property `series` # @return [Google::Apis::SheetsV4::ChartData] attr_accessor :series # True if the pie is three dimensional. # Corresponds to the JSON property `threeDimensional` # @return [Boolean] attr_accessor :three_dimensional alias_method :three_dimensional?, :three_dimensional def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @domain = args[:domain] if args.key?(:domain) @legend_position = args[:legend_position] if args.key?(:legend_position) @pie_hole = args[:pie_hole] if args.key?(:pie_hole) @series = args[:series] if args.key?(:series) @three_dimensional = args[:three_dimensional] if args.key?(:three_dimensional) end end # Criteria for showing/hiding rows in a pivot table. class PivotFilterCriteria include Google::Apis::Core::Hashable # A condition that can evaluate to true or false. BooleanConditions are used by # conditional formatting, data validation, and the criteria in filters. # Corresponds to the JSON property `condition` # @return [Google::Apis::SheetsV4::BooleanCondition] attr_accessor :condition # Whether values are visible by default. If true, the visible_values are ignored, # all values that meet condition (if specified) are shown. If false, values # that are both in visible_values and meet condition are shown. # Corresponds to the JSON property `visibleByDefault` # @return [Boolean] attr_accessor :visible_by_default alias_method :visible_by_default?, :visible_by_default # Values that should be included. Values not listed here are excluded. # Corresponds to the JSON property `visibleValues` # @return [Array] attr_accessor :visible_values def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @condition = args[:condition] if args.key?(:condition) @visible_by_default = args[:visible_by_default] if args.key?(:visible_by_default) @visible_values = args[:visible_values] if args.key?(:visible_values) end end # The pivot table filter criteria associated with a specific source column # offset. class PivotFilterSpec include Google::Apis::Core::Hashable # The column offset of the source range. # Corresponds to the JSON property `columnOffsetIndex` # @return [Fixnum] attr_accessor :column_offset_index # An unique identifier that references a data source column. # Corresponds to the JSON property `dataSourceColumnReference` # @return [Google::Apis::SheetsV4::DataSourceColumnReference] attr_accessor :data_source_column_reference # Criteria for showing/hiding rows in a pivot table. # Corresponds to the JSON property `filterCriteria` # @return [Google::Apis::SheetsV4::PivotFilterCriteria] attr_accessor :filter_criteria def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @column_offset_index = args[:column_offset_index] if args.key?(:column_offset_index) @data_source_column_reference = args[:data_source_column_reference] if args.key?(:data_source_column_reference) @filter_criteria = args[:filter_criteria] if args.key?(:filter_criteria) end end # A single grouping (either row or column) in a pivot table. class PivotGroup include Google::Apis::Core::Hashable # An unique identifier that references a data source column. # Corresponds to the JSON property `dataSourceColumnReference` # @return [Google::Apis::SheetsV4::DataSourceColumnReference] attr_accessor :data_source_column_reference # The count limit on rows or columns in the pivot group. # Corresponds to the JSON property `groupLimit` # @return [Google::Apis::SheetsV4::PivotGroupLimit] attr_accessor :group_limit # An optional setting on a PivotGroup that defines buckets for the values in the # source data column rather than breaking out each individual value. Only one # PivotGroup with a group rule may be added for each column in the source data, # though on any given column you may add both a PivotGroup that has a rule and a # PivotGroup that does not. # Corresponds to the JSON property `groupRule` # @return [Google::Apis::SheetsV4::PivotGroupRule] attr_accessor :group_rule # The labels to use for the row/column groups which can be customized. For # example, in the following pivot table, the row label is `Region` (which could # be renamed to `State`) and the column label is `Product` (which could be # renamed `Item`). Pivot tables created before December 2017 do not have header # labels. If you'd like to add header labels to an existing pivot table, please # delete the existing pivot table and then create a new pivot table with same # parameters. +--------------+---------+-------+ | SUM of Units | Product | | | # Region | Pen | Paper | +--------------+---------+-------+ | New York | 345 | # 98 | | Oregon | 234 | 123 | | Tennessee | 531 | 415 | +--------------+--------- # +-------+ | Grand Total | 1110 | 636 | +--------------+---------+-------+ # Corresponds to the JSON property `label` # @return [String] attr_accessor :label # True if the headings in this pivot group should be repeated. This is only # valid for row groupings and is ignored by columns. By default, we minimize # repitition of headings by not showing higher level headings where they are the # same. For example, even though the third row below corresponds to "Q1 Mar", " # Q1" is not shown because it is redundant with previous rows. Setting # repeat_headings to true would cause "Q1" to be repeated for "Feb" and "Mar". +- # -------------+ | Q1 | Jan | | | Feb | | | Mar | +--------+-----+ | Q1 Total | + # --------------+ # Corresponds to the JSON property `repeatHeadings` # @return [Boolean] attr_accessor :repeat_headings alias_method :repeat_headings?, :repeat_headings # True if the pivot table should include the totals for this grouping. # Corresponds to the JSON property `showTotals` # @return [Boolean] attr_accessor :show_totals alias_method :show_totals?, :show_totals # The order the values in this group should be sorted. # Corresponds to the JSON property `sortOrder` # @return [String] attr_accessor :sort_order # The column offset of the source range that this grouping is based on. For # example, if the source was `C10:E15`, a `sourceColumnOffset` of `0` means this # group refers to column `C`, whereas the offset `1` would refer to column `D`. # Corresponds to the JSON property `sourceColumnOffset` # @return [Fixnum] attr_accessor :source_column_offset # Information about which values in a pivot group should be used for sorting. # Corresponds to the JSON property `valueBucket` # @return [Google::Apis::SheetsV4::PivotGroupSortValueBucket] attr_accessor :value_bucket # Metadata about values in the grouping. # Corresponds to the JSON property `valueMetadata` # @return [Array] attr_accessor :value_metadata def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @data_source_column_reference = args[:data_source_column_reference] if args.key?(:data_source_column_reference) @group_limit = args[:group_limit] if args.key?(:group_limit) @group_rule = args[:group_rule] if args.key?(:group_rule) @label = args[:label] if args.key?(:label) @repeat_headings = args[:repeat_headings] if args.key?(:repeat_headings) @show_totals = args[:show_totals] if args.key?(:show_totals) @sort_order = args[:sort_order] if args.key?(:sort_order) @source_column_offset = args[:source_column_offset] if args.key?(:source_column_offset) @value_bucket = args[:value_bucket] if args.key?(:value_bucket) @value_metadata = args[:value_metadata] if args.key?(:value_metadata) end end # The count limit on rows or columns in the pivot group. class PivotGroupLimit include Google::Apis::Core::Hashable # The order in which the group limit is applied to the pivot table. Pivot group # limits are applied from lower to higher order number. Order numbers are # normalized to consecutive integers from 0. For write request, to fully # customize the applying orders, all pivot group limits should have this field # set with an unique number. Otherwise, the order is determined by the index in # the PivotTable.rows list and then the PivotTable.columns list. # Corresponds to the JSON property `applyOrder` # @return [Fixnum] attr_accessor :apply_order # The count limit. # Corresponds to the JSON property `countLimit` # @return [Fixnum] attr_accessor :count_limit def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @apply_order = args[:apply_order] if args.key?(:apply_order) @count_limit = args[:count_limit] if args.key?(:count_limit) end end # An optional setting on a PivotGroup that defines buckets for the values in the # source data column rather than breaking out each individual value. Only one # PivotGroup with a group rule may be added for each column in the source data, # though on any given column you may add both a PivotGroup that has a rule and a # PivotGroup that does not. class PivotGroupRule include Google::Apis::Core::Hashable # Allows you to organize the date-time values in a source data column into # buckets based on selected parts of their date or time values. For example, # consider a pivot table showing sales transactions by date: +----------+-------- # ------+ | Date | SUM of Sales | +----------+--------------+ | 1/1/2017 | $621. # 14 | | 2/3/2017 | $708.84 | | 5/8/2017 | $326.84 | ... +----------+------------ # --+ Applying a date-time group rule with a DateTimeRuleType of YEAR_MONTH # results in the following pivot table. +--------------+--------------+ | # Grouped Date | SUM of Sales | +--------------+--------------+ | 2017-Jan | $53, # 731.78 | | 2017-Feb | $83,475.32 | | 2017-Mar | $94,385.05 | ... +------------- # -+--------------+ # Corresponds to the JSON property `dateTimeRule` # @return [Google::Apis::SheetsV4::DateTimeRule] attr_accessor :date_time_rule # Allows you to organize the numeric values in a source data column into buckets # of a constant size. All values from HistogramRule.start to HistogramRule.end # are placed into groups of size HistogramRule.interval. In addition, all values # below HistogramRule.start are placed in one group, and all values above # HistogramRule.end are placed in another. Only HistogramRule.interval is # required, though if HistogramRule.start and HistogramRule.end are both # provided, HistogramRule.start must be less than HistogramRule.end. For example, # a pivot table showing average purchase amount by age that has 50+ rows: +----- # +-------------------+ | Age | AVERAGE of Amount | +-----+-------------------+ | # 16 | $27.13 | | 17 | $5.24 | | 18 | $20.15 | ... +-----+-------------------+ # could be turned into a pivot table that looks like the one below by applying a # histogram group rule with a HistogramRule.start of 25, an HistogramRule. # interval of 20, and an HistogramRule.end of 65. +-------------+---------------- # ---+ | Grouped Age | AVERAGE of Amount | +-------------+-------------------+ | # < 25 | $19.34 | | 25-45 | $31.43 | | 45-65 | $35.87 | | > 65 | $27.55 | +------ # -------+-------------------+ | Grand Total | $29.12 | +-------------+---------- # ---------+ # Corresponds to the JSON property `histogramRule` # @return [Google::Apis::SheetsV4::HistogramRule] attr_accessor :histogram_rule # Allows you to manually organize the values in a source data column into # buckets with names of your choosing. For example, a pivot table that # aggregates population by state: +-------+-------------------+ | State | SUM of # Population | +-------+-------------------+ | AK | 0.7 | | AL | 4.8 | | AR | 2. # 9 | ... +-------+-------------------+ could be turned into a pivot table that # aggregates population by time zone by providing a list of groups (for example, # groupName = 'Central', items = ['AL', 'AR', 'IA', ...]) to a manual group rule. # Note that a similar effect could be achieved by adding a time zone column to # the source data and adjusting the pivot table. +-----------+------------------- # + | Time Zone | SUM of Population | +-----------+-------------------+ | # Central | 106.3 | | Eastern | 151.9 | | Mountain | 17.4 | ... +-----------+---- # ---------------+ # Corresponds to the JSON property `manualRule` # @return [Google::Apis::SheetsV4::ManualRule] attr_accessor :manual_rule def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @date_time_rule = args[:date_time_rule] if args.key?(:date_time_rule) @histogram_rule = args[:histogram_rule] if args.key?(:histogram_rule) @manual_rule = args[:manual_rule] if args.key?(:manual_rule) end end # Information about which values in a pivot group should be used for sorting. class PivotGroupSortValueBucket include Google::Apis::Core::Hashable # Determines the bucket from which values are chosen to sort. For example, in a # pivot table with one row group & two column groups, the row group can list up # to two values. The first value corresponds to a value within the first column # group, and the second value corresponds to a value in the second column group. # If no values are listed, this would indicate that the row should be sorted # according to the "Grand Total" over the column groups. If a single value is # listed, this would correspond to using the "Total" of that bucket. # Corresponds to the JSON property `buckets` # @return [Array] attr_accessor :buckets # The offset in the PivotTable.values list which the values in this grouping # should be sorted by. # Corresponds to the JSON property `valuesIndex` # @return [Fixnum] attr_accessor :values_index def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @buckets = args[:buckets] if args.key?(:buckets) @values_index = args[:values_index] if args.key?(:values_index) end end # Metadata about a value in a pivot grouping. class PivotGroupValueMetadata include Google::Apis::Core::Hashable # True if the data corresponding to the value is collapsed. # Corresponds to the JSON property `collapsed` # @return [Boolean] attr_accessor :collapsed alias_method :collapsed?, :collapsed # The kinds of value that a cell in a spreadsheet can have. # Corresponds to the JSON property `value` # @return [Google::Apis::SheetsV4::ExtendedValue] attr_accessor :value def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @collapsed = args[:collapsed] if args.key?(:collapsed) @value = args[:value] if args.key?(:value) end end # A pivot table. class PivotTable include Google::Apis::Core::Hashable # Each column grouping in the pivot table. # Corresponds to the JSON property `columns` # @return [Array] attr_accessor :columns # An optional mapping of filters per source column offset. The filters are # applied before aggregating data into the pivot table. The map's key is the # column offset of the source range that you want to filter, and the value is # the criteria for that column. For example, if the source was `C10:E15`, a key # of `0` will have the filter for column `C`, whereas the key `1` is for column ` # D`. This field is deprecated in favor of filter_specs. # Corresponds to the JSON property `criteria` # @return [Hash] attr_accessor :criteria # The data execution status. A data execution is created to sync a data source # object with the latest data from a DataSource. It is usually scheduled to run # at background, you can check its state to tell if an execution completes There # are several scenarios where a data execution is triggered to run: * Adding a # data source creates an associated data source sheet as well as a data # execution to sync the data from the data source to the sheet. * Updating a # data source creates a data execution to refresh the associated data source # sheet similarly. * You can send refresh request to explicitly refresh one or # multiple data source objects. # Corresponds to the JSON property `dataExecutionStatus` # @return [Google::Apis::SheetsV4::DataExecutionStatus] attr_accessor :data_execution_status # The ID of the data source the pivot table is reading data from. # Corresponds to the JSON property `dataSourceId` # @return [String] attr_accessor :data_source_id # The filters applied to the source columns before aggregating data for the # pivot table. Both criteria and filter_specs are populated in responses. If # both fields are specified in an update request, this field takes precedence. # Corresponds to the JSON property `filterSpecs` # @return [Array] attr_accessor :filter_specs # Each row grouping in the pivot table. # Corresponds to the JSON property `rows` # @return [Array] attr_accessor :rows # A range on a sheet. All indexes are zero-based. Indexes are half open, i.e. # the start index is inclusive and the end index is exclusive -- [start_index, # end_index). Missing indexes indicate the range is unbounded on that side. For # example, if `"Sheet1"` is sheet ID 0, then: `Sheet1!A1:A1 == sheet_id: 0, # start_row_index: 0, end_row_index: 1, start_column_index: 0, end_column_index: # 1` `Sheet1!A3:B4 == sheet_id: 0, start_row_index: 2, end_row_index: 4, # start_column_index: 0, end_column_index: 2` `Sheet1!A:B == sheet_id: 0, # start_column_index: 0, end_column_index: 2` `Sheet1!A5:B == sheet_id: 0, # start_row_index: 4, start_column_index: 0, end_column_index: 2` `Sheet1 == # sheet_id:0` The start index must always be less than or equal to the end index. # If the start index equals the end index, then the range is empty. Empty # ranges are typically not meaningful and are usually rendered in the UI as `# # REF!`. # Corresponds to the JSON property `source` # @return [Google::Apis::SheetsV4::GridRange] attr_accessor :source # Whether values should be listed horizontally (as columns) or vertically (as # rows). # Corresponds to the JSON property `valueLayout` # @return [String] attr_accessor :value_layout # A list of values to include in the pivot table. # Corresponds to the JSON property `values` # @return [Array] attr_accessor :values def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @columns = args[:columns] if args.key?(:columns) @criteria = args[:criteria] if args.key?(:criteria) @data_execution_status = args[:data_execution_status] if args.key?(:data_execution_status) @data_source_id = args[:data_source_id] if args.key?(:data_source_id) @filter_specs = args[:filter_specs] if args.key?(:filter_specs) @rows = args[:rows] if args.key?(:rows) @source = args[:source] if args.key?(:source) @value_layout = args[:value_layout] if args.key?(:value_layout) @values = args[:values] if args.key?(:values) end end # The definition of how a value in a pivot table should be calculated. class PivotValue include Google::Apis::Core::Hashable # If specified, indicates that pivot values should be displayed as the result of # a calculation with another pivot value. For example, if # calculated_display_type is specified as PERCENT_OF_GRAND_TOTAL, all the pivot # values are displayed as the percentage of the grand total. In the Sheets # editor, this is referred to as "Show As" in the value section of a pivot table. # Corresponds to the JSON property `calculatedDisplayType` # @return [String] attr_accessor :calculated_display_type # An unique identifier that references a data source column. # Corresponds to the JSON property `dataSourceColumnReference` # @return [Google::Apis::SheetsV4::DataSourceColumnReference] attr_accessor :data_source_column_reference # A custom formula to calculate the value. The formula must start with an `=` # character. # Corresponds to the JSON property `formula` # @return [String] attr_accessor :formula # A name to use for the value. # Corresponds to the JSON property `name` # @return [String] attr_accessor :name # The column offset of the source range that this value reads from. For example, # if the source was `C10:E15`, a `sourceColumnOffset` of `0` means this value # refers to column `C`, whereas the offset `1` would refer to column `D`. # Corresponds to the JSON property `sourceColumnOffset` # @return [Fixnum] attr_accessor :source_column_offset # A function to summarize the value. If formula is set, the only supported # values are SUM and CUSTOM. If sourceColumnOffset is set, then `CUSTOM` is not # supported. # Corresponds to the JSON property `summarizeFunction` # @return [String] attr_accessor :summarize_function def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @calculated_display_type = args[:calculated_display_type] if args.key?(:calculated_display_type) @data_source_column_reference = args[:data_source_column_reference] if args.key?(:data_source_column_reference) @formula = args[:formula] if args.key?(:formula) @name = args[:name] if args.key?(:name) @source_column_offset = args[:source_column_offset] if args.key?(:source_column_offset) @summarize_function = args[:summarize_function] if args.key?(:summarize_function) end end # The style of a point on the chart. class PointStyle include Google::Apis::Core::Hashable # The point shape. If empty or unspecified, a default shape is used. # Corresponds to the JSON property `shape` # @return [String] attr_accessor :shape # The point size. If empty, a default size is used. # Corresponds to the JSON property `size` # @return [Float] attr_accessor :size def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @shape = args[:shape] if args.key?(:shape) @size = args[:size] if args.key?(:size) end end # A protected range. class ProtectedRange include Google::Apis::Core::Hashable # The description of this protected range. # Corresponds to the JSON property `description` # @return [String] attr_accessor :description # The editors of a protected range. # Corresponds to the JSON property `editors` # @return [Google::Apis::SheetsV4::Editors] attr_accessor :editors # The named range this protected range is backed by, if any. When writing, only # one of range or named_range_id may be set. # Corresponds to the JSON property `namedRangeId` # @return [String] attr_accessor :named_range_id # The ID of the protected range. This field is read-only. # Corresponds to the JSON property `protectedRangeId` # @return [Fixnum] attr_accessor :protected_range_id # A range on a sheet. All indexes are zero-based. Indexes are half open, i.e. # the start index is inclusive and the end index is exclusive -- [start_index, # end_index). Missing indexes indicate the range is unbounded on that side. For # example, if `"Sheet1"` is sheet ID 0, then: `Sheet1!A1:A1 == sheet_id: 0, # start_row_index: 0, end_row_index: 1, start_column_index: 0, end_column_index: # 1` `Sheet1!A3:B4 == sheet_id: 0, start_row_index: 2, end_row_index: 4, # start_column_index: 0, end_column_index: 2` `Sheet1!A:B == sheet_id: 0, # start_column_index: 0, end_column_index: 2` `Sheet1!A5:B == sheet_id: 0, # start_row_index: 4, start_column_index: 0, end_column_index: 2` `Sheet1 == # sheet_id:0` The start index must always be less than or equal to the end index. # If the start index equals the end index, then the range is empty. Empty # ranges are typically not meaningful and are usually rendered in the UI as `# # REF!`. # Corresponds to the JSON property `range` # @return [Google::Apis::SheetsV4::GridRange] attr_accessor :range # True if the user who requested this protected range can edit the protected # area. This field is read-only. # Corresponds to the JSON property `requestingUserCanEdit` # @return [Boolean] attr_accessor :requesting_user_can_edit alias_method :requesting_user_can_edit?, :requesting_user_can_edit # The list of unprotected ranges within a protected sheet. Unprotected ranges # are only supported on protected sheets. # Corresponds to the JSON property `unprotectedRanges` # @return [Array] attr_accessor :unprotected_ranges # True if this protected range will show a warning when editing. Warning-based # protection means that every user can edit data in the protected range, except # editing will prompt a warning asking the user to confirm the edit. When # writing: if this field is true, then editors is ignored. Additionally, if this # field is changed from true to false and the `editors` field is not set (nor # included in the field mask), then the editors will be set to all the editors # in the document. # Corresponds to the JSON property `warningOnly` # @return [Boolean] attr_accessor :warning_only alias_method :warning_only?, :warning_only def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @description = args[:description] if args.key?(:description) @editors = args[:editors] if args.key?(:editors) @named_range_id = args[:named_range_id] if args.key?(:named_range_id) @protected_range_id = args[:protected_range_id] if args.key?(:protected_range_id) @range = args[:range] if args.key?(:range) @requesting_user_can_edit = args[:requesting_user_can_edit] if args.key?(:requesting_user_can_edit) @unprotected_ranges = args[:unprotected_ranges] if args.key?(:unprotected_ranges) @warning_only = args[:warning_only] if args.key?(:warning_only) end end # Randomizes the order of the rows in a range. class RandomizeRangeRequest include Google::Apis::Core::Hashable # A range on a sheet. All indexes are zero-based. Indexes are half open, i.e. # the start index is inclusive and the end index is exclusive -- [start_index, # end_index). Missing indexes indicate the range is unbounded on that side. For # example, if `"Sheet1"` is sheet ID 0, then: `Sheet1!A1:A1 == sheet_id: 0, # start_row_index: 0, end_row_index: 1, start_column_index: 0, end_column_index: # 1` `Sheet1!A3:B4 == sheet_id: 0, start_row_index: 2, end_row_index: 4, # start_column_index: 0, end_column_index: 2` `Sheet1!A:B == sheet_id: 0, # start_column_index: 0, end_column_index: 2` `Sheet1!A5:B == sheet_id: 0, # start_row_index: 4, start_column_index: 0, end_column_index: 2` `Sheet1 == # sheet_id:0` The start index must always be less than or equal to the end index. # If the start index equals the end index, then the range is empty. Empty # ranges are typically not meaningful and are usually rendered in the UI as `# # REF!`. # Corresponds to the JSON property `range` # @return [Google::Apis::SheetsV4::GridRange] attr_accessor :range def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @range = args[:range] if args.key?(:range) end end # The execution status of refreshing one data source object. class RefreshDataSourceObjectExecutionStatus include Google::Apis::Core::Hashable # The data execution status. A data execution is created to sync a data source # object with the latest data from a DataSource. It is usually scheduled to run # at background, you can check its state to tell if an execution completes There # are several scenarios where a data execution is triggered to run: * Adding a # data source creates an associated data source sheet as well as a data # execution to sync the data from the data source to the sheet. * Updating a # data source creates a data execution to refresh the associated data source # sheet similarly. * You can send refresh request to explicitly refresh one or # multiple data source objects. # Corresponds to the JSON property `dataExecutionStatus` # @return [Google::Apis::SheetsV4::DataExecutionStatus] attr_accessor :data_execution_status # Reference to a data source object. # Corresponds to the JSON property `reference` # @return [Google::Apis::SheetsV4::DataSourceObjectReference] attr_accessor :reference def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @data_execution_status = args[:data_execution_status] if args.key?(:data_execution_status) @reference = args[:reference] if args.key?(:reference) end end # Refreshes one or multiple data source objects in the spreadsheet by the # specified references. The request requires an additional `bigquery.readonly` # OAuth scope. If there are multiple refresh requests referencing the same data # source objects in one batch, only the last refresh request is processed, and # all those requests will have the same response accordingly. class RefreshDataSourceRequest include Google::Apis::Core::Hashable # Reference to a DataSource. If specified, refreshes all associated data source # objects for the data source. # Corresponds to the JSON property `dataSourceId` # @return [String] attr_accessor :data_source_id # Refreshes the data source objects regardless of the current state. If not set # and a referenced data source object was in error state, the refresh will fail # immediately. # Corresponds to the JSON property `force` # @return [Boolean] attr_accessor :force alias_method :force?, :force # Refreshes all existing data source objects in the spreadsheet. # Corresponds to the JSON property `isAll` # @return [Boolean] attr_accessor :is_all alias_method :is_all?, :is_all # A list of references to data source objects. # Corresponds to the JSON property `references` # @return [Google::Apis::SheetsV4::DataSourceObjectReferences] attr_accessor :references def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @data_source_id = args[:data_source_id] if args.key?(:data_source_id) @force = args[:force] if args.key?(:force) @is_all = args[:is_all] if args.key?(:is_all) @references = args[:references] if args.key?(:references) end end # The response from refreshing one or multiple data source objects. class RefreshDataSourceResponse include Google::Apis::Core::Hashable # All the refresh status for the data source object references specified in the # request. If is_all is specified, the field contains only those in failure # status. # Corresponds to the JSON property `statuses` # @return [Array] attr_accessor :statuses def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @statuses = args[:statuses] if args.key?(:statuses) end end # Updates all cells in the range to the values in the given Cell object. Only # the fields listed in the fields field are updated; others are unchanged. If # writing a cell with a formula, the formula's ranges will automatically # increment for each field in the range. For example, if writing a cell with # formula `=A1` into range B2:C4, B2 would be `=A1`, B3 would be `=A2`, B4 would # be `=A3`, C2 would be `=B1`, C3 would be `=B2`, C4 would be `=B3`. To keep the # formula's ranges static, use the `$` indicator. For example, use the formula `= # $A$1` to prevent both the row and the column from incrementing. class RepeatCellRequest include Google::Apis::Core::Hashable # Data about a specific cell. # Corresponds to the JSON property `cell` # @return [Google::Apis::SheetsV4::CellData] attr_accessor :cell # The fields that should be updated. At least one field must be specified. The # root `cell` is implied and should not be specified. A single `"*"` can be used # as short-hand for listing every field. # Corresponds to the JSON property `fields` # @return [String] attr_accessor :fields # A range on a sheet. All indexes are zero-based. Indexes are half open, i.e. # the start index is inclusive and the end index is exclusive -- [start_index, # end_index). Missing indexes indicate the range is unbounded on that side. For # example, if `"Sheet1"` is sheet ID 0, then: `Sheet1!A1:A1 == sheet_id: 0, # start_row_index: 0, end_row_index: 1, start_column_index: 0, end_column_index: # 1` `Sheet1!A3:B4 == sheet_id: 0, start_row_index: 2, end_row_index: 4, # start_column_index: 0, end_column_index: 2` `Sheet1!A:B == sheet_id: 0, # start_column_index: 0, end_column_index: 2` `Sheet1!A5:B == sheet_id: 0, # start_row_index: 4, start_column_index: 0, end_column_index: 2` `Sheet1 == # sheet_id:0` The start index must always be less than or equal to the end index. # If the start index equals the end index, then the range is empty. Empty # ranges are typically not meaningful and are usually rendered in the UI as `# # REF!`. # Corresponds to the JSON property `range` # @return [Google::Apis::SheetsV4::GridRange] attr_accessor :range def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @cell = args[:cell] if args.key?(:cell) @fields = args[:fields] if args.key?(:fields) @range = args[:range] if args.key?(:range) end end # A single kind of update to apply to a spreadsheet. class Request include Google::Apis::Core::Hashable # Adds a new banded range to the spreadsheet. # Corresponds to the JSON property `addBanding` # @return [Google::Apis::SheetsV4::AddBandingRequest] attr_accessor :add_banding # Adds a chart to a sheet in the spreadsheet. # Corresponds to the JSON property `addChart` # @return [Google::Apis::SheetsV4::AddChartRequest] attr_accessor :add_chart # Adds a new conditional format rule at the given index. All subsequent rules' # indexes are incremented. # Corresponds to the JSON property `addConditionalFormatRule` # @return [Google::Apis::SheetsV4::AddConditionalFormatRuleRequest] attr_accessor :add_conditional_format_rule # Adds a data source. After the data source is added successfully, an associated # DATA_SOURCE sheet is created and an execution is triggered to refresh the # sheet to read data from the data source. The request requires an additional ` # bigquery.readonly` OAuth scope. # Corresponds to the JSON property `addDataSource` # @return [Google::Apis::SheetsV4::AddDataSourceRequest] attr_accessor :add_data_source # Creates a group over the specified range. If the requested range is a superset # of the range of an existing group G, then the depth of G is incremented and # this new group G' has the depth of that group. For example, a group [C:D, # depth 1] + [B:E] results in groups [B:E, depth 1] and [C:D, depth 2]. If the # requested range is a subset of the range of an existing group G, then the # depth of the new group G' becomes one greater than the depth of G. For example, # a group [B:E, depth 1] + [C:D] results in groups [B:E, depth 1] and [C:D, # depth 2]. If the requested range starts before and ends within, or starts # within and ends after, the range of an existing group G, then the range of the # existing group G becomes the union of the ranges, and the new group G' has # depth one greater than the depth of G and range as the intersection of the # ranges. For example, a group [B:D, depth 1] + [C:E] results in groups [B:E, # depth 1] and [C:D, depth 2]. # Corresponds to the JSON property `addDimensionGroup` # @return [Google::Apis::SheetsV4::AddDimensionGroupRequest] attr_accessor :add_dimension_group # Adds a filter view. # Corresponds to the JSON property `addFilterView` # @return [Google::Apis::SheetsV4::AddFilterViewRequest] attr_accessor :add_filter_view # Adds a named range to the spreadsheet. # Corresponds to the JSON property `addNamedRange` # @return [Google::Apis::SheetsV4::AddNamedRangeRequest] attr_accessor :add_named_range # Adds a new protected range. # Corresponds to the JSON property `addProtectedRange` # @return [Google::Apis::SheetsV4::AddProtectedRangeRequest] attr_accessor :add_protected_range # Adds a new sheet. When a sheet is added at a given index, all subsequent # sheets' indexes are incremented. To add an object sheet, use AddChartRequest # instead and specify EmbeddedObjectPosition.sheetId or EmbeddedObjectPosition. # newSheet. # Corresponds to the JSON property `addSheet` # @return [Google::Apis::SheetsV4::AddSheetRequest] attr_accessor :add_sheet # Adds a slicer to a sheet in the spreadsheet. # Corresponds to the JSON property `addSlicer` # @return [Google::Apis::SheetsV4::AddSlicerRequest] attr_accessor :add_slicer # Adds new cells after the last row with data in a sheet, inserting new rows # into the sheet if necessary. # Corresponds to the JSON property `appendCells` # @return [Google::Apis::SheetsV4::AppendCellsRequest] attr_accessor :append_cells # Appends rows or columns to the end of a sheet. # Corresponds to the JSON property `appendDimension` # @return [Google::Apis::SheetsV4::AppendDimensionRequest] attr_accessor :append_dimension # Fills in more data based on existing data. # Corresponds to the JSON property `autoFill` # @return [Google::Apis::SheetsV4::AutoFillRequest] attr_accessor :auto_fill # Automatically resizes one or more dimensions based on the contents of the # cells in that dimension. # Corresponds to the JSON property `autoResizeDimensions` # @return [Google::Apis::SheetsV4::AutoResizeDimensionsRequest] attr_accessor :auto_resize_dimensions # Clears the basic filter, if any exists on the sheet. # Corresponds to the JSON property `clearBasicFilter` # @return [Google::Apis::SheetsV4::ClearBasicFilterRequest] attr_accessor :clear_basic_filter # Copies data from the source to the destination. # Corresponds to the JSON property `copyPaste` # @return [Google::Apis::SheetsV4::CopyPasteRequest] attr_accessor :copy_paste # A request to create developer metadata. # Corresponds to the JSON property `createDeveloperMetadata` # @return [Google::Apis::SheetsV4::CreateDeveloperMetadataRequest] attr_accessor :create_developer_metadata # Moves data from the source to the destination. # Corresponds to the JSON property `cutPaste` # @return [Google::Apis::SheetsV4::CutPasteRequest] attr_accessor :cut_paste # Removes the banded range with the given ID from the spreadsheet. # Corresponds to the JSON property `deleteBanding` # @return [Google::Apis::SheetsV4::DeleteBandingRequest] attr_accessor :delete_banding # Deletes a conditional format rule at the given index. All subsequent rules' # indexes are decremented. # Corresponds to the JSON property `deleteConditionalFormatRule` # @return [Google::Apis::SheetsV4::DeleteConditionalFormatRuleRequest] attr_accessor :delete_conditional_format_rule # Deletes a data source. The request also deletes the associated data source # sheet, and unlinks all associated data source objects. # Corresponds to the JSON property `deleteDataSource` # @return [Google::Apis::SheetsV4::DeleteDataSourceRequest] attr_accessor :delete_data_source # A request to delete developer metadata. # Corresponds to the JSON property `deleteDeveloperMetadata` # @return [Google::Apis::SheetsV4::DeleteDeveloperMetadataRequest] attr_accessor :delete_developer_metadata # Deletes the dimensions from the sheet. # Corresponds to the JSON property `deleteDimension` # @return [Google::Apis::SheetsV4::DeleteDimensionRequest] attr_accessor :delete_dimension # Deletes a group over the specified range by decrementing the depth of the # dimensions in the range. For example, assume the sheet has a depth-1 group # over B:E and a depth-2 group over C:D. Deleting a group over D:E leaves the # sheet with a depth-1 group over B:D and a depth-2 group over C:C. # Corresponds to the JSON property `deleteDimensionGroup` # @return [Google::Apis::SheetsV4::DeleteDimensionGroupRequest] attr_accessor :delete_dimension_group # Removes rows within this range that contain values in the specified columns # that are duplicates of values in any previous row. Rows with identical values # but different letter cases, formatting, or formulas are considered to be # duplicates. This request also removes duplicate rows hidden from view (for # example, due to a filter). When removing duplicates, the first instance of # each duplicate row scanning from the top downwards is kept in the resulting # range. Content outside of the specified range isn't removed, and rows # considered duplicates do not have to be adjacent to each other in the range. # Corresponds to the JSON property `deleteDuplicates` # @return [Google::Apis::SheetsV4::DeleteDuplicatesRequest] attr_accessor :delete_duplicates # Deletes the embedded object with the given ID. # Corresponds to the JSON property `deleteEmbeddedObject` # @return [Google::Apis::SheetsV4::DeleteEmbeddedObjectRequest] attr_accessor :delete_embedded_object # Deletes a particular filter view. # Corresponds to the JSON property `deleteFilterView` # @return [Google::Apis::SheetsV4::DeleteFilterViewRequest] attr_accessor :delete_filter_view # Removes the named range with the given ID from the spreadsheet. # Corresponds to the JSON property `deleteNamedRange` # @return [Google::Apis::SheetsV4::DeleteNamedRangeRequest] attr_accessor :delete_named_range # Deletes the protected range with the given ID. # Corresponds to the JSON property `deleteProtectedRange` # @return [Google::Apis::SheetsV4::DeleteProtectedRangeRequest] attr_accessor :delete_protected_range # Deletes a range of cells, shifting other cells into the deleted area. # Corresponds to the JSON property `deleteRange` # @return [Google::Apis::SheetsV4::DeleteRangeRequest] attr_accessor :delete_range # Deletes the requested sheet. # Corresponds to the JSON property `deleteSheet` # @return [Google::Apis::SheetsV4::DeleteSheetRequest] attr_accessor :delete_sheet # Duplicates a particular filter view. # Corresponds to the JSON property `duplicateFilterView` # @return [Google::Apis::SheetsV4::DuplicateFilterViewRequest] attr_accessor :duplicate_filter_view # Duplicates the contents of a sheet. # Corresponds to the JSON property `duplicateSheet` # @return [Google::Apis::SheetsV4::DuplicateSheetRequest] attr_accessor :duplicate_sheet # Finds and replaces data in cells over a range, sheet, or all sheets. # Corresponds to the JSON property `findReplace` # @return [Google::Apis::SheetsV4::FindReplaceRequest] attr_accessor :find_replace # Inserts rows or columns in a sheet at a particular index. # Corresponds to the JSON property `insertDimension` # @return [Google::Apis::SheetsV4::InsertDimensionRequest] attr_accessor :insert_dimension # Inserts cells into a range, shifting the existing cells over or down. # Corresponds to the JSON property `insertRange` # @return [Google::Apis::SheetsV4::InsertRangeRequest] attr_accessor :insert_range # Merges all cells in the range. # Corresponds to the JSON property `mergeCells` # @return [Google::Apis::SheetsV4::MergeCellsRequest] attr_accessor :merge_cells # Moves one or more rows or columns. # Corresponds to the JSON property `moveDimension` # @return [Google::Apis::SheetsV4::MoveDimensionRequest] attr_accessor :move_dimension # Inserts data into the spreadsheet starting at the specified coordinate. # Corresponds to the JSON property `pasteData` # @return [Google::Apis::SheetsV4::PasteDataRequest] attr_accessor :paste_data # Randomizes the order of the rows in a range. # Corresponds to the JSON property `randomizeRange` # @return [Google::Apis::SheetsV4::RandomizeRangeRequest] attr_accessor :randomize_range # Refreshes one or multiple data source objects in the spreadsheet by the # specified references. The request requires an additional `bigquery.readonly` # OAuth scope. If there are multiple refresh requests referencing the same data # source objects in one batch, only the last refresh request is processed, and # all those requests will have the same response accordingly. # Corresponds to the JSON property `refreshDataSource` # @return [Google::Apis::SheetsV4::RefreshDataSourceRequest] attr_accessor :refresh_data_source # Updates all cells in the range to the values in the given Cell object. Only # the fields listed in the fields field are updated; others are unchanged. If # writing a cell with a formula, the formula's ranges will automatically # increment for each field in the range. For example, if writing a cell with # formula `=A1` into range B2:C4, B2 would be `=A1`, B3 would be `=A2`, B4 would # be `=A3`, C2 would be `=B1`, C3 would be `=B2`, C4 would be `=B3`. To keep the # formula's ranges static, use the `$` indicator. For example, use the formula `= # $A$1` to prevent both the row and the column from incrementing. # Corresponds to the JSON property `repeatCell` # @return [Google::Apis::SheetsV4::RepeatCellRequest] attr_accessor :repeat_cell # Sets the basic filter associated with a sheet. # Corresponds to the JSON property `setBasicFilter` # @return [Google::Apis::SheetsV4::SetBasicFilterRequest] attr_accessor :set_basic_filter # Sets a data validation rule to every cell in the range. To clear validation in # a range, call this with no rule specified. # Corresponds to the JSON property `setDataValidation` # @return [Google::Apis::SheetsV4::SetDataValidationRequest] attr_accessor :set_data_validation # Sorts data in rows based on a sort order per column. # Corresponds to the JSON property `sortRange` # @return [Google::Apis::SheetsV4::SortRangeRequest] attr_accessor :sort_range # Splits a column of text into multiple columns, based on a delimiter in each # cell. # Corresponds to the JSON property `textToColumns` # @return [Google::Apis::SheetsV4::TextToColumnsRequest] attr_accessor :text_to_columns # Trims the whitespace (such as spaces, tabs, or new lines) in every cell in the # specified range. This request removes all whitespace from the start and end of # each cell's text, and reduces any subsequence of remaining whitespace # characters to a single space. If the resulting trimmed text starts with a '+' # or '=' character, the text remains as a string value and isn't interpreted as # a formula. # Corresponds to the JSON property `trimWhitespace` # @return [Google::Apis::SheetsV4::TrimWhitespaceRequest] attr_accessor :trim_whitespace # Unmerges cells in the given range. # Corresponds to the JSON property `unmergeCells` # @return [Google::Apis::SheetsV4::UnmergeCellsRequest] attr_accessor :unmerge_cells # Updates properties of the supplied banded range. # Corresponds to the JSON property `updateBanding` # @return [Google::Apis::SheetsV4::UpdateBandingRequest] attr_accessor :update_banding # Updates the borders of a range. If a field is not set in the request, that # means the border remains as-is. For example, with two subsequent # UpdateBordersRequest: 1. range: A1:A5 `` top: RED, bottom: WHITE `` 2. range: # A1:A5 `` left: BLUE `` That would result in A1:A5 having a borders of `` top: # RED, bottom: WHITE, left: BLUE ``. If you want to clear a border, explicitly # set the style to NONE. # Corresponds to the JSON property `updateBorders` # @return [Google::Apis::SheetsV4::UpdateBordersRequest] attr_accessor :update_borders # Updates all cells in a range with new data. # Corresponds to the JSON property `updateCells` # @return [Google::Apis::SheetsV4::UpdateCellsRequest] attr_accessor :update_cells # Updates a chart's specifications. (This does not move or resize a chart. To # move or resize a chart, use UpdateEmbeddedObjectPositionRequest.) # Corresponds to the JSON property `updateChartSpec` # @return [Google::Apis::SheetsV4::UpdateChartSpecRequest] attr_accessor :update_chart_spec # Updates a conditional format rule at the given index, or moves a conditional # format rule to another index. # Corresponds to the JSON property `updateConditionalFormatRule` # @return [Google::Apis::SheetsV4::UpdateConditionalFormatRuleRequest] attr_accessor :update_conditional_format_rule # Updates a data source. After the data source is updated successfully, an # execution is triggered to refresh the associated DATA_SOURCE sheet to read # data from the updated data source. The request requires an additional ` # bigquery.readonly` OAuth scope. # Corresponds to the JSON property `updateDataSource` # @return [Google::Apis::SheetsV4::UpdateDataSourceRequest] attr_accessor :update_data_source # A request to update properties of developer metadata. Updates the properties # of the developer metadata selected by the filters to the values provided in # the DeveloperMetadata resource. Callers must specify the properties they wish # to update in the fields parameter, as well as specify at least one DataFilter # matching the metadata they wish to update. # Corresponds to the JSON property `updateDeveloperMetadata` # @return [Google::Apis::SheetsV4::UpdateDeveloperMetadataRequest] attr_accessor :update_developer_metadata # Updates the state of the specified group. # Corresponds to the JSON property `updateDimensionGroup` # @return [Google::Apis::SheetsV4::UpdateDimensionGroupRequest] attr_accessor :update_dimension_group # Updates properties of dimensions within the specified range. # Corresponds to the JSON property `updateDimensionProperties` # @return [Google::Apis::SheetsV4::UpdateDimensionPropertiesRequest] attr_accessor :update_dimension_properties # Updates an embedded object's border property. # Corresponds to the JSON property `updateEmbeddedObjectBorder` # @return [Google::Apis::SheetsV4::UpdateEmbeddedObjectBorderRequest] attr_accessor :update_embedded_object_border # Update an embedded object's position (such as a moving or resizing a chart or # image). # Corresponds to the JSON property `updateEmbeddedObjectPosition` # @return [Google::Apis::SheetsV4::UpdateEmbeddedObjectPositionRequest] attr_accessor :update_embedded_object_position # Updates properties of the filter view. # Corresponds to the JSON property `updateFilterView` # @return [Google::Apis::SheetsV4::UpdateFilterViewRequest] attr_accessor :update_filter_view # Updates properties of the named range with the specified namedRangeId. # Corresponds to the JSON property `updateNamedRange` # @return [Google::Apis::SheetsV4::UpdateNamedRangeRequest] attr_accessor :update_named_range # Updates an existing protected range with the specified protectedRangeId. # Corresponds to the JSON property `updateProtectedRange` # @return [Google::Apis::SheetsV4::UpdateProtectedRangeRequest] attr_accessor :update_protected_range # Updates properties of the sheet with the specified sheetId. # Corresponds to the JSON property `updateSheetProperties` # @return [Google::Apis::SheetsV4::UpdateSheetPropertiesRequest] attr_accessor :update_sheet_properties # Updates a slicer's specifications. (This does not move or resize a slicer. To # move or resize a slicer use UpdateEmbeddedObjectPositionRequest. # Corresponds to the JSON property `updateSlicerSpec` # @return [Google::Apis::SheetsV4::UpdateSlicerSpecRequest] attr_accessor :update_slicer_spec # Updates properties of a spreadsheet. # Corresponds to the JSON property `updateSpreadsheetProperties` # @return [Google::Apis::SheetsV4::UpdateSpreadsheetPropertiesRequest] attr_accessor :update_spreadsheet_properties def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @add_banding = args[:add_banding] if args.key?(:add_banding) @add_chart = args[:add_chart] if args.key?(:add_chart) @add_conditional_format_rule = args[:add_conditional_format_rule] if args.key?(:add_conditional_format_rule) @add_data_source = args[:add_data_source] if args.key?(:add_data_source) @add_dimension_group = args[:add_dimension_group] if args.key?(:add_dimension_group) @add_filter_view = args[:add_filter_view] if args.key?(:add_filter_view) @add_named_range = args[:add_named_range] if args.key?(:add_named_range) @add_protected_range = args[:add_protected_range] if args.key?(:add_protected_range) @add_sheet = args[:add_sheet] if args.key?(:add_sheet) @add_slicer = args[:add_slicer] if args.key?(:add_slicer) @append_cells = args[:append_cells] if args.key?(:append_cells) @append_dimension = args[:append_dimension] if args.key?(:append_dimension) @auto_fill = args[:auto_fill] if args.key?(:auto_fill) @auto_resize_dimensions = args[:auto_resize_dimensions] if args.key?(:auto_resize_dimensions) @clear_basic_filter = args[:clear_basic_filter] if args.key?(:clear_basic_filter) @copy_paste = args[:copy_paste] if args.key?(:copy_paste) @create_developer_metadata = args[:create_developer_metadata] if args.key?(:create_developer_metadata) @cut_paste = args[:cut_paste] if args.key?(:cut_paste) @delete_banding = args[:delete_banding] if args.key?(:delete_banding) @delete_conditional_format_rule = args[:delete_conditional_format_rule] if args.key?(:delete_conditional_format_rule) @delete_data_source = args[:delete_data_source] if args.key?(:delete_data_source) @delete_developer_metadata = args[:delete_developer_metadata] if args.key?(:delete_developer_metadata) @delete_dimension = args[:delete_dimension] if args.key?(:delete_dimension) @delete_dimension_group = args[:delete_dimension_group] if args.key?(:delete_dimension_group) @delete_duplicates = args[:delete_duplicates] if args.key?(:delete_duplicates) @delete_embedded_object = args[:delete_embedded_object] if args.key?(:delete_embedded_object) @delete_filter_view = args[:delete_filter_view] if args.key?(:delete_filter_view) @delete_named_range = args[:delete_named_range] if args.key?(:delete_named_range) @delete_protected_range = args[:delete_protected_range] if args.key?(:delete_protected_range) @delete_range = args[:delete_range] if args.key?(:delete_range) @delete_sheet = args[:delete_sheet] if args.key?(:delete_sheet) @duplicate_filter_view = args[:duplicate_filter_view] if args.key?(:duplicate_filter_view) @duplicate_sheet = args[:duplicate_sheet] if args.key?(:duplicate_sheet) @find_replace = args[:find_replace] if args.key?(:find_replace) @insert_dimension = args[:insert_dimension] if args.key?(:insert_dimension) @insert_range = args[:insert_range] if args.key?(:insert_range) @merge_cells = args[:merge_cells] if args.key?(:merge_cells) @move_dimension = args[:move_dimension] if args.key?(:move_dimension) @paste_data = args[:paste_data] if args.key?(:paste_data) @randomize_range = args[:randomize_range] if args.key?(:randomize_range) @refresh_data_source = args[:refresh_data_source] if args.key?(:refresh_data_source) @repeat_cell = args[:repeat_cell] if args.key?(:repeat_cell) @set_basic_filter = args[:set_basic_filter] if args.key?(:set_basic_filter) @set_data_validation = args[:set_data_validation] if args.key?(:set_data_validation) @sort_range = args[:sort_range] if args.key?(:sort_range) @text_to_columns = args[:text_to_columns] if args.key?(:text_to_columns) @trim_whitespace = args[:trim_whitespace] if args.key?(:trim_whitespace) @unmerge_cells = args[:unmerge_cells] if args.key?(:unmerge_cells) @update_banding = args[:update_banding] if args.key?(:update_banding) @update_borders = args[:update_borders] if args.key?(:update_borders) @update_cells = args[:update_cells] if args.key?(:update_cells) @update_chart_spec = args[:update_chart_spec] if args.key?(:update_chart_spec) @update_conditional_format_rule = args[:update_conditional_format_rule] if args.key?(:update_conditional_format_rule) @update_data_source = args[:update_data_source] if args.key?(:update_data_source) @update_developer_metadata = args[:update_developer_metadata] if args.key?(:update_developer_metadata) @update_dimension_group = args[:update_dimension_group] if args.key?(:update_dimension_group) @update_dimension_properties = args[:update_dimension_properties] if args.key?(:update_dimension_properties) @update_embedded_object_border = args[:update_embedded_object_border] if args.key?(:update_embedded_object_border) @update_embedded_object_position = args[:update_embedded_object_position] if args.key?(:update_embedded_object_position) @update_filter_view = args[:update_filter_view] if args.key?(:update_filter_view) @update_named_range = args[:update_named_range] if args.key?(:update_named_range) @update_protected_range = args[:update_protected_range] if args.key?(:update_protected_range) @update_sheet_properties = args[:update_sheet_properties] if args.key?(:update_sheet_properties) @update_slicer_spec = args[:update_slicer_spec] if args.key?(:update_slicer_spec) @update_spreadsheet_properties = args[:update_spreadsheet_properties] if args.key?(:update_spreadsheet_properties) end end # A single response from an update. class Response include Google::Apis::Core::Hashable # The result of adding a banded range. # Corresponds to the JSON property `addBanding` # @return [Google::Apis::SheetsV4::AddBandingResponse] attr_accessor :add_banding # The result of adding a chart to a spreadsheet. # Corresponds to the JSON property `addChart` # @return [Google::Apis::SheetsV4::AddChartResponse] attr_accessor :add_chart # The result of adding a data source. # Corresponds to the JSON property `addDataSource` # @return [Google::Apis::SheetsV4::AddDataSourceResponse] attr_accessor :add_data_source # The result of adding a group. # Corresponds to the JSON property `addDimensionGroup` # @return [Google::Apis::SheetsV4::AddDimensionGroupResponse] attr_accessor :add_dimension_group # The result of adding a filter view. # Corresponds to the JSON property `addFilterView` # @return [Google::Apis::SheetsV4::AddFilterViewResponse] attr_accessor :add_filter_view # The result of adding a named range. # Corresponds to the JSON property `addNamedRange` # @return [Google::Apis::SheetsV4::AddNamedRangeResponse] attr_accessor :add_named_range # The result of adding a new protected range. # Corresponds to the JSON property `addProtectedRange` # @return [Google::Apis::SheetsV4::AddProtectedRangeResponse] attr_accessor :add_protected_range # The result of adding a sheet. # Corresponds to the JSON property `addSheet` # @return [Google::Apis::SheetsV4::AddSheetResponse] attr_accessor :add_sheet # The result of adding a slicer to a spreadsheet. # Corresponds to the JSON property `addSlicer` # @return [Google::Apis::SheetsV4::AddSlicerResponse] attr_accessor :add_slicer # The response from creating developer metadata. # Corresponds to the JSON property `createDeveloperMetadata` # @return [Google::Apis::SheetsV4::CreateDeveloperMetadataResponse] attr_accessor :create_developer_metadata # The result of deleting a conditional format rule. # Corresponds to the JSON property `deleteConditionalFormatRule` # @return [Google::Apis::SheetsV4::DeleteConditionalFormatRuleResponse] attr_accessor :delete_conditional_format_rule # The response from deleting developer metadata. # Corresponds to the JSON property `deleteDeveloperMetadata` # @return [Google::Apis::SheetsV4::DeleteDeveloperMetadataResponse] attr_accessor :delete_developer_metadata # The result of deleting a group. # Corresponds to the JSON property `deleteDimensionGroup` # @return [Google::Apis::SheetsV4::DeleteDimensionGroupResponse] attr_accessor :delete_dimension_group # The result of removing duplicates in a range. # Corresponds to the JSON property `deleteDuplicates` # @return [Google::Apis::SheetsV4::DeleteDuplicatesResponse] attr_accessor :delete_duplicates # The result of a filter view being duplicated. # Corresponds to the JSON property `duplicateFilterView` # @return [Google::Apis::SheetsV4::DuplicateFilterViewResponse] attr_accessor :duplicate_filter_view # The result of duplicating a sheet. # Corresponds to the JSON property `duplicateSheet` # @return [Google::Apis::SheetsV4::DuplicateSheetResponse] attr_accessor :duplicate_sheet # The result of the find/replace. # Corresponds to the JSON property `findReplace` # @return [Google::Apis::SheetsV4::FindReplaceResponse] attr_accessor :find_replace # The response from refreshing one or multiple data source objects. # Corresponds to the JSON property `refreshDataSource` # @return [Google::Apis::SheetsV4::RefreshDataSourceResponse] attr_accessor :refresh_data_source # The result of trimming whitespace in cells. # Corresponds to the JSON property `trimWhitespace` # @return [Google::Apis::SheetsV4::TrimWhitespaceResponse] attr_accessor :trim_whitespace # The result of updating a conditional format rule. # Corresponds to the JSON property `updateConditionalFormatRule` # @return [Google::Apis::SheetsV4::UpdateConditionalFormatRuleResponse] attr_accessor :update_conditional_format_rule # The response from updating data source. # Corresponds to the JSON property `updateDataSource` # @return [Google::Apis::SheetsV4::UpdateDataSourceResponse] attr_accessor :update_data_source # The response from updating developer metadata. # Corresponds to the JSON property `updateDeveloperMetadata` # @return [Google::Apis::SheetsV4::UpdateDeveloperMetadataResponse] attr_accessor :update_developer_metadata # The result of updating an embedded object's position. # Corresponds to the JSON property `updateEmbeddedObjectPosition` # @return [Google::Apis::SheetsV4::UpdateEmbeddedObjectPositionResponse] attr_accessor :update_embedded_object_position def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @add_banding = args[:add_banding] if args.key?(:add_banding) @add_chart = args[:add_chart] if args.key?(:add_chart) @add_data_source = args[:add_data_source] if args.key?(:add_data_source) @add_dimension_group = args[:add_dimension_group] if args.key?(:add_dimension_group) @add_filter_view = args[:add_filter_view] if args.key?(:add_filter_view) @add_named_range = args[:add_named_range] if args.key?(:add_named_range) @add_protected_range = args[:add_protected_range] if args.key?(:add_protected_range) @add_sheet = args[:add_sheet] if args.key?(:add_sheet) @add_slicer = args[:add_slicer] if args.key?(:add_slicer) @create_developer_metadata = args[:create_developer_metadata] if args.key?(:create_developer_metadata) @delete_conditional_format_rule = args[:delete_conditional_format_rule] if args.key?(:delete_conditional_format_rule) @delete_developer_metadata = args[:delete_developer_metadata] if args.key?(:delete_developer_metadata) @delete_dimension_group = args[:delete_dimension_group] if args.key?(:delete_dimension_group) @delete_duplicates = args[:delete_duplicates] if args.key?(:delete_duplicates) @duplicate_filter_view = args[:duplicate_filter_view] if args.key?(:duplicate_filter_view) @duplicate_sheet = args[:duplicate_sheet] if args.key?(:duplicate_sheet) @find_replace = args[:find_replace] if args.key?(:find_replace) @refresh_data_source = args[:refresh_data_source] if args.key?(:refresh_data_source) @trim_whitespace = args[:trim_whitespace] if args.key?(:trim_whitespace) @update_conditional_format_rule = args[:update_conditional_format_rule] if args.key?(:update_conditional_format_rule) @update_data_source = args[:update_data_source] if args.key?(:update_data_source) @update_developer_metadata = args[:update_developer_metadata] if args.key?(:update_developer_metadata) @update_embedded_object_position = args[:update_embedded_object_position] if args.key?(:update_embedded_object_position) end end # Data about each cell in a row. class RowData include Google::Apis::Core::Hashable # The values in the row, one per column. # Corresponds to the JSON property `values` # @return [Array] attr_accessor :values def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @values = args[:values] if args.key?(:values) end end # A scorecard chart. Scorecard charts are used to highlight key performance # indicators, known as KPIs, on the spreadsheet. A scorecard chart can represent # things like total sales, average cost, or a top selling item. You can specify # a single data value, or aggregate over a range of data. Percentage or absolute # difference from a baseline value can be highlighted, like changes over time. class ScorecardChartSpec include Google::Apis::Core::Hashable # The aggregation type for key and baseline chart data in scorecard chart. This # field is not supported for data source charts. Use the ChartData.aggregateType # field of the key_value_data or baseline_value_data instead for data source # charts. This field is optional. # Corresponds to the JSON property `aggregateType` # @return [String] attr_accessor :aggregate_type # The data included in a domain or series. # Corresponds to the JSON property `baselineValueData` # @return [Google::Apis::SheetsV4::ChartData] attr_accessor :baseline_value_data # Formatting options for baseline value. # Corresponds to the JSON property `baselineValueFormat` # @return [Google::Apis::SheetsV4::BaselineValueFormat] attr_accessor :baseline_value_format # Custom number formatting options for chart attributes. # Corresponds to the JSON property `customFormatOptions` # @return [Google::Apis::SheetsV4::ChartCustomNumberFormatOptions] attr_accessor :custom_format_options # The data included in a domain or series. # Corresponds to the JSON property `keyValueData` # @return [Google::Apis::SheetsV4::ChartData] attr_accessor :key_value_data # Formatting options for key value. # Corresponds to the JSON property `keyValueFormat` # @return [Google::Apis::SheetsV4::KeyValueFormat] attr_accessor :key_value_format # The number format source used in the scorecard chart. This field is optional. # Corresponds to the JSON property `numberFormatSource` # @return [String] attr_accessor :number_format_source # Value to scale scorecard key and baseline value. For example, a factor of 10 # can be used to divide all values in the chart by 10. This field is optional. # Corresponds to the JSON property `scaleFactor` # @return [Float] attr_accessor :scale_factor def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @aggregate_type = args[:aggregate_type] if args.key?(:aggregate_type) @baseline_value_data = args[:baseline_value_data] if args.key?(:baseline_value_data) @baseline_value_format = args[:baseline_value_format] if args.key?(:baseline_value_format) @custom_format_options = args[:custom_format_options] if args.key?(:custom_format_options) @key_value_data = args[:key_value_data] if args.key?(:key_value_data) @key_value_format = args[:key_value_format] if args.key?(:key_value_format) @number_format_source = args[:number_format_source] if args.key?(:number_format_source) @scale_factor = args[:scale_factor] if args.key?(:scale_factor) end end # A request to retrieve all developer metadata matching the set of specified # criteria. class SearchDeveloperMetadataRequest include Google::Apis::Core::Hashable # The data filters describing the criteria used to determine which # DeveloperMetadata entries to return. DeveloperMetadata matching any of the # specified filters are included in the response. # Corresponds to the JSON property `dataFilters` # @return [Array] attr_accessor :data_filters def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @data_filters = args[:data_filters] if args.key?(:data_filters) end end # A reply to a developer metadata search request. class SearchDeveloperMetadataResponse include Google::Apis::Core::Hashable # The metadata matching the criteria of the search request. # Corresponds to the JSON property `matchedDeveloperMetadata` # @return [Array] attr_accessor :matched_developer_metadata def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @matched_developer_metadata = args[:matched_developer_metadata] if args.key?(:matched_developer_metadata) end end # Sets the basic filter associated with a sheet. class SetBasicFilterRequest include Google::Apis::Core::Hashable # The default filter associated with a sheet. # Corresponds to the JSON property `filter` # @return [Google::Apis::SheetsV4::BasicFilter] attr_accessor :filter def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @filter = args[:filter] if args.key?(:filter) end end # Sets a data validation rule to every cell in the range. To clear validation in # a range, call this with no rule specified. class SetDataValidationRequest include Google::Apis::Core::Hashable # A range on a sheet. All indexes are zero-based. Indexes are half open, i.e. # the start index is inclusive and the end index is exclusive -- [start_index, # end_index). Missing indexes indicate the range is unbounded on that side. For # example, if `"Sheet1"` is sheet ID 0, then: `Sheet1!A1:A1 == sheet_id: 0, # start_row_index: 0, end_row_index: 1, start_column_index: 0, end_column_index: # 1` `Sheet1!A3:B4 == sheet_id: 0, start_row_index: 2, end_row_index: 4, # start_column_index: 0, end_column_index: 2` `Sheet1!A:B == sheet_id: 0, # start_column_index: 0, end_column_index: 2` `Sheet1!A5:B == sheet_id: 0, # start_row_index: 4, start_column_index: 0, end_column_index: 2` `Sheet1 == # sheet_id:0` The start index must always be less than or equal to the end index. # If the start index equals the end index, then the range is empty. Empty # ranges are typically not meaningful and are usually rendered in the UI as `# # REF!`. # Corresponds to the JSON property `range` # @return [Google::Apis::SheetsV4::GridRange] attr_accessor :range # A data validation rule. # Corresponds to the JSON property `rule` # @return [Google::Apis::SheetsV4::DataValidationRule] attr_accessor :rule def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @range = args[:range] if args.key?(:range) @rule = args[:rule] if args.key?(:rule) end end # A sheet in a spreadsheet. class Sheet include Google::Apis::Core::Hashable # The banded (alternating colors) ranges on this sheet. # Corresponds to the JSON property `bandedRanges` # @return [Array] attr_accessor :banded_ranges # The default filter associated with a sheet. # Corresponds to the JSON property `basicFilter` # @return [Google::Apis::SheetsV4::BasicFilter] attr_accessor :basic_filter # The specifications of every chart on this sheet. # Corresponds to the JSON property `charts` # @return [Array] attr_accessor :charts # All column groups on this sheet, ordered by increasing range start index, then # by group depth. # Corresponds to the JSON property `columnGroups` # @return [Array] attr_accessor :column_groups # The conditional format rules in this sheet. # Corresponds to the JSON property `conditionalFormats` # @return [Array] attr_accessor :conditional_formats # Data in the grid, if this is a grid sheet. The number of GridData objects # returned is dependent on the number of ranges requested on this sheet. For # example, if this is representing `Sheet1`, and the spreadsheet was requested # with ranges `Sheet1!A1:C10` and `Sheet1!D15:E20`, then the first GridData will # have a startRow/startColumn of `0`, while the second one will have `startRow # 14` (zero-based row 15), and `startColumn 3` (zero-based column D). For a # DATA_SOURCE sheet, you can not request a specific range, the GridData contains # all the values. # Corresponds to the JSON property `data` # @return [Array] attr_accessor :data # The developer metadata associated with a sheet. # Corresponds to the JSON property `developerMetadata` # @return [Array] attr_accessor :developer_metadata # The filter views in this sheet. # Corresponds to the JSON property `filterViews` # @return [Array] attr_accessor :filter_views # The ranges that are merged together. # Corresponds to the JSON property `merges` # @return [Array] attr_accessor :merges # Properties of a sheet. # Corresponds to the JSON property `properties` # @return [Google::Apis::SheetsV4::SheetProperties] attr_accessor :properties # The protected ranges in this sheet. # Corresponds to the JSON property `protectedRanges` # @return [Array] attr_accessor :protected_ranges # All row groups on this sheet, ordered by increasing range start index, then by # group depth. # Corresponds to the JSON property `rowGroups` # @return [Array] attr_accessor :row_groups # The slicers on this sheet. # Corresponds to the JSON property `slicers` # @return [Array] attr_accessor :slicers def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @banded_ranges = args[:banded_ranges] if args.key?(:banded_ranges) @basic_filter = args[:basic_filter] if args.key?(:basic_filter) @charts = args[:charts] if args.key?(:charts) @column_groups = args[:column_groups] if args.key?(:column_groups) @conditional_formats = args[:conditional_formats] if args.key?(:conditional_formats) @data = args[:data] if args.key?(:data) @developer_metadata = args[:developer_metadata] if args.key?(:developer_metadata) @filter_views = args[:filter_views] if args.key?(:filter_views) @merges = args[:merges] if args.key?(:merges) @properties = args[:properties] if args.key?(:properties) @protected_ranges = args[:protected_ranges] if args.key?(:protected_ranges) @row_groups = args[:row_groups] if args.key?(:row_groups) @slicers = args[:slicers] if args.key?(:slicers) end end # Properties of a sheet. class SheetProperties include Google::Apis::Core::Hashable # Additional properties of a DATA_SOURCE sheet. # Corresponds to the JSON property `dataSourceSheetProperties` # @return [Google::Apis::SheetsV4::DataSourceSheetProperties] attr_accessor :data_source_sheet_properties # Properties of a grid. # Corresponds to the JSON property `gridProperties` # @return [Google::Apis::SheetsV4::GridProperties] attr_accessor :grid_properties # True if the sheet is hidden in the UI, false if it's visible. # Corresponds to the JSON property `hidden` # @return [Boolean] attr_accessor :hidden alias_method :hidden?, :hidden # The index of the sheet within the spreadsheet. When adding or updating sheet # properties, if this field is excluded then the sheet is added or moved to the # end of the sheet list. When updating sheet indices or inserting sheets, # movement is considered in "before the move" indexes. For example, if there # were 3 sheets (S1, S2, S3) in order to move S1 ahead of S2 the index would # have to be set to 2. A sheet index update request is ignored if the requested # index is identical to the sheets current index or if the requested new index # is equal to the current sheet index + 1. # Corresponds to the JSON property `index` # @return [Fixnum] attr_accessor :index # True if the sheet is an RTL sheet instead of an LTR sheet. # Corresponds to the JSON property `rightToLeft` # @return [Boolean] attr_accessor :right_to_left alias_method :right_to_left?, :right_to_left # The ID of the sheet. Must be non-negative. This field cannot be changed once # set. # Corresponds to the JSON property `sheetId` # @return [Fixnum] attr_accessor :sheet_id # The type of sheet. Defaults to GRID. This field cannot be changed once set. # Corresponds to the JSON property `sheetType` # @return [String] attr_accessor :sheet_type # Represents a color in the RGBA color space. This representation is designed # for simplicity of conversion to/from color representations in various # languages over compactness; for example, the fields of this representation can # be trivially provided to the constructor of "java.awt.Color" in Java; it can # also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha" # method in iOS; and, with just a little work, it can be easily formatted into a # CSS "rgba()" string in JavaScript, as well. Note: this proto does not carry # information about the absolute color space that should be used to interpret # the RGB value (e.g. sRGB, Adobe RGB, DCI-P3, BT.2020, etc.). By default, # applications SHOULD assume the sRGB color space. Note: when color equality # needs to be decided, implementations, unless documented otherwise, will treat # two colors to be equal if all their red, green, blue and alpha values each # differ by at most 1e-5. Example (Java): import com.google.type.Color; // ... # public static java.awt.Color fromProto(Color protocolor) ` float alpha = # protocolor.hasAlpha() ? protocolor.getAlpha().getValue() : 1.0; return new # java.awt.Color( protocolor.getRed(), protocolor.getGreen(), protocolor.getBlue( # ), alpha); ` public static Color toProto(java.awt.Color color) ` float red = ( # float) color.getRed(); float green = (float) color.getGreen(); float blue = ( # float) color.getBlue(); float denominator = 255.0; Color.Builder resultBuilder # = Color .newBuilder() .setRed(red / denominator) .setGreen(green / denominator) # .setBlue(blue / denominator); int alpha = color.getAlpha(); if (alpha != 255) # ` result.setAlpha( FloatValue .newBuilder() .setValue(((float) alpha) / # denominator) .build()); ` return resultBuilder.build(); ` // ... Example (iOS / # Obj-C): // ... static UIColor* fromProto(Color* protocolor) ` float red = [ # protocolor red]; float green = [protocolor green]; float blue = [protocolor # blue]; FloatValue* alpha_wrapper = [protocolor alpha]; float alpha = 1.0; if ( # alpha_wrapper != nil) ` alpha = [alpha_wrapper value]; ` return [UIColor # colorWithRed:red green:green blue:blue alpha:alpha]; ` static Color* toProto( # UIColor* color) ` CGFloat red, green, blue, alpha; if (![color getRed:&red # green:&green blue:&blue alpha:&alpha]) ` return nil; ` Color* result = [[Color # alloc] init]; [result setRed:red]; [result setGreen:green]; [result setBlue: # blue]; if (alpha <= 0.9999) ` [result setAlpha:floatWrapperWithValue(alpha)]; ` # [result autorelease]; return result; ` // ... Example (JavaScript): // ... # var protoToCssColor = function(rgb_color) ` var redFrac = rgb_color.red || 0.0; # var greenFrac = rgb_color.green || 0.0; var blueFrac = rgb_color.blue || 0.0; # var red = Math.floor(redFrac * 255); var green = Math.floor(greenFrac * 255); # var blue = Math.floor(blueFrac * 255); if (!('alpha' in rgb_color)) ` return # rgbToCssColor_(red, green, blue); ` var alphaFrac = rgb_color.alpha.value || 0. # 0; var rgbParams = [red, green, blue].join(','); return ['rgba(', rgbParams, ', # ', alphaFrac, ')'].join(''); `; var rgbToCssColor_ = function(red, green, blue) # ` var rgbNumber = new Number((red << 16) | (green << 8) | blue); var # hexString = rgbNumber.toString(16); var missingZeros = 6 - hexString.length; # var resultBuilder = ['#']; for (var i = 0; i < missingZeros; i++) ` # resultBuilder.push('0'); ` resultBuilder.push(hexString); return resultBuilder. # join(''); `; // ... # Corresponds to the JSON property `tabColor` # @return [Google::Apis::SheetsV4::Color] attr_accessor :tab_color # A color value. # Corresponds to the JSON property `tabColorStyle` # @return [Google::Apis::SheetsV4::ColorStyle] attr_accessor :tab_color_style # The name of the sheet. # Corresponds to the JSON property `title` # @return [String] attr_accessor :title def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @data_source_sheet_properties = args[:data_source_sheet_properties] if args.key?(:data_source_sheet_properties) @grid_properties = args[:grid_properties] if args.key?(:grid_properties) @hidden = args[:hidden] if args.key?(:hidden) @index = args[:index] if args.key?(:index) @right_to_left = args[:right_to_left] if args.key?(:right_to_left) @sheet_id = args[:sheet_id] if args.key?(:sheet_id) @sheet_type = args[:sheet_type] if args.key?(:sheet_type) @tab_color = args[:tab_color] if args.key?(:tab_color) @tab_color_style = args[:tab_color_style] if args.key?(:tab_color_style) @title = args[:title] if args.key?(:title) end end # A slicer in a sheet. class Slicer include Google::Apis::Core::Hashable # The position of an embedded object such as a chart. # Corresponds to the JSON property `position` # @return [Google::Apis::SheetsV4::EmbeddedObjectPosition] attr_accessor :position # The ID of the slicer. # Corresponds to the JSON property `slicerId` # @return [Fixnum] attr_accessor :slicer_id # The specifications of a slicer. # Corresponds to the JSON property `spec` # @return [Google::Apis::SheetsV4::SlicerSpec] attr_accessor :spec def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @position = args[:position] if args.key?(:position) @slicer_id = args[:slicer_id] if args.key?(:slicer_id) @spec = args[:spec] if args.key?(:spec) end end # The specifications of a slicer. class SlicerSpec include Google::Apis::Core::Hashable # True if the filter should apply to pivot tables. If not set, default to `True`. # Corresponds to the JSON property `applyToPivotTables` # @return [Boolean] attr_accessor :apply_to_pivot_tables alias_method :apply_to_pivot_tables?, :apply_to_pivot_tables # Represents a color in the RGBA color space. This representation is designed # for simplicity of conversion to/from color representations in various # languages over compactness; for example, the fields of this representation can # be trivially provided to the constructor of "java.awt.Color" in Java; it can # also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha" # method in iOS; and, with just a little work, it can be easily formatted into a # CSS "rgba()" string in JavaScript, as well. Note: this proto does not carry # information about the absolute color space that should be used to interpret # the RGB value (e.g. sRGB, Adobe RGB, DCI-P3, BT.2020, etc.). By default, # applications SHOULD assume the sRGB color space. Note: when color equality # needs to be decided, implementations, unless documented otherwise, will treat # two colors to be equal if all their red, green, blue and alpha values each # differ by at most 1e-5. Example (Java): import com.google.type.Color; // ... # public static java.awt.Color fromProto(Color protocolor) ` float alpha = # protocolor.hasAlpha() ? protocolor.getAlpha().getValue() : 1.0; return new # java.awt.Color( protocolor.getRed(), protocolor.getGreen(), protocolor.getBlue( # ), alpha); ` public static Color toProto(java.awt.Color color) ` float red = ( # float) color.getRed(); float green = (float) color.getGreen(); float blue = ( # float) color.getBlue(); float denominator = 255.0; Color.Builder resultBuilder # = Color .newBuilder() .setRed(red / denominator) .setGreen(green / denominator) # .setBlue(blue / denominator); int alpha = color.getAlpha(); if (alpha != 255) # ` result.setAlpha( FloatValue .newBuilder() .setValue(((float) alpha) / # denominator) .build()); ` return resultBuilder.build(); ` // ... Example (iOS / # Obj-C): // ... static UIColor* fromProto(Color* protocolor) ` float red = [ # protocolor red]; float green = [protocolor green]; float blue = [protocolor # blue]; FloatValue* alpha_wrapper = [protocolor alpha]; float alpha = 1.0; if ( # alpha_wrapper != nil) ` alpha = [alpha_wrapper value]; ` return [UIColor # colorWithRed:red green:green blue:blue alpha:alpha]; ` static Color* toProto( # UIColor* color) ` CGFloat red, green, blue, alpha; if (![color getRed:&red # green:&green blue:&blue alpha:&alpha]) ` return nil; ` Color* result = [[Color # alloc] init]; [result setRed:red]; [result setGreen:green]; [result setBlue: # blue]; if (alpha <= 0.9999) ` [result setAlpha:floatWrapperWithValue(alpha)]; ` # [result autorelease]; return result; ` // ... Example (JavaScript): // ... # var protoToCssColor = function(rgb_color) ` var redFrac = rgb_color.red || 0.0; # var greenFrac = rgb_color.green || 0.0; var blueFrac = rgb_color.blue || 0.0; # var red = Math.floor(redFrac * 255); var green = Math.floor(greenFrac * 255); # var blue = Math.floor(blueFrac * 255); if (!('alpha' in rgb_color)) ` return # rgbToCssColor_(red, green, blue); ` var alphaFrac = rgb_color.alpha.value || 0. # 0; var rgbParams = [red, green, blue].join(','); return ['rgba(', rgbParams, ', # ', alphaFrac, ')'].join(''); `; var rgbToCssColor_ = function(red, green, blue) # ` var rgbNumber = new Number((red << 16) | (green << 8) | blue); var # hexString = rgbNumber.toString(16); var missingZeros = 6 - hexString.length; # var resultBuilder = ['#']; for (var i = 0; i < missingZeros; i++) ` # resultBuilder.push('0'); ` resultBuilder.push(hexString); return resultBuilder. # join(''); `; // ... # Corresponds to the JSON property `backgroundColor` # @return [Google::Apis::SheetsV4::Color] attr_accessor :background_color # A color value. # Corresponds to the JSON property `backgroundColorStyle` # @return [Google::Apis::SheetsV4::ColorStyle] attr_accessor :background_color_style # The column index in the data table on which the filter is applied to. # Corresponds to the JSON property `columnIndex` # @return [Fixnum] attr_accessor :column_index # A range on a sheet. All indexes are zero-based. Indexes are half open, i.e. # the start index is inclusive and the end index is exclusive -- [start_index, # end_index). Missing indexes indicate the range is unbounded on that side. For # example, if `"Sheet1"` is sheet ID 0, then: `Sheet1!A1:A1 == sheet_id: 0, # start_row_index: 0, end_row_index: 1, start_column_index: 0, end_column_index: # 1` `Sheet1!A3:B4 == sheet_id: 0, start_row_index: 2, end_row_index: 4, # start_column_index: 0, end_column_index: 2` `Sheet1!A:B == sheet_id: 0, # start_column_index: 0, end_column_index: 2` `Sheet1!A5:B == sheet_id: 0, # start_row_index: 4, start_column_index: 0, end_column_index: 2` `Sheet1 == # sheet_id:0` The start index must always be less than or equal to the end index. # If the start index equals the end index, then the range is empty. Empty # ranges are typically not meaningful and are usually rendered in the UI as `# # REF!`. # Corresponds to the JSON property `dataRange` # @return [Google::Apis::SheetsV4::GridRange] attr_accessor :data_range # Criteria for showing/hiding rows in a filter or filter view. # Corresponds to the JSON property `filterCriteria` # @return [Google::Apis::SheetsV4::FilterCriteria] attr_accessor :filter_criteria # The horizontal alignment of title in the slicer. If unspecified, defaults to ` # LEFT` # Corresponds to the JSON property `horizontalAlignment` # @return [String] attr_accessor :horizontal_alignment # The format of a run of text in a cell. Absent values indicate that the field # isn't specified. # Corresponds to the JSON property `textFormat` # @return [Google::Apis::SheetsV4::TextFormat] attr_accessor :text_format # The title of the slicer. # Corresponds to the JSON property `title` # @return [String] attr_accessor :title def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @apply_to_pivot_tables = args[:apply_to_pivot_tables] if args.key?(:apply_to_pivot_tables) @background_color = args[:background_color] if args.key?(:background_color) @background_color_style = args[:background_color_style] if args.key?(:background_color_style) @column_index = args[:column_index] if args.key?(:column_index) @data_range = args[:data_range] if args.key?(:data_range) @filter_criteria = args[:filter_criteria] if args.key?(:filter_criteria) @horizontal_alignment = args[:horizontal_alignment] if args.key?(:horizontal_alignment) @text_format = args[:text_format] if args.key?(:text_format) @title = args[:title] if args.key?(:title) end end # Sorts data in rows based on a sort order per column. class SortRangeRequest include Google::Apis::Core::Hashable # A range on a sheet. All indexes are zero-based. Indexes are half open, i.e. # the start index is inclusive and the end index is exclusive -- [start_index, # end_index). Missing indexes indicate the range is unbounded on that side. For # example, if `"Sheet1"` is sheet ID 0, then: `Sheet1!A1:A1 == sheet_id: 0, # start_row_index: 0, end_row_index: 1, start_column_index: 0, end_column_index: # 1` `Sheet1!A3:B4 == sheet_id: 0, start_row_index: 2, end_row_index: 4, # start_column_index: 0, end_column_index: 2` `Sheet1!A:B == sheet_id: 0, # start_column_index: 0, end_column_index: 2` `Sheet1!A5:B == sheet_id: 0, # start_row_index: 4, start_column_index: 0, end_column_index: 2` `Sheet1 == # sheet_id:0` The start index must always be less than or equal to the end index. # If the start index equals the end index, then the range is empty. Empty # ranges are typically not meaningful and are usually rendered in the UI as `# # REF!`. # Corresponds to the JSON property `range` # @return [Google::Apis::SheetsV4::GridRange] attr_accessor :range # The sort order per column. Later specifications are used when values are equal # in the earlier specifications. # Corresponds to the JSON property `sortSpecs` # @return [Array] attr_accessor :sort_specs def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @range = args[:range] if args.key?(:range) @sort_specs = args[:sort_specs] if args.key?(:sort_specs) end end # A sort order associated with a specific column or row. class SortSpec include Google::Apis::Core::Hashable # Represents a color in the RGBA color space. This representation is designed # for simplicity of conversion to/from color representations in various # languages over compactness; for example, the fields of this representation can # be trivially provided to the constructor of "java.awt.Color" in Java; it can # also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha" # method in iOS; and, with just a little work, it can be easily formatted into a # CSS "rgba()" string in JavaScript, as well. Note: this proto does not carry # information about the absolute color space that should be used to interpret # the RGB value (e.g. sRGB, Adobe RGB, DCI-P3, BT.2020, etc.). By default, # applications SHOULD assume the sRGB color space. Note: when color equality # needs to be decided, implementations, unless documented otherwise, will treat # two colors to be equal if all their red, green, blue and alpha values each # differ by at most 1e-5. Example (Java): import com.google.type.Color; // ... # public static java.awt.Color fromProto(Color protocolor) ` float alpha = # protocolor.hasAlpha() ? protocolor.getAlpha().getValue() : 1.0; return new # java.awt.Color( protocolor.getRed(), protocolor.getGreen(), protocolor.getBlue( # ), alpha); ` public static Color toProto(java.awt.Color color) ` float red = ( # float) color.getRed(); float green = (float) color.getGreen(); float blue = ( # float) color.getBlue(); float denominator = 255.0; Color.Builder resultBuilder # = Color .newBuilder() .setRed(red / denominator) .setGreen(green / denominator) # .setBlue(blue / denominator); int alpha = color.getAlpha(); if (alpha != 255) # ` result.setAlpha( FloatValue .newBuilder() .setValue(((float) alpha) / # denominator) .build()); ` return resultBuilder.build(); ` // ... Example (iOS / # Obj-C): // ... static UIColor* fromProto(Color* protocolor) ` float red = [ # protocolor red]; float green = [protocolor green]; float blue = [protocolor # blue]; FloatValue* alpha_wrapper = [protocolor alpha]; float alpha = 1.0; if ( # alpha_wrapper != nil) ` alpha = [alpha_wrapper value]; ` return [UIColor # colorWithRed:red green:green blue:blue alpha:alpha]; ` static Color* toProto( # UIColor* color) ` CGFloat red, green, blue, alpha; if (![color getRed:&red # green:&green blue:&blue alpha:&alpha]) ` return nil; ` Color* result = [[Color # alloc] init]; [result setRed:red]; [result setGreen:green]; [result setBlue: # blue]; if (alpha <= 0.9999) ` [result setAlpha:floatWrapperWithValue(alpha)]; ` # [result autorelease]; return result; ` // ... Example (JavaScript): // ... # var protoToCssColor = function(rgb_color) ` var redFrac = rgb_color.red || 0.0; # var greenFrac = rgb_color.green || 0.0; var blueFrac = rgb_color.blue || 0.0; # var red = Math.floor(redFrac * 255); var green = Math.floor(greenFrac * 255); # var blue = Math.floor(blueFrac * 255); if (!('alpha' in rgb_color)) ` return # rgbToCssColor_(red, green, blue); ` var alphaFrac = rgb_color.alpha.value || 0. # 0; var rgbParams = [red, green, blue].join(','); return ['rgba(', rgbParams, ', # ', alphaFrac, ')'].join(''); `; var rgbToCssColor_ = function(red, green, blue) # ` var rgbNumber = new Number((red << 16) | (green << 8) | blue); var # hexString = rgbNumber.toString(16); var missingZeros = 6 - hexString.length; # var resultBuilder = ['#']; for (var i = 0; i < missingZeros; i++) ` # resultBuilder.push('0'); ` resultBuilder.push(hexString); return resultBuilder. # join(''); `; // ... # Corresponds to the JSON property `backgroundColor` # @return [Google::Apis::SheetsV4::Color] attr_accessor :background_color # A color value. # Corresponds to the JSON property `backgroundColorStyle` # @return [Google::Apis::SheetsV4::ColorStyle] attr_accessor :background_color_style # An unique identifier that references a data source column. # Corresponds to the JSON property `dataSourceColumnReference` # @return [Google::Apis::SheetsV4::DataSourceColumnReference] attr_accessor :data_source_column_reference # The dimension the sort should be applied to. # Corresponds to the JSON property `dimensionIndex` # @return [Fixnum] attr_accessor :dimension_index # Represents a color in the RGBA color space. This representation is designed # for simplicity of conversion to/from color representations in various # languages over compactness; for example, the fields of this representation can # be trivially provided to the constructor of "java.awt.Color" in Java; it can # also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha" # method in iOS; and, with just a little work, it can be easily formatted into a # CSS "rgba()" string in JavaScript, as well. Note: this proto does not carry # information about the absolute color space that should be used to interpret # the RGB value (e.g. sRGB, Adobe RGB, DCI-P3, BT.2020, etc.). By default, # applications SHOULD assume the sRGB color space. Note: when color equality # needs to be decided, implementations, unless documented otherwise, will treat # two colors to be equal if all their red, green, blue and alpha values each # differ by at most 1e-5. Example (Java): import com.google.type.Color; // ... # public static java.awt.Color fromProto(Color protocolor) ` float alpha = # protocolor.hasAlpha() ? protocolor.getAlpha().getValue() : 1.0; return new # java.awt.Color( protocolor.getRed(), protocolor.getGreen(), protocolor.getBlue( # ), alpha); ` public static Color toProto(java.awt.Color color) ` float red = ( # float) color.getRed(); float green = (float) color.getGreen(); float blue = ( # float) color.getBlue(); float denominator = 255.0; Color.Builder resultBuilder # = Color .newBuilder() .setRed(red / denominator) .setGreen(green / denominator) # .setBlue(blue / denominator); int alpha = color.getAlpha(); if (alpha != 255) # ` result.setAlpha( FloatValue .newBuilder() .setValue(((float) alpha) / # denominator) .build()); ` return resultBuilder.build(); ` // ... Example (iOS / # Obj-C): // ... static UIColor* fromProto(Color* protocolor) ` float red = [ # protocolor red]; float green = [protocolor green]; float blue = [protocolor # blue]; FloatValue* alpha_wrapper = [protocolor alpha]; float alpha = 1.0; if ( # alpha_wrapper != nil) ` alpha = [alpha_wrapper value]; ` return [UIColor # colorWithRed:red green:green blue:blue alpha:alpha]; ` static Color* toProto( # UIColor* color) ` CGFloat red, green, blue, alpha; if (![color getRed:&red # green:&green blue:&blue alpha:&alpha]) ` return nil; ` Color* result = [[Color # alloc] init]; [result setRed:red]; [result setGreen:green]; [result setBlue: # blue]; if (alpha <= 0.9999) ` [result setAlpha:floatWrapperWithValue(alpha)]; ` # [result autorelease]; return result; ` // ... Example (JavaScript): // ... # var protoToCssColor = function(rgb_color) ` var redFrac = rgb_color.red || 0.0; # var greenFrac = rgb_color.green || 0.0; var blueFrac = rgb_color.blue || 0.0; # var red = Math.floor(redFrac * 255); var green = Math.floor(greenFrac * 255); # var blue = Math.floor(blueFrac * 255); if (!('alpha' in rgb_color)) ` return # rgbToCssColor_(red, green, blue); ` var alphaFrac = rgb_color.alpha.value || 0. # 0; var rgbParams = [red, green, blue].join(','); return ['rgba(', rgbParams, ', # ', alphaFrac, ')'].join(''); `; var rgbToCssColor_ = function(red, green, blue) # ` var rgbNumber = new Number((red << 16) | (green << 8) | blue); var # hexString = rgbNumber.toString(16); var missingZeros = 6 - hexString.length; # var resultBuilder = ['#']; for (var i = 0; i < missingZeros; i++) ` # resultBuilder.push('0'); ` resultBuilder.push(hexString); return resultBuilder. # join(''); `; // ... # Corresponds to the JSON property `foregroundColor` # @return [Google::Apis::SheetsV4::Color] attr_accessor :foreground_color # A color value. # Corresponds to the JSON property `foregroundColorStyle` # @return [Google::Apis::SheetsV4::ColorStyle] attr_accessor :foreground_color_style # The order data should be sorted. # Corresponds to the JSON property `sortOrder` # @return [String] attr_accessor :sort_order def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @background_color = args[:background_color] if args.key?(:background_color) @background_color_style = args[:background_color_style] if args.key?(:background_color_style) @data_source_column_reference = args[:data_source_column_reference] if args.key?(:data_source_column_reference) @dimension_index = args[:dimension_index] if args.key?(:dimension_index) @foreground_color = args[:foreground_color] if args.key?(:foreground_color) @foreground_color_style = args[:foreground_color_style] if args.key?(:foreground_color_style) @sort_order = args[:sort_order] if args.key?(:sort_order) end end # A combination of a source range and how to extend that source. class SourceAndDestination include Google::Apis::Core::Hashable # The dimension that data should be filled into. # Corresponds to the JSON property `dimension` # @return [String] attr_accessor :dimension # The number of rows or columns that data should be filled into. Positive # numbers expand beyond the last row or last column of the source. Negative # numbers expand before the first row or first column of the source. # Corresponds to the JSON property `fillLength` # @return [Fixnum] attr_accessor :fill_length # A range on a sheet. All indexes are zero-based. Indexes are half open, i.e. # the start index is inclusive and the end index is exclusive -- [start_index, # end_index). Missing indexes indicate the range is unbounded on that side. For # example, if `"Sheet1"` is sheet ID 0, then: `Sheet1!A1:A1 == sheet_id: 0, # start_row_index: 0, end_row_index: 1, start_column_index: 0, end_column_index: # 1` `Sheet1!A3:B4 == sheet_id: 0, start_row_index: 2, end_row_index: 4, # start_column_index: 0, end_column_index: 2` `Sheet1!A:B == sheet_id: 0, # start_column_index: 0, end_column_index: 2` `Sheet1!A5:B == sheet_id: 0, # start_row_index: 4, start_column_index: 0, end_column_index: 2` `Sheet1 == # sheet_id:0` The start index must always be less than or equal to the end index. # If the start index equals the end index, then the range is empty. Empty # ranges are typically not meaningful and are usually rendered in the UI as `# # REF!`. # Corresponds to the JSON property `source` # @return [Google::Apis::SheetsV4::GridRange] attr_accessor :source def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @dimension = args[:dimension] if args.key?(:dimension) @fill_length = args[:fill_length] if args.key?(:fill_length) @source = args[:source] if args.key?(:source) end end # Resource that represents a spreadsheet. class Spreadsheet include Google::Apis::Core::Hashable # Output only. A list of data source refresh schedules. # Corresponds to the JSON property `dataSourceSchedules` # @return [Array] attr_accessor :data_source_schedules # A list of external data sources connected with the spreadsheet. # Corresponds to the JSON property `dataSources` # @return [Array] attr_accessor :data_sources # The developer metadata associated with a spreadsheet. # Corresponds to the JSON property `developerMetadata` # @return [Array] attr_accessor :developer_metadata # The named ranges defined in a spreadsheet. # Corresponds to the JSON property `namedRanges` # @return [Array] attr_accessor :named_ranges # Properties of a spreadsheet. # Corresponds to the JSON property `properties` # @return [Google::Apis::SheetsV4::SpreadsheetProperties] attr_accessor :properties # The sheets that are part of a spreadsheet. # Corresponds to the JSON property `sheets` # @return [Array] attr_accessor :sheets # The ID of the spreadsheet. This field is read-only. # Corresponds to the JSON property `spreadsheetId` # @return [String] attr_accessor :spreadsheet_id # The url of the spreadsheet. This field is read-only. # Corresponds to the JSON property `spreadsheetUrl` # @return [String] attr_accessor :spreadsheet_url def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @data_source_schedules = args[:data_source_schedules] if args.key?(:data_source_schedules) @data_sources = args[:data_sources] if args.key?(:data_sources) @developer_metadata = args[:developer_metadata] if args.key?(:developer_metadata) @named_ranges = args[:named_ranges] if args.key?(:named_ranges) @properties = args[:properties] if args.key?(:properties) @sheets = args[:sheets] if args.key?(:sheets) @spreadsheet_id = args[:spreadsheet_id] if args.key?(:spreadsheet_id) @spreadsheet_url = args[:spreadsheet_url] if args.key?(:spreadsheet_url) end end # Properties of a spreadsheet. class SpreadsheetProperties include Google::Apis::Core::Hashable # The amount of time to wait before volatile functions are recalculated. # Corresponds to the JSON property `autoRecalc` # @return [String] attr_accessor :auto_recalc # The format of a cell. # Corresponds to the JSON property `defaultFormat` # @return [Google::Apis::SheetsV4::CellFormat] attr_accessor :default_format # Settings to control how circular dependencies are resolved with iterative # calculation. # Corresponds to the JSON property `iterativeCalculationSettings` # @return [Google::Apis::SheetsV4::IterativeCalculationSettings] attr_accessor :iterative_calculation_settings # The locale of the spreadsheet in one of the following formats: * an ISO 639-1 # language code such as `en` * an ISO 639-2 language code such as `fil`, if no # 639-1 code exists * a combination of the ISO language code and country code, # such as `en_US` Note: when updating this field, not all locales/languages are # supported. # Corresponds to the JSON property `locale` # @return [String] attr_accessor :locale # Represents spreadsheet theme # Corresponds to the JSON property `spreadsheetTheme` # @return [Google::Apis::SheetsV4::SpreadsheetTheme] attr_accessor :spreadsheet_theme # The time zone of the spreadsheet, in CLDR format such as `America/New_York`. # If the time zone isn't recognized, this may be a custom time zone such as `GMT- # 07:00`. # Corresponds to the JSON property `timeZone` # @return [String] attr_accessor :time_zone # The title of the spreadsheet. # Corresponds to the JSON property `title` # @return [String] attr_accessor :title def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @auto_recalc = args[:auto_recalc] if args.key?(:auto_recalc) @default_format = args[:default_format] if args.key?(:default_format) @iterative_calculation_settings = args[:iterative_calculation_settings] if args.key?(:iterative_calculation_settings) @locale = args[:locale] if args.key?(:locale) @spreadsheet_theme = args[:spreadsheet_theme] if args.key?(:spreadsheet_theme) @time_zone = args[:time_zone] if args.key?(:time_zone) @title = args[:title] if args.key?(:title) end end # Represents spreadsheet theme class SpreadsheetTheme include Google::Apis::Core::Hashable # Name of the primary font family. # Corresponds to the JSON property `primaryFontFamily` # @return [String] attr_accessor :primary_font_family # The spreadsheet theme color pairs. To update you must provide all theme color # pairs. # Corresponds to the JSON property `themeColors` # @return [Array] attr_accessor :theme_colors def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @primary_font_family = args[:primary_font_family] if args.key?(:primary_font_family) @theme_colors = args[:theme_colors] if args.key?(:theme_colors) end end # The format of a run of text in a cell. Absent values indicate that the field # isn't specified. class TextFormat include Google::Apis::Core::Hashable # True if the text is bold. # Corresponds to the JSON property `bold` # @return [Boolean] attr_accessor :bold alias_method :bold?, :bold # The font family. # Corresponds to the JSON property `fontFamily` # @return [String] attr_accessor :font_family # The size of the font. # Corresponds to the JSON property `fontSize` # @return [Fixnum] attr_accessor :font_size # Represents a color in the RGBA color space. This representation is designed # for simplicity of conversion to/from color representations in various # languages over compactness; for example, the fields of this representation can # be trivially provided to the constructor of "java.awt.Color" in Java; it can # also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha" # method in iOS; and, with just a little work, it can be easily formatted into a # CSS "rgba()" string in JavaScript, as well. Note: this proto does not carry # information about the absolute color space that should be used to interpret # the RGB value (e.g. sRGB, Adobe RGB, DCI-P3, BT.2020, etc.). By default, # applications SHOULD assume the sRGB color space. Note: when color equality # needs to be decided, implementations, unless documented otherwise, will treat # two colors to be equal if all their red, green, blue and alpha values each # differ by at most 1e-5. Example (Java): import com.google.type.Color; // ... # public static java.awt.Color fromProto(Color protocolor) ` float alpha = # protocolor.hasAlpha() ? protocolor.getAlpha().getValue() : 1.0; return new # java.awt.Color( protocolor.getRed(), protocolor.getGreen(), protocolor.getBlue( # ), alpha); ` public static Color toProto(java.awt.Color color) ` float red = ( # float) color.getRed(); float green = (float) color.getGreen(); float blue = ( # float) color.getBlue(); float denominator = 255.0; Color.Builder resultBuilder # = Color .newBuilder() .setRed(red / denominator) .setGreen(green / denominator) # .setBlue(blue / denominator); int alpha = color.getAlpha(); if (alpha != 255) # ` result.setAlpha( FloatValue .newBuilder() .setValue(((float) alpha) / # denominator) .build()); ` return resultBuilder.build(); ` // ... Example (iOS / # Obj-C): // ... static UIColor* fromProto(Color* protocolor) ` float red = [ # protocolor red]; float green = [protocolor green]; float blue = [protocolor # blue]; FloatValue* alpha_wrapper = [protocolor alpha]; float alpha = 1.0; if ( # alpha_wrapper != nil) ` alpha = [alpha_wrapper value]; ` return [UIColor # colorWithRed:red green:green blue:blue alpha:alpha]; ` static Color* toProto( # UIColor* color) ` CGFloat red, green, blue, alpha; if (![color getRed:&red # green:&green blue:&blue alpha:&alpha]) ` return nil; ` Color* result = [[Color # alloc] init]; [result setRed:red]; [result setGreen:green]; [result setBlue: # blue]; if (alpha <= 0.9999) ` [result setAlpha:floatWrapperWithValue(alpha)]; ` # [result autorelease]; return result; ` // ... Example (JavaScript): // ... # var protoToCssColor = function(rgb_color) ` var redFrac = rgb_color.red || 0.0; # var greenFrac = rgb_color.green || 0.0; var blueFrac = rgb_color.blue || 0.0; # var red = Math.floor(redFrac * 255); var green = Math.floor(greenFrac * 255); # var blue = Math.floor(blueFrac * 255); if (!('alpha' in rgb_color)) ` return # rgbToCssColor_(red, green, blue); ` var alphaFrac = rgb_color.alpha.value || 0. # 0; var rgbParams = [red, green, blue].join(','); return ['rgba(', rgbParams, ', # ', alphaFrac, ')'].join(''); `; var rgbToCssColor_ = function(red, green, blue) # ` var rgbNumber = new Number((red << 16) | (green << 8) | blue); var # hexString = rgbNumber.toString(16); var missingZeros = 6 - hexString.length; # var resultBuilder = ['#']; for (var i = 0; i < missingZeros; i++) ` # resultBuilder.push('0'); ` resultBuilder.push(hexString); return resultBuilder. # join(''); `; // ... # Corresponds to the JSON property `foregroundColor` # @return [Google::Apis::SheetsV4::Color] attr_accessor :foreground_color # A color value. # Corresponds to the JSON property `foregroundColorStyle` # @return [Google::Apis::SheetsV4::ColorStyle] attr_accessor :foreground_color_style # True if the text is italicized. # Corresponds to the JSON property `italic` # @return [Boolean] attr_accessor :italic alias_method :italic?, :italic # True if the text has a strikethrough. # Corresponds to the JSON property `strikethrough` # @return [Boolean] attr_accessor :strikethrough alias_method :strikethrough?, :strikethrough # True if the text is underlined. # Corresponds to the JSON property `underline` # @return [Boolean] attr_accessor :underline alias_method :underline?, :underline def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @bold = args[:bold] if args.key?(:bold) @font_family = args[:font_family] if args.key?(:font_family) @font_size = args[:font_size] if args.key?(:font_size) @foreground_color = args[:foreground_color] if args.key?(:foreground_color) @foreground_color_style = args[:foreground_color_style] if args.key?(:foreground_color_style) @italic = args[:italic] if args.key?(:italic) @strikethrough = args[:strikethrough] if args.key?(:strikethrough) @underline = args[:underline] if args.key?(:underline) end end # A run of a text format. The format of this run continues until the start index # of the next run. When updating, all fields must be set. class TextFormatRun include Google::Apis::Core::Hashable # The format of a run of text in a cell. Absent values indicate that the field # isn't specified. # Corresponds to the JSON property `format` # @return [Google::Apis::SheetsV4::TextFormat] attr_accessor :format # The character index where this run starts. # Corresponds to the JSON property `startIndex` # @return [Fixnum] attr_accessor :start_index def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @format = args[:format] if args.key?(:format) @start_index = args[:start_index] if args.key?(:start_index) end end # Position settings for text. class TextPosition include Google::Apis::Core::Hashable # Horizontal alignment setting for the piece of text. # Corresponds to the JSON property `horizontalAlignment` # @return [String] attr_accessor :horizontal_alignment def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @horizontal_alignment = args[:horizontal_alignment] if args.key?(:horizontal_alignment) end end # The rotation applied to text in a cell. class TextRotation include Google::Apis::Core::Hashable # The angle between the standard orientation and the desired orientation. # Measured in degrees. Valid values are between -90 and 90. Positive angles are # angled upwards, negative are angled downwards. Note: For LTR text direction # positive angles are in the counterclockwise direction, whereas for RTL they # are in the clockwise direction # Corresponds to the JSON property `angle` # @return [Fixnum] attr_accessor :angle # If true, text reads top to bottom, but the orientation of individual # characters is unchanged. For example: | V | | e | | r | | t | | i | | c | | a | # | l | # Corresponds to the JSON property `vertical` # @return [Boolean] attr_accessor :vertical alias_method :vertical?, :vertical def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @angle = args[:angle] if args.key?(:angle) @vertical = args[:vertical] if args.key?(:vertical) end end # Splits a column of text into multiple columns, based on a delimiter in each # cell. class TextToColumnsRequest include Google::Apis::Core::Hashable # The delimiter to use. Used only if delimiterType is CUSTOM. # Corresponds to the JSON property `delimiter` # @return [String] attr_accessor :delimiter # The delimiter type to use. # Corresponds to the JSON property `delimiterType` # @return [String] attr_accessor :delimiter_type # A range on a sheet. All indexes are zero-based. Indexes are half open, i.e. # the start index is inclusive and the end index is exclusive -- [start_index, # end_index). Missing indexes indicate the range is unbounded on that side. For # example, if `"Sheet1"` is sheet ID 0, then: `Sheet1!A1:A1 == sheet_id: 0, # start_row_index: 0, end_row_index: 1, start_column_index: 0, end_column_index: # 1` `Sheet1!A3:B4 == sheet_id: 0, start_row_index: 2, end_row_index: 4, # start_column_index: 0, end_column_index: 2` `Sheet1!A:B == sheet_id: 0, # start_column_index: 0, end_column_index: 2` `Sheet1!A5:B == sheet_id: 0, # start_row_index: 4, start_column_index: 0, end_column_index: 2` `Sheet1 == # sheet_id:0` The start index must always be less than or equal to the end index. # If the start index equals the end index, then the range is empty. Empty # ranges are typically not meaningful and are usually rendered in the UI as `# # REF!`. # Corresponds to the JSON property `source` # @return [Google::Apis::SheetsV4::GridRange] attr_accessor :source def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @delimiter = args[:delimiter] if args.key?(:delimiter) @delimiter_type = args[:delimiter_type] if args.key?(:delimiter_type) @source = args[:source] if args.key?(:source) end end # A pair mapping a spreadsheet theme color type to the concrete color it # represents. class ThemeColorPair include Google::Apis::Core::Hashable # A color value. # Corresponds to the JSON property `color` # @return [Google::Apis::SheetsV4::ColorStyle] attr_accessor :color # The type of the spreadsheet theme color. # Corresponds to the JSON property `colorType` # @return [String] attr_accessor :color_type def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @color = args[:color] if args.key?(:color) @color_type = args[:color_type] if args.key?(:color_type) end end # Represents a time of day. The date and time zone are either not significant or # are specified elsewhere. An API may choose to allow leap seconds. Related # types are google.type.Date and `google.protobuf.Timestamp`. class TimeOfDay include Google::Apis::Core::Hashable # Hours of day in 24 hour format. Should be from 0 to 23. An API may choose to # allow the value "24:00:00" for scenarios like business closing time. # Corresponds to the JSON property `hours` # @return [Fixnum] attr_accessor :hours # Minutes of hour of day. Must be from 0 to 59. # Corresponds to the JSON property `minutes` # @return [Fixnum] attr_accessor :minutes # Fractions of seconds in nanoseconds. Must be from 0 to 999,999,999. # Corresponds to the JSON property `nanos` # @return [Fixnum] attr_accessor :nanos # Seconds of minutes of the time. Must normally be from 0 to 59. An API may # allow the value 60 if it allows leap-seconds. # Corresponds to the JSON property `seconds` # @return [Fixnum] attr_accessor :seconds def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @hours = args[:hours] if args.key?(:hours) @minutes = args[:minutes] if args.key?(:minutes) @nanos = args[:nanos] if args.key?(:nanos) @seconds = args[:seconds] if args.key?(:seconds) end end # A color scale for a treemap chart. class TreemapChartColorScale include Google::Apis::Core::Hashable # Represents a color in the RGBA color space. This representation is designed # for simplicity of conversion to/from color representations in various # languages over compactness; for example, the fields of this representation can # be trivially provided to the constructor of "java.awt.Color" in Java; it can # also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha" # method in iOS; and, with just a little work, it can be easily formatted into a # CSS "rgba()" string in JavaScript, as well. Note: this proto does not carry # information about the absolute color space that should be used to interpret # the RGB value (e.g. sRGB, Adobe RGB, DCI-P3, BT.2020, etc.). By default, # applications SHOULD assume the sRGB color space. Note: when color equality # needs to be decided, implementations, unless documented otherwise, will treat # two colors to be equal if all their red, green, blue and alpha values each # differ by at most 1e-5. Example (Java): import com.google.type.Color; // ... # public static java.awt.Color fromProto(Color protocolor) ` float alpha = # protocolor.hasAlpha() ? protocolor.getAlpha().getValue() : 1.0; return new # java.awt.Color( protocolor.getRed(), protocolor.getGreen(), protocolor.getBlue( # ), alpha); ` public static Color toProto(java.awt.Color color) ` float red = ( # float) color.getRed(); float green = (float) color.getGreen(); float blue = ( # float) color.getBlue(); float denominator = 255.0; Color.Builder resultBuilder # = Color .newBuilder() .setRed(red / denominator) .setGreen(green / denominator) # .setBlue(blue / denominator); int alpha = color.getAlpha(); if (alpha != 255) # ` result.setAlpha( FloatValue .newBuilder() .setValue(((float) alpha) / # denominator) .build()); ` return resultBuilder.build(); ` // ... Example (iOS / # Obj-C): // ... static UIColor* fromProto(Color* protocolor) ` float red = [ # protocolor red]; float green = [protocolor green]; float blue = [protocolor # blue]; FloatValue* alpha_wrapper = [protocolor alpha]; float alpha = 1.0; if ( # alpha_wrapper != nil) ` alpha = [alpha_wrapper value]; ` return [UIColor # colorWithRed:red green:green blue:blue alpha:alpha]; ` static Color* toProto( # UIColor* color) ` CGFloat red, green, blue, alpha; if (![color getRed:&red # green:&green blue:&blue alpha:&alpha]) ` return nil; ` Color* result = [[Color # alloc] init]; [result setRed:red]; [result setGreen:green]; [result setBlue: # blue]; if (alpha <= 0.9999) ` [result setAlpha:floatWrapperWithValue(alpha)]; ` # [result autorelease]; return result; ` // ... Example (JavaScript): // ... # var protoToCssColor = function(rgb_color) ` var redFrac = rgb_color.red || 0.0; # var greenFrac = rgb_color.green || 0.0; var blueFrac = rgb_color.blue || 0.0; # var red = Math.floor(redFrac * 255); var green = Math.floor(greenFrac * 255); # var blue = Math.floor(blueFrac * 255); if (!('alpha' in rgb_color)) ` return # rgbToCssColor_(red, green, blue); ` var alphaFrac = rgb_color.alpha.value || 0. # 0; var rgbParams = [red, green, blue].join(','); return ['rgba(', rgbParams, ', # ', alphaFrac, ')'].join(''); `; var rgbToCssColor_ = function(red, green, blue) # ` var rgbNumber = new Number((red << 16) | (green << 8) | blue); var # hexString = rgbNumber.toString(16); var missingZeros = 6 - hexString.length; # var resultBuilder = ['#']; for (var i = 0; i < missingZeros; i++) ` # resultBuilder.push('0'); ` resultBuilder.push(hexString); return resultBuilder. # join(''); `; // ... # Corresponds to the JSON property `maxValueColor` # @return [Google::Apis::SheetsV4::Color] attr_accessor :max_value_color # A color value. # Corresponds to the JSON property `maxValueColorStyle` # @return [Google::Apis::SheetsV4::ColorStyle] attr_accessor :max_value_color_style # Represents a color in the RGBA color space. This representation is designed # for simplicity of conversion to/from color representations in various # languages over compactness; for example, the fields of this representation can # be trivially provided to the constructor of "java.awt.Color" in Java; it can # also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha" # method in iOS; and, with just a little work, it can be easily formatted into a # CSS "rgba()" string in JavaScript, as well. Note: this proto does not carry # information about the absolute color space that should be used to interpret # the RGB value (e.g. sRGB, Adobe RGB, DCI-P3, BT.2020, etc.). By default, # applications SHOULD assume the sRGB color space. Note: when color equality # needs to be decided, implementations, unless documented otherwise, will treat # two colors to be equal if all their red, green, blue and alpha values each # differ by at most 1e-5. Example (Java): import com.google.type.Color; // ... # public static java.awt.Color fromProto(Color protocolor) ` float alpha = # protocolor.hasAlpha() ? protocolor.getAlpha().getValue() : 1.0; return new # java.awt.Color( protocolor.getRed(), protocolor.getGreen(), protocolor.getBlue( # ), alpha); ` public static Color toProto(java.awt.Color color) ` float red = ( # float) color.getRed(); float green = (float) color.getGreen(); float blue = ( # float) color.getBlue(); float denominator = 255.0; Color.Builder resultBuilder # = Color .newBuilder() .setRed(red / denominator) .setGreen(green / denominator) # .setBlue(blue / denominator); int alpha = color.getAlpha(); if (alpha != 255) # ` result.setAlpha( FloatValue .newBuilder() .setValue(((float) alpha) / # denominator) .build()); ` return resultBuilder.build(); ` // ... Example (iOS / # Obj-C): // ... static UIColor* fromProto(Color* protocolor) ` float red = [ # protocolor red]; float green = [protocolor green]; float blue = [protocolor # blue]; FloatValue* alpha_wrapper = [protocolor alpha]; float alpha = 1.0; if ( # alpha_wrapper != nil) ` alpha = [alpha_wrapper value]; ` return [UIColor # colorWithRed:red green:green blue:blue alpha:alpha]; ` static Color* toProto( # UIColor* color) ` CGFloat red, green, blue, alpha; if (![color getRed:&red # green:&green blue:&blue alpha:&alpha]) ` return nil; ` Color* result = [[Color # alloc] init]; [result setRed:red]; [result setGreen:green]; [result setBlue: # blue]; if (alpha <= 0.9999) ` [result setAlpha:floatWrapperWithValue(alpha)]; ` # [result autorelease]; return result; ` // ... Example (JavaScript): // ... # var protoToCssColor = function(rgb_color) ` var redFrac = rgb_color.red || 0.0; # var greenFrac = rgb_color.green || 0.0; var blueFrac = rgb_color.blue || 0.0; # var red = Math.floor(redFrac * 255); var green = Math.floor(greenFrac * 255); # var blue = Math.floor(blueFrac * 255); if (!('alpha' in rgb_color)) ` return # rgbToCssColor_(red, green, blue); ` var alphaFrac = rgb_color.alpha.value || 0. # 0; var rgbParams = [red, green, blue].join(','); return ['rgba(', rgbParams, ', # ', alphaFrac, ')'].join(''); `; var rgbToCssColor_ = function(red, green, blue) # ` var rgbNumber = new Number((red << 16) | (green << 8) | blue); var # hexString = rgbNumber.toString(16); var missingZeros = 6 - hexString.length; # var resultBuilder = ['#']; for (var i = 0; i < missingZeros; i++) ` # resultBuilder.push('0'); ` resultBuilder.push(hexString); return resultBuilder. # join(''); `; // ... # Corresponds to the JSON property `midValueColor` # @return [Google::Apis::SheetsV4::Color] attr_accessor :mid_value_color # A color value. # Corresponds to the JSON property `midValueColorStyle` # @return [Google::Apis::SheetsV4::ColorStyle] attr_accessor :mid_value_color_style # Represents a color in the RGBA color space. This representation is designed # for simplicity of conversion to/from color representations in various # languages over compactness; for example, the fields of this representation can # be trivially provided to the constructor of "java.awt.Color" in Java; it can # also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha" # method in iOS; and, with just a little work, it can be easily formatted into a # CSS "rgba()" string in JavaScript, as well. Note: this proto does not carry # information about the absolute color space that should be used to interpret # the RGB value (e.g. sRGB, Adobe RGB, DCI-P3, BT.2020, etc.). By default, # applications SHOULD assume the sRGB color space. Note: when color equality # needs to be decided, implementations, unless documented otherwise, will treat # two colors to be equal if all their red, green, blue and alpha values each # differ by at most 1e-5. Example (Java): import com.google.type.Color; // ... # public static java.awt.Color fromProto(Color protocolor) ` float alpha = # protocolor.hasAlpha() ? protocolor.getAlpha().getValue() : 1.0; return new # java.awt.Color( protocolor.getRed(), protocolor.getGreen(), protocolor.getBlue( # ), alpha); ` public static Color toProto(java.awt.Color color) ` float red = ( # float) color.getRed(); float green = (float) color.getGreen(); float blue = ( # float) color.getBlue(); float denominator = 255.0; Color.Builder resultBuilder # = Color .newBuilder() .setRed(red / denominator) .setGreen(green / denominator) # .setBlue(blue / denominator); int alpha = color.getAlpha(); if (alpha != 255) # ` result.setAlpha( FloatValue .newBuilder() .setValue(((float) alpha) / # denominator) .build()); ` return resultBuilder.build(); ` // ... Example (iOS / # Obj-C): // ... static UIColor* fromProto(Color* protocolor) ` float red = [ # protocolor red]; float green = [protocolor green]; float blue = [protocolor # blue]; FloatValue* alpha_wrapper = [protocolor alpha]; float alpha = 1.0; if ( # alpha_wrapper != nil) ` alpha = [alpha_wrapper value]; ` return [UIColor # colorWithRed:red green:green blue:blue alpha:alpha]; ` static Color* toProto( # UIColor* color) ` CGFloat red, green, blue, alpha; if (![color getRed:&red # green:&green blue:&blue alpha:&alpha]) ` return nil; ` Color* result = [[Color # alloc] init]; [result setRed:red]; [result setGreen:green]; [result setBlue: # blue]; if (alpha <= 0.9999) ` [result setAlpha:floatWrapperWithValue(alpha)]; ` # [result autorelease]; return result; ` // ... Example (JavaScript): // ... # var protoToCssColor = function(rgb_color) ` var redFrac = rgb_color.red || 0.0; # var greenFrac = rgb_color.green || 0.0; var blueFrac = rgb_color.blue || 0.0; # var red = Math.floor(redFrac * 255); var green = Math.floor(greenFrac * 255); # var blue = Math.floor(blueFrac * 255); if (!('alpha' in rgb_color)) ` return # rgbToCssColor_(red, green, blue); ` var alphaFrac = rgb_color.alpha.value || 0. # 0; var rgbParams = [red, green, blue].join(','); return ['rgba(', rgbParams, ', # ', alphaFrac, ')'].join(''); `; var rgbToCssColor_ = function(red, green, blue) # ` var rgbNumber = new Number((red << 16) | (green << 8) | blue); var # hexString = rgbNumber.toString(16); var missingZeros = 6 - hexString.length; # var resultBuilder = ['#']; for (var i = 0; i < missingZeros; i++) ` # resultBuilder.push('0'); ` resultBuilder.push(hexString); return resultBuilder. # join(''); `; // ... # Corresponds to the JSON property `minValueColor` # @return [Google::Apis::SheetsV4::Color] attr_accessor :min_value_color # A color value. # Corresponds to the JSON property `minValueColorStyle` # @return [Google::Apis::SheetsV4::ColorStyle] attr_accessor :min_value_color_style # Represents a color in the RGBA color space. This representation is designed # for simplicity of conversion to/from color representations in various # languages over compactness; for example, the fields of this representation can # be trivially provided to the constructor of "java.awt.Color" in Java; it can # also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha" # method in iOS; and, with just a little work, it can be easily formatted into a # CSS "rgba()" string in JavaScript, as well. Note: this proto does not carry # information about the absolute color space that should be used to interpret # the RGB value (e.g. sRGB, Adobe RGB, DCI-P3, BT.2020, etc.). By default, # applications SHOULD assume the sRGB color space. Note: when color equality # needs to be decided, implementations, unless documented otherwise, will treat # two colors to be equal if all their red, green, blue and alpha values each # differ by at most 1e-5. Example (Java): import com.google.type.Color; // ... # public static java.awt.Color fromProto(Color protocolor) ` float alpha = # protocolor.hasAlpha() ? protocolor.getAlpha().getValue() : 1.0; return new # java.awt.Color( protocolor.getRed(), protocolor.getGreen(), protocolor.getBlue( # ), alpha); ` public static Color toProto(java.awt.Color color) ` float red = ( # float) color.getRed(); float green = (float) color.getGreen(); float blue = ( # float) color.getBlue(); float denominator = 255.0; Color.Builder resultBuilder # = Color .newBuilder() .setRed(red / denominator) .setGreen(green / denominator) # .setBlue(blue / denominator); int alpha = color.getAlpha(); if (alpha != 255) # ` result.setAlpha( FloatValue .newBuilder() .setValue(((float) alpha) / # denominator) .build()); ` return resultBuilder.build(); ` // ... Example (iOS / # Obj-C): // ... static UIColor* fromProto(Color* protocolor) ` float red = [ # protocolor red]; float green = [protocolor green]; float blue = [protocolor # blue]; FloatValue* alpha_wrapper = [protocolor alpha]; float alpha = 1.0; if ( # alpha_wrapper != nil) ` alpha = [alpha_wrapper value]; ` return [UIColor # colorWithRed:red green:green blue:blue alpha:alpha]; ` static Color* toProto( # UIColor* color) ` CGFloat red, green, blue, alpha; if (![color getRed:&red # green:&green blue:&blue alpha:&alpha]) ` return nil; ` Color* result = [[Color # alloc] init]; [result setRed:red]; [result setGreen:green]; [result setBlue: # blue]; if (alpha <= 0.9999) ` [result setAlpha:floatWrapperWithValue(alpha)]; ` # [result autorelease]; return result; ` // ... Example (JavaScript): // ... # var protoToCssColor = function(rgb_color) ` var redFrac = rgb_color.red || 0.0; # var greenFrac = rgb_color.green || 0.0; var blueFrac = rgb_color.blue || 0.0; # var red = Math.floor(redFrac * 255); var green = Math.floor(greenFrac * 255); # var blue = Math.floor(blueFrac * 255); if (!('alpha' in rgb_color)) ` return # rgbToCssColor_(red, green, blue); ` var alphaFrac = rgb_color.alpha.value || 0. # 0; var rgbParams = [red, green, blue].join(','); return ['rgba(', rgbParams, ', # ', alphaFrac, ')'].join(''); `; var rgbToCssColor_ = function(red, green, blue) # ` var rgbNumber = new Number((red << 16) | (green << 8) | blue); var # hexString = rgbNumber.toString(16); var missingZeros = 6 - hexString.length; # var resultBuilder = ['#']; for (var i = 0; i < missingZeros; i++) ` # resultBuilder.push('0'); ` resultBuilder.push(hexString); return resultBuilder. # join(''); `; // ... # Corresponds to the JSON property `noDataColor` # @return [Google::Apis::SheetsV4::Color] attr_accessor :no_data_color # A color value. # Corresponds to the JSON property `noDataColorStyle` # @return [Google::Apis::SheetsV4::ColorStyle] attr_accessor :no_data_color_style def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @max_value_color = args[:max_value_color] if args.key?(:max_value_color) @max_value_color_style = args[:max_value_color_style] if args.key?(:max_value_color_style) @mid_value_color = args[:mid_value_color] if args.key?(:mid_value_color) @mid_value_color_style = args[:mid_value_color_style] if args.key?(:mid_value_color_style) @min_value_color = args[:min_value_color] if args.key?(:min_value_color) @min_value_color_style = args[:min_value_color_style] if args.key?(:min_value_color_style) @no_data_color = args[:no_data_color] if args.key?(:no_data_color) @no_data_color_style = args[:no_data_color_style] if args.key?(:no_data_color_style) end end # A Treemap chart. class TreemapChartSpec include Google::Apis::Core::Hashable # The data included in a domain or series. # Corresponds to the JSON property `colorData` # @return [Google::Apis::SheetsV4::ChartData] attr_accessor :color_data # A color scale for a treemap chart. # Corresponds to the JSON property `colorScale` # @return [Google::Apis::SheetsV4::TreemapChartColorScale] attr_accessor :color_scale # Represents a color in the RGBA color space. This representation is designed # for simplicity of conversion to/from color representations in various # languages over compactness; for example, the fields of this representation can # be trivially provided to the constructor of "java.awt.Color" in Java; it can # also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha" # method in iOS; and, with just a little work, it can be easily formatted into a # CSS "rgba()" string in JavaScript, as well. Note: this proto does not carry # information about the absolute color space that should be used to interpret # the RGB value (e.g. sRGB, Adobe RGB, DCI-P3, BT.2020, etc.). By default, # applications SHOULD assume the sRGB color space. Note: when color equality # needs to be decided, implementations, unless documented otherwise, will treat # two colors to be equal if all their red, green, blue and alpha values each # differ by at most 1e-5. Example (Java): import com.google.type.Color; // ... # public static java.awt.Color fromProto(Color protocolor) ` float alpha = # protocolor.hasAlpha() ? protocolor.getAlpha().getValue() : 1.0; return new # java.awt.Color( protocolor.getRed(), protocolor.getGreen(), protocolor.getBlue( # ), alpha); ` public static Color toProto(java.awt.Color color) ` float red = ( # float) color.getRed(); float green = (float) color.getGreen(); float blue = ( # float) color.getBlue(); float denominator = 255.0; Color.Builder resultBuilder # = Color .newBuilder() .setRed(red / denominator) .setGreen(green / denominator) # .setBlue(blue / denominator); int alpha = color.getAlpha(); if (alpha != 255) # ` result.setAlpha( FloatValue .newBuilder() .setValue(((float) alpha) / # denominator) .build()); ` return resultBuilder.build(); ` // ... Example (iOS / # Obj-C): // ... static UIColor* fromProto(Color* protocolor) ` float red = [ # protocolor red]; float green = [protocolor green]; float blue = [protocolor # blue]; FloatValue* alpha_wrapper = [protocolor alpha]; float alpha = 1.0; if ( # alpha_wrapper != nil) ` alpha = [alpha_wrapper value]; ` return [UIColor # colorWithRed:red green:green blue:blue alpha:alpha]; ` static Color* toProto( # UIColor* color) ` CGFloat red, green, blue, alpha; if (![color getRed:&red # green:&green blue:&blue alpha:&alpha]) ` return nil; ` Color* result = [[Color # alloc] init]; [result setRed:red]; [result setGreen:green]; [result setBlue: # blue]; if (alpha <= 0.9999) ` [result setAlpha:floatWrapperWithValue(alpha)]; ` # [result autorelease]; return result; ` // ... Example (JavaScript): // ... # var protoToCssColor = function(rgb_color) ` var redFrac = rgb_color.red || 0.0; # var greenFrac = rgb_color.green || 0.0; var blueFrac = rgb_color.blue || 0.0; # var red = Math.floor(redFrac * 255); var green = Math.floor(greenFrac * 255); # var blue = Math.floor(blueFrac * 255); if (!('alpha' in rgb_color)) ` return # rgbToCssColor_(red, green, blue); ` var alphaFrac = rgb_color.alpha.value || 0. # 0; var rgbParams = [red, green, blue].join(','); return ['rgba(', rgbParams, ', # ', alphaFrac, ')'].join(''); `; var rgbToCssColor_ = function(red, green, blue) # ` var rgbNumber = new Number((red << 16) | (green << 8) | blue); var # hexString = rgbNumber.toString(16); var missingZeros = 6 - hexString.length; # var resultBuilder = ['#']; for (var i = 0; i < missingZeros; i++) ` # resultBuilder.push('0'); ` resultBuilder.push(hexString); return resultBuilder. # join(''); `; // ... # Corresponds to the JSON property `headerColor` # @return [Google::Apis::SheetsV4::Color] attr_accessor :header_color # A color value. # Corresponds to the JSON property `headerColorStyle` # @return [Google::Apis::SheetsV4::ColorStyle] attr_accessor :header_color_style # True to hide tooltips. # Corresponds to the JSON property `hideTooltips` # @return [Boolean] attr_accessor :hide_tooltips alias_method :hide_tooltips?, :hide_tooltips # The number of additional data levels beyond the labeled levels to be shown on # the treemap chart. These levels are not interactive and are shown without # their labels. Defaults to 0 if not specified. # Corresponds to the JSON property `hintedLevels` # @return [Fixnum] attr_accessor :hinted_levels # The data included in a domain or series. # Corresponds to the JSON property `labels` # @return [Google::Apis::SheetsV4::ChartData] attr_accessor :labels # The number of data levels to show on the treemap chart. These levels are # interactive and are shown with their labels. Defaults to 2 if not specified. # Corresponds to the JSON property `levels` # @return [Fixnum] attr_accessor :levels # The maximum possible data value. Cells with values greater than this will have # the same color as cells with this value. If not specified, defaults to the # actual maximum value from color_data, or the maximum value from size_data if # color_data is not specified. # Corresponds to the JSON property `maxValue` # @return [Float] attr_accessor :max_value # The minimum possible data value. Cells with values less than this will have # the same color as cells with this value. If not specified, defaults to the # actual minimum value from color_data, or the minimum value from size_data if # color_data is not specified. # Corresponds to the JSON property `minValue` # @return [Float] attr_accessor :min_value # The data included in a domain or series. # Corresponds to the JSON property `parentLabels` # @return [Google::Apis::SheetsV4::ChartData] attr_accessor :parent_labels # The data included in a domain or series. # Corresponds to the JSON property `sizeData` # @return [Google::Apis::SheetsV4::ChartData] attr_accessor :size_data # The format of a run of text in a cell. Absent values indicate that the field # isn't specified. # Corresponds to the JSON property `textFormat` # @return [Google::Apis::SheetsV4::TextFormat] attr_accessor :text_format def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @color_data = args[:color_data] if args.key?(:color_data) @color_scale = args[:color_scale] if args.key?(:color_scale) @header_color = args[:header_color] if args.key?(:header_color) @header_color_style = args[:header_color_style] if args.key?(:header_color_style) @hide_tooltips = args[:hide_tooltips] if args.key?(:hide_tooltips) @hinted_levels = args[:hinted_levels] if args.key?(:hinted_levels) @labels = args[:labels] if args.key?(:labels) @levels = args[:levels] if args.key?(:levels) @max_value = args[:max_value] if args.key?(:max_value) @min_value = args[:min_value] if args.key?(:min_value) @parent_labels = args[:parent_labels] if args.key?(:parent_labels) @size_data = args[:size_data] if args.key?(:size_data) @text_format = args[:text_format] if args.key?(:text_format) end end # Trims the whitespace (such as spaces, tabs, or new lines) in every cell in the # specified range. This request removes all whitespace from the start and end of # each cell's text, and reduces any subsequence of remaining whitespace # characters to a single space. If the resulting trimmed text starts with a '+' # or '=' character, the text remains as a string value and isn't interpreted as # a formula. class TrimWhitespaceRequest include Google::Apis::Core::Hashable # A range on a sheet. All indexes are zero-based. Indexes are half open, i.e. # the start index is inclusive and the end index is exclusive -- [start_index, # end_index). Missing indexes indicate the range is unbounded on that side. For # example, if `"Sheet1"` is sheet ID 0, then: `Sheet1!A1:A1 == sheet_id: 0, # start_row_index: 0, end_row_index: 1, start_column_index: 0, end_column_index: # 1` `Sheet1!A3:B4 == sheet_id: 0, start_row_index: 2, end_row_index: 4, # start_column_index: 0, end_column_index: 2` `Sheet1!A:B == sheet_id: 0, # start_column_index: 0, end_column_index: 2` `Sheet1!A5:B == sheet_id: 0, # start_row_index: 4, start_column_index: 0, end_column_index: 2` `Sheet1 == # sheet_id:0` The start index must always be less than or equal to the end index. # If the start index equals the end index, then the range is empty. Empty # ranges are typically not meaningful and are usually rendered in the UI as `# # REF!`. # Corresponds to the JSON property `range` # @return [Google::Apis::SheetsV4::GridRange] attr_accessor :range def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @range = args[:range] if args.key?(:range) end end # The result of trimming whitespace in cells. class TrimWhitespaceResponse include Google::Apis::Core::Hashable # The number of cells that were trimmed of whitespace. # Corresponds to the JSON property `cellsChangedCount` # @return [Fixnum] attr_accessor :cells_changed_count def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @cells_changed_count = args[:cells_changed_count] if args.key?(:cells_changed_count) end end # Unmerges cells in the given range. class UnmergeCellsRequest include Google::Apis::Core::Hashable # A range on a sheet. All indexes are zero-based. Indexes are half open, i.e. # the start index is inclusive and the end index is exclusive -- [start_index, # end_index). Missing indexes indicate the range is unbounded on that side. For # example, if `"Sheet1"` is sheet ID 0, then: `Sheet1!A1:A1 == sheet_id: 0, # start_row_index: 0, end_row_index: 1, start_column_index: 0, end_column_index: # 1` `Sheet1!A3:B4 == sheet_id: 0, start_row_index: 2, end_row_index: 4, # start_column_index: 0, end_column_index: 2` `Sheet1!A:B == sheet_id: 0, # start_column_index: 0, end_column_index: 2` `Sheet1!A5:B == sheet_id: 0, # start_row_index: 4, start_column_index: 0, end_column_index: 2` `Sheet1 == # sheet_id:0` The start index must always be less than or equal to the end index. # If the start index equals the end index, then the range is empty. Empty # ranges are typically not meaningful and are usually rendered in the UI as `# # REF!`. # Corresponds to the JSON property `range` # @return [Google::Apis::SheetsV4::GridRange] attr_accessor :range def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @range = args[:range] if args.key?(:range) end end # Updates properties of the supplied banded range. class UpdateBandingRequest include Google::Apis::Core::Hashable # A banded (alternating colors) range in a sheet. # Corresponds to the JSON property `bandedRange` # @return [Google::Apis::SheetsV4::BandedRange] attr_accessor :banded_range # The fields that should be updated. At least one field must be specified. The # root `bandedRange` is implied and should not be specified. A single `"*"` can # be used as short-hand for listing every field. # Corresponds to the JSON property `fields` # @return [String] attr_accessor :fields def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @banded_range = args[:banded_range] if args.key?(:banded_range) @fields = args[:fields] if args.key?(:fields) end end # Updates the borders of a range. If a field is not set in the request, that # means the border remains as-is. For example, with two subsequent # UpdateBordersRequest: 1. range: A1:A5 `` top: RED, bottom: WHITE `` 2. range: # A1:A5 `` left: BLUE `` That would result in A1:A5 having a borders of `` top: # RED, bottom: WHITE, left: BLUE ``. If you want to clear a border, explicitly # set the style to NONE. class UpdateBordersRequest include Google::Apis::Core::Hashable # A border along a cell. # Corresponds to the JSON property `bottom` # @return [Google::Apis::SheetsV4::Border] attr_accessor :bottom # A border along a cell. # Corresponds to the JSON property `innerHorizontal` # @return [Google::Apis::SheetsV4::Border] attr_accessor :inner_horizontal # A border along a cell. # Corresponds to the JSON property `innerVertical` # @return [Google::Apis::SheetsV4::Border] attr_accessor :inner_vertical # A border along a cell. # Corresponds to the JSON property `left` # @return [Google::Apis::SheetsV4::Border] attr_accessor :left # A range on a sheet. All indexes are zero-based. Indexes are half open, i.e. # the start index is inclusive and the end index is exclusive -- [start_index, # end_index). Missing indexes indicate the range is unbounded on that side. For # example, if `"Sheet1"` is sheet ID 0, then: `Sheet1!A1:A1 == sheet_id: 0, # start_row_index: 0, end_row_index: 1, start_column_index: 0, end_column_index: # 1` `Sheet1!A3:B4 == sheet_id: 0, start_row_index: 2, end_row_index: 4, # start_column_index: 0, end_column_index: 2` `Sheet1!A:B == sheet_id: 0, # start_column_index: 0, end_column_index: 2` `Sheet1!A5:B == sheet_id: 0, # start_row_index: 4, start_column_index: 0, end_column_index: 2` `Sheet1 == # sheet_id:0` The start index must always be less than or equal to the end index. # If the start index equals the end index, then the range is empty. Empty # ranges are typically not meaningful and are usually rendered in the UI as `# # REF!`. # Corresponds to the JSON property `range` # @return [Google::Apis::SheetsV4::GridRange] attr_accessor :range # A border along a cell. # Corresponds to the JSON property `right` # @return [Google::Apis::SheetsV4::Border] attr_accessor :right # A border along a cell. # Corresponds to the JSON property `top` # @return [Google::Apis::SheetsV4::Border] attr_accessor :top def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @bottom = args[:bottom] if args.key?(:bottom) @inner_horizontal = args[:inner_horizontal] if args.key?(:inner_horizontal) @inner_vertical = args[:inner_vertical] if args.key?(:inner_vertical) @left = args[:left] if args.key?(:left) @range = args[:range] if args.key?(:range) @right = args[:right] if args.key?(:right) @top = args[:top] if args.key?(:top) end end # Updates all cells in a range with new data. class UpdateCellsRequest include Google::Apis::Core::Hashable # The fields of CellData that should be updated. At least one field must be # specified. The root is the CellData; 'row.values.' should not be specified. A # single `"*"` can be used as short-hand for listing every field. # Corresponds to the JSON property `fields` # @return [String] attr_accessor :fields # A range on a sheet. All indexes are zero-based. Indexes are half open, i.e. # the start index is inclusive and the end index is exclusive -- [start_index, # end_index). Missing indexes indicate the range is unbounded on that side. For # example, if `"Sheet1"` is sheet ID 0, then: `Sheet1!A1:A1 == sheet_id: 0, # start_row_index: 0, end_row_index: 1, start_column_index: 0, end_column_index: # 1` `Sheet1!A3:B4 == sheet_id: 0, start_row_index: 2, end_row_index: 4, # start_column_index: 0, end_column_index: 2` `Sheet1!A:B == sheet_id: 0, # start_column_index: 0, end_column_index: 2` `Sheet1!A5:B == sheet_id: 0, # start_row_index: 4, start_column_index: 0, end_column_index: 2` `Sheet1 == # sheet_id:0` The start index must always be less than or equal to the end index. # If the start index equals the end index, then the range is empty. Empty # ranges are typically not meaningful and are usually rendered in the UI as `# # REF!`. # Corresponds to the JSON property `range` # @return [Google::Apis::SheetsV4::GridRange] attr_accessor :range # The data to write. # Corresponds to the JSON property `rows` # @return [Array] attr_accessor :rows # A coordinate in a sheet. All indexes are zero-based. # Corresponds to the JSON property `start` # @return [Google::Apis::SheetsV4::GridCoordinate] attr_accessor :start def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @fields = args[:fields] if args.key?(:fields) @range = args[:range] if args.key?(:range) @rows = args[:rows] if args.key?(:rows) @start = args[:start] if args.key?(:start) end end # Updates a chart's specifications. (This does not move or resize a chart. To # move or resize a chart, use UpdateEmbeddedObjectPositionRequest.) class UpdateChartSpecRequest include Google::Apis::Core::Hashable # The ID of the chart to update. # Corresponds to the JSON property `chartId` # @return [Fixnum] attr_accessor :chart_id # The specifications of a chart. # Corresponds to the JSON property `spec` # @return [Google::Apis::SheetsV4::ChartSpec] attr_accessor :spec def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @chart_id = args[:chart_id] if args.key?(:chart_id) @spec = args[:spec] if args.key?(:spec) end end # Updates a conditional format rule at the given index, or moves a conditional # format rule to another index. class UpdateConditionalFormatRuleRequest include Google::Apis::Core::Hashable # The zero-based index of the rule that should be replaced or moved. # Corresponds to the JSON property `index` # @return [Fixnum] attr_accessor :index # The zero-based new index the rule should end up at. # Corresponds to the JSON property `newIndex` # @return [Fixnum] attr_accessor :new_index # A rule describing a conditional format. # Corresponds to the JSON property `rule` # @return [Google::Apis::SheetsV4::ConditionalFormatRule] attr_accessor :rule # The sheet of the rule to move. Required if new_index is set, unused otherwise. # Corresponds to the JSON property `sheetId` # @return [Fixnum] attr_accessor :sheet_id def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @index = args[:index] if args.key?(:index) @new_index = args[:new_index] if args.key?(:new_index) @rule = args[:rule] if args.key?(:rule) @sheet_id = args[:sheet_id] if args.key?(:sheet_id) end end # The result of updating a conditional format rule. class UpdateConditionalFormatRuleResponse include Google::Apis::Core::Hashable # The index of the new rule. # Corresponds to the JSON property `newIndex` # @return [Fixnum] attr_accessor :new_index # A rule describing a conditional format. # Corresponds to the JSON property `newRule` # @return [Google::Apis::SheetsV4::ConditionalFormatRule] attr_accessor :new_rule # The old index of the rule. Not set if a rule was replaced (because it is the # same as new_index). # Corresponds to the JSON property `oldIndex` # @return [Fixnum] attr_accessor :old_index # A rule describing a conditional format. # Corresponds to the JSON property `oldRule` # @return [Google::Apis::SheetsV4::ConditionalFormatRule] attr_accessor :old_rule def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @new_index = args[:new_index] if args.key?(:new_index) @new_rule = args[:new_rule] if args.key?(:new_rule) @old_index = args[:old_index] if args.key?(:old_index) @old_rule = args[:old_rule] if args.key?(:old_rule) end end # Updates a data source. After the data source is updated successfully, an # execution is triggered to refresh the associated DATA_SOURCE sheet to read # data from the updated data source. The request requires an additional ` # bigquery.readonly` OAuth scope. class UpdateDataSourceRequest include Google::Apis::Core::Hashable # Information about an external data source in the spreadsheet. # Corresponds to the JSON property `dataSource` # @return [Google::Apis::SheetsV4::DataSource] attr_accessor :data_source # The fields that should be updated. At least one field must be specified. The # root `dataSource` is implied and should not be specified. A single `"*"` can # be used as short-hand for listing every field. # Corresponds to the JSON property `fields` # @return [String] attr_accessor :fields def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @data_source = args[:data_source] if args.key?(:data_source) @fields = args[:fields] if args.key?(:fields) end end # The response from updating data source. class UpdateDataSourceResponse include Google::Apis::Core::Hashable # The data execution status. A data execution is created to sync a data source # object with the latest data from a DataSource. It is usually scheduled to run # at background, you can check its state to tell if an execution completes There # are several scenarios where a data execution is triggered to run: * Adding a # data source creates an associated data source sheet as well as a data # execution to sync the data from the data source to the sheet. * Updating a # data source creates a data execution to refresh the associated data source # sheet similarly. * You can send refresh request to explicitly refresh one or # multiple data source objects. # Corresponds to the JSON property `dataExecutionStatus` # @return [Google::Apis::SheetsV4::DataExecutionStatus] attr_accessor :data_execution_status # Information about an external data source in the spreadsheet. # Corresponds to the JSON property `dataSource` # @return [Google::Apis::SheetsV4::DataSource] attr_accessor :data_source def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @data_execution_status = args[:data_execution_status] if args.key?(:data_execution_status) @data_source = args[:data_source] if args.key?(:data_source) end end # A request to update properties of developer metadata. Updates the properties # of the developer metadata selected by the filters to the values provided in # the DeveloperMetadata resource. Callers must specify the properties they wish # to update in the fields parameter, as well as specify at least one DataFilter # matching the metadata they wish to update. class UpdateDeveloperMetadataRequest include Google::Apis::Core::Hashable # The filters matching the developer metadata entries to update. # Corresponds to the JSON property `dataFilters` # @return [Array] attr_accessor :data_filters # Developer metadata associated with a location or object in a spreadsheet. # Developer metadata may be used to associate arbitrary data with various parts # of a spreadsheet and will remain associated at those locations as they move # around and the spreadsheet is edited. For example, if developer metadata is # associated with row 5 and another row is then subsequently inserted above row # 5, that original metadata will still be associated with the row it was first # associated with (what is now row 6). If the associated object is deleted its # metadata is deleted too. # Corresponds to the JSON property `developerMetadata` # @return [Google::Apis::SheetsV4::DeveloperMetadata] attr_accessor :developer_metadata # The fields that should be updated. At least one field must be specified. The # root `developerMetadata` is implied and should not be specified. A single `"*"` # can be used as short-hand for listing every field. # Corresponds to the JSON property `fields` # @return [String] attr_accessor :fields def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @data_filters = args[:data_filters] if args.key?(:data_filters) @developer_metadata = args[:developer_metadata] if args.key?(:developer_metadata) @fields = args[:fields] if args.key?(:fields) end end # The response from updating developer metadata. class UpdateDeveloperMetadataResponse include Google::Apis::Core::Hashable # The updated developer metadata. # Corresponds to the JSON property `developerMetadata` # @return [Array] attr_accessor :developer_metadata def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @developer_metadata = args[:developer_metadata] if args.key?(:developer_metadata) end end # Updates the state of the specified group. class UpdateDimensionGroupRequest include Google::Apis::Core::Hashable # A group over an interval of rows or columns on a sheet, which can contain or # be contained within other groups. A group can be collapsed or expanded as a # unit on the sheet. # Corresponds to the JSON property `dimensionGroup` # @return [Google::Apis::SheetsV4::DimensionGroup] attr_accessor :dimension_group # The fields that should be updated. At least one field must be specified. The # root `dimensionGroup` is implied and should not be specified. A single `"*"` # can be used as short-hand for listing every field. # Corresponds to the JSON property `fields` # @return [String] attr_accessor :fields def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @dimension_group = args[:dimension_group] if args.key?(:dimension_group) @fields = args[:fields] if args.key?(:fields) end end # Updates properties of dimensions within the specified range. class UpdateDimensionPropertiesRequest include Google::Apis::Core::Hashable # A range along a single dimension on a DATA_SOURCE sheet. # Corresponds to the JSON property `dataSourceSheetRange` # @return [Google::Apis::SheetsV4::DataSourceSheetDimensionRange] attr_accessor :data_source_sheet_range # The fields that should be updated. At least one field must be specified. The # root `properties` is implied and should not be specified. A single `"*"` can # be used as short-hand for listing every field. # Corresponds to the JSON property `fields` # @return [String] attr_accessor :fields # Properties about a dimension. # Corresponds to the JSON property `properties` # @return [Google::Apis::SheetsV4::DimensionProperties] attr_accessor :properties # A range along a single dimension on a sheet. All indexes are zero-based. # Indexes are half open: the start index is inclusive and the end index is # exclusive. Missing indexes indicate the range is unbounded on that side. # Corresponds to the JSON property `range` # @return [Google::Apis::SheetsV4::DimensionRange] attr_accessor :range def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @data_source_sheet_range = args[:data_source_sheet_range] if args.key?(:data_source_sheet_range) @fields = args[:fields] if args.key?(:fields) @properties = args[:properties] if args.key?(:properties) @range = args[:range] if args.key?(:range) end end # Updates an embedded object's border property. class UpdateEmbeddedObjectBorderRequest include Google::Apis::Core::Hashable # A border along an embedded object. # Corresponds to the JSON property `border` # @return [Google::Apis::SheetsV4::EmbeddedObjectBorder] attr_accessor :border # The fields that should be updated. At least one field must be specified. The # root `border` is implied and should not be specified. A single `"*"` can be # used as short-hand for listing every field. # Corresponds to the JSON property `fields` # @return [String] attr_accessor :fields # The ID of the embedded object to update. # Corresponds to the JSON property `objectId` # @return [Fixnum] attr_accessor :object_id_prop def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @border = args[:border] if args.key?(:border) @fields = args[:fields] if args.key?(:fields) @object_id_prop = args[:object_id_prop] if args.key?(:object_id_prop) end end # Update an embedded object's position (such as a moving or resizing a chart or # image). class UpdateEmbeddedObjectPositionRequest include Google::Apis::Core::Hashable # The fields of OverlayPosition that should be updated when setting a new # position. Used only if newPosition.overlayPosition is set, in which case at # least one field must be specified. The root `newPosition.overlayPosition` is # implied and should not be specified. A single `"*"` can be used as short-hand # for listing every field. # Corresponds to the JSON property `fields` # @return [String] attr_accessor :fields # The position of an embedded object such as a chart. # Corresponds to the JSON property `newPosition` # @return [Google::Apis::SheetsV4::EmbeddedObjectPosition] attr_accessor :new_position # The ID of the object to moved. # Corresponds to the JSON property `objectId` # @return [Fixnum] attr_accessor :object_id_prop def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @fields = args[:fields] if args.key?(:fields) @new_position = args[:new_position] if args.key?(:new_position) @object_id_prop = args[:object_id_prop] if args.key?(:object_id_prop) end end # The result of updating an embedded object's position. class UpdateEmbeddedObjectPositionResponse include Google::Apis::Core::Hashable # The position of an embedded object such as a chart. # Corresponds to the JSON property `position` # @return [Google::Apis::SheetsV4::EmbeddedObjectPosition] attr_accessor :position def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @position = args[:position] if args.key?(:position) end end # Updates properties of the filter view. class UpdateFilterViewRequest include Google::Apis::Core::Hashable # The fields that should be updated. At least one field must be specified. The # root `filter` is implied and should not be specified. A single `"*"` can be # used as short-hand for listing every field. # Corresponds to the JSON property `fields` # @return [String] attr_accessor :fields # A filter view. # Corresponds to the JSON property `filter` # @return [Google::Apis::SheetsV4::FilterView] attr_accessor :filter def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @fields = args[:fields] if args.key?(:fields) @filter = args[:filter] if args.key?(:filter) end end # Updates properties of the named range with the specified namedRangeId. class UpdateNamedRangeRequest include Google::Apis::Core::Hashable # The fields that should be updated. At least one field must be specified. The # root `namedRange` is implied and should not be specified. A single `"*"` can # be used as short-hand for listing every field. # Corresponds to the JSON property `fields` # @return [String] attr_accessor :fields # A named range. # Corresponds to the JSON property `namedRange` # @return [Google::Apis::SheetsV4::NamedRange] attr_accessor :named_range def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @fields = args[:fields] if args.key?(:fields) @named_range = args[:named_range] if args.key?(:named_range) end end # Updates an existing protected range with the specified protectedRangeId. class UpdateProtectedRangeRequest include Google::Apis::Core::Hashable # The fields that should be updated. At least one field must be specified. The # root `protectedRange` is implied and should not be specified. A single `"*"` # can be used as short-hand for listing every field. # Corresponds to the JSON property `fields` # @return [String] attr_accessor :fields # A protected range. # Corresponds to the JSON property `protectedRange` # @return [Google::Apis::SheetsV4::ProtectedRange] attr_accessor :protected_range def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @fields = args[:fields] if args.key?(:fields) @protected_range = args[:protected_range] if args.key?(:protected_range) end end # Updates properties of the sheet with the specified sheetId. class UpdateSheetPropertiesRequest include Google::Apis::Core::Hashable # The fields that should be updated. At least one field must be specified. The # root `properties` is implied and should not be specified. A single `"*"` can # be used as short-hand for listing every field. # Corresponds to the JSON property `fields` # @return [String] attr_accessor :fields # Properties of a sheet. # Corresponds to the JSON property `properties` # @return [Google::Apis::SheetsV4::SheetProperties] attr_accessor :properties def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @fields = args[:fields] if args.key?(:fields) @properties = args[:properties] if args.key?(:properties) end end # Updates a slicer's specifications. (This does not move or resize a slicer. To # move or resize a slicer use UpdateEmbeddedObjectPositionRequest. class UpdateSlicerSpecRequest include Google::Apis::Core::Hashable # The fields that should be updated. At least one field must be specified. The # root `SlicerSpec` is implied and should not be specified. A single "*"` can be # used as short-hand for listing every field. # Corresponds to the JSON property `fields` # @return [String] attr_accessor :fields # The id of the slicer to update. # Corresponds to the JSON property `slicerId` # @return [Fixnum] attr_accessor :slicer_id # The specifications of a slicer. # Corresponds to the JSON property `spec` # @return [Google::Apis::SheetsV4::SlicerSpec] attr_accessor :spec def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @fields = args[:fields] if args.key?(:fields) @slicer_id = args[:slicer_id] if args.key?(:slicer_id) @spec = args[:spec] if args.key?(:spec) end end # Updates properties of a spreadsheet. class UpdateSpreadsheetPropertiesRequest include Google::Apis::Core::Hashable # The fields that should be updated. At least one field must be specified. The # root 'properties' is implied and should not be specified. A single `"*"` can # be used as short-hand for listing every field. # Corresponds to the JSON property `fields` # @return [String] attr_accessor :fields # Properties of a spreadsheet. # Corresponds to the JSON property `properties` # @return [Google::Apis::SheetsV4::SpreadsheetProperties] attr_accessor :properties def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @fields = args[:fields] if args.key?(:fields) @properties = args[:properties] if args.key?(:properties) end end # The response when updating a range of values by a data filter in a spreadsheet. class UpdateValuesByDataFilterResponse include Google::Apis::Core::Hashable # Filter that describes what data should be selected or returned from a request. # Corresponds to the JSON property `dataFilter` # @return [Google::Apis::SheetsV4::DataFilter] attr_accessor :data_filter # The number of cells updated. # Corresponds to the JSON property `updatedCells` # @return [Fixnum] attr_accessor :updated_cells # The number of columns where at least one cell in the column was updated. # Corresponds to the JSON property `updatedColumns` # @return [Fixnum] attr_accessor :updated_columns # Data within a range of the spreadsheet. # Corresponds to the JSON property `updatedData` # @return [Google::Apis::SheetsV4::ValueRange] attr_accessor :updated_data # The range (in A1 notation) that updates were applied to. # Corresponds to the JSON property `updatedRange` # @return [String] attr_accessor :updated_range # The number of rows where at least one cell in the row was updated. # Corresponds to the JSON property `updatedRows` # @return [Fixnum] attr_accessor :updated_rows def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @data_filter = args[:data_filter] if args.key?(:data_filter) @updated_cells = args[:updated_cells] if args.key?(:updated_cells) @updated_columns = args[:updated_columns] if args.key?(:updated_columns) @updated_data = args[:updated_data] if args.key?(:updated_data) @updated_range = args[:updated_range] if args.key?(:updated_range) @updated_rows = args[:updated_rows] if args.key?(:updated_rows) end end # The response when updating a range of values in a spreadsheet. class UpdateValuesResponse include Google::Apis::Core::Hashable # The spreadsheet the updates were applied to. # Corresponds to the JSON property `spreadsheetId` # @return [String] attr_accessor :spreadsheet_id # The number of cells updated. # Corresponds to the JSON property `updatedCells` # @return [Fixnum] attr_accessor :updated_cells # The number of columns where at least one cell in the column was updated. # Corresponds to the JSON property `updatedColumns` # @return [Fixnum] attr_accessor :updated_columns # Data within a range of the spreadsheet. # Corresponds to the JSON property `updatedData` # @return [Google::Apis::SheetsV4::ValueRange] attr_accessor :updated_data # The range (in A1 notation) that updates were applied to. # Corresponds to the JSON property `updatedRange` # @return [String] attr_accessor :updated_range # The number of rows where at least one cell in the row was updated. # Corresponds to the JSON property `updatedRows` # @return [Fixnum] attr_accessor :updated_rows def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @spreadsheet_id = args[:spreadsheet_id] if args.key?(:spreadsheet_id) @updated_cells = args[:updated_cells] if args.key?(:updated_cells) @updated_columns = args[:updated_columns] if args.key?(:updated_columns) @updated_data = args[:updated_data] if args.key?(:updated_data) @updated_range = args[:updated_range] if args.key?(:updated_range) @updated_rows = args[:updated_rows] if args.key?(:updated_rows) end end # Data within a range of the spreadsheet. class ValueRange include Google::Apis::Core::Hashable # The major dimension of the values. For output, if the spreadsheet data is: `A1= # 1,B1=2,A2=3,B2=4`, then requesting `range=A1:B2,majorDimension=ROWS` will # return `[[1,2],[3,4]]`, whereas requesting `range=A1:B2,majorDimension=COLUMNS` # will return `[[1,3],[2,4]]`. For input, with `range=A1:B2,majorDimension=ROWS` # then `[[1,2],[3,4]]` will set `A1=1,B1=2,A2=3,B2=4`. With `range=A1:B2, # majorDimension=COLUMNS` then `[[1,2],[3,4]]` will set `A1=1,B1=3,A2=2,B2=4`. # When writing, if this field is not set, it defaults to ROWS. # Corresponds to the JSON property `majorDimension` # @return [String] attr_accessor :major_dimension # The range the values cover, in A1 notation. For output, this range indicates # the entire requested range, even though the values will exclude trailing rows # and columns. When appending values, this field represents the range to search # for a table, after which values will be appended. # Corresponds to the JSON property `range` # @return [String] attr_accessor :range # The data that was read or to be written. This is an array of arrays, the outer # array representing all the data and each inner array representing a major # dimension. Each item in the inner array corresponds with one cell. For output, # empty trailing rows and columns will not be included. For input, supported # value types are: bool, string, and double. Null values will be skipped. To set # a cell to an empty value, set the string value to an empty string. # Corresponds to the JSON property `values` # @return [Array>] attr_accessor :values def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @major_dimension = args[:major_dimension] if args.key?(:major_dimension) @range = args[:range] if args.key?(:range) @values = args[:values] if args.key?(:values) end end # Styles for a waterfall chart column. class WaterfallChartColumnStyle include Google::Apis::Core::Hashable # Represents a color in the RGBA color space. This representation is designed # for simplicity of conversion to/from color representations in various # languages over compactness; for example, the fields of this representation can # be trivially provided to the constructor of "java.awt.Color" in Java; it can # also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha" # method in iOS; and, with just a little work, it can be easily formatted into a # CSS "rgba()" string in JavaScript, as well. Note: this proto does not carry # information about the absolute color space that should be used to interpret # the RGB value (e.g. sRGB, Adobe RGB, DCI-P3, BT.2020, etc.). By default, # applications SHOULD assume the sRGB color space. Note: when color equality # needs to be decided, implementations, unless documented otherwise, will treat # two colors to be equal if all their red, green, blue and alpha values each # differ by at most 1e-5. Example (Java): import com.google.type.Color; // ... # public static java.awt.Color fromProto(Color protocolor) ` float alpha = # protocolor.hasAlpha() ? protocolor.getAlpha().getValue() : 1.0; return new # java.awt.Color( protocolor.getRed(), protocolor.getGreen(), protocolor.getBlue( # ), alpha); ` public static Color toProto(java.awt.Color color) ` float red = ( # float) color.getRed(); float green = (float) color.getGreen(); float blue = ( # float) color.getBlue(); float denominator = 255.0; Color.Builder resultBuilder # = Color .newBuilder() .setRed(red / denominator) .setGreen(green / denominator) # .setBlue(blue / denominator); int alpha = color.getAlpha(); if (alpha != 255) # ` result.setAlpha( FloatValue .newBuilder() .setValue(((float) alpha) / # denominator) .build()); ` return resultBuilder.build(); ` // ... Example (iOS / # Obj-C): // ... static UIColor* fromProto(Color* protocolor) ` float red = [ # protocolor red]; float green = [protocolor green]; float blue = [protocolor # blue]; FloatValue* alpha_wrapper = [protocolor alpha]; float alpha = 1.0; if ( # alpha_wrapper != nil) ` alpha = [alpha_wrapper value]; ` return [UIColor # colorWithRed:red green:green blue:blue alpha:alpha]; ` static Color* toProto( # UIColor* color) ` CGFloat red, green, blue, alpha; if (![color getRed:&red # green:&green blue:&blue alpha:&alpha]) ` return nil; ` Color* result = [[Color # alloc] init]; [result setRed:red]; [result setGreen:green]; [result setBlue: # blue]; if (alpha <= 0.9999) ` [result setAlpha:floatWrapperWithValue(alpha)]; ` # [result autorelease]; return result; ` // ... Example (JavaScript): // ... # var protoToCssColor = function(rgb_color) ` var redFrac = rgb_color.red || 0.0; # var greenFrac = rgb_color.green || 0.0; var blueFrac = rgb_color.blue || 0.0; # var red = Math.floor(redFrac * 255); var green = Math.floor(greenFrac * 255); # var blue = Math.floor(blueFrac * 255); if (!('alpha' in rgb_color)) ` return # rgbToCssColor_(red, green, blue); ` var alphaFrac = rgb_color.alpha.value || 0. # 0; var rgbParams = [red, green, blue].join(','); return ['rgba(', rgbParams, ', # ', alphaFrac, ')'].join(''); `; var rgbToCssColor_ = function(red, green, blue) # ` var rgbNumber = new Number((red << 16) | (green << 8) | blue); var # hexString = rgbNumber.toString(16); var missingZeros = 6 - hexString.length; # var resultBuilder = ['#']; for (var i = 0; i < missingZeros; i++) ` # resultBuilder.push('0'); ` resultBuilder.push(hexString); return resultBuilder. # join(''); `; // ... # Corresponds to the JSON property `color` # @return [Google::Apis::SheetsV4::Color] attr_accessor :color # A color value. # Corresponds to the JSON property `colorStyle` # @return [Google::Apis::SheetsV4::ColorStyle] attr_accessor :color_style # The label of the column's legend. # Corresponds to the JSON property `label` # @return [String] attr_accessor :label def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @color = args[:color] if args.key?(:color) @color_style = args[:color_style] if args.key?(:color_style) @label = args[:label] if args.key?(:label) end end # A custom subtotal column for a waterfall chart series. class WaterfallChartCustomSubtotal include Google::Apis::Core::Hashable # True if the data point at subtotal_index is the subtotal. If false, the # subtotal will be computed and appear after the data point. # Corresponds to the JSON property `dataIsSubtotal` # @return [Boolean] attr_accessor :data_is_subtotal alias_method :data_is_subtotal?, :data_is_subtotal # A label for the subtotal column. # Corresponds to the JSON property `label` # @return [String] attr_accessor :label # The 0-based index of a data point within the series. If data_is_subtotal is # true, the data point at this index is the subtotal. Otherwise, the subtotal # appears after the data point with this index. A series can have multiple # subtotals at arbitrary indices, but subtotals do not affect the indices of the # data points. For example, if a series has three data points, their indices # will always be 0, 1, and 2, regardless of how many subtotals exist on the # series or what data points they are associated with. # Corresponds to the JSON property `subtotalIndex` # @return [Fixnum] attr_accessor :subtotal_index def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @data_is_subtotal = args[:data_is_subtotal] if args.key?(:data_is_subtotal) @label = args[:label] if args.key?(:label) @subtotal_index = args[:subtotal_index] if args.key?(:subtotal_index) end end # The domain of a waterfall chart. class WaterfallChartDomain include Google::Apis::Core::Hashable # The data included in a domain or series. # Corresponds to the JSON property `data` # @return [Google::Apis::SheetsV4::ChartData] attr_accessor :data # True to reverse the order of the domain values (horizontal axis). # Corresponds to the JSON property `reversed` # @return [Boolean] attr_accessor :reversed alias_method :reversed?, :reversed def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @data = args[:data] if args.key?(:data) @reversed = args[:reversed] if args.key?(:reversed) end end # A single series of data for a waterfall chart. class WaterfallChartSeries include Google::Apis::Core::Hashable # Custom subtotal columns appearing in this series. The order in which subtotals # are defined is not significant. Only one subtotal may be defined for each data # point. # Corresponds to the JSON property `customSubtotals` # @return [Array] attr_accessor :custom_subtotals # The data included in a domain or series. # Corresponds to the JSON property `data` # @return [Google::Apis::SheetsV4::ChartData] attr_accessor :data # Settings for one set of data labels. Data labels are annotations that appear # next to a set of data, such as the points on a line chart, and provide # additional information about what the data represents, such as a text # representation of the value behind that point on the graph. # Corresponds to the JSON property `dataLabel` # @return [Google::Apis::SheetsV4::DataLabel] attr_accessor :data_label # True to hide the subtotal column from the end of the series. By default, a # subtotal column will appear at the end of each series. Setting this field to # true will hide that subtotal column for this series. # Corresponds to the JSON property `hideTrailingSubtotal` # @return [Boolean] attr_accessor :hide_trailing_subtotal alias_method :hide_trailing_subtotal?, :hide_trailing_subtotal # Styles for a waterfall chart column. # Corresponds to the JSON property `negativeColumnsStyle` # @return [Google::Apis::SheetsV4::WaterfallChartColumnStyle] attr_accessor :negative_columns_style # Styles for a waterfall chart column. # Corresponds to the JSON property `positiveColumnsStyle` # @return [Google::Apis::SheetsV4::WaterfallChartColumnStyle] attr_accessor :positive_columns_style # Styles for a waterfall chart column. # Corresponds to the JSON property `subtotalColumnsStyle` # @return [Google::Apis::SheetsV4::WaterfallChartColumnStyle] attr_accessor :subtotal_columns_style def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @custom_subtotals = args[:custom_subtotals] if args.key?(:custom_subtotals) @data = args[:data] if args.key?(:data) @data_label = args[:data_label] if args.key?(:data_label) @hide_trailing_subtotal = args[:hide_trailing_subtotal] if args.key?(:hide_trailing_subtotal) @negative_columns_style = args[:negative_columns_style] if args.key?(:negative_columns_style) @positive_columns_style = args[:positive_columns_style] if args.key?(:positive_columns_style) @subtotal_columns_style = args[:subtotal_columns_style] if args.key?(:subtotal_columns_style) end end # A waterfall chart. class WaterfallChartSpec include Google::Apis::Core::Hashable # Properties that describe the style of a line. # Corresponds to the JSON property `connectorLineStyle` # @return [Google::Apis::SheetsV4::LineStyle] attr_accessor :connector_line_style # The domain of a waterfall chart. # Corresponds to the JSON property `domain` # @return [Google::Apis::SheetsV4::WaterfallChartDomain] attr_accessor :domain # True to interpret the first value as a total. # Corresponds to the JSON property `firstValueIsTotal` # @return [Boolean] attr_accessor :first_value_is_total alias_method :first_value_is_total?, :first_value_is_total # True to hide connector lines between columns. # Corresponds to the JSON property `hideConnectorLines` # @return [Boolean] attr_accessor :hide_connector_lines alias_method :hide_connector_lines?, :hide_connector_lines # The data this waterfall chart is visualizing. # Corresponds to the JSON property `series` # @return [Array] attr_accessor :series # The stacked type. # Corresponds to the JSON property `stackedType` # @return [String] attr_accessor :stacked_type # Settings for one set of data labels. Data labels are annotations that appear # next to a set of data, such as the points on a line chart, and provide # additional information about what the data represents, such as a text # representation of the value behind that point on the graph. # Corresponds to the JSON property `totalDataLabel` # @return [Google::Apis::SheetsV4::DataLabel] attr_accessor :total_data_label def initialize(**args) update!(**args) end # Update properties of this object def update!(**args) @connector_line_style = args[:connector_line_style] if args.key?(:connector_line_style) @domain = args[:domain] if args.key?(:domain) @first_value_is_total = args[:first_value_is_total] if args.key?(:first_value_is_total) @hide_connector_lines = args[:hide_connector_lines] if args.key?(:hide_connector_lines) @series = args[:series] if args.key?(:series) @stacked_type = args[:stacked_type] if args.key?(:stacked_type) @total_data_label = args[:total_data_label] if args.key?(:total_data_label) end end end end end