blob: 21f68cb7b9b874dc0f9720d7407e1ef7efdef9fa [file] [log] [blame]
// This is a generated file (see the discoveryapis_generator project).
// ignore_for_file: camel_case_types
// ignore_for_file: comment_references
// ignore_for_file: file_names
// ignore_for_file: library_names
// ignore_for_file: lines_longer_than_80_chars
// ignore_for_file: non_constant_identifier_names
// ignore_for_file: prefer_expression_function_bodies
// ignore_for_file: prefer_interpolation_to_compose_strings
// ignore_for_file: unnecessary_brace_in_string_interps
// ignore_for_file: unnecessary_cast
// ignore_for_file: unnecessary_lambdas
// ignore_for_file: unnecessary_parenthesis
// ignore_for_file: unnecessary_string_interpolations
/// Google Sheets API - v4
///
/// Reads and writes Google Sheets.
///
/// For more information, see <https://developers.google.com/sheets/>
///
/// Create an instance of [SheetsApi] to access these resources:
///
/// - [SpreadsheetsResource]
/// - [SpreadsheetsDeveloperMetadataResource]
/// - [SpreadsheetsSheetsResource]
/// - [SpreadsheetsValuesResource]
library sheets.v4;
import 'dart:async' as async;
import 'dart:convert' as convert;
import 'dart:core' as core;
import 'package:_discoveryapis_commons/_discoveryapis_commons.dart' as commons;
import 'package:http/http.dart' as http;
import '../src/user_agent.dart';
export 'package:_discoveryapis_commons/_discoveryapis_commons.dart'
show ApiRequestError, DetailedApiRequestError;
/// Reads and writes Google Sheets.
class SheetsApi {
/// See, edit, create, and delete all of your Google Drive files
static const driveScope = 'https://www.googleapis.com/auth/drive';
/// View and manage Google Drive files and folders that you have opened or
/// created with this app
static const driveFileScope = 'https://www.googleapis.com/auth/drive.file';
/// See and download all your Google Drive files
static const driveReadonlyScope =
'https://www.googleapis.com/auth/drive.readonly';
/// See, edit, create, and delete your spreadsheets in Google Drive
static const spreadsheetsScope =
'https://www.googleapis.com/auth/spreadsheets';
/// View your Google Spreadsheets
static const spreadsheetsReadonlyScope =
'https://www.googleapis.com/auth/spreadsheets.readonly';
final commons.ApiRequester _requester;
SpreadsheetsResource get spreadsheets => SpreadsheetsResource(_requester);
SheetsApi(http.Client client,
{core.String rootUrl = 'https://sheets.googleapis.com/',
core.String servicePath = ''})
: _requester =
commons.ApiRequester(client, rootUrl, servicePath, userAgent);
}
class SpreadsheetsResource {
final commons.ApiRequester _requester;
SpreadsheetsDeveloperMetadataResource get developerMetadata =>
SpreadsheetsDeveloperMetadataResource(_requester);
SpreadsheetsSheetsResource get sheets =>
SpreadsheetsSheetsResource(_requester);
SpreadsheetsValuesResource get values =>
SpreadsheetsValuesResource(_requester);
SpreadsheetsResource(commons.ApiRequester client) : _requester = client;
/// Applies one or more updates to the spreadsheet.
///
/// Each request is validated before being applied. If any request is not
/// valid then the entire request will fail and nothing will be applied. Some
/// requests have replies to give you some information about how they are
/// applied. The replies will mirror the requests. For example, if you applied
/// 4 updates and the 3rd one had a reply, then the response will have 2 empty
/// replies, the actual reply, and another empty reply, in that order. Due to
/// the collaborative nature of spreadsheets, it is not guaranteed that the
/// spreadsheet will reflect exactly your changes after this completes,
/// however it is guaranteed that the updates in the request will be applied
/// together atomically. Your changes may be altered with respect to
/// collaborator changes. If there are no collaborators, the spreadsheet
/// should reflect your changes.
///
/// [request] - The metadata request object.
///
/// Request parameters:
///
/// [spreadsheetId] - The spreadsheet to apply the updates to.
///
/// [$fields] - Selector specifying which fields to include in a partial
/// response.
///
/// Completes with a [BatchUpdateSpreadsheetResponse].
///
/// Completes with a [commons.ApiRequestError] if the API endpoint returned an
/// error.
///
/// If the used [http.Client] completes with an error when making a REST call,
/// this method will complete with the same error.
async.Future<BatchUpdateSpreadsheetResponse> batchUpdate(
BatchUpdateSpreadsheetRequest request,
core.String spreadsheetId, {
core.String $fields,
}) async {
final _body =
request == null ? null : convert.json.encode(request.toJson());
if (spreadsheetId == null) {
throw core.ArgumentError('Parameter spreadsheetId is required.');
}
final _queryParams = <core.String, core.List<core.String>>{};
if ($fields != null) {
_queryParams['fields'] = [$fields];
}
final _url = 'v4/spreadsheets/' +
commons.Escaper.ecapeVariable('$spreadsheetId') +
':batchUpdate';
final _response = await _requester.request(
_url,
'POST',
body: _body,
queryParams: _queryParams,
);
return BatchUpdateSpreadsheetResponse.fromJson(
_response as core.Map<core.String, core.dynamic>);
}
/// Creates a spreadsheet, returning the newly created spreadsheet.
///
/// [request] - The metadata request object.
///
/// Request parameters:
///
/// [$fields] - Selector specifying which fields to include in a partial
/// response.
///
/// Completes with a [Spreadsheet].
///
/// Completes with a [commons.ApiRequestError] if the API endpoint returned an
/// error.
///
/// If the used [http.Client] completes with an error when making a REST call,
/// this method will complete with the same error.
async.Future<Spreadsheet> create(
Spreadsheet request, {
core.String $fields,
}) async {
final _body =
request == null ? null : convert.json.encode(request.toJson());
final _queryParams = <core.String, core.List<core.String>>{};
if ($fields != null) {
_queryParams['fields'] = [$fields];
}
const _url = 'v4/spreadsheets';
final _response = await _requester.request(
_url,
'POST',
body: _body,
queryParams: _queryParams,
);
return Spreadsheet.fromJson(
_response as core.Map<core.String, core.dynamic>);
}
/// Returns the spreadsheet at the given ID.
///
/// The caller must specify the spreadsheet ID. By default, data within grids
/// will not be returned. You can include grid data one of two ways: * Specify
/// a field mask listing your desired fields using the `fields` URL parameter
/// in HTTP * Set the includeGridData URL parameter to true. If a field mask
/// is set, the `includeGridData` parameter is ignored For large spreadsheets,
/// it is recommended to retrieve only the specific fields of the spreadsheet
/// that you want. To retrieve only subsets of the spreadsheet, use the ranges
/// URL parameter. Multiple ranges can be specified. Limiting the range will
/// return only the portions of the spreadsheet that intersect the requested
/// ranges. Ranges are specified using A1 notation.
///
/// Request parameters:
///
/// [spreadsheetId] - The spreadsheet to request.
///
/// [includeGridData] - True if grid data should be returned. This parameter
/// is ignored if a field mask was set in the request.
///
/// [ranges] - The ranges to retrieve from the spreadsheet.
///
/// [$fields] - Selector specifying which fields to include in a partial
/// response.
///
/// Completes with a [Spreadsheet].
///
/// Completes with a [commons.ApiRequestError] if the API endpoint returned an
/// error.
///
/// If the used [http.Client] completes with an error when making a REST call,
/// this method will complete with the same error.
async.Future<Spreadsheet> get(
core.String spreadsheetId, {
core.bool includeGridData,
core.List<core.String> ranges,
core.String $fields,
}) async {
if (spreadsheetId == null) {
throw core.ArgumentError('Parameter spreadsheetId is required.');
}
final _queryParams = <core.String, core.List<core.String>>{};
if (includeGridData != null) {
_queryParams['includeGridData'] = ['${includeGridData}'];
}
if (ranges != null) {
_queryParams['ranges'] = ranges;
}
if ($fields != null) {
_queryParams['fields'] = [$fields];
}
final _url =
'v4/spreadsheets/' + commons.Escaper.ecapeVariable('$spreadsheetId');
final _response = await _requester.request(
_url,
'GET',
queryParams: _queryParams,
);
return Spreadsheet.fromJson(
_response as core.Map<core.String, core.dynamic>);
}
/// Returns the spreadsheet at the given ID.
///
/// The caller must specify the spreadsheet ID. This method differs from
/// GetSpreadsheet in that it allows selecting which subsets of spreadsheet
/// data to return by specifying a dataFilters parameter. Multiple DataFilters
/// can be specified. Specifying one or more data filters will return the
/// portions of the spreadsheet that intersect ranges matched by any of the
/// filters. By default, data within grids will not be returned. You can
/// include grid data one of two ways: * Specify a field mask listing your
/// desired fields using the `fields` URL parameter in HTTP * Set the
/// includeGridData parameter to true. If a field mask is set, the
/// `includeGridData` parameter is ignored For large spreadsheets, it is
/// recommended to retrieve only the specific fields of the spreadsheet that
/// you want.
///
/// [request] - The metadata request object.
///
/// Request parameters:
///
/// [spreadsheetId] - The spreadsheet to request.
///
/// [$fields] - Selector specifying which fields to include in a partial
/// response.
///
/// Completes with a [Spreadsheet].
///
/// Completes with a [commons.ApiRequestError] if the API endpoint returned an
/// error.
///
/// If the used [http.Client] completes with an error when making a REST call,
/// this method will complete with the same error.
async.Future<Spreadsheet> getByDataFilter(
GetSpreadsheetByDataFilterRequest request,
core.String spreadsheetId, {
core.String $fields,
}) async {
final _body =
request == null ? null : convert.json.encode(request.toJson());
if (spreadsheetId == null) {
throw core.ArgumentError('Parameter spreadsheetId is required.');
}
final _queryParams = <core.String, core.List<core.String>>{};
if ($fields != null) {
_queryParams['fields'] = [$fields];
}
final _url = 'v4/spreadsheets/' +
commons.Escaper.ecapeVariable('$spreadsheetId') +
':getByDataFilter';
final _response = await _requester.request(
_url,
'POST',
body: _body,
queryParams: _queryParams,
);
return Spreadsheet.fromJson(
_response as core.Map<core.String, core.dynamic>);
}
}
class SpreadsheetsDeveloperMetadataResource {
final commons.ApiRequester _requester;
SpreadsheetsDeveloperMetadataResource(commons.ApiRequester client)
: _requester = client;
/// Returns the developer metadata with the specified ID.
///
/// The caller must specify the spreadsheet ID and the developer metadata's
/// unique metadataId.
///
/// Request parameters:
///
/// [spreadsheetId] - The ID of the spreadsheet to retrieve metadata from.
///
/// [metadataId] - The ID of the developer metadata to retrieve.
///
/// [$fields] - Selector specifying which fields to include in a partial
/// response.
///
/// Completes with a [DeveloperMetadata].
///
/// Completes with a [commons.ApiRequestError] if the API endpoint returned an
/// error.
///
/// If the used [http.Client] completes with an error when making a REST call,
/// this method will complete with the same error.
async.Future<DeveloperMetadata> get(
core.String spreadsheetId,
core.int metadataId, {
core.String $fields,
}) async {
if (spreadsheetId == null) {
throw core.ArgumentError('Parameter spreadsheetId is required.');
}
if (metadataId == null) {
throw core.ArgumentError('Parameter metadataId is required.');
}
final _queryParams = <core.String, core.List<core.String>>{};
if ($fields != null) {
_queryParams['fields'] = [$fields];
}
final _url = 'v4/spreadsheets/' +
commons.Escaper.ecapeVariable('$spreadsheetId') +
'/developerMetadata/' +
commons.Escaper.ecapeVariable('$metadataId');
final _response = await _requester.request(
_url,
'GET',
queryParams: _queryParams,
);
return DeveloperMetadata.fromJson(
_response as core.Map<core.String, core.dynamic>);
}
/// Returns all developer metadata matching the specified DataFilter.
///
/// If the provided DataFilter represents a DeveloperMetadataLookup object,
/// this will return all DeveloperMetadata entries selected by it. If the
/// DataFilter represents a location in a spreadsheet, this will return all
/// developer metadata associated with locations intersecting that region.
///
/// [request] - The metadata request object.
///
/// Request parameters:
///
/// [spreadsheetId] - The ID of the spreadsheet to retrieve metadata from.
///
/// [$fields] - Selector specifying which fields to include in a partial
/// response.
///
/// Completes with a [SearchDeveloperMetadataResponse].
///
/// Completes with a [commons.ApiRequestError] if the API endpoint returned an
/// error.
///
/// If the used [http.Client] completes with an error when making a REST call,
/// this method will complete with the same error.
async.Future<SearchDeveloperMetadataResponse> search(
SearchDeveloperMetadataRequest request,
core.String spreadsheetId, {
core.String $fields,
}) async {
final _body =
request == null ? null : convert.json.encode(request.toJson());
if (spreadsheetId == null) {
throw core.ArgumentError('Parameter spreadsheetId is required.');
}
final _queryParams = <core.String, core.List<core.String>>{};
if ($fields != null) {
_queryParams['fields'] = [$fields];
}
final _url = 'v4/spreadsheets/' +
commons.Escaper.ecapeVariable('$spreadsheetId') +
'/developerMetadata:search';
final _response = await _requester.request(
_url,
'POST',
body: _body,
queryParams: _queryParams,
);
return SearchDeveloperMetadataResponse.fromJson(
_response as core.Map<core.String, core.dynamic>);
}
}
class SpreadsheetsSheetsResource {
final commons.ApiRequester _requester;
SpreadsheetsSheetsResource(commons.ApiRequester client) : _requester = client;
/// Copies a single sheet from a spreadsheet to another spreadsheet.
///
/// Returns the properties of the newly created sheet.
///
/// [request] - The metadata request object.
///
/// Request parameters:
///
/// [spreadsheetId] - The ID of the spreadsheet containing the sheet to copy.
///
/// [sheetId] - The ID of the sheet to copy.
///
/// [$fields] - Selector specifying which fields to include in a partial
/// response.
///
/// Completes with a [SheetProperties].
///
/// Completes with a [commons.ApiRequestError] if the API endpoint returned an
/// error.
///
/// If the used [http.Client] completes with an error when making a REST call,
/// this method will complete with the same error.
async.Future<SheetProperties> copyTo(
CopySheetToAnotherSpreadsheetRequest request,
core.String spreadsheetId,
core.int sheetId, {
core.String $fields,
}) async {
final _body =
request == null ? null : convert.json.encode(request.toJson());
if (spreadsheetId == null) {
throw core.ArgumentError('Parameter spreadsheetId is required.');
}
if (sheetId == null) {
throw core.ArgumentError('Parameter sheetId is required.');
}
final _queryParams = <core.String, core.List<core.String>>{};
if ($fields != null) {
_queryParams['fields'] = [$fields];
}
final _url = 'v4/spreadsheets/' +
commons.Escaper.ecapeVariable('$spreadsheetId') +
'/sheets/' +
commons.Escaper.ecapeVariable('$sheetId') +
':copyTo';
final _response = await _requester.request(
_url,
'POST',
body: _body,
queryParams: _queryParams,
);
return SheetProperties.fromJson(
_response as core.Map<core.String, core.dynamic>);
}
}
class SpreadsheetsValuesResource {
final commons.ApiRequester _requester;
SpreadsheetsValuesResource(commons.ApiRequester client) : _requester = client;
/// Appends values to a spreadsheet.
///
/// The input range is used to search for existing data and find a "table"
/// within that range. Values will be appended to the next row of the table,
/// starting with the first column of the table. See the
/// \[guide\](/sheets/api/guides/values#appending_values) and \[sample
/// code\](/sheets/api/samples/writing#append_values) for specific details of
/// how tables are detected and data is appended. The caller must specify the
/// spreadsheet ID, range, and a valueInputOption. The `valueInputOption` only
/// controls how the input data will be added to the sheet (column-wise or
/// row-wise), it does not influence what cell the data starts being written
/// to.
///
/// [request] - The metadata request object.
///
/// Request parameters:
///
/// [spreadsheetId] - The ID of the spreadsheet to update.
///
/// [range] - The A1 notation of a range to search for a logical table of
/// data. Values are appended after the last row of the table.
///
/// [includeValuesInResponse] - Determines if the update response should
/// include the values of the cells that were appended. By default, responses
/// do not include the updated values.
///
/// [insertDataOption] - How the input data should be inserted.
/// Possible string values are:
/// - "OVERWRITE" : The new data overwrites existing data in the areas it is
/// written. (Note: adding data to the end of the sheet will still insert new
/// rows or columns so the data can be written.)
/// - "INSERT_ROWS" : Rows are inserted for the new data.
///
/// [responseDateTimeRenderOption] - 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\].
/// Possible string values are:
/// - "SERIAL_NUMBER" : Instructs date, time, datetime, and duration fields to
/// be output as doubles in "serial number" format, as popularized by Lotus
/// 1-2-3. The whole number portion of the value (left of the decimal) counts
/// the days since December 30th 1899. The fractional portion (right of the
/// decimal) counts the time as a fraction of the day. For example, January
/// 1st 1900 at noon would be 2.5, 2 because it's 2 days after December 30st
/// 1899, and .5 because noon is half a day. February 1st 1900 at 3pm would be
/// 33.625. This correctly treats the year 1900 as not a leap year.
/// - "FORMATTED_STRING" : Instructs date, time, datetime, and duration fields
/// to be output as strings in their given number format (which is dependent
/// on the spreadsheet locale).
///
/// [responseValueRenderOption] - Determines how values in the response should
/// be rendered. The default render option is
/// ValueRenderOption.FORMATTED_VALUE.
/// Possible string values are:
/// - "FORMATTED_VALUE" : Values will be calculated & formatted in the reply
/// according to the cell's formatting. Formatting is based on the
/// spreadsheet's locale, not the requesting user's locale. For example, if
/// `A1` is `1.23` and `A2` is `=A1` and formatted as currency, then `A2`
/// would return `"$1.23"`.
/// - "UNFORMATTED_VALUE" : Values will be calculated, but not formatted in
/// the reply. For example, if `A1` is `1.23` and `A2` is `=A1` and formatted
/// as currency, then `A2` would return the number `1.23`.
/// - "FORMULA" : Values will not be calculated. The reply will include the
/// formulas. For example, if `A1` is `1.23` and `A2` is `=A1` and formatted
/// as currency, then A2 would return `"=A1"`.
///
/// [valueInputOption] - How the input data should be interpreted.
/// Possible string values are:
/// - "INPUT_VALUE_OPTION_UNSPECIFIED" : Default input value. This value must
/// not be used.
/// - "RAW" : The values the user has entered will not be parsed and will be
/// stored as-is.
/// - "USER_ENTERED" : The values will be parsed as if the user typed them
/// into the UI. Numbers will stay as numbers, but strings may be converted to
/// numbers, dates, etc. following the same rules that are applied when
/// entering text into a cell via the Google Sheets UI.
///
/// [$fields] - Selector specifying which fields to include in a partial
/// response.
///
/// Completes with a [AppendValuesResponse].
///
/// Completes with a [commons.ApiRequestError] if the API endpoint returned an
/// error.
///
/// If the used [http.Client] completes with an error when making a REST call,
/// this method will complete with the same error.
async.Future<AppendValuesResponse> append(
ValueRange request,
core.String spreadsheetId,
core.String range, {
core.bool includeValuesInResponse,
core.String insertDataOption,
core.String responseDateTimeRenderOption,
core.String responseValueRenderOption,
core.String valueInputOption,
core.String $fields,
}) async {
final _body =
request == null ? null : convert.json.encode(request.toJson());
if (spreadsheetId == null) {
throw core.ArgumentError('Parameter spreadsheetId is required.');
}
if (range == null) {
throw core.ArgumentError('Parameter range is required.');
}
final _queryParams = <core.String, core.List<core.String>>{};
if (includeValuesInResponse != null) {
_queryParams['includeValuesInResponse'] = ['${includeValuesInResponse}'];
}
if (insertDataOption != null) {
_queryParams['insertDataOption'] = [insertDataOption];
}
if (responseDateTimeRenderOption != null) {
_queryParams['responseDateTimeRenderOption'] = [
responseDateTimeRenderOption
];
}
if (responseValueRenderOption != null) {
_queryParams['responseValueRenderOption'] = [responseValueRenderOption];
}
if (valueInputOption != null) {
_queryParams['valueInputOption'] = [valueInputOption];
}
if ($fields != null) {
_queryParams['fields'] = [$fields];
}
final _url = 'v4/spreadsheets/' +
commons.Escaper.ecapeVariable('$spreadsheetId') +
'/values/' +
commons.Escaper.ecapeVariable('$range') +
':append';
final _response = await _requester.request(
_url,
'POST',
body: _body,
queryParams: _queryParams,
);
return AppendValuesResponse.fromJson(
_response as core.Map<core.String, core.dynamic>);
}
/// Clears one or more ranges of values from a spreadsheet.
///
/// The caller must specify the spreadsheet ID and one or more ranges. Only
/// values are cleared -- all other properties of the cell (such as
/// formatting, data validation, etc..) are kept.
///
/// [request] - The metadata request object.
///
/// Request parameters:
///
/// [spreadsheetId] - The ID of the spreadsheet to update.
///
/// [$fields] - Selector specifying which fields to include in a partial
/// response.
///
/// Completes with a [BatchClearValuesResponse].
///
/// Completes with a [commons.ApiRequestError] if the API endpoint returned an
/// error.
///
/// If the used [http.Client] completes with an error when making a REST call,
/// this method will complete with the same error.
async.Future<BatchClearValuesResponse> batchClear(
BatchClearValuesRequest request,
core.String spreadsheetId, {
core.String $fields,
}) async {
final _body =
request == null ? null : convert.json.encode(request.toJson());
if (spreadsheetId == null) {
throw core.ArgumentError('Parameter spreadsheetId is required.');
}
final _queryParams = <core.String, core.List<core.String>>{};
if ($fields != null) {
_queryParams['fields'] = [$fields];
}
final _url = 'v4/spreadsheets/' +
commons.Escaper.ecapeVariable('$spreadsheetId') +
'/values:batchClear';
final _response = await _requester.request(
_url,
'POST',
body: _body,
queryParams: _queryParams,
);
return BatchClearValuesResponse.fromJson(
_response as core.Map<core.String, core.dynamic>);
}
/// Clears one or more ranges of values from a spreadsheet.
///
/// The caller must specify the spreadsheet ID and one or more DataFilters.
/// Ranges matching any of the specified data filters will be cleared. Only
/// values are cleared -- all other properties of the cell (such as
/// formatting, data validation, etc..) are kept.
///
/// [request] - The metadata request object.
///
/// Request parameters:
///
/// [spreadsheetId] - The ID of the spreadsheet to update.
///
/// [$fields] - Selector specifying which fields to include in a partial
/// response.
///
/// Completes with a [BatchClearValuesByDataFilterResponse].
///
/// Completes with a [commons.ApiRequestError] if the API endpoint returned an
/// error.
///
/// If the used [http.Client] completes with an error when making a REST call,
/// this method will complete with the same error.
async.Future<BatchClearValuesByDataFilterResponse> batchClearByDataFilter(
BatchClearValuesByDataFilterRequest request,
core.String spreadsheetId, {
core.String $fields,
}) async {
final _body =
request == null ? null : convert.json.encode(request.toJson());
if (spreadsheetId == null) {
throw core.ArgumentError('Parameter spreadsheetId is required.');
}
final _queryParams = <core.String, core.List<core.String>>{};
if ($fields != null) {
_queryParams['fields'] = [$fields];
}
final _url = 'v4/spreadsheets/' +
commons.Escaper.ecapeVariable('$spreadsheetId') +
'/values:batchClearByDataFilter';
final _response = await _requester.request(
_url,
'POST',
body: _body,
queryParams: _queryParams,
);
return BatchClearValuesByDataFilterResponse.fromJson(
_response as core.Map<core.String, core.dynamic>);
}
/// Returns one or more ranges of values from a spreadsheet.
///
/// The caller must specify the spreadsheet ID and one or more ranges.
///
/// Request parameters:
///
/// [spreadsheetId] - The ID of the spreadsheet to retrieve data from.
///
/// [dateTimeRenderOption] - 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\].
/// Possible string values are:
/// - "SERIAL_NUMBER" : Instructs date, time, datetime, and duration fields to
/// be output as doubles in "serial number" format, as popularized by Lotus
/// 1-2-3. The whole number portion of the value (left of the decimal) counts
/// the days since December 30th 1899. The fractional portion (right of the
/// decimal) counts the time as a fraction of the day. For example, January
/// 1st 1900 at noon would be 2.5, 2 because it's 2 days after December 30st
/// 1899, and .5 because noon is half a day. February 1st 1900 at 3pm would be
/// 33.625. This correctly treats the year 1900 as not a leap year.
/// - "FORMATTED_STRING" : Instructs date, time, datetime, and duration fields
/// to be output as strings in their given number format (which is dependent
/// on the spreadsheet locale).
///
/// [majorDimension] - The major dimension that results should use. For
/// example, if the spreadsheet data is: `A1=1,B1=2,A2=3,B2=4`, then
/// requesting `range=A1:B2,majorDimension=ROWS` returns `[[1,2],[3,4]]`,
/// whereas requesting `range=A1:B2,majorDimension=COLUMNS` returns
/// `[[1,3],[2,4]]`.
/// Possible string values are:
/// - "DIMENSION_UNSPECIFIED" : The default value, do not use.
/// - "ROWS" : Operates on the rows of a sheet.
/// - "COLUMNS" : Operates on the columns of a sheet.
///
/// [ranges] - The A1 notation of the values to retrieve.
///
/// [valueRenderOption] - How values should be represented in the output. The
/// default render option is ValueRenderOption.FORMATTED_VALUE.
/// Possible string values are:
/// - "FORMATTED_VALUE" : Values will be calculated & formatted in the reply
/// according to the cell's formatting. Formatting is based on the
/// spreadsheet's locale, not the requesting user's locale. For example, if
/// `A1` is `1.23` and `A2` is `=A1` and formatted as currency, then `A2`
/// would return `"$1.23"`.
/// - "UNFORMATTED_VALUE" : Values will be calculated, but not formatted in
/// the reply. For example, if `A1` is `1.23` and `A2` is `=A1` and formatted
/// as currency, then `A2` would return the number `1.23`.
/// - "FORMULA" : Values will not be calculated. The reply will include the
/// formulas. For example, if `A1` is `1.23` and `A2` is `=A1` and formatted
/// as currency, then A2 would return `"=A1"`.
///
/// [$fields] - Selector specifying which fields to include in a partial
/// response.
///
/// Completes with a [BatchGetValuesResponse].
///
/// Completes with a [commons.ApiRequestError] if the API endpoint returned an
/// error.
///
/// If the used [http.Client] completes with an error when making a REST call,
/// this method will complete with the same error.
async.Future<BatchGetValuesResponse> batchGet(
core.String spreadsheetId, {
core.String dateTimeRenderOption,
core.String majorDimension,
core.List<core.String> ranges,
core.String valueRenderOption,
core.String $fields,
}) async {
if (spreadsheetId == null) {
throw core.ArgumentError('Parameter spreadsheetId is required.');
}
final _queryParams = <core.String, core.List<core.String>>{};
if (dateTimeRenderOption != null) {
_queryParams['dateTimeRenderOption'] = [dateTimeRenderOption];
}
if (majorDimension != null) {
_queryParams['majorDimension'] = [majorDimension];
}
if (ranges != null) {
_queryParams['ranges'] = ranges;
}
if (valueRenderOption != null) {
_queryParams['valueRenderOption'] = [valueRenderOption];
}
if ($fields != null) {
_queryParams['fields'] = [$fields];
}
final _url = 'v4/spreadsheets/' +
commons.Escaper.ecapeVariable('$spreadsheetId') +
'/values:batchGet';
final _response = await _requester.request(
_url,
'GET',
queryParams: _queryParams,
);
return BatchGetValuesResponse.fromJson(
_response as core.Map<core.String, core.dynamic>);
}
/// Returns one or more ranges of values that match the specified data
/// filters.
///
/// The caller must specify the spreadsheet ID and one or more DataFilters.
/// Ranges that match any of the data filters in the request will be returned.
///
/// [request] - The metadata request object.
///
/// Request parameters:
///
/// [spreadsheetId] - The ID of the spreadsheet to retrieve data from.
///
/// [$fields] - Selector specifying which fields to include in a partial
/// response.
///
/// Completes with a [BatchGetValuesByDataFilterResponse].
///
/// Completes with a [commons.ApiRequestError] if the API endpoint returned an
/// error.
///
/// If the used [http.Client] completes with an error when making a REST call,
/// this method will complete with the same error.
async.Future<BatchGetValuesByDataFilterResponse> batchGetByDataFilter(
BatchGetValuesByDataFilterRequest request,
core.String spreadsheetId, {
core.String $fields,
}) async {
final _body =
request == null ? null : convert.json.encode(request.toJson());
if (spreadsheetId == null) {
throw core.ArgumentError('Parameter spreadsheetId is required.');
}
final _queryParams = <core.String, core.List<core.String>>{};
if ($fields != null) {
_queryParams['fields'] = [$fields];
}
final _url = 'v4/spreadsheets/' +
commons.Escaper.ecapeVariable('$spreadsheetId') +
'/values:batchGetByDataFilter';
final _response = await _requester.request(
_url,
'POST',
body: _body,
queryParams: _queryParams,
);
return BatchGetValuesByDataFilterResponse.fromJson(
_response as core.Map<core.String, core.dynamic>);
}
/// Sets values in one or more ranges of a spreadsheet.
///
/// The caller must specify the spreadsheet ID, a valueInputOption, and one or
/// more ValueRanges.
///
/// [request] - The metadata request object.
///
/// Request parameters:
///
/// [spreadsheetId] - The ID of the spreadsheet to update.
///
/// [$fields] - Selector specifying which fields to include in a partial
/// response.
///
/// Completes with a [BatchUpdateValuesResponse].
///
/// Completes with a [commons.ApiRequestError] if the API endpoint returned an
/// error.
///
/// If the used [http.Client] completes with an error when making a REST call,
/// this method will complete with the same error.
async.Future<BatchUpdateValuesResponse> batchUpdate(
BatchUpdateValuesRequest request,
core.String spreadsheetId, {
core.String $fields,
}) async {
final _body =
request == null ? null : convert.json.encode(request.toJson());
if (spreadsheetId == null) {
throw core.ArgumentError('Parameter spreadsheetId is required.');
}
final _queryParams = <core.String, core.List<core.String>>{};
if ($fields != null) {
_queryParams['fields'] = [$fields];
}
final _url = 'v4/spreadsheets/' +
commons.Escaper.ecapeVariable('$spreadsheetId') +
'/values:batchUpdate';
final _response = await _requester.request(
_url,
'POST',
body: _body,
queryParams: _queryParams,
);
return BatchUpdateValuesResponse.fromJson(
_response as core.Map<core.String, core.dynamic>);
}
/// Sets values in one or more ranges of a spreadsheet.
///
/// The caller must specify the spreadsheet ID, a valueInputOption, and one or
/// more DataFilterValueRanges.
///
/// [request] - The metadata request object.
///
/// Request parameters:
///
/// [spreadsheetId] - The ID of the spreadsheet to update.
///
/// [$fields] - Selector specifying which fields to include in a partial
/// response.
///
/// Completes with a [BatchUpdateValuesByDataFilterResponse].
///
/// Completes with a [commons.ApiRequestError] if the API endpoint returned an
/// error.
///
/// If the used [http.Client] completes with an error when making a REST call,
/// this method will complete with the same error.
async.Future<BatchUpdateValuesByDataFilterResponse> batchUpdateByDataFilter(
BatchUpdateValuesByDataFilterRequest request,
core.String spreadsheetId, {
core.String $fields,
}) async {
final _body =
request == null ? null : convert.json.encode(request.toJson());
if (spreadsheetId == null) {
throw core.ArgumentError('Parameter spreadsheetId is required.');
}
final _queryParams = <core.String, core.List<core.String>>{};
if ($fields != null) {
_queryParams['fields'] = [$fields];
}
final _url = 'v4/spreadsheets/' +
commons.Escaper.ecapeVariable('$spreadsheetId') +
'/values:batchUpdateByDataFilter';
final _response = await _requester.request(
_url,
'POST',
body: _body,
queryParams: _queryParams,
);
return BatchUpdateValuesByDataFilterResponse.fromJson(
_response as core.Map<core.String, core.dynamic>);
}
/// Clears values from a spreadsheet.
///
/// The caller must specify the spreadsheet ID and range. Only values are
/// cleared -- all other properties of the cell (such as formatting, data
/// validation, etc..) are kept.
///
/// [request] - The metadata request object.
///
/// Request parameters:
///
/// [spreadsheetId] - The ID of the spreadsheet to update.
///
/// [range] - The A1 notation of the values to clear.
///
/// [$fields] - Selector specifying which fields to include in a partial
/// response.
///
/// Completes with a [ClearValuesResponse].
///
/// Completes with a [commons.ApiRequestError] if the API endpoint returned an
/// error.
///
/// If the used [http.Client] completes with an error when making a REST call,
/// this method will complete with the same error.
async.Future<ClearValuesResponse> clear(
ClearValuesRequest request,
core.String spreadsheetId,
core.String range, {
core.String $fields,
}) async {
final _body =
request == null ? null : convert.json.encode(request.toJson());
if (spreadsheetId == null) {
throw core.ArgumentError('Parameter spreadsheetId is required.');
}
if (range == null) {
throw core.ArgumentError('Parameter range is required.');
}
final _queryParams = <core.String, core.List<core.String>>{};
if ($fields != null) {
_queryParams['fields'] = [$fields];
}
final _url = 'v4/spreadsheets/' +
commons.Escaper.ecapeVariable('$spreadsheetId') +
'/values/' +
commons.Escaper.ecapeVariable('$range') +
':clear';
final _response = await _requester.request(
_url,
'POST',
body: _body,
queryParams: _queryParams,
);
return ClearValuesResponse.fromJson(
_response as core.Map<core.String, core.dynamic>);
}
/// Returns a range of values from a spreadsheet.
///
/// The caller must specify the spreadsheet ID and a range.
///
/// Request parameters:
///
/// [spreadsheetId] - The ID of the spreadsheet to retrieve data from.
///
/// [range] - The A1 notation of the values to retrieve.
///
/// [dateTimeRenderOption] - 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\].
/// Possible string values are:
/// - "SERIAL_NUMBER" : Instructs date, time, datetime, and duration fields to
/// be output as doubles in "serial number" format, as popularized by Lotus
/// 1-2-3. The whole number portion of the value (left of the decimal) counts
/// the days since December 30th 1899. The fractional portion (right of the
/// decimal) counts the time as a fraction of the day. For example, January
/// 1st 1900 at noon would be 2.5, 2 because it's 2 days after December 30st
/// 1899, and .5 because noon is half a day. February 1st 1900 at 3pm would be
/// 33.625. This correctly treats the year 1900 as not a leap year.
/// - "FORMATTED_STRING" : Instructs date, time, datetime, and duration fields
/// to be output as strings in their given number format (which is dependent
/// on the spreadsheet locale).
///
/// [majorDimension] - The major dimension that results should use. For
/// example, if the spreadsheet data is: `A1=1,B1=2,A2=3,B2=4`, then
/// requesting `range=A1:B2,majorDimension=ROWS` returns `[[1,2],[3,4]]`,
/// whereas requesting `range=A1:B2,majorDimension=COLUMNS` returns
/// `[[1,3],[2,4]]`.
/// Possible string values are:
/// - "DIMENSION_UNSPECIFIED" : The default value, do not use.
/// - "ROWS" : Operates on the rows of a sheet.
/// - "COLUMNS" : Operates on the columns of a sheet.
///
/// [valueRenderOption] - How values should be represented in the output. The
/// default render option is ValueRenderOption.FORMATTED_VALUE.
/// Possible string values are:
/// - "FORMATTED_VALUE" : Values will be calculated & formatted in the reply
/// according to the cell's formatting. Formatting is based on the
/// spreadsheet's locale, not the requesting user's locale. For example, if
/// `A1` is `1.23` and `A2` is `=A1` and formatted as currency, then `A2`
/// would return `"$1.23"`.
/// - "UNFORMATTED_VALUE" : Values will be calculated, but not formatted in
/// the reply. For example, if `A1` is `1.23` and `A2` is `=A1` and formatted
/// as currency, then `A2` would return the number `1.23`.
/// - "FORMULA" : Values will not be calculated. The reply will include the
/// formulas. For example, if `A1` is `1.23` and `A2` is `=A1` and formatted
/// as currency, then A2 would return `"=A1"`.
///
/// [$fields] - Selector specifying which fields to include in a partial
/// response.
///
/// Completes with a [ValueRange].
///
/// Completes with a [commons.ApiRequestError] if the API endpoint returned an
/// error.
///
/// If the used [http.Client] completes with an error when making a REST call,
/// this method will complete with the same error.
async.Future<ValueRange> get(
core.String spreadsheetId,
core.String range, {
core.String dateTimeRenderOption,
core.String majorDimension,
core.String valueRenderOption,
core.String $fields,
}) async {
if (spreadsheetId == null) {
throw core.ArgumentError('Parameter spreadsheetId is required.');
}
if (range == null) {
throw core.ArgumentError('Parameter range is required.');
}
final _queryParams = <core.String, core.List<core.String>>{};
if (dateTimeRenderOption != null) {
_queryParams['dateTimeRenderOption'] = [dateTimeRenderOption];
}
if (majorDimension != null) {
_queryParams['majorDimension'] = [majorDimension];
}
if (valueRenderOption != null) {
_queryParams['valueRenderOption'] = [valueRenderOption];
}
if ($fields != null) {
_queryParams['fields'] = [$fields];
}
final _url = 'v4/spreadsheets/' +
commons.Escaper.ecapeVariable('$spreadsheetId') +
'/values/' +
commons.Escaper.ecapeVariable('$range');
final _response = await _requester.request(
_url,
'GET',
queryParams: _queryParams,
);
return ValueRange.fromJson(
_response as core.Map<core.String, core.dynamic>);
}
/// Sets values in a range of a spreadsheet.
///
/// The caller must specify the spreadsheet ID, range, and a valueInputOption.
///
/// [request] - The metadata request object.
///
/// Request parameters:
///
/// [spreadsheetId] - The ID of the spreadsheet to update.
///
/// [range] - The A1 notation of the values to update.
///
/// [includeValuesInResponse] - Determines if the update response should
/// include the values of the cells that were updated. By default, responses
/// do not include 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).
///
/// [responseDateTimeRenderOption] - 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.
/// Possible string values are:
/// - "SERIAL_NUMBER" : Instructs date, time, datetime, and duration fields to
/// be output as doubles in "serial number" format, as popularized by Lotus
/// 1-2-3. The whole number portion of the value (left of the decimal) counts
/// the days since December 30th 1899. The fractional portion (right of the
/// decimal) counts the time as a fraction of the day. For example, January
/// 1st 1900 at noon would be 2.5, 2 because it's 2 days after December 30st
/// 1899, and .5 because noon is half a day. February 1st 1900 at 3pm would be
/// 33.625. This correctly treats the year 1900 as not a leap year.
/// - "FORMATTED_STRING" : Instructs date, time, datetime, and duration fields
/// to be output as strings in their given number format (which is dependent
/// on the spreadsheet locale).
///
/// [responseValueRenderOption] - Determines how values in the response should
/// be rendered. The default render option is
/// ValueRenderOption.FORMATTED_VALUE.
/// Possible string values are:
/// - "FORMATTED_VALUE" : Values will be calculated & formatted in the reply
/// according to the cell's formatting. Formatting is based on the
/// spreadsheet's locale, not the requesting user's locale. For example, if
/// `A1` is `1.23` and `A2` is `=A1` and formatted as currency, then `A2`
/// would return `"$1.23"`.
/// - "UNFORMATTED_VALUE" : Values will be calculated, but not formatted in
/// the reply. For example, if `A1` is `1.23` and `A2` is `=A1` and formatted
/// as currency, then `A2` would return the number `1.23`.
/// - "FORMULA" : Values will not be calculated. The reply will include the
/// formulas. For example, if `A1` is `1.23` and `A2` is `=A1` and formatted
/// as currency, then A2 would return `"=A1"`.
///
/// [valueInputOption] - How the input data should be interpreted.
/// Possible string values are:
/// - "INPUT_VALUE_OPTION_UNSPECIFIED" : Default input value. This value must
/// not be used.
/// - "RAW" : The values the user has entered will not be parsed and will be
/// stored as-is.
/// - "USER_ENTERED" : The values will be parsed as if the user typed them
/// into the UI. Numbers will stay as numbers, but strings may be converted to
/// numbers, dates, etc. following the same rules that are applied when
/// entering text into a cell via the Google Sheets UI.
///
/// [$fields] - Selector specifying which fields to include in a partial
/// response.
///
/// Completes with a [UpdateValuesResponse].
///
/// Completes with a [commons.ApiRequestError] if the API endpoint returned an
/// error.
///
/// If the used [http.Client] completes with an error when making a REST call,
/// this method will complete with the same error.
async.Future<UpdateValuesResponse> update(
ValueRange request,
core.String spreadsheetId,
core.String range, {
core.bool includeValuesInResponse,
core.String responseDateTimeRenderOption,
core.String responseValueRenderOption,
core.String valueInputOption,
core.String $fields,
}) async {
final _body =
request == null ? null : convert.json.encode(request.toJson());
if (spreadsheetId == null) {
throw core.ArgumentError('Parameter spreadsheetId is required.');
}
if (range == null) {
throw core.ArgumentError('Parameter range is required.');
}
final _queryParams = <core.String, core.List<core.String>>{};
if (includeValuesInResponse != null) {
_queryParams['includeValuesInResponse'] = ['${includeValuesInResponse}'];
}
if (responseDateTimeRenderOption != null) {
_queryParams['responseDateTimeRenderOption'] = [
responseDateTimeRenderOption
];
}
if (responseValueRenderOption != null) {
_queryParams['responseValueRenderOption'] = [responseValueRenderOption];
}
if (valueInputOption != null) {
_queryParams['valueInputOption'] = [valueInputOption];
}
if ($fields != null) {
_queryParams['fields'] = [$fields];
}
final _url = 'v4/spreadsheets/' +
commons.Escaper.ecapeVariable('$spreadsheetId') +
'/values/' +
commons.Escaper.ecapeVariable('$range');
final _response = await _requester.request(
_url,
'PUT',
body: _body,
queryParams: _queryParams,
);
return UpdateValuesResponse.fromJson(
_response as core.Map<core.String, core.dynamic>);
}
}
/// Adds a new banded range to the spreadsheet.
class AddBandingRequest {
/// The banded range to add.
///
/// The bandedRangeId field is optional; if one is not set, an id will be
/// randomly generated. (It is an error to specify the ID of a range that
/// already exists.)
BandedRange bandedRange;
AddBandingRequest();
AddBandingRequest.fromJson(core.Map _json) {
if (_json.containsKey('bandedRange')) {
bandedRange = BandedRange.fromJson(
_json['bandedRange'] as core.Map<core.String, core.dynamic>);
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (bandedRange != null) {
_json['bandedRange'] = bandedRange.toJson();
}
return _json;
}
}
/// The result of adding a banded range.
class AddBandingResponse {
/// The banded range that was added.
BandedRange bandedRange;
AddBandingResponse();
AddBandingResponse.fromJson(core.Map _json) {
if (_json.containsKey('bandedRange')) {
bandedRange = BandedRange.fromJson(
_json['bandedRange'] as core.Map<core.String, core.dynamic>);
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (bandedRange != null) {
_json['bandedRange'] = bandedRange.toJson();
}
return _json;
}
}
/// Adds a chart to a sheet in the spreadsheet.
class AddChartRequest {
/// The chart that should be added to the spreadsheet, including the position
/// where it should be placed.
///
/// The chartId field is optional; if one is not set, an id will be randomly
/// generated. (It is an error to specify the ID of an embedded object that
/// already exists.)
EmbeddedChart chart;
AddChartRequest();
AddChartRequest.fromJson(core.Map _json) {
if (_json.containsKey('chart')) {
chart = EmbeddedChart.fromJson(
_json['chart'] as core.Map<core.String, core.dynamic>);
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (chart != null) {
_json['chart'] = chart.toJson();
}
return _json;
}
}
/// The result of adding a chart to a spreadsheet.
class AddChartResponse {
/// The newly added chart.
EmbeddedChart chart;
AddChartResponse();
AddChartResponse.fromJson(core.Map _json) {
if (_json.containsKey('chart')) {
chart = EmbeddedChart.fromJson(
_json['chart'] as core.Map<core.String, core.dynamic>);
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (chart != null) {
_json['chart'] = chart.toJson();
}
return _json;
}
}
/// Adds a new conditional format rule at the given index.
///
/// All subsequent rules' indexes are incremented.
class AddConditionalFormatRuleRequest {
/// The zero-based index where the rule should be inserted.
core.int index;
/// The rule to add.
ConditionalFormatRule rule;
AddConditionalFormatRuleRequest();
AddConditionalFormatRuleRequest.fromJson(core.Map _json) {
if (_json.containsKey('index')) {
index = _json['index'] as core.int;
}
if (_json.containsKey('rule')) {
rule = ConditionalFormatRule.fromJson(
_json['rule'] as core.Map<core.String, core.dynamic>);
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (index != null) {
_json['index'] = index;
}
if (rule != null) {
_json['rule'] = rule.toJson();
}
return _json;
}
}
/// 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 {
/// The data source to add.
DataSource dataSource;
AddDataSourceRequest();
AddDataSourceRequest.fromJson(core.Map _json) {
if (_json.containsKey('dataSource')) {
dataSource = DataSource.fromJson(
_json['dataSource'] as core.Map<core.String, core.dynamic>);
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (dataSource != null) {
_json['dataSource'] = dataSource.toJson();
}
return _json;
}
}
/// The result of adding a data source.
class AddDataSourceResponse {
/// The data execution status.
DataExecutionStatus dataExecutionStatus;
/// The data source that was created.
DataSource dataSource;
AddDataSourceResponse();
AddDataSourceResponse.fromJson(core.Map _json) {
if (_json.containsKey('dataExecutionStatus')) {
dataExecutionStatus = DataExecutionStatus.fromJson(
_json['dataExecutionStatus'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('dataSource')) {
dataSource = DataSource.fromJson(
_json['dataSource'] as core.Map<core.String, core.dynamic>);
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (dataExecutionStatus != null) {
_json['dataExecutionStatus'] = dataExecutionStatus.toJson();
}
if (dataSource != null) {
_json['dataSource'] = dataSource.toJson();
}
return _json;
}
}
/// 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 {
/// The range over which to create a group.
DimensionRange range;
AddDimensionGroupRequest();
AddDimensionGroupRequest.fromJson(core.Map _json) {
if (_json.containsKey('range')) {
range = DimensionRange.fromJson(
_json['range'] as core.Map<core.String, core.dynamic>);
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (range != null) {
_json['range'] = range.toJson();
}
return _json;
}
}
/// The result of adding a group.
class AddDimensionGroupResponse {
/// All groups of a dimension after adding a group to that dimension.
core.List<DimensionGroup> dimensionGroups;
AddDimensionGroupResponse();
AddDimensionGroupResponse.fromJson(core.Map _json) {
if (_json.containsKey('dimensionGroups')) {
dimensionGroups = (_json['dimensionGroups'] as core.List)
.map<DimensionGroup>((value) => DimensionGroup.fromJson(
value as core.Map<core.String, core.dynamic>))
.toList();
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (dimensionGroups != null) {
_json['dimensionGroups'] =
dimensionGroups.map((value) => value.toJson()).toList();
}
return _json;
}
}
/// Adds a filter view.
class AddFilterViewRequest {
/// The filter to add.
///
/// The filterViewId field is optional; if one is not set, an id will be
/// randomly generated. (It is an error to specify the ID of a filter that
/// already exists.)
FilterView filter;
AddFilterViewRequest();
AddFilterViewRequest.fromJson(core.Map _json) {
if (_json.containsKey('filter')) {
filter = FilterView.fromJson(
_json['filter'] as core.Map<core.String, core.dynamic>);
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (filter != null) {
_json['filter'] = filter.toJson();
}
return _json;
}
}
/// The result of adding a filter view.
class AddFilterViewResponse {
/// The newly added filter view.
FilterView filter;
AddFilterViewResponse();
AddFilterViewResponse.fromJson(core.Map _json) {
if (_json.containsKey('filter')) {
filter = FilterView.fromJson(
_json['filter'] as core.Map<core.String, core.dynamic>);
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (filter != null) {
_json['filter'] = filter.toJson();
}
return _json;
}
}
/// Adds a named range to the spreadsheet.
class AddNamedRangeRequest {
/// The named range to add.
///
/// The namedRangeId field is optional; if one is not set, an id will be
/// randomly generated. (It is an error to specify the ID of a range that
/// already exists.)
NamedRange namedRange;
AddNamedRangeRequest();
AddNamedRangeRequest.fromJson(core.Map _json) {
if (_json.containsKey('namedRange')) {
namedRange = NamedRange.fromJson(
_json['namedRange'] as core.Map<core.String, core.dynamic>);
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (namedRange != null) {
_json['namedRange'] = namedRange.toJson();
}
return _json;
}
}
/// The result of adding a named range.
class AddNamedRangeResponse {
/// The named range to add.
NamedRange namedRange;
AddNamedRangeResponse();
AddNamedRangeResponse.fromJson(core.Map _json) {
if (_json.containsKey('namedRange')) {
namedRange = NamedRange.fromJson(
_json['namedRange'] as core.Map<core.String, core.dynamic>);
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (namedRange != null) {
_json['namedRange'] = namedRange.toJson();
}
return _json;
}
}
/// Adds a new protected range.
class AddProtectedRangeRequest {
/// The protected range to be added.
///
/// The protectedRangeId field is optional; if one is not set, an id will be
/// randomly generated. (It is an error to specify the ID of a range that
/// already exists.)
ProtectedRange protectedRange;
AddProtectedRangeRequest();
AddProtectedRangeRequest.fromJson(core.Map _json) {
if (_json.containsKey('protectedRange')) {
protectedRange = ProtectedRange.fromJson(
_json['protectedRange'] as core.Map<core.String, core.dynamic>);
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (protectedRange != null) {
_json['protectedRange'] = protectedRange.toJson();
}
return _json;
}
}
/// The result of adding a new protected range.
class AddProtectedRangeResponse {
/// The newly added protected range.
ProtectedRange protectedRange;
AddProtectedRangeResponse();
AddProtectedRangeResponse.fromJson(core.Map _json) {
if (_json.containsKey('protectedRange')) {
protectedRange = ProtectedRange.fromJson(
_json['protectedRange'] as core.Map<core.String, core.dynamic>);
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (protectedRange != null) {
_json['protectedRange'] = protectedRange.toJson();
}
return _json;
}
}
/// 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 {
/// The properties the new sheet should have.
///
/// All properties are optional. The sheetId field is optional; if one is not
/// set, an id will be randomly generated. (It is an error to specify the ID
/// of a sheet that already exists.)
SheetProperties properties;
AddSheetRequest();
AddSheetRequest.fromJson(core.Map _json) {
if (_json.containsKey('properties')) {
properties = SheetProperties.fromJson(
_json['properties'] as core.Map<core.String, core.dynamic>);
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (properties != null) {
_json['properties'] = properties.toJson();
}
return _json;
}
}
/// The result of adding a sheet.
class AddSheetResponse {
/// The properties of the newly added sheet.
SheetProperties properties;
AddSheetResponse();
AddSheetResponse.fromJson(core.Map _json) {
if (_json.containsKey('properties')) {
properties = SheetProperties.fromJson(
_json['properties'] as core.Map<core.String, core.dynamic>);
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (properties != null) {
_json['properties'] = properties.toJson();
}
return _json;
}
}
/// Adds a slicer to a sheet in the spreadsheet.
class AddSlicerRequest {
/// The slicer that should be added to the spreadsheet, including the position
/// where it should be placed.
///
/// The slicerId field is optional; if one is not set, an id will be randomly
/// generated. (It is an error to specify the ID of a slicer that already
/// exists.)
Slicer slicer;
AddSlicerRequest();
AddSlicerRequest.fromJson(core.Map _json) {
if (_json.containsKey('slicer')) {
slicer = Slicer.fromJson(
_json['slicer'] as core.Map<core.String, core.dynamic>);
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (slicer != null) {
_json['slicer'] = slicer.toJson();
}
return _json;
}
}
/// The result of adding a slicer to a spreadsheet.
class AddSlicerResponse {
/// The newly added slicer.
Slicer slicer;
AddSlicerResponse();
AddSlicerResponse.fromJson(core.Map _json) {
if (_json.containsKey('slicer')) {
slicer = Slicer.fromJson(
_json['slicer'] as core.Map<core.String, core.dynamic>);
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (slicer != null) {
_json['slicer'] = slicer.toJson();
}
return _json;
}
}
/// Adds new cells after the last row with data in a sheet, inserting new rows
/// into the sheet if necessary.
class AppendCellsRequest {
/// 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.
core.String fields;
/// The data to append.
core.List<RowData> rows;
/// The sheet ID to append the data to.
core.int sheetId;
AppendCellsRequest();
AppendCellsRequest.fromJson(core.Map _json) {
if (_json.containsKey('fields')) {
fields = _json['fields'] as core.String;
}
if (_json.containsKey('rows')) {
rows = (_json['rows'] as core.List)
.map<RowData>((value) =>
RowData.fromJson(value as core.Map<core.String, core.dynamic>))
.toList();
}
if (_json.containsKey('sheetId')) {
sheetId = _json['sheetId'] as core.int;
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (fields != null) {
_json['fields'] = fields;
}
if (rows != null) {
_json['rows'] = rows.map((value) => value.toJson()).toList();
}
if (sheetId != null) {
_json['sheetId'] = sheetId;
}
return _json;
}
}
/// Appends rows or columns to the end of a sheet.
class AppendDimensionRequest {
/// Whether rows or columns should be appended.
/// Possible string values are:
/// - "DIMENSION_UNSPECIFIED" : The default value, do not use.
/// - "ROWS" : Operates on the rows of a sheet.
/// - "COLUMNS" : Operates on the columns of a sheet.
core.String dimension;
/// The number of rows or columns to append.
core.int length;
/// The sheet to append rows or columns to.
core.int sheetId;
AppendDimensionRequest();
AppendDimensionRequest.fromJson(core.Map _json) {
if (_json.containsKey('dimension')) {
dimension = _json['dimension'] as core.String;
}
if (_json.containsKey('length')) {
length = _json['length'] as core.int;
}
if (_json.containsKey('sheetId')) {
sheetId = _json['sheetId'] as core.int;
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (dimension != null) {
_json['dimension'] = dimension;
}
if (length != null) {
_json['length'] = length;
}
if (sheetId != null) {
_json['sheetId'] = sheetId;
}
return _json;
}
}
/// The response when updating a range of values in a spreadsheet.
class AppendValuesResponse {
/// The spreadsheet the updates were applied to.
core.String spreadsheetId;
/// 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.
core.String tableRange;
/// Information about the updates that were applied.
UpdateValuesResponse updates;
AppendValuesResponse();
AppendValuesResponse.fromJson(core.Map _json) {
if (_json.containsKey('spreadsheetId')) {
spreadsheetId = _json['spreadsheetId'] as core.String;
}
if (_json.containsKey('tableRange')) {
tableRange = _json['tableRange'] as core.String;
}
if (_json.containsKey('updates')) {
updates = UpdateValuesResponse.fromJson(
_json['updates'] as core.Map<core.String, core.dynamic>);
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (spreadsheetId != null) {
_json['spreadsheetId'] = spreadsheetId;
}
if (tableRange != null) {
_json['tableRange'] = tableRange;
}
if (updates != null) {
_json['updates'] = updates.toJson();
}
return _json;
}
}
/// Fills in more data based on existing data.
class AutoFillRequest {
/// The range to autofill.
///
/// This will examine the range and detect the location that has data and
/// automatically fill that data in to the rest of the range.
GridRange range;
/// The source and destination areas to autofill.
///
/// This explicitly lists the source of the autofill and where to extend that
/// data.
SourceAndDestination sourceAndDestination;
/// True if we should generate data with the "alternate" series.
///
/// This differs based on the type and amount of source data.
core.bool useAlternateSeries;
AutoFillRequest();
AutoFillRequest.fromJson(core.Map _json) {
if (_json.containsKey('range')) {
range = GridRange.fromJson(
_json['range'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('sourceAndDestination')) {
sourceAndDestination = SourceAndDestination.fromJson(
_json['sourceAndDestination'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('useAlternateSeries')) {
useAlternateSeries = _json['useAlternateSeries'] as core.bool;
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (range != null) {
_json['range'] = range.toJson();
}
if (sourceAndDestination != null) {
_json['sourceAndDestination'] = sourceAndDestination.toJson();
}
if (useAlternateSeries != null) {
_json['useAlternateSeries'] = useAlternateSeries;
}
return _json;
}
}
/// Automatically resizes one or more dimensions based on the contents of the
/// cells in that dimension.
class AutoResizeDimensionsRequest {
/// The dimensions on a data source sheet to automatically resize.
DataSourceSheetDimensionRange dataSourceSheetDimensions;
/// The dimensions to automatically resize.
DimensionRange dimensions;
AutoResizeDimensionsRequest();
AutoResizeDimensionsRequest.fromJson(core.Map _json) {
if (_json.containsKey('dataSourceSheetDimensions')) {
dataSourceSheetDimensions = DataSourceSheetDimensionRange.fromJson(
_json['dataSourceSheetDimensions']
as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('dimensions')) {
dimensions = DimensionRange.fromJson(
_json['dimensions'] as core.Map<core.String, core.dynamic>);
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (dataSourceSheetDimensions != null) {
_json['dataSourceSheetDimensions'] = dataSourceSheetDimensions.toJson();
}
if (dimensions != null) {
_json['dimensions'] = dimensions.toJson();
}
return _json;
}
}
/// A banded (alternating colors) range in a sheet.
class BandedRange {
/// The id of the banded range.
core.int bandedRangeId;
/// Properties for column bands.
///
/// These properties are applied on a column- by-column basis throughout all
/// the columns in the range. At least one of row_properties or
/// column_properties must be specified.
BandingProperties columnProperties;
/// The range over which these properties are applied.
GridRange range;
/// Properties for row bands.
///
/// These properties are applied on a row-by-row basis throughout all the rows
/// in the range. At least one of row_properties or column_properties must be
/// specified.
BandingProperties rowProperties;
BandedRange();
BandedRange.fromJson(core.Map _json) {
if (_json.containsKey('bandedRangeId')) {
bandedRangeId = _json['bandedRangeId'] as core.int;
}
if (_json.containsKey('columnProperties')) {
columnProperties = BandingProperties.fromJson(
_json['columnProperties'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('range')) {
range = GridRange.fromJson(
_json['range'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('rowProperties')) {
rowProperties = BandingProperties.fromJson(
_json['rowProperties'] as core.Map<core.String, core.dynamic>);
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (bandedRangeId != null) {
_json['bandedRangeId'] = bandedRangeId;
}
if (columnProperties != null) {
_json['columnProperties'] = columnProperties.toJson();
}
if (range != null) {
_json['range'] = range.toJson();
}
if (rowProperties != null) {
_json['rowProperties'] = rowProperties.toJson();
}
return _json;
}
}
/// 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 {
/// The first color that is alternating.
///
/// (Required)
Color firstBandColor;
/// The first color that is alternating.
///
/// (Required) If first_band_color is also set, this field takes precedence.
ColorStyle firstBandColorStyle;
/// The color of the last row or column.
///
/// If this field is not set, the last row or column is filled with either
/// first_band_color or second_band_color, depending on the color of the
/// previous row or column.
Color footerColor;
/// The color of the last row or column.
///
/// If this field is not set, the last row or column is filled with either
/// first_band_color or second_band_color, depending on the color of the
/// previous row or column. If footer_color is also set, this field takes
/// precedence.
ColorStyle footerColorStyle;
/// The color of the first row or column.
///
/// If this field is set, the first row or column is filled with this color
/// and the colors alternate between first_band_color and second_band_color
/// starting from the second row or column. Otherwise, the first row or column
/// is filled with first_band_color and the colors proceed to alternate as
/// they normally would.
Color headerColor;
/// The color of the first row or column.
///
/// If this field is set, the first row or column is filled with this color
/// and the colors alternate between first_band_color and second_band_color
/// starting from the second row or column. Otherwise, the first row or column
/// is filled with first_band_color and the colors proceed to alternate as
/// they normally would. If header_color is also set, this field takes
/// precedence.
ColorStyle headerColorStyle;
/// The second color that is alternating.
///
/// (Required)
Color secondBandColor;
/// The second color that is alternating.
///
/// (Required) If second_band_color is also set, this field takes precedence.
ColorStyle secondBandColorStyle;
BandingProperties();
BandingProperties.fromJson(core.Map _json) {
if (_json.containsKey('firstBandColor')) {
firstBandColor = Color.fromJson(
_json['firstBandColor'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('firstBandColorStyle')) {
firstBandColorStyle = ColorStyle.fromJson(
_json['firstBandColorStyle'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('footerColor')) {
footerColor = Color.fromJson(
_json['footerColor'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('footerColorStyle')) {
footerColorStyle = ColorStyle.fromJson(
_json['footerColorStyle'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('headerColor')) {
headerColor = Color.fromJson(
_json['headerColor'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('headerColorStyle')) {
headerColorStyle = ColorStyle.fromJson(
_json['headerColorStyle'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('secondBandColor')) {
secondBandColor = Color.fromJson(
_json['secondBandColor'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('secondBandColorStyle')) {
secondBandColorStyle = ColorStyle.fromJson(
_json['secondBandColorStyle'] as core.Map<core.String, core.dynamic>);
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (firstBandColor != null) {
_json['firstBandColor'] = firstBandColor.toJson();
}
if (firstBandColorStyle != null) {
_json['firstBandColorStyle'] = firstBandColorStyle.toJson();
}
if (footerColor != null) {
_json['footerColor'] = footerColor.toJson();
}
if (footerColorStyle != null) {
_json['footerColorStyle'] = footerColorStyle.toJson();
}
if (headerColor != null) {
_json['headerColor'] = headerColor.toJson();
}
if (headerColorStyle != null) {
_json['headerColorStyle'] = headerColorStyle.toJson();
}
if (secondBandColor != null) {
_json['secondBandColor'] = secondBandColor.toJson();
}
if (secondBandColorStyle != null) {
_json['secondBandColorStyle'] = secondBandColorStyle.toJson();
}
return _json;
}
}
/// Formatting options for baseline value.
class BaselineValueFormat {
/// The comparison type of key value with baseline value.
/// Possible string values are:
/// - "COMPARISON_TYPE_UNDEFINED" : Default value, do not use.
/// - "ABSOLUTE_DIFFERENCE" : Use absolute difference between key and baseline
/// value.
/// - "PERCENTAGE_DIFFERENCE" : Use percentage difference between key and
/// baseline value.
core.String comparisonType;
/// Description which is appended after the baseline value.
///
/// This field is optional.
core.String description;
/// Color to be used, in case baseline value represents a negative change for
/// key value.
///
/// This field is optional.
Color negativeColor;
/// Color to be used, in case baseline value represents a negative change for
/// key value.
///
/// This field is optional. If negative_color is also set, this field takes
/// precedence.
ColorStyle negativeColorStyle;
/// Specifies the horizontal text positioning of baseline value.
///
/// This field is optional. If not specified, default positioning is used.
TextPosition position;
/// Color to be used, in case baseline value represents a positive change for
/// key value.
///
/// This field is optional.
Color positiveColor;
/// Color to be used, in case baseline value represents a positive change for
/// key value.
///
/// This field is optional. If positive_color is also set, this field takes
/// precedence.
ColorStyle positiveColorStyle;
/// Text formatting options for baseline value.
TextFormat textFormat;
BaselineValueFormat();
BaselineValueFormat.fromJson(core.Map _json) {
if (_json.containsKey('comparisonType')) {
comparisonType = _json['comparisonType'] as core.String;
}
if (_json.containsKey('description')) {
description = _json['description'] as core.String;
}
if (_json.containsKey('negativeColor')) {
negativeColor = Color.fromJson(
_json['negativeColor'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('negativeColorStyle')) {
negativeColorStyle = ColorStyle.fromJson(
_json['negativeColorStyle'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('position')) {
position = TextPosition.fromJson(
_json['position'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('positiveColor')) {
positiveColor = Color.fromJson(
_json['positiveColor'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('positiveColorStyle')) {
positiveColorStyle = ColorStyle.fromJson(
_json['positiveColorStyle'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('textFormat')) {
textFormat = TextFormat.fromJson(
_json['textFormat'] as core.Map<core.String, core.dynamic>);
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (comparisonType != null) {
_json['comparisonType'] = comparisonType;
}
if (description != null) {
_json['description'] = description;
}
if (negativeColor != null) {
_json['negativeColor'] = negativeColor.toJson();
}
if (negativeColorStyle != null) {
_json['negativeColorStyle'] = negativeColorStyle.toJson();
}
if (position != null) {
_json['position'] = position.toJson();
}
if (positiveColor != null) {
_json['positiveColor'] = positiveColor.toJson();
}
if (positiveColorStyle != null) {
_json['positiveColorStyle'] = positiveColorStyle.toJson();
}
if (textFormat != null) {
_json['textFormat'] = textFormat.toJson();
}
return _json;
}
}
/// An axis of the chart.
///
/// A chart may not have more than one axis per axis position.
class BasicChartAxis {
/// The format of the title.
///
/// Only valid if the axis is not associated with the domain.
TextFormat format;
/// The position of this axis.
/// Possible string values are:
/// - "BASIC_CHART_AXIS_POSITION_UNSPECIFIED" : Default value, do not use.
/// - "BOTTOM_AXIS" : The axis rendered at the bottom of a chart. For most
/// charts, this is the standard major axis. For bar charts, this is a minor
/// axis.
/// - "LEFT_AXIS" : The axis rendered at the left of a chart. For most charts,
/// this is a minor axis. For bar charts, this is the standard major axis.
/// - "RIGHT_AXIS" : The axis rendered at the right of a chart. For most
/// charts, this is a minor axis. For bar charts, this is an unusual major
/// axis.
core.String position;
/// The title of this axis.
///
/// If set, this overrides any title inferred from headers of the data.
core.String title;
/// The axis title text position.
TextPosition titleTextPosition;
/// The view window options for this axis.
ChartAxisViewWindowOptions viewWindowOptions;
BasicChartAxis();
BasicChartAxis.fromJson(core.Map _json) {
if (_json.containsKey('format')) {
format = TextFormat.fromJson(
_json['format'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('position')) {
position = _json['position'] as core.String;
}
if (_json.containsKey('title')) {
title = _json['title'] as core.String;
}
if (_json.containsKey('titleTextPosition')) {
titleTextPosition = TextPosition.fromJson(
_json['titleTextPosition'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('viewWindowOptions')) {
viewWindowOptions = ChartAxisViewWindowOptions.fromJson(
_json['viewWindowOptions'] as core.Map<core.String, core.dynamic>);
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (format != null) {
_json['format'] = format.toJson();
}
if (position != null) {
_json['position'] = position;
}
if (title != null) {
_json['title'] = title;
}
if (titleTextPosition != null) {
_json['titleTextPosition'] = titleTextPosition.toJson();
}
if (viewWindowOptions != null) {
_json['viewWindowOptions'] = viewWindowOptions.toJson();
}
return _json;
}
}
/// The domain of a chart.
///
/// For example, if charting stock prices over time, this would be the date.
class BasicChartDomain {
/// The data of the domain.
///
/// For example, if charting stock prices over time, this is the data
/// representing the dates.
ChartData domain;
/// True to reverse the order of the domain values (horizontal axis).
core.bool reversed;
BasicChartDomain();
BasicChartDomain.fromJson(core.Map _json) {
if (_json.containsKey('domain')) {
domain = ChartData.fromJson(
_json['domain'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('reversed')) {
reversed = _json['reversed'] as core.bool;
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (domain != null) {
_json['domain'] = domain.toJson();
}
if (reversed != null) {
_json['reversed'] = reversed;
}
return _json;
}
}
/// 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 {
/// The color for elements (such as bars, lines, and points) associated with
/// this series.
///
/// If empty, a default color is used.
Color color;
/// The color for elements (such as bars, lines, and points) associated with
/// this series.
///
/// If empty, a default color is used. If color is also set, this field takes
/// precedence.
ColorStyle colorStyle;
/// Information about the data labels for this series.
DataLabel dataLabel;
/// The line style of this series.
///
/// Valid only if the chartType is AREA, LINE, or SCATTER. COMBO charts are
/// also supported if the series chart type is AREA or LINE.
LineStyle lineStyle;
/// The style for points associated with this series.
///
/// Valid only if the chartType is AREA, LINE, or SCATTER. COMBO charts are
/// also supported if the series chart type is AREA, LINE, or SCATTER. If
/// empty, a default point style is used.
PointStyle pointStyle;
/// The data being visualized in this chart series.
ChartData series;
/// Style override settings for series data points.
core.List<BasicSeriesDataPointStyleOverride> styleOverrides;
/// 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.
/// Possible string values are:
/// - "BASIC_CHART_AXIS_POSITION_UNSPECIFIED" : Default value, do not use.
/// - "BOTTOM_AXIS" : The axis rendered at the bottom of a chart. For most
/// charts, this is the standard major axis. For bar charts, this is a minor
/// axis.
/// - "LEFT_AXIS" : The axis rendered at the left of a chart. For most charts,
/// this is a minor axis. For bar charts, this is the standard major axis.
/// - "RIGHT_AXIS" : The axis rendered at the right of a chart. For most
/// charts, this is a minor axis. For bar charts, this is an unusual major
/// axis.
core.String targetAxis;
/// 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.
/// Possible string values are:
/// - "BASIC_CHART_TYPE_UNSPECIFIED" : Default value, do not use.
/// - "BAR" : A bar chart.
/// - "LINE" : A line chart.
/// - "AREA" : An area chart.
/// - "COLUMN" : A column chart.
/// - "SCATTER" : A scatter chart.
/// - "COMBO" : A combo chart.
/// - "STEPPED_AREA" : A stepped area chart.
core.String type;
BasicChartSeries();
BasicChartSeries.fromJson(core.Map _json) {
if (_json.containsKey('color')) {
color =
Color.fromJson(_json['color'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('colorStyle')) {
colorStyle = ColorStyle.fromJson(
_json['colorStyle'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('dataLabel')) {
dataLabel = DataLabel.fromJson(
_json['dataLabel'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('lineStyle')) {
lineStyle = LineStyle.fromJson(
_json['lineStyle'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('pointStyle')) {
pointStyle = PointStyle.fromJson(
_json['pointStyle'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('series')) {
series = ChartData.fromJson(
_json['series'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('styleOverrides')) {
styleOverrides = (_json['styleOverrides'] as core.List)
.map<BasicSeriesDataPointStyleOverride>((value) =>
BasicSeriesDataPointStyleOverride.fromJson(
value as core.Map<core.String, core.dynamic>))
.toList();
}
if (_json.containsKey('targetAxis')) {
targetAxis = _json['targetAxis'] as core.String;
}
if (_json.containsKey('type')) {
type = _json['type'] as core.String;
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (color != null) {
_json['color'] = color.toJson();
}
if (colorStyle != null) {
_json['colorStyle'] = colorStyle.toJson();
}
if (dataLabel != null) {
_json['dataLabel'] = dataLabel.toJson();
}
if (lineStyle != null) {
_json['lineStyle'] = lineStyle.toJson();
}
if (pointStyle != null) {
_json['pointStyle'] = pointStyle.toJson();
}
if (series != null) {
_json['series'] = series.toJson();
}
if (styleOverrides != null) {
_json['styleOverrides'] =
styleOverrides.map((value) => value.toJson()).toList();
}
if (targetAxis != null) {
_json['targetAxis'] = targetAxis;
}
if (type != null) {
_json['type'] = type;
}
return _json;
}
}
/// The specification for a basic chart.
///
/// See BasicChartType for the list of charts this supports.
class BasicChartSpec {
/// The axis on the chart.
core.List<BasicChartAxis> axis;
/// The type of the chart.
/// Possible string values are:
/// - "BASIC_CHART_TYPE_UNSPECIFIED" : Default value, do not use.
/// - "BAR" : A bar chart.
/// - "LINE" : A line chart.
/// - "AREA" : An area chart.
/// - "COLUMN" : A column chart.
/// - "SCATTER" : A scatter chart.
/// - "COMBO" : A combo chart.
/// - "STEPPED_AREA" : A stepped area chart.
core.String chartType;
/// The behavior of tooltips and data highlighting when hovering on data and
/// chart area.
/// Possible string values are:
/// - "BASIC_CHART_COMPARE_MODE_UNSPECIFIED" : Default value, do not use.
/// - "DATUM" : Only the focused data element is highlighted and shown in the
/// tooltip.
/// - "CATEGORY" : All data elements with the same category (e.g., domain
/// value) are highlighted and shown in the tooltip.
core.String compareMode;
/// The domain of data this is charting.
///
/// Only a single domain is supported.
core.List<BasicChartDomain> 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.)
core.int headerCount;
/// 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.
core.bool interpolateNulls;
/// The position of the chart legend.
/// Possible string values are:
/// - "BASIC_CHART_LEGEND_POSITION_UNSPECIFIED" : Default value, do not use.
/// - "BOTTOM_LEGEND" : The legend is rendered on the bottom of the chart.
/// - "LEFT_LEGEND" : The legend is rendered on the left of the chart.
/// - "RIGHT_LEGEND" : The legend is rendered on the right of the chart.
/// - "TOP_LEGEND" : The legend is rendered on the top of the chart.
/// - "NO_LEGEND" : No legend is rendered.
core.String legendPosition;
/// Gets whether all lines should be rendered smooth or straight by default.
///
/// Applies to Line charts.
core.bool lineSmoothing;
/// The data this chart is visualizing.
core.List<BasicChartSeries> series;
/// The stacked type for charts that support vertical stacking.
///
/// Applies to Area, Bar, Column, Combo, and Stepped Area charts.
/// Possible string values are:
/// - "BASIC_CHART_STACKED_TYPE_UNSPECIFIED" : Default value, do not use.
/// - "NOT_STACKED" : Series are not stacked.
/// - "STACKED" : Series values are stacked, each value is rendered vertically
/// beginning from the top of the value below it.
/// - "PERCENT_STACKED" : Vertical stacks are stretched to reach the top of
/// the chart, with values laid out as percentages of each other.
core.String stackedType;
/// True to make the chart 3D.
///
/// Applies to Bar and Column charts.
core.bool threeDimensional;
/// Controls whether to display additional data labels on stacked charts which
/// sum the total value of all stacked values at each value along the domain
/// axis.
///
/// These data labels can only be set when chart_type is one of AREA, BAR,
/// COLUMN, COMBO or STEPPED_AREA and stacked_type is either STACKED or
/// PERCENT_STACKED. In addition, for COMBO, this will only be supported if
/// there is only one type of stackable series type or one type has more
/// series than the others and each of the other types have no more than one
/// series. For example, if a chart has two stacked bar series and one area
/// series, the total data labels will be supported. If it has three bar
/// series and two area series, total data labels are not allowed. Neither
/// CUSTOM nor placement can be set on the total_data_label.
DataLabel totalDataLabel;
BasicChartSpec();
BasicChartSpec.fromJson(core.Map _json) {
if (_json.containsKey('axis')) {
axis = (_json['axis'] as core.List)
.map<BasicChartAxis>((value) => BasicChartAxis.fromJson(
value as core.Map<core.String, core.dynamic>))
.toList();
}
if (_json.containsKey('chartType')) {
chartType = _json['chartType'] as core.String;
}
if (_json.containsKey('compareMode')) {
compareMode = _json['compareMode'] as core.String;
}
if (_json.containsKey('domains')) {
domains = (_json['domains'] as core.List)
.map<BasicChartDomain>((value) => BasicChartDomain.fromJson(
value as core.Map<core.String, core.dynamic>))
.toList();
}
if (_json.containsKey('headerCount')) {
headerCount = _json['headerCount'] as core.int;
}
if (_json.containsKey('interpolateNulls')) {
interpolateNulls = _json['interpolateNulls'] as core.bool;
}
if (_json.containsKey('legendPosition')) {
legendPosition = _json['legendPosition'] as core.String;
}
if (_json.containsKey('lineSmoothing')) {
lineSmoothing = _json['lineSmoothing'] as core.bool;
}
if (_json.containsKey('series')) {
series = (_json['series'] as core.List)
.map<BasicChartSeries>((value) => BasicChartSeries.fromJson(
value as core.Map<core.String, core.dynamic>))
.toList();
}
if (_json.containsKey('stackedType')) {
stackedType = _json['stackedType'] as core.String;
}
if (_json.containsKey('threeDimensional')) {
threeDimensional = _json['threeDimensional'] as core.bool;
}
if (_json.containsKey('totalDataLabel')) {
totalDataLabel = DataLabel.fromJson(
_json['totalDataLabel'] as core.Map<core.String, core.dynamic>);
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (axis != null) {
_json['axis'] = axis.map((value) => value.toJson()).toList();
}
if (chartType != null) {
_json['chartType'] = chartType;
}
if (compareMode != null) {
_json['compareMode'] = compareMode;
}
if (domains != null) {
_json['domains'] = domains.map((value) => value.toJson()).toList();
}
if (headerCount != null) {
_json['headerCount'] = headerCount;
}
if (interpolateNulls != null) {
_json['interpolateNulls'] = interpolateNulls;
}
if (legendPosition != null) {
_json['legendPosition'] = legendPosition;
}
if (lineSmoothing != null) {
_json['lineSmoothing'] = lineSmoothing;
}
if (series != null) {
_json['series'] = series.map((value) => value.toJson()).toList();
}
if (stackedType != null) {
_json['stackedType'] = stackedType;
}
if (threeDimensional != null) {
_json['threeDimensional'] = threeDimensional;
}
if (totalDataLabel != null) {
_json['totalDataLabel'] = totalDataLabel.toJson();
}
return _json;
}
}
/// The default filter associated with a sheet.
class BasicFilter {
/// 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.
core.Map<core.String, FilterCriteria> 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.
core.List<FilterSpec> filterSpecs;
/// The range the filter covers.
GridRange range;
/// The sort order per column.
///
/// Later specifications are used when values are equal in the earlier
/// specifications.
core.List<SortSpec> sortSpecs;
BasicFilter();
BasicFilter.fromJson(core.Map _json) {
if (_json.containsKey('criteria')) {
criteria =
(_json['criteria'] as core.Map).cast<core.String, core.Map>().map(
(key, item) => core.MapEntry(
key,
FilterCriteria.fromJson(
item as core.Map<core.String, core.dynamic>),
),
);
}
if (_json.containsKey('filterSpecs')) {
filterSpecs = (_json['filterSpecs'] as core.List)
.map<FilterSpec>((value) =>
FilterSpec.fromJson(value as core.Map<core.String, core.dynamic>))
.toList();
}
if (_json.containsKey('range')) {
range = GridRange.fromJson(
_json['range'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('sortSpecs')) {
sortSpecs = (_json['sortSpecs'] as core.List)
.map<SortSpec>((value) =>
SortSpec.fromJson(value as core.Map<core.String, core.dynamic>))
.toList();
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (criteria != null) {
_json['criteria'] =
criteria.map((key, item) => core.MapEntry(key, item.toJson()));
}
if (filterSpecs != null) {
_json['filterSpecs'] =
filterSpecs.map((value) => value.toJson()).toList();
}
if (range != null) {
_json['range'] = range.toJson();
}
if (sortSpecs != null) {
_json['sortSpecs'] = sortSpecs.map((value) => value.toJson()).toList();
}
return _json;
}
}
/// Style override settings for a single series data point.
class BasicSeriesDataPointStyleOverride {
/// Color of the series data point.
///
/// If empty, the series default is used.
Color color;
/// Color of the series data point.
///
/// If empty, the series default is used. If color is also set, this field
/// takes precedence.
ColorStyle colorStyle;
/// Zero based index of the series data point.
core.int index;
/// Point style of the series data point.
///
/// Valid only if the chartType is AREA, LINE, or SCATTER. COMBO charts are
/// also supported if the series chart type is AREA, LINE, or SCATTER. If
/// empty, the series default is used.
PointStyle pointStyle;
BasicSeriesDataPointStyleOverride();
BasicSeriesDataPointStyleOverride.fromJson(core.Map _json) {
if (_json.containsKey('color')) {
color =
Color.fromJson(_json['color'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('colorStyle')) {
colorStyle = ColorStyle.fromJson(
_json['colorStyle'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('index')) {
index = _json['index'] as core.int;
}
if (_json.containsKey('pointStyle')) {
pointStyle = PointStyle.fromJson(
_json['pointStyle'] as core.Map<core.String, core.dynamic>);
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (color != null) {
_json['color'] = color.toJson();
}
if (colorStyle != null) {
_json['colorStyle'] = colorStyle.toJson();
}
if (index != null) {
_json['index'] = index;
}
if (pointStyle != null) {
_json['pointStyle'] = pointStyle.toJson();
}
return _json;
}
}
/// The request for clearing more than one range selected by a DataFilter in a
/// spreadsheet.
class BatchClearValuesByDataFilterRequest {
/// The DataFilters used to determine which ranges to clear.
core.List<DataFilter> dataFilters;
BatchClearValuesByDataFilterRequest();
BatchClearValuesByDataFilterRequest.fromJson(core.Map _json) {
if (_json.containsKey('dataFilters')) {
dataFilters = (_json['dataFilters'] as core.List)
.map<DataFilter>((value) =>
DataFilter.fromJson(value as core.Map<core.String, core.dynamic>))
.toList();
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (dataFilters != null) {
_json['dataFilters'] =
dataFilters.map((value) => value.toJson()).toList();
}
return _json;
}
}
/// The response when clearing a range of values selected with DataFilters in a
/// spreadsheet.
class BatchClearValuesByDataFilterResponse {
/// 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.
core.List<core.String> clearedRanges;
/// The spreadsheet the updates were applied to.
core.String spreadsheetId;
BatchClearValuesByDataFilterResponse();
BatchClearValuesByDataFilterResponse.fromJson(core.Map _json) {
if (_json.containsKey('clearedRanges')) {
clearedRanges = (_json['clearedRanges'] as core.List)
.map<core.String>((value) => value as core.String)
.toList();
}
if (_json.containsKey('spreadsheetId')) {
spreadsheetId = _json['spreadsheetId'] as core.String;
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (clearedRanges != null) {
_json['clearedRanges'] = clearedRanges;
}
if (spreadsheetId != null) {
_json['spreadsheetId'] = spreadsheetId;
}
return _json;
}
}
/// The request for clearing more than one range of values in a spreadsheet.
class BatchClearValuesRequest {
/// The ranges to clear, in A1 notation.
core.List<core.String> ranges;
BatchClearValuesRequest();
BatchClearValuesRequest.fromJson(core.Map _json) {
if (_json.containsKey('ranges')) {
ranges = (_json['ranges'] as core.List)
.map<core.String>((value) => value as core.String)
.toList();
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (ranges != null) {
_json['ranges'] = ranges;
}
return _json;
}
}
/// The response when clearing a range of values in a spreadsheet.
class BatchClearValuesResponse {
/// 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.
core.List<core.String> clearedRanges;
/// The spreadsheet the updates were applied to.
core.String spreadsheetId;
BatchClearValuesResponse();
BatchClearValuesResponse.fromJson(core.Map _json) {
if (_json.containsKey('clearedRanges')) {
clearedRanges = (_json['clearedRanges'] as core.List)
.map<core.String>((value) => value as core.String)
.toList();
}
if (_json.containsKey('spreadsheetId')) {
spreadsheetId = _json['spreadsheetId'] as core.String;
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (clearedRanges != null) {
_json['clearedRanges'] = clearedRanges;
}
if (spreadsheetId != null) {
_json['spreadsheetId'] = spreadsheetId;
}
return _json;
}
}
/// The request for retrieving a range of values in a spreadsheet selected by a
/// set of DataFilters.
class BatchGetValuesByDataFilterRequest {
/// 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.
core.List<DataFilter> dataFilters;
/// 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\].
/// Possible string values are:
/// - "SERIAL_NUMBER" : Instructs date, time, datetime, and duration fields to
/// be output as doubles in "serial number" format, as popularized by Lotus
/// 1-2-3. The whole number portion of the value (left of the decimal) counts
/// the days since December 30th 1899. The fractional portion (right of the
/// decimal) counts the time as a fraction of the day. For example, January
/// 1st 1900 at noon would be 2.5, 2 because it's 2 days after December 30st
/// 1899, and .5 because noon is half a day. February 1st 1900 at 3pm would be
/// 33.625. This correctly treats the year 1900 as not a leap year.
/// - "FORMATTED_STRING" : Instructs date, time, datetime, and duration fields
/// to be output as strings in their given number format (which is dependent
/// on the spreadsheet locale).
core.String dateTimeRenderOption;
/// 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]]`.
/// Possible string values are:
/// - "DIMENSION_UNSPECIFIED" : The default value, do not use.
/// - "ROWS" : Operates on the rows of a sheet.
/// - "COLUMNS" : Operates on the columns of a sheet.
core.String majorDimension;
/// How values should be represented in the output.
///
/// The default render option is ValueRenderOption.FORMATTED_VALUE.
/// Possible string values are:
/// - "FORMATTED_VALUE" : Values will be calculated & formatted in the reply
/// according to the cell's formatting. Formatting is based on the
/// spreadsheet's locale, not the requesting user's locale. For example, if
/// `A1` is `1.23` and `A2` is `=A1` and formatted as currency, then `A2`
/// would return `"$1.23"`.
/// - "UNFORMATTED_VALUE" : Values will be calculated, but not formatted in
/// the reply. For example, if `A1` is `1.23` and `A2` is `=A1` and formatted
/// as currency, then `A2` would return the number `1.23`.
/// - "FORMULA" : Values will not be calculated. The reply will include the
/// formulas. For example, if `A1` is `1.23` and `A2` is `=A1` and formatted
/// as currency, then A2 would return `"=A1"`.
core.String valueRenderOption;
BatchGetValuesByDataFilterRequest();
BatchGetValuesByDataFilterRequest.fromJson(core.Map _json) {
if (_json.containsKey('dataFilters')) {
dataFilters = (_json['dataFilters'] as core.List)
.map<DataFilter>((value) =>
DataFilter.fromJson(value as core.Map<core.String, core.dynamic>))
.toList();
}
if (_json.containsKey('dateTimeRenderOption')) {
dateTimeRenderOption = _json['dateTimeRenderOption'] as core.String;
}
if (_json.containsKey('majorDimension')) {
majorDimension = _json['majorDimension'] as core.String;
}
if (_json.containsKey('valueRenderOption')) {
valueRenderOption = _json['valueRenderOption'] as core.String;
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (dataFilters != null) {
_json['dataFilters'] =
dataFilters.map((value) => value.toJson()).toList();
}
if (dateTimeRenderOption != null) {
_json['dateTimeRenderOption'] = dateTimeRenderOption;
}
if (majorDimension != null) {
_json['majorDimension'] = majorDimension;
}
if (valueRenderOption != null) {
_json['valueRenderOption'] = valueRenderOption;
}
return _json;
}
}
/// The response when retrieving more than one range of values in a spreadsheet
/// selected by DataFilters.
class BatchGetValuesByDataFilterResponse {
/// The ID of the spreadsheet the data was retrieved from.
core.String spreadsheetId;
/// The requested values with the list of data filters that matched them.
core.List<MatchedValueRange> valueRanges;
BatchGetValuesByDataFilterResponse();
BatchGetValuesByDataFilterResponse.fromJson(core.Map _json) {
if (_json.containsKey('spreadsheetId')) {
spreadsheetId = _json['spreadsheetId'] as core.String;
}
if (_json.containsKey('valueRanges')) {
valueRanges = (_json['valueRanges'] as core.List)
.map<MatchedValueRange>((value) => MatchedValueRange.fromJson(
value as core.Map<core.String, core.dynamic>))
.toList();
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (spreadsheetId != null) {
_json['spreadsheetId'] = spreadsheetId;
}
if (valueRanges != null) {
_json['valueRanges'] =
valueRanges.map((value) => value.toJson()).toList();
}
return _json;
}
}
/// The response when retrieving more than one range of values in a spreadsheet.
class BatchGetValuesResponse {
/// The ID of the spreadsheet the data was retrieved from.
core.String spreadsheetId;
/// The requested values.
///
/// The order of the ValueRanges is the same as the order of the requested
/// ranges.
core.List<ValueRange> valueRanges;
BatchGetValuesResponse();
BatchGetValuesResponse.fromJson(core.Map _json) {
if (_json.containsKey('spreadsheetId')) {
spreadsheetId = _json['spreadsheetId'] as core.String;
}
if (_json.containsKey('valueRanges')) {
valueRanges = (_json['valueRanges'] as core.List)
.map<ValueRange>((value) =>
ValueRange.fromJson(value as core.Map<core.String, core.dynamic>))
.toList();
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (spreadsheetId != null) {
_json['spreadsheetId'] = spreadsheetId;
}
if (valueRanges != null) {
_json['valueRanges'] =
valueRanges.map((value) => value.toJson()).toList();
}
return _json;
}
}
/// The request for updating any aspect of a spreadsheet.
class BatchUpdateSpreadsheetRequest {
/// Determines if the update response should include the spreadsheet resource.
core.bool includeSpreadsheetInResponse;
/// 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.
core.List<Request> 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.
core.bool responseIncludeGridData;
/// Limits the ranges included in the response spreadsheet.
///
/// Meaningful only if include_spreadsheet_in_response is 'true'.
core.List<core.String> responseRanges;
BatchUpdateSpreadsheetRequest();
BatchUpdateSpreadsheetRequest.fromJson(core.Map _json) {
if (_json.containsKey('includeSpreadsheetInResponse')) {
includeSpreadsheetInResponse =
_json['includeSpreadsheetInResponse'] as core.bool;
}
if (_json.containsKey('requests')) {
requests = (_json['requests'] as core.List)
.map<Request>((value) =>
Request.fromJson(value as core.Map<core.String, core.dynamic>))
.toList();
}
if (_json.containsKey('responseIncludeGridData')) {
responseIncludeGridData = _json['responseIncludeGridData'] as core.bool;
}
if (_json.containsKey('responseRanges')) {
responseRanges = (_json['responseRanges'] as core.List)
.map<core.String>((value) => value as core.String)
.toList();
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (includeSpreadsheetInResponse != null) {
_json['includeSpreadsheetInResponse'] = includeSpreadsheetInResponse;
}
if (requests != null) {
_json['requests'] = requests.map((value) => value.toJson()).toList();
}
if (responseIncludeGridData != null) {
_json['responseIncludeGridData'] = responseIncludeGridData;
}
if (responseRanges != null) {
_json['responseRanges'] = responseRanges;
}
return _json;
}
}
/// The reply for batch updating a spreadsheet.
class BatchUpdateSpreadsheetResponse {
/// The reply of the updates.
///
/// This maps 1:1 with the updates, although replies to some requests may be
/// empty.
core.List<Response> replies;
/// The spreadsheet the updates were applied to.
core.String spreadsheetId;
/// The spreadsheet after updates were applied.
///
/// This is only set if
/// \[BatchUpdateSpreadsheetRequest.include_spreadsheet_in_response\] is
/// `true`.
Spreadsheet updatedSpreadsheet;
BatchUpdateSpreadsheetResponse();
BatchUpdateSpreadsheetResponse.fromJson(core.Map _json) {
if (_json.containsKey('replies')) {
replies = (_json['replies'] as core.List)
.map<Response>((value) =>
Response.fromJson(value as core.Map<core.String, core.dynamic>))
.toList();
}
if (_json.containsKey('spreadsheetId')) {
spreadsheetId = _json['spreadsheetId'] as core.String;
}
if (_json.containsKey('updatedSpreadsheet')) {
updatedSpreadsheet = Spreadsheet.fromJson(
_json['updatedSpreadsheet'] as core.Map<core.String, core.dynamic>);
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (replies != null) {
_json['replies'] = replies.map((value) => value.toJson()).toList();
}
if (spreadsheetId != null) {
_json['spreadsheetId'] = spreadsheetId;
}
if (updatedSpreadsheet != null) {
_json['updatedSpreadsheet'] = updatedSpreadsheet.toJson();
}
return _json;
}
}
/// The request for updating more than one range of values in a spreadsheet.
class BatchUpdateValuesByDataFilterRequest {
/// 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.
core.List<DataFilterValueRange> 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).
core.bool includeValuesInResponse;
/// 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.
/// Possible string values are:
/// - "SERIAL_NUMBER" : Instructs date, time, datetime, and duration fields to
/// be output as doubles in "serial number" format, as popularized by Lotus
/// 1-2-3. The whole number portion of the value (left of the decimal) counts
/// the days since December 30th 1899. The fractional portion (right of the
/// decimal) counts the time as a fraction of the day. For example, January
/// 1st 1900 at noon would be 2.5, 2 because it's 2 days after December 30st
/// 1899, and .5 because noon is half a day. February 1st 1900 at 3pm would be
/// 33.625. This correctly treats the year 1900 as not a leap year.
/// - "FORMATTED_STRING" : Instructs date, time, datetime, and duration fields
/// to be output as strings in their given number format (which is dependent
/// on the spreadsheet locale).
core.String responseDateTimeRenderOption;
/// Determines how values in the response should be rendered.
///
/// The default render option is ValueRenderOption.FORMATTED_VALUE.
/// Possible string values are:
/// - "FORMATTED_VALUE" : Values will be calculated & formatted in the reply
/// according to the cell's formatting. Formatting is based on the
/// spreadsheet's locale, not the requesting user's locale. For example, if
/// `A1` is `1.23` and `A2` is `=A1` and formatted as currency, then `A2`
/// would return `"$1.23"`.
/// - "UNFORMATTED_VALUE" : Values will be calculated, but not formatted in
/// the reply. For example, if `A1` is `1.23` and `A2` is `=A1` and formatted
/// as currency, then `A2` would return the number `1.23`.
/// - "FORMULA" : Values will not be calculated. The reply will include the
/// formulas. For example, if `A1` is `1.23` and `A2` is `=A1` and formatted
/// as currency, then A2 would return `"=A1"`.
core.String responseValueRenderOption;
/// How the input data should be interpreted.
/// Possible string values are:
/// - "INPUT_VALUE_OPTION_UNSPECIFIED" : Default input value. This value must
/// not be used.
/// - "RAW" : The values the user has entered will not be parsed and will be
/// stored as-is.
/// - "USER_ENTERED" : The values will be parsed as if the user typed them
/// into the UI. Numbers will stay as numbers, but strings may be converted to
/// numbers, dates, etc. following the same rules that are applied when
/// entering text into a cell via the Google Sheets UI.
core.String valueInputOption;
BatchUpdateValuesByDataFilterRequest();
BatchUpdateValuesByDataFilterRequest.fromJson(core.Map _json) {
if (_json.containsKey('data')) {
data = (_json['data'] as core.List)
.map<DataFilterValueRange>((value) => DataFilterValueRange.fromJson(
value as core.Map<core.String, core.dynamic>))
.toList();
}
if (_json.containsKey('includeValuesInResponse')) {
includeValuesInResponse = _json['includeValuesInResponse'] as core.bool;
}
if (_json.containsKey('responseDateTimeRenderOption')) {
responseDateTimeRenderOption =
_json['responseDateTimeRenderOption'] as core.String;
}
if (_json.containsKey('responseValueRenderOption')) {
responseValueRenderOption =
_json['responseValueRenderOption'] as core.String;
}
if (_json.containsKey('valueInputOption')) {
valueInputOption = _json['valueInputOption'] as core.String;
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (data != null) {
_json['data'] = data.map((value) => value.toJson()).toList();
}
if (includeValuesInResponse != null) {
_json['includeValuesInResponse'] = includeValuesInResponse;
}
if (responseDateTimeRenderOption != null) {
_json['responseDateTimeRenderOption'] = responseDateTimeRenderOption;
}
if (responseValueRenderOption != null) {
_json['responseValueRenderOption'] = responseValueRenderOption;
}
if (valueInputOption != null) {
_json['valueInputOption'] = valueInputOption;
}
return _json;
}
}
/// The response when updating a range of values in a spreadsheet.
class BatchUpdateValuesByDataFilterResponse {
/// The response for each range updated.
core.List<UpdateValuesByDataFilterResponse> responses;
/// The spreadsheet the updates were applied to.
core.String spreadsheetId;
/// The total number of cells updated.
core.int totalUpdatedCells;
/// The total number of columns where at least one cell in the column was
/// updated.
core.int totalUpdatedColumns;
/// The total number of rows where at least one cell in the row was updated.
core.int totalUpdatedRows;
/// The total number of sheets where at least one cell in the sheet was
/// updated.
core.int totalUpdatedSheets;
BatchUpdateValuesByDataFilterResponse();
BatchUpdateValuesByDataFilterResponse.fromJson(core.Map _json) {
if (_json.containsKey('responses')) {
responses = (_json['responses'] as core.List)
.map<UpdateValuesByDataFilterResponse>((value) =>
UpdateValuesByDataFilterResponse.fromJson(
value as core.Map<core.String, core.dynamic>))
.toList();
}
if (_json.containsKey('spreadsheetId')) {
spreadsheetId = _json['spreadsheetId'] as core.String;
}
if (_json.containsKey('totalUpdatedCells')) {
totalUpdatedCells = _json['totalUpdatedCells'] as core.int;
}
if (_json.containsKey('totalUpdatedColumns')) {
totalUpdatedColumns = _json['totalUpdatedColumns'] as core.int;
}
if (_json.containsKey('totalUpdatedRows')) {
totalUpdatedRows = _json['totalUpdatedRows'] as core.int;
}
if (_json.containsKey('totalUpdatedSheets')) {
totalUpdatedSheets = _json['totalUpdatedSheets'] as core.int;
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (responses != null) {
_json['responses'] = responses.map((value) => value.toJson()).toList();
}
if (spreadsheetId != null) {
_json['spreadsheetId'] = spreadsheetId;
}
if (totalUpdatedCells != null) {
_json['totalUpdatedCells'] = totalUpdatedCells;
}
if (totalUpdatedColumns != null) {
_json['totalUpdatedColumns'] = totalUpdatedColumns;
}
if (totalUpdatedRows != null) {
_json['totalUpdatedRows'] = totalUpdatedRows;
}
if (totalUpdatedSheets != null) {
_json['totalUpdatedSheets'] = totalUpdatedSheets;
}
return _json;
}
}
/// The request for updating more than one range of values in a spreadsheet.
class BatchUpdateValuesRequest {
/// The new values to apply to the spreadsheet.
core.List<ValueRange> 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).
core.bool includeValuesInResponse;
/// 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.
/// Possible string values are:
/// - "SERIAL_NUMBER" : Instructs date, time, datetime, and duration fields to
/// be output as doubles in "serial number" format, as popularized by Lotus
/// 1-2-3. The whole number portion of the value (left of the decimal) counts
/// the days since December 30th 1899. The fractional portion (right of the
/// decimal) counts the time as a fraction of the day. For example, January
/// 1st 1900 at noon would be 2.5, 2 because it's 2 days after December 30st
/// 1899, and .5 because noon is half a day. February 1st 1900 at 3pm would be
/// 33.625. This correctly treats the year 1900 as not a leap year.
/// - "FORMATTED_STRING" : Instructs date, time, datetime, and duration fields
/// to be output as strings in their given number format (which is dependent
/// on the spreadsheet locale).
core.String responseDateTimeRenderOption;
/// Determines how values in the response should be rendered.
///
/// The default render option is ValueRenderOption.FORMATTED_VALUE.
/// Possible string values are:
/// - "FORMATTED_VALUE" : Values will be calculated & formatted in the reply
/// according to the cell's formatting. Formatting is based on the
/// spreadsheet's locale, not the requesting user's locale. For example, if
/// `A1` is `1.23` and `A2` is `=A1` and formatted as currency, then `A2`
/// would return `"$1.23"`.
/// - "UNFORMATTED_VALUE" : Values will be calculated, but not formatted in
/// the reply. For example, if `A1` is `1.23` and `A2` is `=A1` and formatted
/// as currency, then `A2` would return the number `1.23`.
/// - "FORMULA" : Values will not be calculated. The reply will include the
/// formulas. For example, if `A1` is `1.23` and `A2` is `=A1` and formatted
/// as currency, then A2 would return `"=A1"`.
core.String responseValueRenderOption;
/// How the input data should be interpreted.
/// Possible string values are:
/// - "INPUT_VALUE_OPTION_UNSPECIFIED" : Default input value. This value must
/// not be used.
/// - "RAW" : The values the user has entered will not be parsed and will be
/// stored as-is.
/// - "USER_ENTERED" : The values will be parsed as if the user typed them
/// into the UI. Numbers will stay as numbers, but strings may be converted to
/// numbers, dates, etc. following the same rules that are applied when
/// entering text into a cell via the Google Sheets UI.
core.String valueInputOption;
BatchUpdateValuesRequest();
BatchUpdateValuesRequest.fromJson(core.Map _json) {
if (_json.containsKey('data')) {
data = (_json['data'] as core.List)
.map<ValueRange>((value) =>
ValueRange.fromJson(value as core.Map<core.String, core.dynamic>))
.toList();
}
if (_json.containsKey('includeValuesInResponse')) {
includeValuesInResponse = _json['includeValuesInResponse'] as core.bool;
}
if (_json.containsKey('responseDateTimeRenderOption')) {
responseDateTimeRenderOption =
_json['responseDateTimeRenderOption'] as core.String;
}
if (_json.containsKey('responseValueRenderOption')) {
responseValueRenderOption =
_json['responseValueRenderOption'] as core.String;
}
if (_json.containsKey('valueInputOption')) {
valueInputOption = _json['valueInputOption'] as core.String;
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (data != null) {
_json['data'] = data.map((value) => value.toJson()).toList();
}
if (includeValuesInResponse != null) {
_json['includeValuesInResponse'] = includeValuesInResponse;
}
if (responseDateTimeRenderOption != null) {
_json['responseDateTimeRenderOption'] = responseDateTimeRenderOption;
}
if (responseValueRenderOption != null) {
_json['responseValueRenderOption'] = responseValueRenderOption;
}
if (valueInputOption != null) {
_json['valueInputOption'] = valueInputOption;
}
return _json;
}
}
/// The response when updating a range of values in a spreadsheet.
class BatchUpdateValuesResponse {
/// One UpdateValuesResponse per requested range, in the same order as the
/// requests appeared.
core.List<UpdateValuesResponse> responses;
/// The spreadsheet the updates were applied to.
core.String spreadsheetId;
/// The total number of cells updated.
core.int totalUpdatedCells;
/// The total number of columns where at least one cell in the column was
/// updated.
core.int totalUpdatedColumns;
/// The total number of rows where at least one cell in the row was updated.
core.int totalUpdatedRows;
/// The total number of sheets where at least one cell in the sheet was
/// updated.
core.int totalUpdatedSheets;
BatchUpdateValuesResponse();
BatchUpdateValuesResponse.fromJson(core.Map _json) {
if (_json.containsKey('responses')) {
responses = (_json['responses'] as core.List)
.map<UpdateValuesResponse>((value) => UpdateValuesResponse.fromJson(
value as core.Map<core.String, core.dynamic>))
.toList();
}
if (_json.containsKey('spreadsheetId')) {
spreadsheetId = _json['spreadsheetId'] as core.String;
}
if (_json.containsKey('totalUpdatedCells')) {
totalUpdatedCells = _json['totalUpdatedCells'] as core.int;
}
if (_json.containsKey('totalUpdatedColumns')) {
totalUpdatedColumns = _json['totalUpdatedColumns'] as core.int;
}
if (_json.containsKey('totalUpdatedRows')) {
totalUpdatedRows = _json['totalUpdatedRows'] as core.int;
}
if (_json.containsKey('totalUpdatedSheets')) {
totalUpdatedSheets = _json['totalUpdatedSheets'] as core.int;
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (responses != null) {
_json['responses'] = responses.map((value) => value.toJson()).toList();
}
if (spreadsheetId != null) {
_json['spreadsheetId'] = spreadsheetId;
}
if (totalUpdatedCells != null) {
_json['totalUpdatedCells'] = totalUpdatedCells;
}
if (totalUpdatedColumns != null) {
_json['totalUpdatedColumns'] = totalUpdatedColumns;
}
if (totalUpdatedRows != null) {
_json['totalUpdatedRows'] = totalUpdatedRows;
}
if (totalUpdatedSheets != null) {
_json['totalUpdatedSheets'] = totalUpdatedSheets;
}
return _json;
}
}
/// The specification of a BigQuery data source that's connected to a sheet.
class BigQueryDataSourceSpec {
/// 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.
core.String projectId;
/// A BigQueryQuerySpec.
BigQueryQuerySpec querySpec;
/// A BigQueryTableSpec.
BigQueryTableSpec tableSpec;
BigQueryDataSourceSpec();
BigQueryDataSourceSpec.fromJson(core.Map _json) {
if (_json.containsKey('projectId')) {
projectId = _json['projectId'] as core.String;
}
if (_json.containsKey('querySpec')) {
querySpec = BigQueryQuerySpec.fromJson(
_json['querySpec'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('tableSpec')) {
tableSpec = BigQueryTableSpec.fromJson(
_json['tableSpec'] as core.Map<core.String, core.dynamic>);
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (projectId != null) {
_json['projectId'] = projectId;
}
if (querySpec != null) {
_json['querySpec'] = querySpec.toJson();
}
if (tableSpec != null) {
_json['tableSpec'] = tableSpec.toJson();
}
return _json;
}
}
/// Specifies a custom BigQuery query.
class BigQueryQuerySpec {
/// The raw query string.
core.String rawQuery;
BigQueryQuerySpec();
BigQueryQuerySpec.fromJson(core.Map _json) {
if (_json.containsKey('rawQuery')) {
rawQuery = _json['rawQuery'] as core.String;
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (rawQuery != null) {
_json['rawQuery'] = rawQuery;
}
return _json;
}
}
/// Specifies a BigQuery table definition.
///
/// Only [native tables](https://cloud.google.com/bigquery/docs/tables-intro) is
/// allowed.
class BigQueryTableSpec {
/// The BigQuery dataset id.
core.String datasetId;
/// The BigQuery table id.
core.String tableId;
/// The ID of a BigQuery project the table belongs to.
///
/// If not specified, the project_id is assumed.
core.String tableProjectId;
BigQueryTableSpec();
BigQueryTableSpec.fromJson(core.Map _json) {
if (_json.containsKey('datasetId')) {
datasetId = _json['datasetId'] as core.String;
}
if (_json.containsKey('tableId')) {
tableId = _json['tableId'] as core.String;
}
if (_json.containsKey('tableProjectId')) {
tableProjectId = _json['tableProjectId'] as core.String;
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (datasetId != null) {
_json['datasetId'] = datasetId;
}
if (tableId != null) {
_json['tableId'] = tableId;
}
if (tableProjectId != null) {
_json['tableProjectId'] = tableProjectId;
}
return _json;
}
}
/// A condition that can evaluate to true or false.
///
/// BooleanConditions are used by conditional formatting, data validation, and
/// the criteria in filters.
class BooleanCondition {
/// The type of condition.
/// Possible string values are:
/// - "CONDITION_TYPE_UNSPECIFIED" : The default value, do not use.
/// - "NUMBER_GREATER" : The cell's value must be greater than the condition's
/// value. Supported by data validation, conditional formatting and filters.
/// Requires a single ConditionValue.
/// - "NUMBER_GREATER_THAN_EQ" : The cell's value must be greater than or
/// equal to the condition's value. Supported by data validation, conditional
/// formatting and filters. Requires a single ConditionValue.
/// - "NUMBER_LESS" : The cell's value must be less than the condition's
/// value. Supported by data validation, conditional formatting and filters.
/// Requires a single ConditionValue.
/// - "NUMBER_LESS_THAN_EQ" : The cell's value must be less than or equal to
/// the condition's value. Supported by data validation, conditional
/// formatting and filters. Requires a single ConditionValue.
/// - "NUMBER_EQ" : The cell's value must be equal to the condition's value.
/// Supported by data validation, conditional formatting and filters. Requires
/// a single ConditionValue for data validation, conditional formatting, and
/// filters on non-data source objects and at least one ConditionValue for
/// filters on data source objects.
/// - "NUMBER_NOT_EQ" : The cell's value must be not equal to the condition's
/// value. Supported by data validation, conditional formatting and filters.
/// Requires a single ConditionValue for data validation, conditional
/// formatting, and filters on non-data source objects and at least one
/// ConditionValue for filters on data source objects.
/// - "NUMBER_BETWEEN" : The cell's value must be between the two condition
/// values. Supported by data validation, conditional formatting and filters.
/// Requires exactly two ConditionValues.
/// - "NUMBER_NOT_BETWEEN" : The cell's value must not be between the two
/// condition values. Supported by data validation, conditional formatting and
/// filters. Requires exactly two ConditionValues.
/// - "TEXT_CONTAINS" : The cell's value must contain the condition's value.
/// Supported by data validation, conditional formatting and filters. Requires
/// a single ConditionValue.
/// - "TEXT_NOT_CONTAINS" : The cell's value must not contain the condition's
/// value. Supported by data validation, conditional formatting and filters.
/// Requires a single ConditionValue.
/// - "TEXT_STARTS_WITH" : The cell's value must start with the condition's
/// value. Supported by conditional formatting and filters. Requires a single
/// ConditionValue.
/// - "TEXT_ENDS_WITH" : The cell's value must end with the condition's value.
/// Supported by conditional formatting and filters. Requires a single
/// ConditionValue.
/// - "TEXT_EQ" : The cell's value must be exactly the condition's value.
/// Supported by data validation, conditional formatting and filters. Requires
/// a single ConditionValue for data validation, conditional formatting, and
/// filters on non-data source objects and at least one ConditionValue for
/// filters on data source objects.
/// - "TEXT_IS_EMAIL" : The cell's value must be a valid email address.
/// Supported by data validation. Requires no ConditionValues.
/// - "TEXT_IS_URL" : The cell's value must be a valid URL. Supported by data
/// validation. Requires no ConditionValues.
/// - "DATE_EQ" : The cell's value must be the same date as the condition's
/// value. Supported by data validation, conditional formatting and filters.
/// Requires a single ConditionValue for data validation, conditional
/// formatting, and filters on non-data source objects and at least one
/// ConditionValue for filters on data source objects.
/// - "DATE_BEFORE" : The cell's value must be before the date of the
/// condition's value. Supported by data validation, conditional formatting
/// and filters. Requires a single ConditionValue that may be a relative date.
/// - "DATE_AFTER" : The cell's value must be after the date of the
/// condition's value. Supported by data validation, conditional formatting
/// and filters. Requires a single ConditionValue that may be a relative date.
/// - "DATE_ON_OR_BEFORE" : The cell's value must be on or before the date of
/// the condition's value. Supported by data validation. Requires a single
/// ConditionValue that may be a relative date.
/// - "DATE_ON_OR_AFTER" : The cell's value must be on or after the date of
/// the condition's value. Supported by data validation. Requires a single
/// ConditionValue that may be a relative date.
/// - "DATE_BETWEEN" : The cell's value must be between the dates of the two
/// condition values. Supported by data validation. Requires exactly two
/// ConditionValues.
/// - "DATE_NOT_BETWEEN" : The cell's value must be outside the dates of the
/// two condition values. Supported by data validation. Requires exactly two
/// ConditionValues.
/// - "DATE_IS_VALID" : The cell's value must be a date. Supported by data
/// validation. Requires no ConditionValues.
/// - "ONE_OF_RANGE" : The cell's value must be listed in the grid in
/// condition value's range. Supported by data validation. Requires a single
/// ConditionValue, and the value must be a valid range in A1 notation.
/// - "ONE_OF_LIST" : The cell's value must be in the list of condition
/// values. Supported by data validation. Supports any number of condition
/// values, one per item in the list. Formulas are not supported in the
/// values.
/// - "BLANK" : The cell's value must be empty. Supported by conditional
/// formatting and filters. Requires no ConditionValues.
/// - "NOT_BLANK" : The cell's value must not be empty. Supported by
/// conditional formatting and filters. Requires no ConditionValues.
/// - "CUSTOM_FORMULA" : The condition's formula must evaluate to true.
/// Supported by data validation, conditional formatting and filters. Not
/// supported by data source sheet filters. Requires a single ConditionValue.
/// - "BOOLEAN" : The cell's value must be TRUE/FALSE or in the list of
/// condition values. Supported by data validation. Renders as a cell
/// checkbox. Supports zero, one or two ConditionValues. No values indicates
/// the cell must be TRUE or FALSE, where TRUE renders as checked and FALSE
/// renders as unchecked. One value indicates the cell will render as checked
/// when it contains that value and unchecked when it is blank. Two values
/// indicate that the cell will render as checked when it contains the first
/// value and unchecked when it contains the second value. For example,
/// \["Yes","No"\] indicates that the cell will render a checked box when it
/// has the value "Yes" and an unchecked box when it has the value "No".
/// - "TEXT_NOT_EQ" : The cell's value must be exactly not the condition's
/// value. Supported by filters on data source objects. Requires at least one
/// ConditionValue.
/// - "DATE_NOT_EQ" : The cell's value must be exactly not the condition's
/// value. Supported by filters on data source objects. Requires at least one
/// ConditionValue.
core.String 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.
core.List<ConditionValue> values;
BooleanCondition();
BooleanCondition.fromJson(core.Map _json) {
if (_json.containsKey('type')) {
type = _json['type'] as core.String;
}
if (_json.containsKey('values')) {
values = (_json['values'] as core.List)
.map<ConditionValue>((value) => ConditionValue.fromJson(
value as core.Map<core.String, core.dynamic>))
.toList();
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (type != null) {
_json['type'] = type;
}
if (values != null) {
_json['values'] = values.map((value) => value.toJson()).toList();
}
return _json;
}
}
/// A rule that may or may not match, depending on the condition.
class BooleanRule {
/// The condition of the rule.
///
/// If the condition evaluates to true, the format is applied.
BooleanCondition condition;
/// The format to apply.
///
/// Conditional formatting can only apply a subset of formatting: bold,
/// italic, strikethrough, foreground color & background color.
CellFormat format;
BooleanRule();
BooleanRule.fromJson(core.Map _json) {
if (_json.containsKey('condition')) {
condition = BooleanCondition.fromJson(
_json['condition'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('format')) {
format = CellFormat.fromJson(
_json['format'] as core.Map<core.String, core.dynamic>);
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (condition != null) {
_json['condition'] = condition.toJson();
}
if (format != null) {
_json['format'] = format.toJson();
}
return _json;
}
}
/// A border along a cell.
class Border {
/// The color of the border.
Color color;
/// The color of the border.
///
/// If color is also set, this field takes precedence.
ColorStyle colorStyle;
/// The style of the border.
/// Possible string values are:
/// - "STYLE_UNSPECIFIED" : The style is not specified. Do not use this.
/// - "DOTTED" : The border is dotted.
/// - "DASHED" : The border is dashed.
/// - "SOLID" : The border is a thin solid line.
/// - "SOLID_MEDIUM" : The border is a medium solid line.
/// - "SOLID_THICK" : The border is a thick solid line.
/// - "NONE" : No border. Used only when updating a border in order to erase
/// it.
/// - "DOUBLE" : The border is two solid lines.
core.String style;
/// The width of the border, in pixels.
///
/// Deprecated; the width is determined by the "style" field.
core.int width;
Border();
Border.fromJson(core.Map _json) {
if (_json.containsKey('color')) {
color =
Color.fromJson(_json['color'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('colorStyle')) {
colorStyle = ColorStyle.fromJson(
_json['colorStyle'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('style')) {
style = _json['style'] as core.String;
}
if (_json.containsKey('width')) {
width = _json['width'] as core.int;
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (color != null) {
_json['color'] = color.toJson();
}
if (colorStyle != null) {
_json['colorStyle'] = colorStyle.toJson();
}
if (style != null) {
_json['style'] = style;
}
if (width != null) {
_json['width'] = width;
}
return _json;
}
}
/// The borders of the cell.
class Borders {
/// The bottom border of the cell.
Border bottom;
/// The left border of the cell.
Border left;
/// The right border of the cell.
Border right;
/// The top border of the cell.
Border top;
Borders();
Borders.fromJson(core.Map _json) {
if (_json.containsKey('bottom')) {
bottom = Border.fromJson(
_json['bottom'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('left')) {
left =
Border.fromJson(_json['left'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('right')) {
right = Border.fromJson(
_json['right'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('top')) {
top =
Border.fromJson(_json['top'] as core.Map<core.String, core.dynamic>);
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (bottom != null) {
_json['bottom'] = bottom.toJson();
}
if (left != null) {
_json['left'] = left.toJson();
}
if (right != null) {
_json['right'] = right.toJson();
}
if (top != null) {
_json['top'] = top.toJson();
}
return _json;
}
}
/// A bubble chart.
class BubbleChartSpec {
/// The bubble border color.
Color bubbleBorderColor;
/// The bubble border color.
///
/// If bubble_border_color is also set, this field takes precedence.
ColorStyle bubbleBorderColorStyle;
/// The data containing the bubble labels.
///
/// These do not need to be unique.
ChartData bubbleLabels;
/// The max radius size of the bubbles, in pixels.
///
/// If specified, the field must be a positive value.
core.int bubbleMaxRadiusSize;
/// The minimum radius size of the bubbles, in pixels.
///
/// If specific, the field must be a positive value.
core.int bubbleMinRadiusSize;
/// The opacity of the bubbles between 0 and 1.0.
///
/// 0 is fully transparent and 1 is fully opaque.
core.double bubbleOpacity;
/// The data contianing the bubble sizes.
///
/// Bubble sizes are used to draw the bubbles at different sizes relative to
/// each other. If specified, group_ids must also be specified. This field is
/// optional.
ChartData bubbleSizes;
/// The format of the text inside the bubbles.
///
/// Strikethrough and underline are not supported.
TextFormat bubbleTextStyle;
/// The data containing the bubble x-values.
///
/// These values locate the bubbles in the chart horizontally.
ChartData domain;
/// The data containing the bubble group IDs.
///
/// All bubbles with the same group ID are drawn in the same color. If
/// bubble_sizes is specified then this field must also be specified but may
/// contain blank values. This field is optional.
ChartData groupIds;
/// Where the legend of the chart should be drawn.
/// Possible string values are:
/// - "BUBBLE_CHART_LEGEND_POSITION_UNSPECIFIED" : Default value, do not use.
/// - "BOTTOM_LEGEND" : The legend is rendered on the bottom of the chart.
/// - "LEFT_LEGEND" : The legend is rendered on the left of the chart.
/// - "RIGHT_LEGEND" : The legend is rendered on the right of the chart.
/// - "TOP_LEGEND" : The legend is rendered on the top of the chart.
/// - "NO_LEGEND" : No legend is rendered.
/// - "INSIDE_LEGEND" : The legend is rendered inside the chart area.
core.String legendPosition;
/// The data contianing the bubble y-values.
///
/// These values locate the bubbles in the chart vertically.
ChartData series;
BubbleChartSpec();
BubbleChartSpec.fromJson(core.Map _json) {
if (_json.containsKey('bubbleBorderColor')) {
bubbleBorderColor = Color.fromJson(
_json['bubbleBorderColor'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('bubbleBorderColorStyle')) {
bubbleBorderColorStyle = ColorStyle.fromJson(
_json['bubbleBorderColorStyle']
as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('bubbleLabels')) {
bubbleLabels = ChartData.fromJson(
_json['bubbleLabels'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('bubbleMaxRadiusSize')) {
bubbleMaxRadiusSize = _json['bubbleMaxRadiusSize'] as core.int;
}
if (_json.containsKey('bubbleMinRadiusSize')) {
bubbleMinRadiusSize = _json['bubbleMinRadiusSize'] as core.int;
}
if (_json.containsKey('bubbleOpacity')) {
bubbleOpacity = (_json['bubbleOpacity'] as core.num).toDouble();
}
if (_json.containsKey('bubbleSizes')) {
bubbleSizes = ChartData.fromJson(
_json['bubbleSizes'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('bubbleTextStyle')) {
bubbleTextStyle = TextFormat.fromJson(
_json['bubbleTextStyle'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('domain')) {
domain = ChartData.fromJson(
_json['domain'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('groupIds')) {
groupIds = ChartData.fromJson(
_json['groupIds'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('legendPosition')) {
legendPosition = _json['legendPosition'] as core.String;
}
if (_json.containsKey('series')) {
series = ChartData.fromJson(
_json['series'] as core.Map<core.String, core.dynamic>);
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (bubbleBorderColor != null) {
_json['bubbleBorderColor'] = bubbleBorderColor.toJson();
}
if (bubbleBorderColorStyle != null) {
_json['bubbleBorderColorStyle'] = bubbleBorderColorStyle.toJson();
}
if (bubbleLabels != null) {
_json['bubbleLabels'] = bubbleLabels.toJson();
}
if (bubbleMaxRadiusSize != null) {
_json['bubbleMaxRadiusSize'] = bubbleMaxRadiusSize;
}
if (bubbleMinRadiusSize != null) {
_json['bubbleMinRadiusSize'] = bubbleMinRadiusSize;
}
if (bubbleOpacity != null) {
_json['bubbleOpacity'] = bubbleOpacity;
}
if (bubbleSizes != null) {
_json['bubbleSizes'] = bubbleSizes.toJson();
}
if (bubbleTextStyle != null) {
_json['bubbleTextStyle'] = bubbleTextStyle.toJson();
}
if (domain != null) {
_json['domain'] = domain.toJson();
}
if (groupIds != null) {
_json['groupIds'] = groupIds.toJson();
}
if (legendPosition != null) {
_json['legendPosition'] = legendPosition;
}
if (series != null) {
_json['series'] = series.toJson();
}
return _json;
}
}
/// A candlestick chart.
class CandlestickChartSpec {
/// The Candlestick chart data.
///
/// Only one CandlestickData is supported.
core.List<CandlestickData> data;
/// The domain data (horizontal axis) for the candlestick chart.
///
/// String data will be treated as discrete labels, other data will be treated
/// as continuous values.
CandlestickDomain domain;
CandlestickChartSpec();
CandlestickChartSpec.fromJson(core.Map _json) {
if (_json.containsKey('data')) {
data = (_json['data'] as core.List)
.map<CandlestickData>((value) => CandlestickData.fromJson(
value as core.Map<core.String, core.dynamic>))
.toList();
}
if (_json.containsKey('domain')) {
domain = CandlestickDomain.fromJson(
_json['domain'] as core.Map<core.String, core.dynamic>);
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (data != null) {
_json['data'] = data.map((value) => value.toJson()).toList();
}
if (domain != null) {
_json['domain'] = domain.toJson();
}
return _json;
}
}
/// The Candlestick chart data, each containing the low, open, close, and high
/// values for a series.
class CandlestickData {
/// The range data (vertical axis) for the close/final value for each candle.
///
/// This is the top of the candle body. If greater than the open value the
/// candle will be filled. Otherwise the candle will be hollow.
CandlestickSeries closeSeries;
/// The range data (vertical axis) for the high/maximum value for each candle.
///
/// This is the top of the candle's center line.
CandlestickSeries highSeries;
/// The range data (vertical axis) for the low/minimum value for each candle.
///
/// This is the bottom of the candle's center line.
CandlestickSeries lowSeries;
/// The range data (vertical axis) for the open/initial value for each candle.
///
/// This is the bottom of the candle body. If less than the close value the
/// candle will be filled. Otherwise the candle will be hollow.
CandlestickSeries openSeries;
CandlestickData();
CandlestickData.fromJson(core.Map _json) {
if (_json.containsKey('closeSeries')) {
closeSeries = CandlestickSeries.fromJson(
_json['closeSeries'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('highSeries')) {
highSeries = CandlestickSeries.fromJson(
_json['highSeries'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('lowSeries')) {
lowSeries = CandlestickSeries.fromJson(
_json['lowSeries'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('openSeries')) {
openSeries = CandlestickSeries.fromJson(
_json['openSeries'] as core.Map<core.String, core.dynamic>);
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (closeSeries != null) {
_json['closeSeries'] = closeSeries.toJson();
}
if (highSeries != null) {
_json['highSeries'] = highSeries.toJson();
}
if (lowSeries != null) {
_json['lowSeries'] = lowSeries.toJson();
}
if (openSeries != null) {
_json['openSeries'] = openSeries.toJson();
}
return _json;
}
}
/// The domain of a CandlestickChart.
class CandlestickDomain {
/// The data of the CandlestickDomain.
ChartData data;
/// True to reverse the order of the domain values (horizontal axis).
core.bool reversed;
CandlestickDomain();
CandlestickDomain.fromJson(core.Map _json) {
if (_json.containsKey('data')) {
data = ChartData.fromJson(
_json['data'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('reversed')) {
reversed = _json['reversed'] as core.bool;
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (data != null) {
_json['data'] = data.toJson();
}
if (reversed != null) {
_json['reversed'] = reversed;
}
return _json;
}
}
/// The series of a CandlestickData.
class CandlestickSeries {
/// The data of the CandlestickSeries.
ChartData data;
CandlestickSeries();
CandlestickSeries.fromJson(core.Map _json) {
if (_json.containsKey('data')) {
data = ChartData.fromJson(
_json['data'] as core.Map<core.String, core.dynamic>);
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (data != null) {
_json['data'] = data.toJson();
}
return _json;
}
}
/// Data about a specific cell.
class CellData {
/// Information about a data source formula on the cell.
///
/// The field is set if user_entered_value is a formula referencing some
/// DATA_SOURCE sheet, e.g `=SUM(DataSheet!Column)`.
///
/// Output only.
DataSourceFormula dataSourceFormula;
/// A data source table anchored at this cell.
///
/// The size of data source table itself is computed dynamically based on its
/// configuration. Only the first cell of the data source table contains the
/// data source table definition. The other cells will contain the display
/// values of the data source table result in their effective_value fields.
DataSourceTable dataSourceTable;
/// A data validation rule on the cell, if any.
///
/// When writing, the new data validation rule will overwrite any prior rule.
DataValidationRule dataValidation;
/// The effective format being used by the cell.
///
/// This includes the results of applying any conditional formatting and, if
/// the cell contains a formula, the computed number format. If the effective
/// format is the default format, effective format will not be written. This
/// field is read-only.
CellFormat effectiveFormat;
/// The effective value of the cell.
///
/// For cells with formulas, this is the calculated value. For cells with
/// literals, this is the same as the user_entered_value. This field is
/// read-only.
ExtendedValue effectiveValue;
/// The formatted value of the cell.
///
/// This is the value as it's shown to the user. This field is read-only.
core.String formattedValue;
/// 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.
core.String hyperlink;
/// Any note on the cell.
core.String note;
/// A pivot table anchored at this cell.
///
/// The size of pivot table itself is computed dynamically based on its data,
/// grouping, filters, values, etc. Only the top-left cell of the pivot table
/// contains the pivot table definition. The other cells will contain the
/// calculated values of the results of the pivot in their effective_value
/// fields.
PivotTable pivotTable;
/// 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.
core.List<TextFormatRun> textFormatRuns;
/// The format the user entered for the cell.
///
/// When writing, the new format will be merged with the existing format.
CellFormat userEnteredFormat;
/// The value the user entered in the cell.
///
/// e.g, `1234`, `'Hello'`, or `=NOW()` Note: Dates, Times and DateTimes are
/// represented as doubles in serial number format.
ExtendedValue userEnteredValue;
CellData();
CellData.fromJson(core.Map _json) {
if (_json.containsKey('dataSourceFormula')) {
dataSourceFormula = DataSourceFormula.fromJson(
_json['dataSourceFormula'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('dataSourceTable')) {
dataSourceTable = DataSourceTable.fromJson(
_json['dataSourceTable'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('dataValidation')) {
dataValidation = DataValidationRule.fromJson(
_json['dataValidation'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('effectiveFormat')) {
effectiveFormat = CellFormat.fromJson(
_json['effectiveFormat'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('effectiveValue')) {
effectiveValue = ExtendedValue.fromJson(
_json['effectiveValue'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('formattedValue')) {
formattedValue = _json['formattedValue'] as core.String;
}
if (_json.containsKey('hyperlink')) {
hyperlink = _json['hyperlink'] as core.String;
}
if (_json.containsKey('note')) {
note = _json['note'] as core.String;
}
if (_json.containsKey('pivotTable')) {
pivotTable = PivotTable.fromJson(
_json['pivotTable'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('textFormatRuns')) {
textFormatRuns = (_json['textFormatRuns'] as core.List)
.map<TextFormatRun>((value) => TextFormatRun.fromJson(
value as core.Map<core.String, core.dynamic>))
.toList();
}
if (_json.containsKey('userEnteredFormat')) {
userEnteredFormat = CellFormat.fromJson(
_json['userEnteredFormat'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('userEnteredValue')) {
userEnteredValue = ExtendedValue.fromJson(
_json['userEnteredValue'] as core.Map<core.String, core.dynamic>);
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (dataSourceFormula != null) {
_json['dataSourceFormula'] = dataSourceFormula.toJson();
}
if (dataSourceTable != null) {
_json['dataSourceTable'] = dataSourceTable.toJson();
}
if (dataValidation != null) {
_json['dataValidation'] = dataValidation.toJson();
}
if (effectiveFormat != null) {
_json['effectiveFormat'] = effectiveFormat.toJson();
}
if (effectiveValue != null) {
_json['effectiveValue'] = effectiveValue.toJson();
}
if (formattedValue != null) {
_json['formattedValue'] = formattedValue;
}
if (hyperlink != null) {
_json['hyperlink'] = hyperlink;
}
if (note != null) {
_json['note'] = note;
}
if (pivotTable != null) {
_json['pivotTable'] = pivotTable.toJson();
}
if (textFormatRuns != null) {
_json['textFormatRuns'] =
textFormatRuns.map((value) => value.toJson()).toList();
}
if (userEnteredFormat != null) {
_json['userEnteredFormat'] = userEnteredFormat.toJson();
}
if (userEnteredValue != null) {
_json['userEnteredValue'] = userEnteredValue.toJson();
}
return _json;
}
}
/// The format of a cell.
class CellFormat {
/// The background color of the cell.
Color backgroundColor;
/// The background color of the cell.
///
/// If background_color is also set, this field takes precedence.
ColorStyle backgroundColorStyle;
/// The borders of the cell.
Borders borders;
/// The horizontal alignment of the value in the cell.
/// Possible string values are:
/// - "HORIZONTAL_ALIGN_UNSPECIFIED" : The horizontal alignment is not
/// specified. Do not use this.
/// - "LEFT" : The text is explicitly aligned to the left of the cell.
/// - "CENTER" : The text is explicitly aligned to the center of the cell.
/// - "RIGHT" : The text is explicitly aligned to the right of the cell.
core.String horizontalAlignment;
/// How a hyperlink, if it exists, should be displayed in the cell.
/// Possible string values are:
/// - "HYPERLINK_DISPLAY_TYPE_UNSPECIFIED" : The default value: the hyperlink
/// is rendered. Do not use this.
/// - "LINKED" : A hyperlink should be explicitly rendered.
/// - "PLAIN_TEXT" : A hyperlink should not be rendered.
core.String hyperlinkDisplayType;
/// A format describing how number values should be represented to the user.
NumberFormat numberFormat;
/// The padding of the cell.
Padding padding;
/// The direction of the text in the cell.
/// Possible string values are:
/// - "TEXT_DIRECTION_UNSPECIFIED" : The text direction is not specified. Do
/// not use this.
/// - "LEFT_TO_RIGHT" : The text direction of left-to-right was set by the
/// user.
/// - "RIGHT_TO_LEFT" : The text direction of right-to-left was set by the
/// user.
core.String textDirection;
/// The format of the text in the cell (unless overridden by a format run).
TextFormat textFormat;
/// The rotation applied to text in a cell
TextRotation textRotation;
/// The vertical alignment of the value in the cell.
/// Possible string values are:
/// - "VERTICAL_ALIGN_UNSPECIFIED" : The vertical alignment is not specified.
/// Do not use this.
/// - "TOP" : The text is explicitly aligned to the top of the cell.
/// - "MIDDLE" : The text is explicitly aligned to the middle of the cell.
/// - "BOTTOM" : The text is explicitly aligned to the bottom of the cell.
core.String verticalAlignment;
/// The wrap strategy for the value in the cell.
/// Possible string values are:
/// - "WRAP_STRATEGY_UNSPECIFIED" : The default value, do not use.
/// - "OVERFLOW_CELL" : Lines that are longer than the cell width will be
/// written in the next cell over, so long as that cell is empty. If the next
/// cell over is non-empty, this behaves the same as CLIP. The text will never
/// wrap to the next line unless the user manually inserts a new line.
/// Example: | First sentence. | | Manual newline that is very long. <- Text
/// continues into next cell | Next newline. |
/// - "LEGACY_WRAP" : This wrap strategy represents the old Google Sheets wrap
/// strategy where words that are longer than a line are clipped rather than
/// broken. This strategy is not supported on all platforms and is being
/// phased out. Example: | Cell has a | | loooooooooo| <- Word is clipped. |
/// word. |
/// - "CLIP" : Lines that are longer than the cell width will be clipped. The
/// text will never wrap to the next line unless the user manually inserts a
/// new line. Example: | First sentence. | | Manual newline t| <- Text is
/// clipped | Next newline. |
/// - "WRAP" : Words that are longer than a line are wrapped at the character
/// level rather than clipped. Example: | Cell has a | | loooooooooo| <- Word
/// is broken. | ong word. |
core.String wrapStrategy;
CellFormat();
CellFormat.fromJson(core.Map _json) {
if (_json.containsKey('backgroundColor')) {
backgroundColor = Color.fromJson(
_json['backgroundColor'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('backgroundColorStyle')) {
backgroundColorStyle = ColorStyle.fromJson(
_json['backgroundColorStyle'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('borders')) {
borders = Borders.fromJson(
_json['borders'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('horizontalAlignment')) {
horizontalAlignment = _json['horizontalAlignment'] as core.String;
}
if (_json.containsKey('hyperlinkDisplayType')) {
hyperlinkDisplayType = _json['hyperlinkDisplayType'] as core.String;
}
if (_json.containsKey('numberFormat')) {
numberFormat = NumberFormat.fromJson(
_json['numberFormat'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('padding')) {
padding = Padding.fromJson(
_json['padding'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('textDirection')) {
textDirection = _json['textDirection'] as core.String;
}
if (_json.containsKey('textFormat')) {
textFormat = TextFormat.fromJson(
_json['textFormat'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('textRotation')) {
textRotation = TextRotation.fromJson(
_json['textRotation'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('verticalAlignment')) {
verticalAlignment = _json['verticalAlignment'] as core.String;
}
if (_json.containsKey('wrapStrategy')) {
wrapStrategy = _json['wrapStrategy'] as core.String;
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (backgroundColor != null) {
_json['backgroundColor'] = backgroundColor.toJson();
}
if (backgroundColorStyle != null) {
_json['backgroundColorStyle'] = backgroundColorStyle.toJson();
}
if (borders != null) {
_json['borders'] = borders.toJson();
}
if (horizontalAlignment != null) {
_json['horizontalAlignment'] = horizontalAlignment;
}
if (hyperlinkDisplayType != null) {
_json['hyperlinkDisplayType'] = hyperlinkDisplayType;
}
if (numberFormat != null) {
_json['numberFormat'] = numberFormat.toJson();
}
if (padding != null) {
_json['padding'] = padding.toJson();
}
if (textDirection != null) {
_json['textDirection'] = textDirection;
}
if (textFormat != null) {
_json['textFormat'] = textFormat.toJson();
}
if (textRotation != null) {
_json['textRotation'] = textRotation.toJson();
}
if (verticalAlignment != null) {
_json['verticalAlignment'] = verticalAlignment;
}
if (wrapStrategy != null) {
_json['wrapStrategy'] = wrapStrategy;
}
return _json;
}
}
/// The options that define a "view window" for a chart (such as the visible
/// values in an axis).
class ChartAxisViewWindowOptions {
/// 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.
core.double viewWindowMax;
/// 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.
core.double viewWindowMin;
/// The view window's mode.
/// Possible string values are:
/// - "DEFAULT_VIEW_WINDOW_MODE" : The default view window mode used in the
/// Sheets editor for this chart type. In most cases, if set, the default mode
/// is equivalent to `PRETTY`.
/// - "VIEW_WINDOW_MODE_UNSUPPORTED" : Do not use. Represents that the
/// currently set mode is not supported by the API.
/// - "EXPLICIT" : Follows the min and max exactly if specified. If a value is
/// unspecified, it will fall back to the `PRETTY` value.
/// - "PRETTY" : Chooses a min and max that make the chart look good. Both min
/// and max are ignored in this mode.
core.String viewWindowMode;
ChartAxisViewWindowOptions();
ChartAxisViewWindowOptions.fromJson(core.Map _json) {
if (_json.containsKey('viewWindowMax')) {
viewWindowMax = (_json['viewWindowMax'] as core.num).toDouble();
}
if (_json.containsKey('viewWindowMin')) {
viewWindowMin = (_json['viewWindowMin'] as core.num).toDouble();
}
if (_json.containsKey('viewWindowMode')) {
viewWindowMode = _json['viewWindowMode'] as core.String;
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (viewWindowMax != null) {
_json['viewWindowMax'] = viewWindowMax;
}
if (viewWindowMin != null) {
_json['viewWindowMin'] = viewWindowMin;
}
if (viewWindowMode != null) {
_json['viewWindowMode'] = viewWindowMode;
}
return _json;
}
}
/// Custom number formatting options for chart attributes.
class ChartCustomNumberFormatOptions {
/// Custom prefix to be prepended to the chart attribute.
///
/// This field is optional.
core.String prefix;
/// Custom suffix to be appended to the chart attribute.
///
/// This field is optional.
core.String suffix;
ChartCustomNumberFormatOptions();
ChartCustomNumberFormatOptions.fromJson(core.Map _json) {
if (_json.containsKey('prefix')) {
prefix = _json['prefix'] as core.String;
}
if (_json.containsKey('suffix')) {
suffix = _json['suffix'] as core.String;
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (prefix != null) {
_json['prefix'] = prefix;
}
if (suffix != null) {
_json['suffix'] = suffix;
}
return _json;
}
}
/// The data included in a domain or series.
class ChartData {
/// The aggregation type for the series of a data source chart.
///
/// Not supported for regular charts.
/// Possible string values are:
/// - "CHART_AGGREGATE_TYPE_UNSPECIFIED" : Default value, do not use.
/// - "AVERAGE" : Average aggregate function.
/// - "COUNT" : Count aggregate function.
/// - "MAX" : Maximum aggregate function.
/// - "MEDIAN" : Median aggregate function.
/// - "MIN" : Minimum aggregate function.
/// - "SUM" : Sum aggregate function.
core.String aggregateType;
/// The reference to the data source column that the data reads from.
DataSourceColumnReference columnReference;
/// The rule to group the data by if the ChartData backs the domain of a data
/// source chart.
///
/// Not supported for regular charts.
ChartGroupRule groupRule;
/// The source ranges of the data.
ChartSourceRange sourceRange;
ChartData();
ChartData.fromJson(core.Map _json) {
if (_json.containsKey('aggregateType')) {
aggregateType = _json['aggregateType'] as core.String;
}
if (_json.containsKey('columnReference')) {
columnReference = DataSourceColumnReference.fromJson(
_json['columnReference'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('groupRule')) {
groupRule = ChartGroupRule.fromJson(
_json['groupRule'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('sourceRange')) {
sourceRange = ChartSourceRange.fromJson(
_json['sourceRange'] as core.Map<core.String, core.dynamic>);
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (aggregateType != null) {
_json['aggregateType'] = aggregateType;
}
if (columnReference != null) {
_json['columnReference'] = columnReference.toJson();
}
if (groupRule != null) {
_json['groupRule'] = groupRule.toJson();
}
if (sourceRange != null) {
_json['sourceRange'] = sourceRange.toJson();
}
return _json;
}
}
/// 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 {
/// The type of date-time grouping to apply.
/// Possible string values are:
/// - "CHART_DATE_TIME_RULE_TYPE_UNSPECIFIED" : The default type, do not use.
/// - "SECOND" : Group dates by second, from 0 to 59.
/// - "MINUTE" : Group dates by minute, from 0 to 59.
/// - "HOUR" : Group dates by hour using a 24-hour system, from 0 to 23.
/// - "HOUR_MINUTE" : Group dates by hour and minute using a 24-hour system,
/// for example 19:45.
/// - "HOUR_MINUTE_AMPM" : Group dates by hour and minute using a 12-hour
/// system, for example 7:45 PM. The AM/PM designation is translated based on
/// the spreadsheet locale.
/// - "DAY_OF_WEEK" : Group dates by day of week, for example Sunday. The days
/// of the week will be translated based on the spreadsheet locale.
/// - "DAY_OF_YEAR" : Group dates by day of year, from 1 to 366. Note that
/// dates after Feb. 29 fall in different buckets in leap years than in
/// non-leap years.
/// - "DAY_OF_MONTH" : Group dates by day of month, from 1 to 31.
/// - "DAY_MONTH" : Group dates by day and month, for example 22-Nov. The
/// month is translated based on the spreadsheet locale.
/// - "MONTH" : Group dates by month, for example Nov. The month is translated
/// based on the spreadsheet locale.
/// - "QUARTER" : Group dates by quarter, for example Q1 (which represents
/// Jan-Mar).
/// - "YEAR" : Group dates by year, for example 2008.
/// - "YEAR_MONTH" : Group dates by year and month, for example 2008-Nov. The
/// month is translated based on the spreadsheet locale.
/// - "YEAR_QUARTER" : Group dates by year and quarter, for example 2008 Q4.
/// - "YEAR_MONTH_DAY" : Group dates by year, month, and day, for example
/// 2008-11-22.
core.String type;
ChartDateTimeRule();
ChartDateTimeRule.fromJson(core.Map _json) {
if (_json.containsKey('type')) {
type = _json['type'] as core.String;
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (type != null) {
_json['type'] = type;
}
return _json;
}
}
/// 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 {
/// A ChartDateTimeRule.
ChartDateTimeRule dateTimeRule;
/// A ChartHistogramRule
ChartHistogramRule histogramRule;
ChartGroupRule();
ChartGroupRule.fromJson(core.Map _json) {
if (_json.containsKey('dateTimeRule')) {
dateTimeRule = ChartDateTimeRule.fromJson(
_json['dateTimeRule'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('histogramRule')) {
histogramRule = ChartHistogramRule.fromJson(
_json['histogramRule'] as core.Map<core.String, core.dynamic>);
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (dateTimeRule != null) {
_json['dateTimeRule'] = dateTimeRule.toJson();
}
if (histogramRule != null) {
_json['histogramRule'] = histogramRule.toJson();
}
return _json;
}
}
/// Allows you to organize numeric values in a source data column into buckets
/// of constant size.
class ChartHistogramRule {
/// The size of the buckets that are created.
///
/// Must be positive.
core.double intervalSize;
/// 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.
core.double maxValue;
/// 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.
core.double minValue;
ChartHistogramRule();
ChartHistogramRule.fromJson(core.Map _json) {
if (_json.containsKey('intervalSize')) {
intervalSize = (_json['intervalSize'] as core.num).toDouble();
}
if (_json.containsKey('maxValue')) {
maxValue = (_json['maxValue'] as core.num).toDouble();
}
if (_json.containsKey('minValue')) {
minValue = (_json['minValue'] as core.num).toDouble();
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (intervalSize != null) {
_json['intervalSize'] = intervalSize;
}
if (maxValue != null) {
_json['maxValue'] = maxValue;
}
if (minValue != null) {
_json['minValue'] = minValue;
}
return _json;
}
}
/// Source ranges for a chart.
class ChartSourceRange {
/// 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
core.List<GridRange> sources;
ChartSourceRange();
ChartSourceRange.fromJson(core.Map _json) {
if (_json.containsKey('sources')) {
sources = (_json['sources'] as core.List)
.map<GridRange>((value) =>
GridRange.fromJson(value as core.Map<core.String, core.dynamic>))
.toList();
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (sources != null) {
_json['sources'] = sources.map((value) => value.toJson()).toList();
}
return _json;
}
}
/// The specifications of a chart.
class ChartSpec {
/// The alternative text that describes the chart.
///
/// This is often used for accessibility.
core.String altText;
/// The background color of the entire chart.
///
/// Not applicable to Org charts.
Color backgroundColor;
/// The background color of the entire chart.
///
/// Not applicable to Org charts. If background_color is also set, this field
/// takes precedence.
ColorStyle backgroundColorStyle;
/// A basic chart specification, can be one of many kinds of charts.
///
/// See BasicChartType for the list of all charts this supports.
BasicChartSpec basicChart;
/// A bubble chart specification.
BubbleChartSpec bubbleChart;
/// A candlestick chart specification.
CandlestickChartSpec candlestickChart;
/// If present, the field contains data source chart specific properties.
DataSourceChartProperties dataSourceChartProperties;
/// The filters applied to the source data of the chart.
///
/// Only supported for data source charts.
core.List<FilterSpec> filterSpecs;
/// 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.
core.String fontName;
/// Determines how the charts will use hidden rows or columns.
/// Possible string values are:
/// - "CHART_HIDDEN_DIMENSION_STRATEGY_UNSPECIFIED" : Default value, do not
/// use.
/// - "SKIP_HIDDEN_ROWS_AND_COLUMNS" : Charts will skip hidden rows and
/// columns.
/// - "SKIP_HIDDEN_ROWS" : Charts will skip hidden rows only.
/// - "SKIP_HIDDEN_COLUMNS" : Charts will skip hidden columns only.
/// - "SHOW_ALL" : Charts will not skip any hidden rows or columns.
core.String hiddenDimensionStrategy;
/// A histogram chart specification.
HistogramChartSpec histogramChart;
/// 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.)
core.bool maximized;
/// An org chart specification.
OrgChartSpec orgChart;
/// A pie chart specification.
PieChartSpec pieChart;
/// A scorecard chart specification.
ScorecardChartSpec scorecardChart;
/// The order to sort the chart data by.
///
/// Only a single sort spec is supported. Only supported for data source
/// charts.
core.List<SortSpec> sortSpecs;
/// The subtitle of the chart.
core.String subtitle;
/// The subtitle text format.
///
/// Strikethrough and underline are not supported.
TextFormat subtitleTextFormat;
/// The subtitle text position.
///
/// This field is optional.
TextPosition subtitleTextPosition;
/// The title of the chart.
core.String title;
/// The title text format.
///
/// Strikethrough and underline are not supported.
TextFormat titleTextFormat;
/// The title text position.
///
/// This field is optional.
TextPosition titleTextPosition;
/// A treemap chart specification.
TreemapChartSpec treemapChart;
/// A waterfall chart specification.
WaterfallChartSpec waterfallChart;
ChartSpec();
ChartSpec.fromJson(core.Map _json) {
if (_json.containsKey('altText')) {
altText = _json['altText'] as core.String;
}
if (_json.containsKey('backgroundColor')) {
backgroundColor = Color.fromJson(
_json['backgroundColor'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('backgroundColorStyle')) {
backgroundColorStyle = ColorStyle.fromJson(
_json['backgroundColorStyle'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('basicChart')) {
basicChart = BasicChartSpec.fromJson(
_json['basicChart'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('bubbleChart')) {
bubbleChart = BubbleChartSpec.fromJson(
_json['bubbleChart'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('candlestickChart')) {
candlestickChart = CandlestickChartSpec.fromJson(
_json['candlestickChart'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('dataSourceChartProperties')) {
dataSourceChartProperties = DataSourceChartProperties.fromJson(
_json['dataSourceChartProperties']
as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('filterSpecs')) {
filterSpecs = (_json['filterSpecs'] as core.List)
.map<FilterSpec>((value) =>
FilterSpec.fromJson(value as core.Map<core.String, core.dynamic>))
.toList();
}
if (_json.containsKey('fontName')) {
fontName = _json['fontName'] as core.String;
}
if (_json.containsKey('hiddenDimensionStrategy')) {
hiddenDimensionStrategy = _json['hiddenDimensionStrategy'] as core.String;
}
if (_json.containsKey('histogramChart')) {
histogramChart = HistogramChartSpec.fromJson(
_json['histogramChart'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('maximized')) {
maximized = _json['maximized'] as core.bool;
}
if (_json.containsKey('orgChart')) {
orgChart = OrgChartSpec.fromJson(
_json['orgChart'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('pieChart')) {
pieChart = PieChartSpec.fromJson(
_json['pieChart'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('scorecardChart')) {
scorecardChart = ScorecardChartSpec.fromJson(
_json['scorecardChart'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('sortSpecs')) {
sortSpecs = (_json['sortSpecs'] as core.List)
.map<SortSpec>((value) =>
SortSpec.fromJson(value as core.Map<core.String, core.dynamic>))
.toList();
}
if (_json.containsKey('subtitle')) {
subtitle = _json['subtitle'] as core.String;
}
if (_json.containsKey('subtitleTextFormat')) {
subtitleTextFormat = TextFormat.fromJson(
_json['subtitleTextFormat'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('subtitleTextPosition')) {
subtitleTextPosition = TextPosition.fromJson(
_json['subtitleTextPosition'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('title')) {
title = _json['title'] as core.String;
}
if (_json.containsKey('titleTextFormat')) {
titleTextFormat = TextFormat.fromJson(
_json['titleTextFormat'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('titleTextPosition')) {
titleTextPosition = TextPosition.fromJson(
_json['titleTextPosition'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('treemapChart')) {
treemapChart = TreemapChartSpec.fromJson(
_json['treemapChart'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('waterfallChart')) {
waterfallChart = WaterfallChartSpec.fromJson(
_json['waterfallChart'] as core.Map<core.String, core.dynamic>);
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (altText != null) {
_json['altText'] = altText;
}
if (backgroundColor != null) {
_json['backgroundColor'] = backgroundColor.toJson();
}
if (backgroundColorStyle != null) {
_json['backgroundColorStyle'] = backgroundColorStyle.toJson();
}
if (basicChart != null) {
_json['basicChart'] = basicChart.toJson();
}
if (bubbleChart != null) {
_json['bubbleChart'] = bubbleChart.toJson();
}
if (candlestickChart != null) {
_json['candlestickChart'] = candlestickChart.toJson();
}
if (dataSourceChartProperties != null) {
_json['dataSourceChartProperties'] = dataSourceChartProperties.toJson();
}
if (filterSpecs != null) {
_json['filterSpecs'] =
filterSpecs.map((value) => value.toJson()).toList();
}
if (fontName != null) {
_json['fontName'] = fontName;
}
if (hiddenDimensionStrategy != null) {
_json['hiddenDimensionStrategy'] = hiddenDimensionStrategy;
}
if (histogramChart != null) {
_json['histogramChart'] = histogramChart.toJson();
}
if (maximized != null) {
_json['maximized'] = maximized;
}
if (orgChart != null) {
_json['orgChart'] = orgChart.toJson();
}
if (pieChart != null) {
_json['pieChart'] = pieChart.toJson();
}
if (scorecardChart != null) {
_json['scorecardChart'] = scorecardChart.toJson();
}
if (sortSpecs != null) {
_json['sortSpecs'] = sortSpecs.map((value) => value.toJson()).toList();
}
if (subtitle != null) {
_json['subtitle'] = subtitle;
}
if (subtitleTextFormat != null) {
_json['subtitleTextFormat'] = subtitleTextFormat.toJson();
}
if (subtitleTextPosition != null) {
_json['subtitleTextPosition'] = subtitleTextPosition.toJson();
}
if (title != null) {
_json['title'] = title;
}
if (titleTextFormat != null) {
_json['titleTextFormat'] = titleTextFormat.toJson();
}
if (titleTextPosition != null) {
_json['titleTextPosition'] = titleTextPosition.toJson();
}
if (treemapChart != null) {
_json['treemapChart'] = treemapChart.toJson();
}
if (waterfallChart != null) {
_json['waterfallChart'] = waterfallChart.toJson();
}
return _json;
}
}
/// Clears the basic filter, if any exists on the sheet.
class ClearBasicFilterRequest {
/// The sheet ID on which the basic filter should be cleared.
core.int sheetId;
ClearBasicFilterRequest();
ClearBasicFilterRequest.fromJson(core.Map _json) {
if (_json.containsKey('sheetId')) {
sheetId = _json['sheetId'] as core.int;
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (sheetId != null) {
_json['sheetId'] = sheetId;
}
return _json;
}
}
/// The request for clearing a range of values in a spreadsheet.
class ClearValuesRequest {
ClearValuesRequest();
ClearValuesRequest.fromJson(
// ignore: avoid_unused_constructor_parameters
core.Map _json);
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
return _json;
}
}
/// The response when clearing a range of values in a spreadsheet.
class ClearValuesResponse {
/// 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.)
core.String clearedRange;
/// The spreadsheet the updates were applied to.
core.String spreadsheetId;
ClearValuesResponse();
ClearValuesResponse.fromJson(core.Map _json) {
if (_json.containsKey('clearedRange')) {
clearedRange = _json['clearedRange'] as core.String;
}
if (_json.containsKey('spreadsheetId')) {
spreadsheetId = _json['spreadsheetId'] as core.String;
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (clearedRange != null) {
_json['clearedRange'] = clearedRange;
}
if (spreadsheetId != null) {
_json['spreadsheetId'] = spreadsheetId;
}
return _json;
}
}
/// 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 {
/// 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).
core.double alpha;
/// The amount of blue in the color as a value in the interval \[0, 1\].
core.double blue;
/// The amount of green in the color as a value in the interval \[0, 1\].
core.double green;
/// The amount of red in the color as a value in the interval \[0, 1\].
core.double red;
Color();
Color.fromJson(core.Map _json) {
if (_json.containsKey('alpha')) {
alpha = (_json['alpha'] as core.num).toDouble();
}
if (_json.containsKey('blue')) {
blue = (_json['blue'] as core.num).toDouble();
}
if (_json.containsKey('green')) {
green = (_json['green'] as core.num).toDouble();
}
if (_json.containsKey('red')) {
red = (_json['red'] as core.num).toDouble();
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (alpha != null) {
_json['alpha'] = alpha;
}
if (blue != null) {
_json['blue'] = blue;
}
if (green != null) {
_json['green'] = green;
}
if (red != null) {
_json['red'] = red;
}
return _json;
}
}
/// A color value.
class ColorStyle {
/// RGB color.
Color rgbColor;
/// Theme color.
/// Possible string values are:
/// - "THEME_COLOR_TYPE_UNSPECIFIED" : Unspecified theme color
/// - "TEXT" : Represents the primary text color
/// - "BACKGROUND" : Represents the primary background color
/// - "ACCENT1" : Represents the first accent color
/// - "ACCENT2" : Represents the second accent color
/// - "ACCENT3" : Represents the third accent color
/// - "ACCENT4" : Represents the fourth accent color
/// - "ACCENT5" : Represents the fifth accent color
/// - "ACCENT6" : Represents the sixth accent color
/// - "LINK" : Represents the color to use for hyperlinks
core.String themeColor;
ColorStyle();
ColorStyle.fromJson(core.Map _json) {
if (_json.containsKey('rgbColor')) {
rgbColor = Color.fromJson(
_json['rgbColor'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('themeColor')) {
themeColor = _json['themeColor'] as core.String;
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (rgbColor != null) {
_json['rgbColor'] = rgbColor.toJson();
}
if (themeColor != null) {
_json['themeColor'] = themeColor;
}
return _json;
}
}
/// The value of the condition.
class ConditionValue {
/// 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.
/// Possible string values are:
/// - "RELATIVE_DATE_UNSPECIFIED" : Default value, do not use.
/// - "PAST_YEAR" : The value is one year before today.
/// - "PAST_MONTH" : The value is one month before today.
/// - "PAST_WEEK" : The value is one week before today.
/// - "YESTERDAY" : The value is yesterday.
/// - "TODAY" : The value is today.
/// - "TOMORROW" : The value is tomorrow.
core.String relativeDate;
/// 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 '+').
core.String userEnteredValue;
ConditionValue();
ConditionValue.fromJson(core.Map _json) {
if (_json.containsKey('relativeDate')) {
relativeDate = _json['relativeDate'] as core.String;
}
if (_json.containsKey('userEnteredValue')) {
userEnteredValue = _json['userEnteredValue'] as core.String;
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (relativeDate != null) {
_json['relativeDate'] = relativeDate;
}
if (userEnteredValue != null) {
_json['userEnteredValue'] = userEnteredValue;
}
return _json;
}
}
/// A rule describing a conditional format.
class ConditionalFormatRule {
/// The formatting is either "on" or "off" according to the rule.
BooleanRule booleanRule;
/// The formatting will vary based on the gradients in the rule.
GradientRule gradientRule;
/// The ranges that are formatted if the condition is true.
///
/// All the ranges must be on the same grid.
core.List<GridRange> ranges;
ConditionalFormatRule();
ConditionalFormatRule.fromJson(core.Map _json) {
if (_json.containsKey('booleanRule')) {
booleanRule = BooleanRule.fromJson(
_json['booleanRule'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('gradientRule')) {
gradientRule = GradientRule.fromJson(
_json['gradientRule'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('ranges')) {
ranges = (_json['ranges'] as core.List)
.map<GridRange>((value) =>
GridRange.fromJson(value as core.Map<core.String, core.dynamic>))
.toList();
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (booleanRule != null) {
_json['booleanRule'] = booleanRule.toJson();
}
if (gradientRule != null) {
_json['gradientRule'] = gradientRule.toJson();
}
if (ranges != null) {
_json['ranges'] = ranges.map((value) => value.toJson()).toList();
}
return _json;
}
}
/// Copies data from the source to the destination.
class CopyPasteRequest {
/// The location to paste to.
///
/// If the range covers a span that's a multiple of the source's height or
/// width, then the data will be repeated to fill in the destination range. If
/// the range is smaller than the source range, the entire source data will
/// still be copied (beyond the end of the destination range).
GridRange destination;
/// How that data should be oriented when pasting.
/// Possible string values are:
/// - "NORMAL" : Paste normally.
/// - "TRANSPOSE" : Paste transposed, where all rows become columns and vice
/// versa.
core.String pasteOrientation;
/// What kind of data to paste.
/// Possible string values are:
/// - "PASTE_NORMAL" : Paste values, formulas, formats, and merges.
/// - "PASTE_VALUES" : Paste the values ONLY without formats, formulas, or
/// merges.
/// - "PASTE_FORMAT" : Paste the format and data validation only.
/// - "PASTE_NO_BORDERS" : Like PASTE_NORMAL but without borders.
/// - "PASTE_FORMULA" : Paste the formulas only.
/// - "PASTE_DATA_VALIDATION" : Paste the data validation only.
/// - "PASTE_CONDITIONAL_FORMATTING" : Paste the conditional formatting rules
/// only.
core.String pasteType;
/// The source range to copy.
GridRange source;
CopyPasteRequest();
CopyPasteRequest.fromJson(core.Map _json) {
if (_json.containsKey('destination')) {
destination = GridRange.fromJson(
_json['destination'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('pasteOrientation')) {
pasteOrientation = _json['pasteOrientation'] as core.String;
}
if (_json.containsKey('pasteType')) {
pasteType = _json['pasteType'] as core.String;
}
if (_json.containsKey('source')) {
source = GridRange.fromJson(
_json['source'] as core.Map<core.String, core.dynamic>);
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (destination != null) {
_json['destination'] = destination.toJson();
}
if (pasteOrientation != null) {
_json['pasteOrientation'] = pasteOrientation;
}
if (pasteType != null) {
_json['pasteType'] = pasteType;
}
if (source != null) {
_json['source'] = source.toJson();
}
return _json;
}
}
/// The request to copy a sheet across spreadsheets.
class CopySheetToAnotherSpreadsheetRequest {
/// The ID of the spreadsheet to copy the sheet to.
core.String destinationSpreadsheetId;
CopySheetToAnotherSpreadsheetRequest();
CopySheetToAnotherSpreadsheetRequest.fromJson(core.Map _json) {
if (_json.containsKey('destinationSpreadsheetId')) {
destinationSpreadsheetId =
_json['destinationSpreadsheetId'] as core.String;
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (destinationSpreadsheetId != null) {
_json['destinationSpreadsheetId'] = destinationSpreadsheetId;
}
return _json;
}
}
/// A request to create developer metadata.
class CreateDeveloperMetadataRequest {
/// The developer metadata to create.
DeveloperMetadata developerMetadata;
CreateDeveloperMetadataRequest();
CreateDeveloperMetadataRequest.fromJson(core.Map _json) {
if (_json.containsKey('developerMetadata')) {
developerMetadata = DeveloperMetadata.fromJson(
_json['developerMetadata'] as core.Map<core.String, core.dynamic>);
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (developerMetadata != null) {
_json['developerMetadata'] = developerMetadata.toJson();
}
return _json;
}
}
/// The response from creating developer metadata.
class CreateDeveloperMetadataResponse {
/// The developer metadata that was created.
DeveloperMetadata developerMetadata;
CreateDeveloperMetadataResponse();
CreateDeveloperMetadataResponse.fromJson(core.Map _json) {
if (_json.containsKey('developerMetadata')) {
developerMetadata = DeveloperMetadata.fromJson(
_json['developerMetadata'] as core.Map<core.String, core.dynamic>);
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (developerMetadata != null) {
_json['developerMetadata'] = developerMetadata.toJson();
}
return _json;
}
}
/// Moves data from the source to the destination.
class CutPasteRequest {
/// The top-left coordinate where the data should be pasted.
GridCoordinate destination;
/// What kind of data to paste.
///
/// All the source data will be cut, regardless of what is pasted.
/// Possible string values are:
/// - "PASTE_NORMAL" : Paste values, formulas, formats, and merges.
/// - "PASTE_VALUES" : Paste the values ONLY without formats, formulas, or
/// merges.
/// - "PASTE_FORMAT" : Paste the format and data validation only.
/// - "PASTE_NO_BORDERS" : Like PASTE_NORMAL but without borders.
/// - "PASTE_FORMULA" : Paste the formulas only.
/// - "PASTE_DATA_VALIDATION" : Paste the data validation only.
/// - "PASTE_CONDITIONAL_FORMATTING" : Paste the conditional formatting rules
/// only.
core.String pasteType;
/// The source data to cut.
GridRange source;
CutPasteRequest();
CutPasteRequest.fromJson(core.Map _json) {
if (_json.containsKey('destination')) {
destination = GridCoordinate.fromJson(
_json['destination'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('pasteType')) {
pasteType = _json['pasteType'] as core.String;
}
if (_json.containsKey('source')) {
source = GridRange.fromJson(
_json['source'] as core.Map<core.String, core.dynamic>);
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (destination != null) {
_json['destination'] = destination.toJson();
}
if (pasteType != null) {
_json['pasteType'] = pasteType;
}
if (source != null) {
_json['source'] = source.toJson();
}
return _json;
}
}
/// 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 {
/// The error code.
/// Possible string values are:
/// - "DATA_EXECUTION_ERROR_CODE_UNSPECIFIED" : Default value, do not use.
/// - "TIMED_OUT" : The data execution timed out.
/// - "TOO_MANY_ROWS" : The data execution returns more rows than the limit.
/// - "TOO_MANY_CELLS" : The data execution returns more cells than the limit.
/// - "ENGINE" : Error is received from the backend data execution engine
/// (e.g. BigQuery). Check error_message for details.
/// - "PARAMETER_INVALID" : One or some of the provided data source parameters
/// are invalid.
/// - "UNSUPPORTED_DATA_TYPE" : The data execution returns an unsupported data
/// type.
/// - "DUPLICATE_COLUMN_NAMES" : The data execution returns duplicate column
/// names or aliases.
/// - "INTERRUPTED" : The data execution is interrupted. Please refresh later.
/// - "CONCURRENT_QUERY" : The data execution is currently in progress, can
/// not be refreshed until it completes.
/// - "OTHER" : Other errors.
/// - "TOO_MANY_CHARS_PER_CELL" : The data execution returns values that
/// exceed the maximum characters allowed in a single cell.
/// - "DATA_NOT_FOUND" : The database referenced by the data source is not
/// found. * /
/// - "PERMISSION_DENIED" : The user does not have access to the database
/// referenced by the data source.
/// - "MISSING_COLUMN_ALIAS" : The data execution returns columns with missing
/// aliases.
/// - "OBJECT_NOT_FOUND" : The data source object does not exist.
/// - "OBJECT_IN_ERROR_STATE" : The data source object is currently in error
/// state. To force refresh, set force in RefreshDataSourceRequest.
/// - "OBJECT_SPEC_INVALID" : The data source object specification is invalid.
core.String errorCode;
/// The error message, which may be empty.
core.String errorMessage;
/// Gets the time the data last successfully refreshed.
core.String lastRefreshTime;
/// The state of the data execution.
/// Possible string values are:
/// - "DATA_EXECUTION_STATE_UNSPECIFIED" : Default value, do not use.
/// - "NOT_STARTED" : The data execution has not started.
/// - "RUNNING" : The data execution has started and is running.
/// - "SUCCEEDED" : The data execution has completed successfully.
/// - "FAILED" : The data execution has completed with errors.
core.String state;
DataExecutionStatus();
DataExecutionStatus.fromJson(core.Map _json) {
if (_json.containsKey('errorCode')) {
errorCode = _json['errorCode'] as core.String;
}
if (_json.containsKey('errorMessage')) {
errorMessage = _json['errorMessage'] as core.String;
}
if (_json.containsKey('lastRefreshTime')) {
lastRefreshTime = _json['lastRefreshTime'] as core.String;
}
if (_json.containsKey('state')) {
state = _json['state'] as core.String;
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (errorCode != null) {
_json['errorCode'] = errorCode;
}
if (errorMessage != null) {
_json['errorMessage'] = errorMessage;
}
if (lastRefreshTime != null) {
_json['lastRefreshTime'] = lastRefreshTime;
}
if (state != null) {
_json['state'] = state;
}
return _json;
}
}
/// Filter that describes what data should be selected or returned from a
/// request.
class DataFilter {
/// Selects data that matches the specified A1 range.
core.String a1Range;
/// Selects data associated with the developer metadata matching the criteria
/// described by this DeveloperMetadataLookup.
DeveloperMetadataLookup developerMetadataLookup;
/// Selects data that matches the range described by the GridRange.
GridRange gridRange;
DataFilter();
DataFilter.fromJson(core.Map _json) {
if (_json.containsKey('a1Range')) {
a1Range = _json['a1Range'] as core.String;
}
if (_json.containsKey('developerMetadataLookup')) {
developerMetadataLookup = DeveloperMetadataLookup.fromJson(
_json['developerMetadataLookup']
as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('gridRange')) {
gridRange = GridRange.fromJson(
_json['gridRange'] as core.Map<core.String, core.dynamic>);
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (a1Range != null) {
_json['a1Range'] = a1Range;
}
if (developerMetadataLookup != null) {
_json['developerMetadataLookup'] = developerMetadataLookup.toJson();
}
if (gridRange != null) {
_json['gridRange'] = gridRange.toJson();
}
return _json;
}
}
/// A range of values whose location is specified by a DataFilter.
class DataFilterValueRange {
/// The data filter describing the location of the values in the spreadsheet.
DataFilter dataFilter;
/// The major dimension of the values.
/// Possible string values are:
/// - "DIMENSION_UNSPECIFIED" : The default value, do not use.
/// - "ROWS" : Operates on the rows of a sheet.
/// - "COLUMNS" : Operates on the columns of a sheet.
core.String majorDimension;
/// 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.
///
/// The values for Object must be JSON objects. It can consist of `num`,
/// `String`, `bool` and `null` as well as `Map` and `List` values.
core.List<core.List<core.Object>> values;
DataFilterValueRange();
DataFilterValueRange.fromJson(core.Map _json) {
if (_json.containsKey('dataFilter')) {
dataFilter = DataFilter.fromJson(
_json['dataFilter'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('majorDimension')) {
majorDimension = _json['majorDimension'] as core.String;
}
if (_json.containsKey('values')) {
values = (_json['values'] as core.List)
.map<core.List<core.Object>>((value) => (value as core.List)
.map<core.Object>((value) => value as core.Object)
.toList())
.toList();
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (dataFilter != null) {
_json['dataFilter'] = dataFilter.toJson();
}
if (majorDimension != null) {
_json['majorDimension'] = majorDimension;
}
if (values != null) {
_json['values'] = values;
}
return _json;
}
}
/// 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 {
/// Data to use for custom labels.
///
/// Only used if type is set to CUSTOM. This data must be the same length as
/// the series or other element this data label is applied to. In addition, if
/// the series is split into multiple source ranges, this source data must
/// come from the next column in the source data. For example, if the series
/// is B2:B4,E6:E8 then this data must come from C2:C4,F6:F8.
ChartData customLabelData;
/// The placement of the data label relative to the labeled data.
/// Possible string values are:
/// - "DATA_LABEL_PLACEMENT_UNSPECIFIED" : The positioning is determined
/// automatically by the renderer.
/// - "CENTER" : Center within a bar or column, both horizontally and
/// vertically.
/// - "LEFT" : To the left of a data point.
/// - "RIGHT" : To the right of a data point.
/// - "ABOVE" : Above a data point.
/// - "BELOW" : Below a data point.
/// - "INSIDE_END" : Inside a bar or column at the end (top if positive,
/// bottom if negative).
/// - "INSIDE_BASE" : Inside a bar or column at the base.
/// - "OUTSIDE_END" : Outside a bar or column at the end.
core.String placement;
/// The text format used for the data label.
TextFormat textFormat;
/// The type of the data label.
/// Possible string values are:
/// - "DATA_LABEL_TYPE_UNSPECIFIED" : The data label type is not specified and
/// will be interpreted depending on the context of the data label within the
/// chart.
/// - "NONE" : The data label is not displayed.
/// - "DATA" : The data label is displayed using values from the series data.
/// - "CUSTOM" : The data label is displayed using values from a custom data
/// source indicated by customLabelData.
core.String type;
DataLabel();
DataLabel.fromJson(core.Map _json) {
if (_json.containsKey('customLabelData')) {
customLabelData = ChartData.fromJson(
_json['customLabelData'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('placement')) {
placement = _json['placement'] as core.String;
}
if (_json.containsKey('textFormat')) {
textFormat = TextFormat.fromJson(
_json['textFormat'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('type')) {
type = _json['type'] as core.String;
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (customLabelData != null) {
_json['customLabelData'] = customLabelData.toJson();
}
if (placement != null) {
_json['placement'] = placement;
}
if (textFormat != null) {
_json['textFormat'] = textFormat.toJson();
}
if (type != null) {
_json['type'] = type;
}
return _json;
}
}
/// Information about an external data source in the spreadsheet.
class DataSource {
/// All calculated columns in the data source.
core.List<DataSourceColumn> calculatedColumns;
/// The spreadsheet-scoped unique ID that identifies the data source.
///
/// Example: 1080547365.
core.String dataSourceId;
/// 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.
core.int sheetId;
/// The DataSourceSpec for the data source connected with this spreadsheet.
DataSourceSpec spec;
DataSource();
DataSource.fromJson(core.Map _json) {
if (_json.containsKey('calculatedColumns')) {
calculatedColumns = (_json['calculatedColumns'] as core.List)
.map<DataSourceColumn>((value) => DataSourceColumn.fromJson(
value as core.Map<core.String, core.dynamic>))
.toList();
}
if (_json.containsKey('dataSourceId')) {
dataSourceId = _json['dataSourceId'] as core.String;
}
if (_json.containsKey('sheetId')) {
sheetId = _json['sheetId'] as core.int;
}
if (_json.containsKey('spec')) {
spec = DataSourceSpec.fromJson(
_json['spec'] as core.Map<core.String, core.dynamic>);
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (calculatedColumns != null) {
_json['calculatedColumns'] =
calculatedColumns.map((value) => value.toJson()).toList();
}
if (dataSourceId != null) {
_json['dataSourceId'] = dataSourceId;
}
if (sheetId != null) {
_json['sheetId'] = sheetId;
}
if (spec != null) {
_json['spec'] = spec.toJson();
}
return _json;
}
}
/// Properties of a data source chart.
class DataSourceChartProperties {
/// The data execution status.
///
/// Output only.
DataExecutionStatus dataExecutionStatus;
/// ID of the data source that the chart is associated with.
core.String dataSourceId;
DataSourceChartProperties();
DataSourceChartProperties.fromJson(core.Map _json) {
if (_json.containsKey('dataExecutionStatus')) {
dataExecutionStatus = DataExecutionStatus.fromJson(
_json['dataExecutionStatus'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('dataSourceId')) {
dataSourceId = _json['dataSourceId'] as core.String;
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (dataExecutionStatus != null) {
_json['dataExecutionStatus'] = dataExecutionStatus.toJson();
}
if (dataSourceId != null) {
_json['dataSourceId'] = dataSourceId;
}
return _json;
}
}
/// A column in a data source.
class DataSourceColumn {
/// The formula of the calculated column.
core.String formula;
/// The column reference.
DataSourceColumnReference reference;
DataSourceColumn();
DataSourceColumn.fromJson(core.Map _json) {
if (_json.containsKey('formula')) {
formula = _json['formula'] as core.String;
}
if (_json.containsKey('reference')) {
reference = DataSourceColumnReference.fromJson(
_json['reference'] as core.Map<core.String, core.dynamic>);
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (formula != null) {
_json['formula'] = formula;
}
if (reference != null) {
_json['reference'] = reference.toJson();
}
return _json;
}
}
/// An unique identifier that references a data source column.
class DataSourceColumnReference {
/// The display name of the column.
///
/// It should be unique within a data source.
core.String name;
DataSourceColumnReference();
DataSourceColumnReference.fromJson(core.Map _json) {
if (_json.containsKey('name')) {
name = _json['name'] as core.String;
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (name != null) {
_json['name'] = name;
}
return _json;
}
}
/// A data source formula.
class DataSourceFormula {
/// The data execution status.
///
/// Output only.
DataExecutionStatus dataExecutionStatus;
/// The ID of the data source the formula is associated with.
core.String dataSourceId;
DataSourceFormula();
DataSourceFormula.fromJson(core.Map _json) {
if (_json.containsKey('dataExecutionStatus')) {
dataExecutionStatus = DataExecutionStatus.fromJson(
_json['dataExecutionStatus'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('dataSourceId')) {
dataSourceId = _json['dataSourceId'] as core.String;
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (dataExecutionStatus != null) {
_json['dataExecutionStatus'] = dataExecutionStatus.toJson();
}
if (dataSourceId != null) {
_json['dataSourceId'] = dataSourceId;
}
return _json;
}
}
/// Reference to a data source object.
class DataSourceObjectReference {
/// References to a data source chart.
core.int chartId;
/// References to a cell containing DataSourceFormula.
GridCoordinate dataSourceFormulaCell;
/// References to a data source PivotTable anchored at the cell.
GridCoordinate dataSourcePivotTableAnchorCell;
/// References to a DataSourceTable anchored at the cell.
GridCoordinate dataSourceTableAnchorCell;
/// References to a DATA_SOURCE sheet.
core.String sheetId;
DataSourceObjectReference();
DataSourceObjectReference.fromJson(core.Map _json) {
if (_json.containsKey('chartId')) {
chartId = _json['chartId'] as core.int;
}
if (_json.containsKey('dataSourceFormulaCell')) {
dataSourceFormulaCell = GridCoordinate.fromJson(
_json['dataSourceFormulaCell']
as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('dataSourcePivotTableAnchorCell')) {
dataSourcePivotTableAnchorCell = GridCoordinate.fromJson(
_json['dataSourcePivotTableAnchorCell']
as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('dataSourceTableAnchorCell')) {
dataSourceTableAnchorCell = GridCoordinate.fromJson(
_json['dataSourceTableAnchorCell']
as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('sheetId')) {
sheetId = _json['sheetId'] as core.String;
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (chartId != null) {
_json['chartId'] = chartId;
}
if (dataSourceFormulaCell != null) {
_json['dataSourceFormulaCell'] = dataSourceFormulaCell.toJson();
}
if (dataSourcePivotTableAnchorCell != null) {
_json['dataSourcePivotTableAnchorCell'] =
dataSourcePivotTableAnchorCell.toJson();
}
if (dataSourceTableAnchorCell != null) {
_json['dataSourceTableAnchorCell'] = dataSourceTableAnchorCell.toJson();
}
if (sheetId != null) {
_json['sheetId'] = sheetId;
}
return _json;
}
}
/// A list of references to data source objects.
class DataSourceObjectReferences {
/// The references.
core.List<DataSourceObjectReference> references;
DataSourceObjectReferences();
DataSourceObjectReferences.fromJson(core.Map _json) {
if (_json.containsKey('references')) {
references = (_json['references'] as core.List)
.map<DataSourceObjectReference>((value) =>
DataSourceObjectReference.fromJson(
value as core.Map<core.String, core.dynamic>))
.toList();
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (references != null) {
_json['references'] = references.map((value) => value.toJson()).toList();
}
return _json;
}
}
/// 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 {
/// 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).
core.String name;
/// ID of a NamedRange.
///
/// Its size must be 1x1.
core.String namedRangeId;
/// A range that contains the value of the parameter.
///
/// Its size must be 1x1.
GridRange range;
DataSourceParameter();
DataSourceParameter.fromJson(core.Map _json) {
if (_json.containsKey('name')) {
name = _json['name'] as core.String;
}
if (_json.containsKey('namedRangeId')) {
namedRangeId = _json['namedRangeId'] as core.String;
}
if (_json.containsKey('range')) {
range = GridRange.fromJson(
_json['range'] as core.Map<core.String, core.dynamic>);
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (name != null) {
_json['name'] = name;
}
if (namedRangeId != null) {
_json['namedRangeId'] = namedRangeId;
}
if (range != null) {
_json['range'] = range.toJson();
}
return _json;
}
}
/// A schedule for data to refresh every day in a given time interval.
class DataSourceRefreshDailySchedule {
/// The start time of a time interval in which a data source refresh is
/// scheduled.
///
/// Only `hours` part is used. The time interval size defaults to that in the
/// Sheets editor.
TimeOfDay startTime;
DataSourceRefreshDailySchedule();
DataSourceRefreshDailySchedule.fromJson(core.Map _json) {
if (_json.containsKey('startTime')) {
startTime = TimeOfDay.fromJson(
_json['startTime'] as core.Map<core.String, core.dynamic>);
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (startTime != null) {
_json['startTime'] = startTime.toJson();
}
return _json;
}
}
/// A monthly schedule for data to refresh on specific days in the month in a
/// given time interval.
class DataSourceRefreshMonthlySchedule {
/// 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.
core.List<core.int> daysOfMonth;
/// The start time of a time interval in which a data source refresh is
/// scheduled.
///
/// Only `hours` part is used. The time interval size defaults to that in the
/// Sheets editor.
TimeOfDay startTime;
DataSourceRefreshMonthlySchedule();
DataSourceRefreshMonthlySchedule.fromJson(core.Map _json) {
if (_json.containsKey('daysOfMonth')) {
daysOfMonth = (_json['daysOfMonth'] as core.List)
.map<core.int>((value) => value as core.int)
.toList();
}
if (_json.containsKey('startTime')) {
startTime = TimeOfDay.fromJson(
_json['startTime'] as core.Map<core.String, core.dynamic>);
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (daysOfMonth != null) {
_json['daysOfMonth'] = daysOfMonth;
}
if (startTime != null) {
_json['startTime'] = startTime.toJson();
}
return _json;
}
}
/// 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 {
/// Daily refresh schedule.
DataSourceRefreshDailySchedule dailySchedule;
/// True if the refresh schedule is enabled, or false otherwise.
core.bool enabled;
/// Monthly refresh schedule.
DataSourceRefreshMonthlySchedule monthlySchedule;
/// The time interval of the next run.
///
/// Output only.
Interval nextRun;
/// The scope of the refresh.
///
/// Must be ALL_DATA_SOURCES.
/// Possible string values are:
/// - "DATA_SOURCE_REFRESH_SCOPE_UNSPECIFIED" : Default value, do not use.
/// - "ALL_DATA_SOURCES" : Refreshes all data sources and their associated
/// data source objects in the spreadsheet.
core.String refreshScope;
/// Weekly refresh schedule.
DataSourceRefreshWeeklySchedule weeklySchedule;
DataSourceRefreshSchedule();
DataSourceRefreshSchedule.fromJson(core.Map _json) {
if (_json.containsKey('dailySchedule')) {
dailySchedule = DataSourceRefreshDailySchedule.fromJson(
_json['dailySchedule'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('enabled')) {
enabled = _json['enabled'] as core.bool;
}
if (_json.containsKey('monthlySchedule')) {
monthlySchedule = DataSourceRefreshMonthlySchedule.fromJson(
_json['monthlySchedule'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('nextRun')) {
nextRun = Interval.fromJson(
_json['nextRun'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('refreshScope')) {
refreshScope = _json['refreshScope'] as core.String;
}
if (_json.containsKey('weeklySchedule')) {
weeklySchedule = DataSourceRefreshWeeklySchedule.fromJson(
_json['weeklySchedule'] as core.Map<core.String, core.dynamic>);
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (dailySchedule != null) {
_json['dailySchedule'] = dailySchedule.toJson();
}
if (enabled != null) {
_json['enabled'] = enabled;
}
if (monthlySchedule != null) {
_json['monthlySchedule'] = monthlySchedule.toJson();
}
if (nextRun != null) {
_json['nextRun'] = nextRun.toJson();
}
if (refreshScope != null) {
_json['refreshScope'] = refreshScope;
}
if (weeklySchedule != null) {
_json['weeklySchedule'] = weeklySchedule.toJson();
}
return _json;
}
}
/// A weekly schedule for data to refresh on specific days in a given time
/// interval.
class DataSourceRefreshWeeklySchedule {
/// Days of the week to refresh.
///
/// At least one day must be specified.
core.List<core.String> daysOfWeek;
/// The start time of a time interval in which a data source refresh is
/// scheduled.
///
/// Only `hours` part is used. The time interval size defaults to that in the
/// Sheets editor.
TimeOfDay startTime;
DataSourceRefreshWeeklySchedule();
DataSourceRefreshWeeklySchedule.fromJson(core.Map _json) {
if (_json.containsKey('daysOfWeek')) {
daysOfWeek = (_json['daysOfWeek'] as core.List)
.map<core.String>((value) => value as core.String)
.toList();
}
if (_json.containsKey('startTime')) {
startTime = TimeOfDay.fromJson(
_json['startTime'] as core.Map<core.String, core.dynamic>);
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (daysOfWeek != null) {
_json['daysOfWeek'] = daysOfWeek;
}
if (startTime != null) {
_json['startTime'] = startTime.toJson();
}
return _json;
}
}
/// A range along a single dimension on a DATA_SOURCE sheet.
class DataSourceSheetDimensionRange {
/// The columns on the data source sheet.
core.List<DataSourceColumnReference> columnReferences;
/// The ID of the data source sheet the range is on.
core.int sheetId;
DataSourceSheetDimensionRange();
DataSourceSheetDimensionRange.fromJson(core.Map _json) {
if (_json.containsKey('columnReferences')) {
columnReferences = (_json['columnReferences'] as core.List)
.map<DataSourceColumnReference>((value) =>
DataSourceColumnReference.fromJson(
value as core.Map<core.String, core.dynamic>))
.toList();
}
if (_json.containsKey('sheetId')) {
sheetId = _json['sheetId'] as core.int;
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (columnReferences != null) {
_json['columnReferences'] =
columnReferences.map((value) => value.toJson()).toList();
}
if (sheetId != null) {
_json['sheetId'] = sheetId;
}
return _json;
}
}
/// Additional properties of a DATA_SOURCE sheet.
class DataSourceSheetProperties {
/// The columns displayed on the sheet, corresponding to the values in
/// RowData.
core.List<DataSourceColumn> columns;
/// The data execution status.
DataExecutionStatus dataExecutionStatus;
/// ID of the DataSource the sheet is connected to.
core.String dataSourceId;
DataSourceSheetProperties();
DataSourceSheetProperties.fromJson(core.Map _json) {
if (_json.containsKey('columns')) {
columns = (_json['columns'] as core.List)
.map<DataSourceColumn>((value) => DataSourceColumn.fromJson(
value as core.Map<core.String, core.dynamic>))
.toList();
}
if (_json.containsKey('dataExecutionStatus')) {
dataExecutionStatus = DataExecutionStatus.fromJson(
_json['dataExecutionStatus'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('dataSourceId')) {
dataSourceId = _json['dataSourceId'] as core.String;
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (columns != null) {
_json['columns'] = columns.map((value) => value.toJson()).toList();
}
if (dataExecutionStatus != null) {
_json['dataExecutionStatus'] = dataExecutionStatus.toJson();
}
if (dataSourceId != null) {
_json['dataSourceId'] = dataSourceId;
}
return _json;
}
}
/// This specifies the details of the data source.
///
/// For example, for BigQuery, this specifies information about the BigQuery
/// source.
class DataSourceSpec {
/// A BigQueryDataSourceSpec.
BigQueryDataSourceSpec bigQuery;
/// The parameters of the data source, used when querying the data source.
core.List<DataSourceParameter> parameters;
DataSourceSpec();
DataSourceSpec.fromJson(core.Map _json) {
if (_json.containsKey('bigQuery')) {
bigQuery = BigQueryDataSourceSpec.fromJson(
_json['bigQuery'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('parameters')) {
parameters = (_json['parameters'] as core.List)
.map<DataSourceParameter>((value) => DataSourceParameter.fromJson(
value as core.Map<core.String, core.dynamic>))
.toList();
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (bigQuery != null) {
_json['bigQuery'] = bigQuery.toJson();
}
if (parameters != null) {
_json['parameters'] = parameters.map((value) => value.toJson()).toList();
}
return _json;
}
}
/// 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 {
/// The type to select columns for the data source table.
///
/// Defaults to SELECTED.
/// Possible string values are:
/// - "DATA_SOURCE_TABLE_COLUMN_SELECTION_TYPE_UNSPECIFIED" : The default
/// column selection type, do not use.
/// - "SELECTED" : Select columns specified by columns field.
/// - "SYNC_ALL" : Sync all current and future columns in the data source. If
/// set, the data source table fetches all the columns in the data source at
/// the time of refresh.
core.String columnSelectionType;
/// Columns selected for the data source table.
///
/// The column_selection_type must be SELECTED.
core.List<DataSourceColumnReference> columns;
/// The data execution status.
///
/// Output only.
DataExecutionStatus dataExecutionStatus;
/// The ID of the data source the data source table is associated with.
core.String dataSourceId;
/// Filter specifications in the data source table.
core.List<FilterSpec> filterSpecs;
/// 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.
core.int rowLimit;
/// Sort specifications in the data source table.
///
/// The result of the data source table is sorted based on the sort
/// specifications in order.
core.List<SortSpec> sortSpecs;
DataSourceTable();
DataSourceTable.fromJson(core.Map _json) {
if (_json.containsKey('columnSelectionType')) {
columnSelectionType = _json['columnSelectionType'] as core.String;
}
if (_json.containsKey('columns')) {
columns = (_json['columns'] as core.List)
.map<DataSourceColumnReference>((value) =>
DataSourceColumnReference.fromJson(
value as core.Map<core.String, core.dynamic>))
.toList();
}
if (_json.containsKey('dataExecutionStatus')) {
dataExecutionStatus = DataExecutionStatus.fromJson(
_json['dataExecutionStatus'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('dataSourceId')) {
dataSourceId = _json['dataSourceId'] as core.String;
}
if (_json.containsKey('filterSpecs')) {
filterSpecs = (_json['filterSpecs'] as core.List)
.map<FilterSpec>((value) =>
FilterSpec.fromJson(value as core.Map<core.String, core.dynamic>))
.toList();
}
if (_json.containsKey('rowLimit')) {
rowLimit = _json['rowLimit'] as core.int;
}
if (_json.containsKey('sortSpecs')) {
sortSpecs = (_json['sortSpecs'] as core.List)
.map<SortSpec>((value) =>
SortSpec.fromJson(value as core.Map<core.String, core.dynamic>))
.toList();
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (columnSelectionType != null) {
_json['columnSelectionType'] = columnSelectionType;
}
if (columns != null) {
_json['columns'] = columns.map((value) => value.toJson()).toList();
}
if (dataExecutionStatus != null) {
_json['dataExecutionStatus'] = dataExecutionStatus.toJson();
}
if (dataSourceId != null) {
_json['dataSourceId'] = dataSourceId;
}
if (filterSpecs != null) {
_json['filterSpecs'] =
filterSpecs.map((value) => value.toJson()).toList();
}
if (rowLimit != null) {
_json['rowLimit'] = rowLimit;
}
if (sortSpecs != null) {
_json['sortSpecs'] = sortSpecs.map((value) => value.toJson()).toList();
}
return _json;
}
}
/// A data validation rule.
class DataValidationRule {
/// The condition that data in the cell must match.
BooleanCondition condition;
/// A message to show the user when adding data to the cell.
core.String inputMessage;
/// True if the UI should be customized based on the kind of condition.
///
/// If true, "List" conditions will show a dropdown.
core.bool showCustomUi;
/// True if invalid data should be rejected.
core.bool strict;
DataValidationRule();
DataValidationRule.fromJson(core.Map _json) {
if (_json.containsKey('condition')) {
condition = BooleanCondition.fromJson(
_json['condition'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('inputMessage')) {
inputMessage = _json['inputMessage'] as core.String;
}
if (_json.containsKey('showCustomUi')) {
showCustomUi = _json['showCustomUi'] as core.bool;
}
if (_json.containsKey('strict')) {
strict = _json['strict'] as core.bool;
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (condition != null) {
_json['condition'] = condition.toJson();
}
if (inputMessage != null) {
_json['inputMessage'] = inputMessage;
}
if (showCustomUi != null) {
_json['showCustomUi'] = showCustomUi;
}
if (strict != null) {
_json['strict'] = strict;
}
return _json;
}
}
/// 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 {
/// The type of date-time grouping to apply.
/// Possible string values are:
/// - "DATE_TIME_RULE_TYPE_UNSPECIFIED" : The default type, do not use.
/// - "SECOND" : Group dates by second, from 0 to 59.
/// - "MINUTE" : Group dates by minute, from 0 to 59.
/// - "HOUR" : Group dates by hour using a 24-hour system, from 0 to 23.
/// - "HOUR_MINUTE" : Group dates by hour and minute using a 24-hour system,
/// for example 19:45.
/// - "HOUR_MINUTE_AMPM" : Group dates by hour and minute using a 12-hour
/// system, for example 7:45 PM. The AM/PM designation is translated based on
/// the spreadsheet locale.
/// - "DAY_OF_WEEK" : Group dates by day of week, for example Sunday. The days
/// of the week will be translated based on the spreadsheet locale.
/// - "DAY_OF_YEAR" : Group dates by day of year, from 1 to 366. Note that
/// dates after Feb. 29 fall in different buckets in leap years than in
/// non-leap years.
/// - "DAY_OF_MONTH" : Group dates by day of month, from 1 to 31.
/// - "DAY_MONTH" : Group dates by day and month, for example 22-Nov. The
/// month is translated based on the spreadsheet locale.
/// - "MONTH" : Group dates by month, for example Nov. The month is translated
/// based on the spreadsheet locale.
/// - "QUARTER" : Group dates by quarter, for example Q1 (which represents
/// Jan-Mar).
/// - "YEAR" : Group dates by year, for example 2008.
/// - "YEAR_MONTH" : Group dates by year and month, for example 2008-Nov. The
/// month is translated based on the spreadsheet locale.
/// - "YEAR_QUARTER" : Group dates by year and quarter, for example 2008 Q4.
/// - "YEAR_MONTH_DAY" : Group dates by year, month, and day, for example
/// 2008-11-22.
core.String type;
DateTimeRule();
DateTimeRule.fromJson(core.Map _json) {
if (_json.containsKey('type')) {
type = _json['type'] as core.String;
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (type != null) {
_json['type'] = type;
}
return _json;
}
}
/// Removes the banded range with the given ID from the spreadsheet.
class DeleteBandingRequest {
/// The ID of the banded range to delete.
core.int bandedRangeId;
DeleteBandingRequest();
DeleteBandingRequest.fromJson(core.Map _json) {
if (_json.containsKey('bandedRangeId')) {
bandedRangeId = _json['bandedRangeId'] as core.int;
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (bandedRangeId != null) {
_json['bandedRangeId'] = bandedRangeId;
}
return _json;
}
}
/// Deletes a conditional format rule at the given index.
///
/// All subsequent rules' indexes are decremented.
class DeleteConditionalFormatRuleRequest {
/// The zero-based index of the rule to be deleted.
core.int index;
/// The sheet the rule is being deleted from.
core.int sheetId;
DeleteConditionalFormatRuleRequest();
DeleteConditionalFormatRuleRequest.fromJson(core.Map _json) {
if (_json.containsKey('index')) {
index = _json['index'] as core.int;
}
if (_json.containsKey('sheetId')) {
sheetId = _json['sheetId'] as core.int;
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (index != null) {
_json['index'] = index;
}
if (sheetId != null) {
_json['sheetId'] = sheetId;
}
return _json;
}
}
/// The result of deleting a conditional format rule.
class DeleteConditionalFormatRuleResponse {
/// The rule that was deleted.
ConditionalFormatRule rule;
DeleteConditionalFormatRuleResponse();
DeleteConditionalFormatRuleResponse.fromJson(core.Map _json) {
if (_json.containsKey('rule')) {
rule = ConditionalFormatRule.fromJson(
_json['rule'] as core.Map<core.String, core.dynamic>);
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (rule != null) {
_json['rule'] = rule.toJson();
}
return _json;
}
}
/// Deletes a data source.
///
/// The request also deletes the associated data source sheet, and unlinks all
/// associated data source objects.
class DeleteDataSourceRequest {
/// The ID of the data source to delete.
core.String dataSourceId;
DeleteDataSourceRequest();
DeleteDataSourceRequest.fromJson(core.Map _json) {
if (_json.containsKey('dataSourceId')) {
dataSourceId = _json['dataSourceId'] as core.String;
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (dataSourceId != null) {
_json['dataSourceId'] = dataSourceId;
}
return _json;
}
}
/// A request to delete developer metadata.
class DeleteDeveloperMetadataRequest {
/// The data filter describing the criteria used to select which developer
/// metadata entry to delete.
DataFilter dataFilter;
DeleteDeveloperMetadataRequest();
DeleteDeveloperMetadataRequest.fromJson(core.Map _json) {
if (_json.containsKey('dataFilter')) {
dataFilter = DataFilter.fromJson(
_json['dataFilter'] as core.Map<core.String, core.dynamic>);
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (dataFilter != null) {
_json['dataFilter'] = dataFilter.toJson();
}
return _json;
}
}
/// The response from deleting developer metadata.
class DeleteDeveloperMetadataResponse {
/// The metadata that was deleted.
core.List<DeveloperMetadata> deletedDeveloperMetadata;
DeleteDeveloperMetadataResponse();
DeleteDeveloperMetadataResponse.fromJson(core.Map _json) {
if (_json.containsKey('deletedDeveloperMetadata')) {
deletedDeveloperMetadata =
(_json['deletedDeveloperMetadata'] as core.List)
.map<DeveloperMetadata>((value) => DeveloperMetadata.fromJson(
value as core.Map<core.String, core.dynamic>))
.toList();
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (deletedDeveloperMetadata != null) {
_json['deletedDeveloperMetadata'] =
deletedDeveloperMetadata.map((value) => value.toJson()).toList();
}
return _json;
}
}
/// 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 {
/// The range of the group to be deleted.
DimensionRange range;
DeleteDimensionGroupRequest();
DeleteDimensionGroupRequest.fromJson(core.Map _json) {
if (_json.containsKey('range')) {
range = DimensionRange.fromJson(
_json['range'] as core.Map<core.String, core.dynamic>);
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (range != null) {
_json['range'] = range.toJson();
}
return _json;
}
}
/// The result of deleting a group.
class DeleteDimensionGroupResponse {
/// All groups of a dimension after deleting a group from that dimension.
core.List<DimensionGroup> dimensionGroups;
DeleteDimensionGroupResponse();
DeleteDimensionGroupResponse.fromJson(core.Map _json) {
if (_json.containsKey('dimensionGroups')) {
dimensionGroups = (_json['dimensionGroups'] as core.List)
.map<DimensionGroup>((value) => DimensionGroup.fromJson(
value as core.Map<core.String, core.dynamic>))
.toList();
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (dimensionGroups != null) {
_json['dimensionGroups'] =
dimensionGroups.map((value) => value.toJson()).toList();
}
return _json;
}
}
/// Deletes the dimensions from the sheet.
class DeleteDimensionRequest {
/// The dimensions to delete from the sheet.
DimensionRange range;
DeleteDimensionRequest();
DeleteDimensionRequest.fromJson(core.Map _json) {
if (_json.containsKey('range')) {
range = DimensionRange.fromJson(
_json['range'] as core.Map<core.String, core.dynamic>);
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (range != null) {
_json['range'] = range.toJson();
}
return _json;
}
}
/// 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 {
/// The columns in the range to analyze for duplicate values.
///
/// If no columns are selected then all columns are analyzed for duplicates.
core.List<DimensionRange> comparisonColumns;
/// The range to remove duplicates rows from.
GridRange range;
DeleteDuplicatesRequest();
DeleteDuplicatesRequest.fromJson(core.Map _json) {
if (_json.containsKey('comparisonColumns')) {
comparisonColumns = (_json['comparisonColumns'] as core.List)
.map<DimensionRange>((value) => DimensionRange.fromJson(
value as core.Map<core.String, core.dynamic>))
.toList();
}
if (_json.containsKey('range')) {
range = GridRange.fromJson(
_json['range'] as core.Map<core.String, core.dynamic>);
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (comparisonColumns != null) {
_json['comparisonColumns'] =
comparisonColumns.map((value) => value.toJson()).toList();
}
if (range != null) {
_json['range'] = range.toJson();
}
return _json;
}
}
/// The result of removing duplicates in a range.
class DeleteDuplicatesResponse {
/// The number of duplicate rows removed.
core.int duplicatesRemovedCount;
DeleteDuplicatesResponse();
DeleteDuplicatesResponse.fromJson(core.Map _json) {
if (_json.containsKey('duplicatesRemovedCount')) {
duplicatesRemovedCount = _json['duplicatesRemovedCount'] as core.int;
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (duplicatesRemovedCount != null) {
_json['duplicatesRemovedCount'] = duplicatesRemovedCount;
}
return _json;
}
}
/// Deletes the embedded object with the given ID.
class DeleteEmbeddedObjectRequest {
/// The ID of the embedded object to delete.
core.int objectId;
DeleteEmbeddedObjectRequest();
DeleteEmbeddedObjectRequest.fromJson(core.Map _json) {
if (_json.containsKey('objectId')) {
objectId = _json['objectId'] as core.int;
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (objectId != null) {
_json['objectId'] = objectId;
}
return _json;
}
}
/// Deletes a particular filter view.
class DeleteFilterViewRequest {
/// The ID of the filter to delete.
core.int filterId;
DeleteFilterViewRequest();
DeleteFilterViewRequest.fromJson(core.Map _json) {
if (_json.containsKey('filterId')) {
filterId = _json['filterId'] as core.int;
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (filterId != null) {
_json['filterId'] = filterId;
}
return _json;
}
}
/// Removes the named range with the given ID from the spreadsheet.
class DeleteNamedRangeRequest {
/// The ID of the named range to delete.
core.String namedRangeId;
DeleteNamedRangeRequest();
DeleteNamedRangeRequest.fromJson(core.Map _json) {
if (_json.containsKey('namedRangeId')) {
namedRangeId = _json['namedRangeId'] as core.String;
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (namedRangeId != null) {
_json['namedRangeId'] = namedRangeId;
}
return _json;
}
}
/// Deletes the protected range with the given ID.
class DeleteProtectedRangeRequest {
/// The ID of the protected range to delete.
core.int protectedRangeId;
DeleteProtectedRangeRequest();
DeleteProtectedRangeRequest.fromJson(core.Map _json) {
if (_json.containsKey('protectedRangeId')) {
protectedRangeId = _json['protectedRangeId'] as core.int;
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (protectedRangeId != null) {
_json['protectedRangeId'] = protectedRangeId;
}
return _json;
}
}
/// Deletes a range of cells, shifting other cells into the deleted area.
class DeleteRangeRequest {
/// The range of cells to delete.
GridRange 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.
/// Possible string values are:
/// - "DIMENSION_UNSPECIFIED" : The default value, do not use.
/// - "ROWS" : Operates on the rows of a sheet.
/// - "COLUMNS" : Operates on the columns of a sheet.
core.String shiftDimension;
DeleteRangeRequest();
DeleteRangeRequest.fromJson(core.Map _json) {
if (_json.containsKey('range')) {
range = GridRange.fromJson(
_json['range'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('shiftDimension')) {
shiftDimension = _json['shiftDimension'] as core.String;
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (range != null) {
_json['range'] = range.toJson();
}
if (shiftDimension != null) {
_json['shiftDimension'] = shiftDimension;
}
return _json;
}
}
/// Deletes the requested sheet.
class DeleteSheetRequest {
/// The ID of the sheet to delete.
///
/// If the sheet is of SheetType.DATA_SOURCE type, the associated DataSource
/// is also deleted.
core.int sheetId;
DeleteSheetRequest();
DeleteSheetRequest.fromJson(core.Map _json) {
if (_json.containsKey('sheetId')) {
sheetId = _json['sheetId'] as core.int;
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (sheetId != null) {
_json['sheetId'] = sheetId;
}
return _json;
}
}
/// 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 {
/// The location where the metadata is associated.
DeveloperMetadataLocation 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.
core.int metadataId;
/// The metadata key.
///
/// There may be multiple metadata in a spreadsheet with the same key.
/// Developer metadata must always have a key specified.
core.String metadataKey;
/// Data associated with the metadata's key.
core.String metadataValue;
/// The metadata visibility.
///
/// Developer metadata must always have a visibility specified.
/// Possible string values are:
/// - "DEVELOPER_METADATA_VISIBILITY_UNSPECIFIED" : Default value.
/// - "DOCUMENT" : Document-visible metadata is accessible from any developer
/// project with access to the document.
/// - "PROJECT" : Project-visible metadata is only visible to and accessible
/// by the developer project that created the metadata.
core.String visibility;
DeveloperMetadata();
DeveloperMetadata.fromJson(core.Map _json) {
if (_json.containsKey('location')) {
location = DeveloperMetadataLocation.fromJson(
_json['location'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('metadataId')) {
metadataId = _json['metadataId'] as core.int;
}
if (_json.containsKey('metadataKey')) {
metadataKey = _json['metadataKey'] as core.String;
}
if (_json.containsKey('metadataValue')) {
metadataValue = _json['metadataValue'] as core.String;
}
if (_json.containsKey('visibility')) {
visibility = _json['visibility'] as core.String;
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (location != null) {
_json['location'] = location.toJson();
}
if (metadataId != null) {
_json['metadataId'] = metadataId;
}
if (metadataKey != null) {
_json['metadataKey'] = metadataKey;
}
if (metadataValue != null) {
_json['metadataValue'] = metadataValue;
}
if (visibility != null) {
_json['visibility'] = visibility;
}
return _json;
}
}
/// A location where metadata may be associated in a spreadsheet.
class DeveloperMetadataLocation {
/// Represents the row or column when metadata is associated with a dimension.
///
/// The specified DimensionRange must represent a single row or column; it
/// cannot be unbounded or span multiple rows or columns.
DimensionRange dimensionRange;
/// The type of location this object represents.
///
/// This field is read-only.
/// Possible string values are:
/// - "DEVELOPER_METADATA_LOCATION_TYPE_UNSPECIFIED" : Default value.
/// - "ROW" : Developer metadata associated on an entire row dimension.
/// - "COLUMN" : Developer metadata associated on an entire column dimension.
/// - "SHEET" : Developer metadata associated on an entire sheet.
/// - "SPREADSHEET" : Developer metadata associated on the entire spreadsheet.
core.String locationType;
/// The ID of the sheet when metadata is associated with an entire sheet.
core.int sheetId;
/// True when metadata is associated with an entire spreadsheet.
core.bool spreadsheet;
DeveloperMetadataLocation();
DeveloperMetadataLocation.fromJson(core.Map _json) {
if (_json.containsKey('dimensionRange')) {
dimensionRange = DimensionRange.fromJson(
_json['dimensionRange'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('locationType')) {
locationType = _json['locationType'] as core.String;
}
if (_json.containsKey('sheetId')) {
sheetId = _json['sheetId'] as core.int;
}
if (_json.containsKey('spreadsheet')) {
spreadsheet = _json['spreadsheet'] as core.bool;
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (dimensionRange != null) {
_json['dimensionRange'] = dimensionRange.toJson();
}
if (locationType != null) {
_json['locationType'] = locationType;
}
if (sheetId != null) {
_json['sheetId'] = sheetId;
}
if (spreadsheet != null) {
_json['spreadsheet'] = spreadsheet;
}
return _json;
}
}
/// 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 {
/// 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.
/// Possible string values are:
/// - "DEVELOPER_METADATA_LOCATION_MATCHING_STRATEGY_UNSPECIFIED" : Default
/// value. This value must not be used.
/// - "EXACT_LOCATION" : Indicates that a specified location should be matched
/// exactly. For example, if row three were specified as a location this
/// matching strategy would only match developer metadata also associated on
/// row three. Metadata associated on other locations would not be considered.
/// - "INTERSECTING_LOCATION" : Indicates that a specified location should
/// match that exact location as well as any intersecting locations. For
/// example, if row three were specified as a location this matching strategy
/// would match developer metadata associated on row three as well as metadata
/// associated on locations that intersect row three. If, for instance, there
/// was developer metadata associated on column B, this matching strategy
/// would also match that location because column B intersects row three.
core.String locationMatchingStrategy;
/// 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.
/// Possible string values are:
/// - "DEVELOPER_METADATA_LOCATION_TYPE_UNSPECIFIED" : Default value.
/// - "ROW" : Developer metadata associated on an entire row dimension.
/// - "COLUMN" : Developer metadata associated on an entire column dimension.
/// - "SHEET" : Developer metadata associated on an entire sheet.
/// - "SPREADSHEET" : Developer metadata associated on the entire spreadsheet.
core.String locationType;
/// Limits the selected developer metadata to that which has a matching
/// DeveloperMetadata.metadata_id.
core.int metadataId;
/// Limits the selected developer metadata to that which has a matching
/// DeveloperMetadata.metadata_key.
core.String metadataKey;
/// Limits the selected developer metadata to those entries associated with
/// the specified location.
///
/// This field either matches exact locations or all intersecting locations
/// according the specified locationMatchingStrategy.
DeveloperMetadataLocation metadataLocation;
/// Limits the selected developer metadata to that which has a matching
/// DeveloperMetadata.metadata_value.
core.String metadataValue;
/// 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.
/// Possible string values are:
/// - "DEVELOPER_METADATA_VISIBILITY_UNSPECIFIED" : Default value.
/// - "DOCUMENT" : Document-visible metadata is accessible from any developer
/// project with access to the document.
/// - "PROJECT" : Project-visible metadata is only visible to and accessible
/// by the developer project that created the metadata.
core.String visibility;
DeveloperMetadataLookup();
DeveloperMetadataLookup.fromJson(core.Map _json) {
if (_json.containsKey('locationMatchingStrategy')) {
locationMatchingStrategy =
_json['locationMatchingStrategy'] as core.String;
}
if (_json.containsKey('locationType')) {
locationType = _json['locationType'] as core.String;
}
if (_json.containsKey('metadataId')) {
metadataId = _json['metadataId'] as core.int;
}
if (_json.containsKey('metadataKey')) {
metadataKey = _json['metadataKey'] as core.String;
}
if (_json.containsKey('metadataLocation')) {
metadataLocation = DeveloperMetadataLocation.fromJson(
_json['metadataLocation'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('metadataValue')) {
metadataValue = _json['metadataValue'] as core.String;
}
if (_json.containsKey('visibility')) {
visibility = _json['visibility'] as core.String;
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (locationMatchingStrategy != null) {
_json['locationMatchingStrategy'] = locationMatchingStrategy;
}
if (locationType != null) {
_json['locationType'] = locationType;
}
if (metadataId != null) {
_json['metadataId'] = metadataId;
}
if (metadataKey != null) {
_json['metadataKey'] = metadataKey;
}
if (metadataLocation != null) {
_json['metadataLocation'] = metadataLocation.toJson();
}
if (metadataValue != null) {
_json['metadataValue'] = metadataValue;
}
if (visibility != null) {
_json['visibility'] = visibility;
}
return _json;
}
}
/// 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 {
/// 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.
core.bool collapsed;
/// The depth of the group, representing how many groups have a range that
/// wholly contains the range of this group.
core.int depth;
/// The range over which this group exists.
DimensionRange range;
DimensionGroup();
DimensionGroup.fromJson(core.Map _json) {
if (_json.containsKey('collapsed')) {
collapsed = _json['collapsed'] as core.bool;
}
if (_json.containsKey('depth')) {
depth = _json['depth'] as core.int;
}
if (_json.containsKey('range')) {
range = DimensionRange.fromJson(
_json['range'] as core.Map<core.String, core.dynamic>);
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (collapsed != null) {
_json['collapsed'] = collapsed;
}
if (depth != null) {
_json['depth'] = depth;
}
if (range != null) {
_json['range'] = range.toJson();
}
return _json;
}
}
/// Properties about a dimension.
class DimensionProperties {
/// If set, this is a column in a data source sheet.
///
/// Output only.
DataSourceColumnReference dataSourceColumnReference;
/// The developer metadata associated with a single row or column.
core.List<DeveloperMetadata> developerMetadata;
/// True if this dimension is being filtered.
///
/// This field is read-only.
core.bool hiddenByFilter;
/// True if this dimension is explicitly hidden.
core.bool hiddenByUser;
/// The height (if a row) or width (if a column) of the dimension in pixels.
core.int pixelSize;
DimensionProperties();
DimensionProperties.fromJson(core.Map _json) {
if (_json.containsKey('dataSourceColumnReference')) {
dataSourceColumnReference = DataSourceColumnReference.fromJson(
_json['dataSourceColumnReference']
as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('developerMetadata')) {
developerMetadata = (_json['developerMetadata'] as core.List)
.map<DeveloperMetadata>((value) => DeveloperMetadata.fromJson(
value as core.Map<core.String, core.dynamic>))
.toList();
}
if (_json.containsKey('hiddenByFilter')) {
hiddenByFilter = _json['hiddenByFilter'] as core.bool;
}
if (_json.containsKey('hiddenByUser')) {
hiddenByUser = _json['hiddenByUser'] as core.bool;
}
if (_json.containsKey('pixelSize')) {
pixelSize = _json['pixelSize'] as core.int;
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (dataSourceColumnReference != null) {
_json['dataSourceColumnReference'] = dataSourceColumnReference.toJson();
}
if (developerMetadata != null) {
_json['developerMetadata'] =
developerMetadata.map((value) => value.toJson()).toList();
}
if (hiddenByFilter != null) {
_json['hiddenByFilter'] = hiddenByFilter;
}
if (hiddenByUser != null) {
_json['hiddenByUser'] = hiddenByUser;
}
if (pixelSize != null) {
_json['pixelSize'] = pixelSize;
}
return _json;
}
}
/// 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 {
/// The dimension of the span.
/// Possible string values are:
/// - "DIMENSION_UNSPECIFIED" : The default value, do not use.
/// - "ROWS" : Operates on the rows of a sheet.
/// - "COLUMNS" : Operates on the columns of a sheet.
core.String dimension;
/// The end (exclusive) of the span, or not set if unbounded.
core.int endIndex;
/// The sheet this span is on.
core.int sheetId;
/// The start (inclusive) of the span, or not set if unbounded.
core.int startIndex;
DimensionRange();
DimensionRange.fromJson(core.Map _json) {
if (_json.containsKey('dimension')) {
dimension = _json['dimension'] as core.String;
}
if (_json.containsKey('endIndex')) {
endIndex = _json['endIndex'] as core.int;
}
if (_json.containsKey('sheetId')) {
sheetId = _json['sheetId'] as core.int;
}
if (_json.containsKey('startIndex')) {
startIndex = _json['startIndex'] as core.int;
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (dimension != null) {
_json['dimension'] = dimension;
}
if (endIndex != null) {
_json['endIndex'] = endIndex;
}
if (sheetId != null) {
_json['sheetId'] = sheetId;
}
if (startIndex != null) {
_json['startIndex'] = startIndex;
}
return _json;
}
}
/// Duplicates a particular filter view.
class DuplicateFilterViewRequest {
/// The ID of the filter being duplicated.
core.int filterId;
DuplicateFilterViewRequest();
DuplicateFilterViewRequest.fromJson(core.Map _json) {
if (_json.containsKey('filterId')) {
filterId = _json['filterId'] as core.int;
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (filterId != null) {
_json['filterId'] = filterId;
}
return _json;
}
}
/// The result of a filter view being duplicated.
class DuplicateFilterViewResponse {
/// The newly created filter.
FilterView filter;
DuplicateFilterViewResponse();
DuplicateFilterViewResponse.fromJson(core.Map _json) {
if (_json.containsKey('filter')) {
filter = FilterView.fromJson(
_json['filter'] as core.Map<core.String, core.dynamic>);
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (filter != null) {
_json['filter'] = filter.toJson();
}
return _json;
}
}
/// Duplicates the contents of a sheet.
class DuplicateSheetRequest {
/// The zero-based index where the new sheet should be inserted.
///
/// The index of all sheets after this are incremented.
core.int insertSheetIndex;
/// 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.
core.int newSheetId;
/// The name of the new sheet.
///
/// If empty, a new name is chosen for you.
core.String newSheetName;
/// 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.
core.int sourceSheetId;
DuplicateSheetRequest();
DuplicateSheetRequest.fromJson(core.Map _json) {
if (_json.containsKey('insertSheetIndex')) {
insertSheetIndex = _json['insertSheetIndex'] as core.int;
}
if (_json.containsKey('newSheetId')) {
newSheetId = _json['newSheetId'] as core.int;
}
if (_json.containsKey('newSheetName')) {
newSheetName = _json['newSheetName'] as core.String;
}
if (_json.containsKey('sourceSheetId')) {
sourceSheetId = _json['sourceSheetId'] as core.int;
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (insertSheetIndex != null) {
_json['insertSheetIndex'] = insertSheetIndex;
}
if (newSheetId != null) {
_json['newSheetId'] = newSheetId;
}
if (newSheetName != null) {
_json['newSheetName'] = newSheetName;
}
if (sourceSheetId != null) {
_json['sourceSheetId'] = sourceSheetId;
}
return _json;
}
}
/// The result of duplicating a sheet.
class DuplicateSheetResponse {
/// The properties of the duplicate sheet.
SheetProperties properties;
DuplicateSheetResponse();
DuplicateSheetResponse.fromJson(core.Map _json) {
if (_json.containsKey('properties')) {
properties = SheetProperties.fromJson(
_json['properties'] as core.Map<core.String, core.dynamic>);
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (properties != null) {
_json['properties'] = properties.toJson();
}
return _json;
}
}
/// The editors of a protected range.
class Editors {
/// 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.
core.bool domainUsersCanEdit;
/// The email addresses of groups with edit access to the protected range.
core.List<core.String> groups;
/// The email addresses of users with edit access to the protected range.
core.List<core.String> users;
Editors();
Editors.fromJson(core.Map _json) {
if (_json.containsKey('domainUsersCanEdit')) {
domainUsersCanEdit = _json['domainUsersCanEdit'] as core.bool;
}
if (_json.containsKey('groups')) {
groups = (_json['groups'] as core.List)
.map<core.String>((value) => value as core.String)
.toList();
}
if (_json.containsKey('users')) {
users = (_json['users'] as core.List)
.map<core.String>((value) => value as core.String)
.toList();
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (domainUsersCanEdit != null) {
_json['domainUsersCanEdit'] = domainUsersCanEdit;
}
if (groups != null) {
_json['groups'] = groups;
}
if (users != null) {
_json['users'] = users;
}
return _json;
}
}
/// A chart embedded in a sheet.
class EmbeddedChart {
/// The border of the chart.
EmbeddedObjectBorder border;
/// The ID of the chart.
core.int chartId;
/// The position of the chart.
EmbeddedObjectPosition position;
/// The specification of the chart.
ChartSpec spec;
EmbeddedChart();
EmbeddedChart.fromJson(core.Map _json) {
if (_json.containsKey('border')) {
border = EmbeddedObjectBorder.fromJson(
_json['border'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('chartId')) {
chartId = _json['chartId'] as core.int;
}
if (_json.containsKey('position')) {
position = EmbeddedObjectPosition.fromJson(
_json['position'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('spec')) {
spec = ChartSpec.fromJson(
_json['spec'] as core.Map<core.String, core.dynamic>);
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (border != null) {
_json['border'] = border.toJson();
}
if (chartId != null) {
_json['chartId'] = chartId;
}
if (position != null) {
_json['position'] = position.toJson();
}
if (spec != null) {
_json['spec'] = spec.toJson();
}
return _json;
}
}
/// A border along an embedded object.
class EmbeddedObjectBorder {
/// The color of the border.
Color color;
/// The color of the border.
///
/// If color is also set, this field takes precedence.
ColorStyle colorStyle;
EmbeddedObjectBorder();
EmbeddedObjectBorder.fromJson(core.Map _json) {
if (_json.containsKey('color')) {
color =
Color.fromJson(_json['color'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('colorStyle')) {
colorStyle = ColorStyle.fromJson(
_json['colorStyle'] as core.Map<core.String, core.dynamic>);
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (color != null) {
_json['color'] = color.toJson();
}
if (colorStyle != null) {
_json['colorStyle'] = colorStyle.toJson();
}
return _json;
}
}
/// The position of an embedded object such as a chart.
class EmbeddedObjectPosition {
/// If true, the embedded object is put on a new sheet whose ID is chosen for
/// you.
///
/// Used only when writing.
core.bool newSheet;
/// The position at which the object is overlaid on top of a grid.
OverlayPosition overlayPosition;
/// The sheet this is on.
///
/// Set only if the embedded object is on its own sheet. Must be non-negative.
core.int sheetId;
EmbeddedObjectPosition();
EmbeddedObjectPosition.fromJson(core.Map _json) {
if (_json.containsKey('newSheet')) {
newSheet = _json['newSheet'] as core.bool;
}
if (_json.containsKey('overlayPosition')) {
overlayPosition = OverlayPosition.fromJson(
_json['overlayPosition'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('sheetId')) {
sheetId = _json['sheetId'] as core.int;
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (newSheet != null) {
_json['newSheet'] = newSheet;
}
if (overlayPosition != null) {
_json['overlayPosition'] = overlayPosition.toJson();
}
if (sheetId != null) {
_json['sheetId'] = sheetId;
}
return _json;
}
}
/// An error in a cell.
class ErrorValue {
/// A message with more information about the error (in the spreadsheet's
/// locale).
core.String message;
/// The type of error.
/// Possible string values are:
/// - "ERROR_TYPE_UNSPECIFIED" : The default error type, do not use this.
/// - "ERROR" : Corresponds to the `#ERROR!` error.
/// - "NULL_VALUE" : Corresponds to the `#NULL!` error.
/// - "DIVIDE_BY_ZERO" : Corresponds to the `#DIV/0` error.
/// - "VALUE" : Corresponds to the `#VALUE!` error.
/// - "REF" : Corresponds to the `#REF!` error.
/// - "NAME" : Corresponds to the `#NAME?` error.
/// - "NUM" : Corresponds to the `#NUM!` error.
/// - "N_A" : Corresponds to the `#N/A` error.
/// - "LOADING" : Corresponds to the `Loading...` state.
core.String type;
ErrorValue();
ErrorValue.fromJson(core.Map _json) {
if (_json.containsKey('message')) {
message = _json['message'] as core.String;
}
if (_json.containsKey('type')) {
type = _json['type'] as core.String;
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (message != null) {
_json['message'] = message;
}
if (type != null) {
_json['type'] = type;
}
return _json;
}
}
/// The kinds of value that a cell in a spreadsheet can have.
class ExtendedValue {
/// Represents a boolean value.
core.bool boolValue;
/// Represents an error.
///
/// This field is read-only.
ErrorValue errorValue;
/// Represents a formula.
core.String formulaValue;
/// Represents a double value.
///
/// Note: Dates, Times and DateTimes are represented as doubles in "serial
/// number" format.
core.double numberValue;
/// 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"`.
core.String stringValue;
ExtendedValue();
ExtendedValue.fromJson(core.Map _json) {
if (_json.containsKey('boolValue')) {
boolValue = _json['boolValue'] as core.bool;
}
if (_json.containsKey('errorValue')) {
errorValue = ErrorValue.fromJson(
_json['errorValue'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('formulaValue')) {
formulaValue = _json['formulaValue'] as core.String;
}
if (_json.containsKey('numberValue')) {
numberValue = (_json['numberValue'] as core.num).toDouble();
}
if (_json.containsKey('stringValue')) {
stringValue = _json['stringValue'] as core.String;
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (boolValue != null) {
_json['boolValue'] = boolValue;
}
if (errorValue != null) {
_json['errorValue'] = errorValue.toJson();
}
if (formulaValue != null) {
_json['formulaValue'] = formulaValue;
}
if (numberValue != null) {
_json['numberValue'] = numberValue;
}
if (stringValue != null) {
_json['stringValue'] = stringValue;
}
return _json;
}
}
/// Criteria for showing/hiding rows in a filter or filter view.
class FilterCriteria {
/// A condition that must be true for values to be shown.
///
/// (This does not override hidden_values -- if a value is listed there, it
/// will still be hidden.)
BooleanCondition condition;
/// Values that should be hidden.
core.List<core.String> hiddenValues;
/// The background fill color to filter by; only cells with this fill color
/// are shown.
///
/// Mutually exclusive with visible_foreground_color.
Color visibleBackgroundColor;
/// The background fill color to filter by; only cells with this fill color
/// are shown.
///
/// This field is mutually exclusive with visible_foreground_color, and must
/// be set to an RGB-type color. If visible_background_color is also set, this
/// field takes precedence.
ColorStyle visibleBackgroundColorStyle;
/// The foreground color to filter by; only cells with this foreground color
/// are shown.
///
/// Mutually exclusive with visible_background_color.
Color visibleForegroundColor;
/// The foreground color to filter by; only cells with this foreground color
/// are shown.
///
/// This field is mutually exclusive with visible_background_color, and must
/// be set to an RGB-type color. If visible_foreground_color is also set, this
/// field takes precedence.
ColorStyle visibleForegroundColorStyle;
FilterCriteria();
FilterCriteria.fromJson(core.Map _json) {
if (_json.containsKey('condition')) {
condition = BooleanCondition.fromJson(
_json['condition'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('hiddenValues')) {
hiddenValues = (_json['hiddenValues'] as core.List)
.map<core.String>((value) => value as core.String)
.toList();
}
if (_json.containsKey('visibleBackgroundColor')) {
visibleBackgroundColor = Color.fromJson(_json['visibleBackgroundColor']
as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('visibleBackgroundColorStyle')) {
visibleBackgroundColorStyle = ColorStyle.fromJson(
_json['visibleBackgroundColorStyle']
as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('visibleForegroundColor')) {
visibleForegroundColor = Color.fromJson(_json['visibleForegroundColor']
as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('visibleForegroundColorStyle')) {
visibleForegroundColorStyle = ColorStyle.fromJson(
_json['visibleForegroundColorStyle']
as core.Map<core.String, core.dynamic>);
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (condition != null) {
_json['condition'] = condition.toJson();
}
if (hiddenValues != null) {
_json['hiddenValues'] = hiddenValues;
}
if (visibleBackgroundColor != null) {
_json['visibleBackgroundColor'] = visibleBackgroundColor.toJson();
}
if (visibleBackgroundColorStyle != null) {
_json['visibleBackgroundColorStyle'] =
visibleBackgroundColorStyle.toJson();
}
if (visibleForegroundColor != null) {
_json['visibleForegroundColor'] = visibleForegroundColor.toJson();
}
if (visibleForegroundColorStyle != null) {
_json['visibleForegroundColorStyle'] =
visibleForegroundColorStyle.toJson();
}
return _json;
}
}
/// The filter criteria associated with a specific column.
class FilterSpec {
/// The column index.
core.int columnIndex;
/// Reference to a data source column.
DataSourceColumnReference dataSourceColumnReference;
/// The criteria for the column.
FilterCriteria filterCriteria;
FilterSpec();
FilterSpec.fromJson(core.Map _json) {
if (_json.containsKey('columnIndex')) {
columnIndex = _json['columnIndex'] as core.int;
}
if (_json.containsKey('dataSourceColumnReference')) {
dataSourceColumnReference = DataSourceColumnReference.fromJson(
_json['dataSourceColumnReference']
as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('filterCriteria')) {
filterCriteria = FilterCriteria.fromJson(
_json['filterCriteria'] as core.Map<core.String, core.dynamic>);
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (columnIndex != null) {
_json['columnIndex'] = columnIndex;
}
if (dataSourceColumnReference != null) {
_json['dataSourceColumnReference'] = dataSourceColumnReference.toJson();
}
if (filterCriteria != null) {
_json['filterCriteria'] = filterCriteria.toJson();
}
return _json;
}
}
/// A filter view.
class FilterView {
/// 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.
core.Map<core.String, FilterCriteria> 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.
core.List<FilterSpec> filterSpecs;
/// The ID of the filter view.
core.int filterViewId;
/// The named range this filter view is backed by, if any.
///
/// When writing, only one of range or named_range_id may be set.
core.String namedRangeId;
/// The range this filter view covers.
///
/// When writing, only one of range or named_range_id may be set.
GridRange range;
/// The sort order per column.
///
/// Later specifications are used when values are equal in the earlier
/// specifications.
core.List<SortSpec> sortSpecs;
/// The name of the filter view.
core.String title;
FilterView();
FilterView.fromJson(core.Map _json) {
if (_json.containsKey('criteria')) {
criteria =
(_json['criteria'] as core.Map).cast<core.String, core.Map>().map(
(key, item) => core.MapEntry(
key,
FilterCriteria.fromJson(
item as core.Map<core.String, core.dynamic>),
),
);
}
if (_json.containsKey('filterSpecs')) {
filterSpecs = (_json['filterSpecs'] as core.List)
.map<FilterSpec>((value) =>
FilterSpec.fromJson(value as core.Map<core.String, core.dynamic>))
.toList();
}
if (_json.containsKey('filterViewId')) {
filterViewId = _json['filterViewId'] as core.int;
}
if (_json.containsKey('namedRangeId')) {
namedRangeId = _json['namedRangeId'] as core.String;
}
if (_json.containsKey('range')) {
range = GridRange.fromJson(
_json['range'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('sortSpecs')) {
sortSpecs = (_json['sortSpecs'] as core.List)
.map<SortSpec>((value) =>
SortSpec.fromJson(value as core.Map<core.String, core.dynamic>))
.toList();
}
if (_json.containsKey('title')) {
title = _json['title'] as core.String;
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (criteria != null) {
_json['criteria'] =
criteria.map((key, item) => core.MapEntry(key, item.toJson()));
}
if (filterSpecs != null) {
_json['filterSpecs'] =
filterSpecs.map((value) => value.toJson()).toList();
}
if (filterViewId != null) {
_json['filterViewId'] = filterViewId;
}
if (namedRangeId != null) {
_json['namedRangeId'] = namedRangeId;
}
if (range != null) {
_json['range'] = range.toJson();
}
if (sortSpecs != null) {
_json['sortSpecs'] = sortSpecs.map((value) => value.toJson()).toList();
}
if (title != null) {
_json['title'] = title;
}
return _json;
}
}
/// Finds and replaces data in cells over a range, sheet, or all sheets.
class FindReplaceRequest {
/// True to find/replace over all sheets.
core.bool allSheets;
/// The value to search.
core.String find;
/// True if the search should include cells with formulas.
///
/// False to skip cells with formulas.
core.bool includeFormulas;
/// True if the search is case sensitive.
core.bool matchCase;
/// True if the find value should match the entire cell.
core.bool matchEntireCell;
/// The range to find/replace over.
GridRange range;
/// The value to use as the replacement.
core.String 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.
core.bool searchByRegex;
/// The sheet to find/replace over.
core.int sheetId;
FindReplaceRequest();
FindReplaceRequest.fromJson(core.Map _json) {
if (_json.containsKey('allSheets')) {
allSheets = _json['allSheets'] as core.bool;
}
if (_json.containsKey('find')) {
find = _json['find'] as core.String;
}
if (_json.containsKey('includeFormulas')) {
includeFormulas = _json['includeFormulas'] as core.bool;
}
if (_json.containsKey('matchCase')) {
matchCase = _json['matchCase'] as core.bool;
}
if (_json.containsKey('matchEntireCell')) {
matchEntireCell = _json['matchEntireCell'] as core.bool;
}
if (_json.containsKey('range')) {
range = GridRange.fromJson(
_json['range'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('replacement')) {
replacement = _json['replacement'] as core.String;
}
if (_json.containsKey('searchByRegex')) {
searchByRegex = _json['searchByRegex'] as core.bool;
}
if (_json.containsKey('sheetId')) {
sheetId = _json['sheetId'] as core.int;
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (allSheets != null) {
_json['allSheets'] = allSheets;
}
if (find != null) {
_json['find'] = find;
}
if (includeFormulas != null) {
_json['includeFormulas'] = includeFormulas;
}
if (matchCase != null) {
_json['matchCase'] = matchCase;
}
if (matchEntireCell != null) {
_json['matchEntireCell'] = matchEntireCell;
}
if (range != null) {
_json['range'] = range.toJson();
}
if (replacement != null) {
_json['replacement'] = replacement;
}
if (searchByRegex != null) {
_json['searchByRegex'] = searchByRegex;
}
if (sheetId != null) {
_json['sheetId'] = sheetId;
}
return _json;
}
}
/// The result of the find/replace.
class FindReplaceResponse {
/// The number of formula cells changed.
core.int formulasChanged;
/// 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"`.
core.int occurrencesChanged;
/// The number of rows changed.
core.int rowsChanged;
/// The number of sheets changed.
core.int sheetsChanged;
/// The number of non-formula cells changed.
core.int valuesChanged;
FindReplaceResponse();
FindReplaceResponse.fromJson(core.Map _json) {
if (_json.containsKey('formulasChanged')) {
formulasChanged = _json['formulasChanged'] as core.int;
}
if (_json.containsKey('occurrencesChanged')) {
occurrencesChanged = _json['occurrencesChanged'] as core.int;
}
if (_json.containsKey('rowsChanged')) {
rowsChanged = _json['rowsChanged'] as core.int;
}
if (_json.containsKey('sheetsChanged')) {
sheetsChanged = _json['sheetsChanged'] as core.int;
}
if (_json.containsKey('valuesChanged')) {
valuesChanged = _json['valuesChanged'] as core.int;
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (formulasChanged != null) {
_json['formulasChanged'] = formulasChanged;
}
if (occurrencesChanged != null) {
_json['occurrencesChanged'] = occurrencesChanged;
}
if (rowsChanged != null) {
_json['rowsChanged'] = rowsChanged;
}
if (sheetsChanged != null) {
_json['sheetsChanged'] = sheetsChanged;
}
if (valuesChanged != null) {
_json['valuesChanged'] = valuesChanged;
}
return _json;
}
}
/// The request for retrieving a Spreadsheet.
class GetSpreadsheetByDataFilterRequest {
/// The DataFilters used to select which ranges to retrieve from the
/// spreadsheet.
core.List<DataFilter> dataFilters;
/// True if grid data should be returned.
///
/// This parameter is ignored if a field mask was set in the request.
core.bool includeGridData;
GetSpreadsheetByDataFilterRequest();
GetSpreadsheetByDataFilterRequest.fromJson(core.Map _json) {
if (_json.containsKey('dataFilters')) {
dataFilters = (_json['dataFilters'] as core.List)
.map<DataFilter>((value) =>
DataFilter.fromJson(value as core.Map<core.String, core.dynamic>))
.toList();
}
if (_json.containsKey('includeGridData')) {
includeGridData = _json['includeGridData'] as core.bool;
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (dataFilters != null) {
_json['dataFilters'] =
dataFilters.map((value) => value.toJson()).toList();
}
if (includeGridData != null) {
_json['includeGridData'] = includeGridData;
}
return _json;
}
}
/// 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 {
/// The final interpolation point.
InterpolationPoint maxpoint;
/// An optional midway interpolation point.
InterpolationPoint midpoint;
/// The starting interpolation point.
InterpolationPoint minpoint;
GradientRule();
GradientRule.fromJson(core.Map _json) {
if (_json.containsKey('maxpoint')) {
maxpoint = InterpolationPoint.fromJson(
_json['maxpoint'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('midpoint')) {
midpoint = InterpolationPoint.fromJson(
_json['midpoint'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('minpoint')) {
minpoint = InterpolationPoint.fromJson(
_json['minpoint'] as core.Map<core.String, core.dynamic>);
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (maxpoint != null) {
_json['maxpoint'] = maxpoint.toJson();
}
if (midpoint != null) {
_json['midpoint'] = midpoint.toJson();
}
if (minpoint != null) {
_json['minpoint'] = minpoint.toJson();
}
return _json;
}
}
/// A coordinate in a sheet.
///
/// All indexes are zero-based.
class GridCoordinate {
/// The column index of the coordinate.
core.int columnIndex;
/// The row index of the coordinate.
core.int rowIndex;
/// The sheet this coordinate is on.
core.int sheetId;
GridCoordinate();
GridCoordinate.fromJson(core.Map _json) {
if (_json.containsKey('columnIndex')) {
columnIndex = _json['columnIndex'] as core.int;
}
if (_json.containsKey('rowIndex')) {
rowIndex = _json['rowIndex'] as core.int;
}
if (_json.containsKey('sheetId')) {
sheetId = _json['sheetId'] as core.int;
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (columnIndex != null) {
_json['columnIndex'] = columnIndex;
}
if (rowIndex != null) {
_json['rowIndex'] = rowIndex;
}
if (sheetId != null) {
_json['sheetId'] = sheetId;
}
return _json;
}
}
/// Data in the grid, as well as metadata about the dimensions.
class GridData {
/// Metadata about the requested columns in the grid, starting with the column
/// in start_column.
core.List<DimensionProperties> columnMetadata;
/// 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.
core.List<RowData> rowData;
/// Metadata about the requested rows in the grid, starting with the row in
/// start_row.
core.List<DimensionProperties> rowMetadata;
/// The first column this GridData refers to, zero-based.
core.int startColumn;
/// The first row this GridData refers to, zero-based.
core.int startRow;
GridData();
GridData.fromJson(core.Map _json) {
if (_json.containsKey('columnMetadata')) {
columnMetadata = (_json['columnMetadata'] as core.List)
.map<DimensionProperties>((value) => DimensionProperties.fromJson(
value as core.Map<core.String, core.dynamic>))
.toList();
}
if (_json.containsKey('rowData')) {
rowData = (_json['rowData'] as core.List)
.map<RowData>((value) =>
RowData.fromJson(value as core.Map<core.String, core.dynamic>))
.toList();
}
if (_json.containsKey('rowMetadata')) {
rowMetadata = (_json['rowMetadata'] as core.List)
.map<DimensionProperties>((value) => DimensionProperties.fromJson(
value as core.Map<core.String, core.dynamic>))
.toList();
}
if (_json.containsKey('startColumn')) {
startColumn = _json['startColumn'] as core.int;
}
if (_json.containsKey('startRow')) {
startRow = _json['startRow'] as core.int;
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (columnMetadata != null) {
_json['columnMetadata'] =
columnMetadata.map((value) => value.toJson()).toList();
}
if (rowData != null) {
_json['rowData'] = rowData.map((value) => value.toJson()).toList();
}
if (rowMetadata != null) {
_json['rowMetadata'] =
rowMetadata.map((value) => value.toJson()).toList();
}
if (startColumn != null) {
_json['startColumn'] = startColumn;
}
if (startRow != null) {
_json['startRow'] = startRow;
}
return _json;
}
}
/// Properties of a grid.
class GridProperties {
/// The number of columns in the grid.
core.int columnCount;
/// True if the column grouping control toggle is shown after the group.
core.bool columnGroupControlAfter;
/// The number of columns that are frozen in the grid.
core.int frozenColumnCount;
/// The number of rows that are frozen in the grid.
core.int frozenRowCount;
/// True if the grid isn't showing gridlines in the UI.
core.bool hideGridlines;
/// The number of rows in the grid.
core.int rowCount;
/// True if the row grouping control toggle is shown after the group.
core.bool rowGroupControlAfter;
GridProperties();
GridProperties.fromJson(core.Map _json) {
if (_json.containsKey('columnCount')) {
columnCount = _json['columnCount'] as core.int;
}
if (_json.containsKey('columnGroupControlAfter')) {
columnGroupControlAfter = _json['columnGroupControlAfter'] as core.bool;
}
if (_json.containsKey('frozenColumnCount')) {
frozenColumnCount = _json['frozenColumnCount'] as core.int;
}
if (_json.containsKey('frozenRowCount')) {
frozenRowCount = _json['frozenRowCount'] as core.int;
}
if (_json.containsKey('hideGridlines')) {
hideGridlines = _json['hideGridlines'] as core.bool;
}
if (_json.containsKey('rowCount')) {
rowCount = _json['rowCount'] as core.int;
}
if (_json.containsKey('rowGroupControlAfter')) {
rowGroupControlAfter = _json['rowGroupControlAfter'] as core.bool;
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (columnCount != null) {
_json['columnCount'] = columnCount;
}
if (columnGroupControlAfter != null) {
_json['columnGroupControlAfter'] = columnGroupControlAfter;
}
if (frozenColumnCount != null) {
_json['frozenColumnCount'] = frozenColumnCount;
}
if (frozenRowCount != null) {
_json['frozenRowCount'] = frozenRowCount;
}
if (hideGridlines != null) {
_json['hideGridlines'] = hideGridlines;
}
if (rowCount != null) {
_json['rowCount'] = rowCount;
}
if (rowGroupControlAfter != null) {
_json['rowGroupControlAfter'] = rowGroupControlAfter;
}
return _json;
}
}
/// 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 {
/// The end column (exclusive) of the range, or not set if unbounded.
core.int endColumnIndex;
/// The end row (exclusive) of the range, or not set if unbounded.
core.int endRowIndex;
/// The sheet this range is on.
core.int sheetId;
/// The start column (inclusive) of the range, or not set if unbounded.
core.int startColumnIndex;
/// The start row (inclusive) of the range, or not set if unbounded.
core.int startRowIndex;
GridRange();
GridRange.fromJson(core.Map _json) {
if (_json.containsKey('endColumnIndex')) {
endColumnIndex = _json['endColumnIndex'] as core.int;
}
if (_json.containsKey('endRowIndex')) {
endRowIndex = _json['endRowIndex'] as core.int;
}
if (_json.containsKey('sheetId')) {
sheetId = _json['sheetId'] as core.int;
}
if (_json.containsKey('startColumnIndex')) {
startColumnIndex = _json['startColumnIndex'] as core.int;
}
if (_json.containsKey('startRowIndex')) {
startRowIndex = _json['startRowIndex'] as core.int;
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (endColumnIndex != null) {
_json['endColumnIndex'] = endColumnIndex;
}
if (endRowIndex != null) {
_json['endRowIndex'] = endRowIndex;
}
if (sheetId != null) {
_json['sheetId'] = sheetId;
}
if (startColumnIndex != null) {
_json['startColumnIndex'] = startColumnIndex;
}
if (startRowIndex != null) {
_json['startRowIndex'] = startRowIndex;
}
return _json;
}
}
/// 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 {
/// 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.
core.double bucketSize;
/// The position of the chart legend.
/// Possible string values are:
/// - "HISTOGRAM_CHART_LEGEND_POSITION_UNSPECIFIED" : Default value, do not
/// use.
/// - "BOTTOM_LEGEND" : The legend is rendered on the bottom of the chart.
/// - "LEFT_LEGEND" : The legend is rendered on the left of the chart.
/// - "RIGHT_LEGEND" : The legend is rendered on the right of the chart.
/// - "TOP_LEGEND" : The legend is rendered on the top of the chart.
/// - "NO_LEGEND" : No legend is rendered.
/// - "INSIDE_LEGEND" : The legend is rendered inside the chart area.
core.String legendPosition;
/// 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.
core.double outlierPercentile;
/// 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.
core.List<HistogramSeries> series;
/// Whether horizontal divider lines should be displayed between items in each
/// column.
core.bool showItemDividers;
HistogramChartSpec();
HistogramChartSpec.fromJson(core.Map _json) {
if (_json.containsKey('bucketSize')) {
bucketSize = (_json['bucketSize'] as core.num).toDouble();
}
if (_json.containsKey('legendPosition')) {
legendPosition = _json['legendPosition'] as core.String;
}
if (_json.containsKey('outlierPercentile')) {
outlierPercentile = (_json['outlierPercentile'] as core.num).toDouble();
}
if (_json.containsKey('series')) {
series = (_json['series'] as core.List)
.map<HistogramSeries>((value) => HistogramSeries.fromJson(
value as core.Map<core.String, core.dynamic>))
.toList();
}
if (_json.containsKey('showItemDividers')) {
showItemDividers = _json['showItemDividers'] as core.bool;
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (bucketSize != null) {
_json['bucketSize'] = bucketSize;
}
if (legendPosition != null) {
_json['legendPosition'] = legendPosition;
}
if (outlierPercentile != null) {
_json['outlierPercentile'] = outlierPercentile;
}
if (series != null) {
_json['series'] = series.map((value) => value.toJson()).toList();
}
if (showItemDividers != null) {
_json['showItemDividers'] = showItemDividers;
}
return _json;
}
}
/// 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 {
/// 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.
core.double end;
/// The size of the buckets that are created.
///
/// Must be positive.
core.double 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.
core.double start;
HistogramRule();
HistogramRule.fromJson(core.Map _json) {
if (_json.containsKey('end')) {
end = (_json['end'] as core.num).toDouble();
}
if (_json.containsKey('interval')) {
interval = (_json['interval'] as core.num).toDouble();
}
if (_json.containsKey('start')) {
start = (_json['start'] as core.num).toDouble();
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (end != null) {
_json['end'] = end;
}
if (interval != null) {
_json['interval'] = interval;
}
if (start != null) {
_json['start'] = start;
}
return _json;
}
}
/// A histogram series containing the series color and data.
class HistogramSeries {
/// The color of the column representing this series in each bucket.
///
/// This field is optional.
Color barColor;
/// The color of the column representing this series in each bucket.
///
/// This field is optional. If bar_color is also set, this field takes
/// precedence.
ColorStyle barColorStyle;
/// The data for this histogram series.
ChartData data;
HistogramSeries();
HistogramSeries.fromJson(core.Map _json) {
if (_json.containsKey('barColor')) {
barColor = Color.fromJson(
_json['barColor'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('barColorStyle')) {
barColorStyle = ColorStyle.fromJson(
_json['barColorStyle'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('data')) {
data = ChartData.fromJson(
_json['data'] as core.Map<core.String, core.dynamic>);
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (barColor != null) {
_json['barColor'] = barColor.toJson();
}
if (barColorStyle != null) {
_json['barColorStyle'] = barColorStyle.toJson();
}
if (data != null) {
_json['data'] = data.toJson();
}
return _json;
}
}
/// Inserts rows or columns in a sheet at a particular index.
class InsertDimensionRequest {
/// 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).
core.bool inheritFromBefore;
/// The dimensions to insert.
///
/// Both the start and end indexes must be bounded.
DimensionRange range;
InsertDimensionRequest();
InsertDimensionRequest.fromJson(core.Map _json) {
if (_json.containsKey('inheritFromBefore')) {
inheritFromBefore = _json['inheritFromBefore'] as core.bool;
}
if (_json.containsKey('range')) {
range = DimensionRange.fromJson(
_json['range'] as core.Map<core.String, core.dynamic>);
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (inheritFromBefore != null) {
_json['inheritFromBefore'] = inheritFromBefore;
}
if (range != null) {
_json['range'] = range.toJson();
}
return _json;
}
}
/// Inserts cells into a range, shifting the existing cells over or down.
class InsertRangeRequest {
/// The range to insert new cells into.
GridRange 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.
/// Possible string values are:
/// - "DIMENSION_UNSPECIFIED" : The default value, do not use.
/// - "ROWS" : Operates on the rows of a sheet.
/// - "COLUMNS" : Operates on the columns of a sheet.
core.String shiftDimension;
InsertRangeRequest();
InsertRangeRequest.fromJson(core.Map _json) {
if (_json.containsKey('range')) {
range = GridRange.fromJson(
_json['range'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('shiftDimension')) {
shiftDimension = _json['shiftDimension'] as core.String;
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (range != null) {
_json['range'] = range.toJson();
}
if (shiftDimension != null) {
_json['shiftDimension'] = shiftDimension;
}
return _json;
}
}
/// 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 {
/// The color this interpolation point should use.
Color color;
/// The color this interpolation point should use.
///
/// If color is also set, this field takes precedence.
ColorStyle colorStyle;
/// How the value should be interpreted.
/// Possible string values are:
/// - "INTERPOLATION_POINT_TYPE_UNSPECIFIED" : The default value, do not use.
/// - "MIN" : The interpolation point uses the minimum value in the cells over
/// the range of the conditional format.
/// - "MAX" : The interpolation point uses the maximum value in the cells over
/// the range of the conditional format.
/// - "NUMBER" : The interpolation point uses exactly the value in
/// InterpolationPoint.value.
/// - "PERCENT" : The interpolation point is the given percentage over all the
/// cells in the range of the conditional format. This is equivalent to NUMBER
/// if the value was: `=(MAX(FLATTEN(range)) * (value / 100)) +
/// (MIN(FLATTEN(range)) * (1 - (value / 100)))` (where errors in the range
/// are ignored when flattening).
/// - "PERCENTILE" : The interpolation point is the given percentile over all
/// the cells in the range of the conditional format. This is equivalent to
/// NUMBER if the value was: `=PERCENTILE(FLATTEN(range), value / 100)` (where
/// errors in the range are ignored when flattening).
core.String type;
/// The value this interpolation point uses.
///
/// May be a formula. Unused if type is MIN or MAX.
core.String value;
InterpolationPoint();
InterpolationPoint.fromJson(core.Map _json) {
if (_json.containsKey('color')) {
color =
Color.fromJson(_json['color'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('colorStyle')) {
colorStyle = ColorStyle.fromJson(
_json['colorStyle'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('type')) {
type = _json['type'] as core.String;
}
if (_json.containsKey('value')) {
value = _json['value'] as core.String;
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (color != null) {
_json['color'] = color.toJson();
}
if (colorStyle != null) {
_json['colorStyle'] = colorStyle.toJson();
}
if (type != null) {
_json['type'] = type;
}
if (value != null) {
_json['value'] = value;
}
return _json;
}
}
/// 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 {
/// Exclusive end of the interval.
///
/// If specified, a Timestamp matching this interval will have to be before
/// the end.
///
/// Optional.
core.String endTime;
/// Inclusive start of the interval.
///
/// If specified, a Timestamp matching this interval will have to be the same
/// or after the start.
///
/// Optional.
core.String startTime;
Interval();
Interval.fromJson(core.Map _json) {
if (_json.containsKey('endTime')) {
endTime = _json['endTime'] as core.String;
}
if (_json.containsKey('startTime')) {
startTime = _json['startTime'] as core.String;
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (endTime != null) {
_json['endTime'] = endTime;
}
if (startTime != null) {
_json['startTime'] = startTime;
}
return _json;
}
}
/// Settings to control how circular dependencies are resolved with iterative
/// calculation.
class IterativeCalculationSettings {
/// When iterative calculation is enabled and successive results differ by
/// less than this threshold value, the calculation rounds stop.
core.double convergenceThreshold;
/// When iterative calculation is enabled, the maximum number of calculation
/// rounds to perform.
core.int maxIterations;
IterativeCalculationSettings();
IterativeCalculationSettings.fromJson(core.Map _json) {
if (_json.containsKey('convergenceThreshold')) {
convergenceThreshold =
(_json['convergenceThreshold'] as core.num).toDouble();
}
if (_json.containsKey('maxIterations')) {
maxIterations = _json['maxIterations'] as core.int;
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (convergenceThreshold != null) {
_json['convergenceThreshold'] = convergenceThreshold;
}
if (maxIterations != null) {
_json['maxIterations'] = maxIterations;
}
return _json;
}
}
/// Formatting options for key value.
class KeyValueFormat {
/// Specifies the horizontal text positioning of key value.
///
/// This field is optional. If not specified, default positioning is used.
TextPosition position;
/// Text formatting options for key value.
TextFormat textFormat;
KeyValueFormat();
KeyValueFormat.fromJson(core.Map _json) {
if (_json.containsKey('position')) {
position = TextPosition.fromJson(
_json['position'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('textFormat')) {
textFormat = TextFormat.fromJson(
_json['textFormat'] as core.Map<core.String, core.dynamic>);
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (position != null) {
_json['position'] = position.toJson();
}
if (textFormat != null) {
_json['textFormat'] = textFormat.toJson();
}
return _json;
}
}
/// Properties that describe the style of a line.
class LineStyle {
/// The dash type of the line.
/// Possible string values are:
/// - "LINE_DASH_TYPE_UNSPECIFIED" : Default value, do not use.
/// - "INVISIBLE" : No dash type, which is equivalent to a non-visible line.
/// - "CUSTOM" : A custom dash for a line. Modifying the exact custom dash
/// style is currently unsupported.
/// - "SOLID" : A solid line.
/// - "DOTTED" : A dotted line.
/// - "MEDIUM_DASHED" : A dashed line where the dashes have "medium" length.
/// - "MEDIUM_DASHED_DOTTED" : A line that alternates between a "medium" dash
/// and a dot.
/// - "LONG_DASHED" : A dashed line where the dashes have "long" length.
/// - "LONG_DASHED_DOTTED" : A line that alternates between a "long" dash and
/// a dot.
core.String type;
/// The thickness of the line, in px.
core.int width;
LineStyle();
LineStyle.fromJson(core.Map _json) {
if (_json.containsKey('type')) {
type = _json['type'] as core.String;
}
if (_json.containsKey('width')) {
width = _json['width'] as core.int;
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (type != null) {
_json['type'] = type;
}
if (width != null) {
_json['width'] = width;
}
return _json;
}
}
/// 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 {
/// The list of group names and the corresponding items from the source data
/// that map to each group name.
core.List<ManualRuleGroup> groups;
ManualRule();
ManualRule.fromJson(core.Map _json) {
if (_json.containsKey('groups')) {
groups = (_json['groups'] as core.List)
.map<ManualRuleGroup>((value) => ManualRuleGroup.fromJson(
value as core.Map<core.String, core.dynamic>))
.toList();
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (groups != null) {
_json['groups'] = groups.map((value) => value.toJson()).toList();
}
return _json;
}
}
/// A group name and a list of items from the source data that should be placed
/// in the group with this name.
class ManualRuleGroup {
/// The group name, which must be a string.
///
/// Each group in a given ManualRule must have a unique group name.
ExtendedValue groupName;
/// 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.
core.List<ExtendedValue> items;
ManualRuleGroup();
ManualRuleGroup.fromJson(core.Map _json) {
if (_json.containsKey('groupName')) {
groupName = ExtendedValue.fromJson(
_json['groupName'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('items')) {
items = (_json['items'] as core.List)
.map<ExtendedValue>((value) => ExtendedValue.fromJson(
value as core.Map<core.String, core.dynamic>))
.toList();
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (groupName != null) {
_json['groupName'] = groupName.toJson();
}
if (items != null) {
_json['items'] = items.map((value) => value.toJson()).toList();
}
return _json;
}
}
/// A developer metadata entry and the data filters specified in the original
/// request that matched it.
class MatchedDeveloperMetadata {
/// All filters matching the returned developer metadata.
core.List<DataFilter> dataFilters;
/// The developer metadata matching the specified filters.
DeveloperMetadata developerMetadata;
MatchedDeveloperMetadata();
MatchedDeveloperMetadata.fromJson(core.Map _json) {
if (_json.containsKey('dataFilters')) {
dataFilters = (_json['dataFilters'] as core.List)
.map<DataFilter>((value) =>
DataFilter.fromJson(value as core.Map<core.String, core.dynamic>))
.toList();
}
if (_json.containsKey('developerMetadata')) {
developerMetadata = DeveloperMetadata.fromJson(
_json['developerMetadata'] as core.Map<core.String, core.dynamic>);
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (dataFilters != null) {
_json['dataFilters'] =
dataFilters.map((value) => value.toJson()).toList();
}
if (developerMetadata != null) {
_json['developerMetadata'] = developerMetadata.toJson();
}
return _json;
}
}
/// A value range that was matched by one or more data filers.
class MatchedValueRange {
/// The DataFilters from the request that matched the range of values.
core.List<DataFilter> dataFilters;
/// The values matched by the DataFilter.
ValueRange valueRange;
MatchedValueRange();
MatchedValueRange.fromJson(core.Map _json) {
if (_json.containsKey('dataFilters')) {
dataFilters = (_json['dataFilters'] as core.List)
.map<DataFilter>((value) =>
DataFilter.fromJson(value as core.Map<core.String, core.dynamic>))
.toList();
}
if (_json.containsKey('valueRange')) {
valueRange = ValueRange.fromJson(
_json['valueRange'] as core.Map<core.String, core.dynamic>);
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (dataFilters != null) {
_json['dataFilters'] =
dataFilters.map((value) => value.toJson()).toList();
}
if (valueRange != null) {
_json['valueRange'] = valueRange.toJson();
}
return _json;
}
}
/// Merges all cells in the range.
class MergeCellsRequest {
/// How the cells should be merged.
/// Possible string values are:
/// - "MERGE_ALL" : Create a single merge from the range
/// - "MERGE_COLUMNS" : Create a merge for each column in the range
/// - "MERGE_ROWS" : Create a merge for each row in the range
core.String mergeType;
/// The range of cells to merge.
GridRange range;
MergeCellsRequest();
MergeCellsRequest.fromJson(core.Map _json) {
if (_json.containsKey('mergeType')) {
mergeType = _json['mergeType'] as core.String;
}
if (_json.containsKey('range')) {
range = GridRange.fromJson(
_json['range'] as core.Map<core.String, core.dynamic>);
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (mergeType != null) {
_json['mergeType'] = mergeType;
}
if (range != null) {
_json['range'] = range.toJson();
}
return _json;
}
}
/// Moves one or more rows or columns.
class MoveDimensionRequest {
/// 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`.
core.int destinationIndex;
/// The source dimensions to move.
DimensionRange source;
MoveDimensionRequest();
MoveDimensionRequest.fromJson(core.Map _json) {
if (_json.containsKey('destinationIndex')) {
destinationIndex = _json['destinationIndex'] as core.int;
}
if (_json.containsKey('source')) {
source = DimensionRange.fromJson(
_json['source'] as core.Map<core.String, core.dynamic>);
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (destinationIndex != null) {
_json['destinationIndex'] = destinationIndex;
}
if (source != null) {
_json['source'] = source.toJson();
}
return _json;
}
}
/// A named range.
class NamedRange {
/// The name of the named range.
core.String name;
/// The ID of the named range.
core.String namedRangeId;
/// The range this represents.
GridRange range;
NamedRange();
NamedRange.fromJson(core.Map _json) {
if (_json.containsKey('name')) {
name = _json['name'] as core.String;
}
if (_json.containsKey('namedRangeId')) {
namedRangeId = _json['namedRangeId'] as core.String;
}
if (_json.containsKey('range')) {
range = GridRange.fromJson(
_json['range'] as core.Map<core.String, core.dynamic>);
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (name != null) {
_json['name'] = name;
}
if (namedRangeId != null) {
_json['namedRangeId'] = namedRangeId;
}
if (range != null) {
_json['range'] = range.toJson();
}
return _json;
}
}
/// The number format of a cell.
class NumberFormat {
/// 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.
core.String pattern;
/// The type of the number format.
///
/// When writing, this field must be set.
/// Possible string values are:
/// - "NUMBER_FORMAT_TYPE_UNSPECIFIED" : The number format is not specified
/// and is based on the contents of the cell. Do not explicitly use this.
/// - "TEXT" : Text formatting, e.g `1000.12`
/// - "NUMBER" : Number formatting, e.g, `1,000.12`
/// - "PERCENT" : Percent formatting, e.g `10.12%`
/// - "CURRENCY" : Currency formatting, e.g `$1,000.12`
/// - "DATE" : Date formatting, e.g `9/26/2008`
/// - "TIME" : Time formatting, e.g `3:59:00 PM`
/// - "DATE_TIME" : Date+Time formatting, e.g `9/26/08 15:59:00`
/// - "SCIENTIFIC" : Scientific number formatting, e.g `1.01E+03`
core.String type;
NumberFormat();
NumberFormat.fromJson(core.Map _json) {
if (_json.containsKey('pattern')) {
pattern = _json['pattern'] as core.String;
}
if (_json.containsKey('type')) {
type = _json['type'] as core.String;
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (pattern != null) {
_json['pattern'] = pattern;
}
if (type != null) {
_json['type'] = type;
}
return _json;
}
}
/// 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 {
/// The data containing the labels for all the nodes in the chart.
///
/// Labels must be unique.
ChartData labels;
/// The color of the org chart nodes.
Color nodeColor;
/// The color of the org chart nodes.
///
/// If node_color is also set, this field takes precedence.
ColorStyle nodeColorStyle;
/// The size of the org chart nodes.
/// Possible string values are:
/// - "ORG_CHART_LABEL_SIZE_UNSPECIFIED" : Default value, do not use.
/// - "SMALL" : The small org chart node size.
/// - "MEDIUM" : The medium org chart node size.
/// - "LARGE" : The large org chart node size.
core.String nodeSize;
/// The data containing the label of the parent for the corresponding node.
///
/// A blank value indicates that the node has no parent and is a top-level
/// node. This field is optional.
ChartData parentLabels;
/// The color of the selected org chart nodes.
Color selectedNodeColor;
/// The color of the selected org chart nodes.
///
/// If selected_node_color is also set, this field takes precedence.
ColorStyle selectedNodeColorStyle;
/// The data containing the tooltip for the corresponding node.
///
/// A blank value results in no tooltip being displayed for the node. This
/// field is optional.
ChartData tooltips;
OrgChartSpec();
OrgChartSpec.fromJson(core.Map _json) {
if (_json.containsKey('labels')) {
labels = ChartData.fromJson(
_json['labels'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('nodeColor')) {
nodeColor = Color.fromJson(
_json['nodeColor'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('nodeColorStyle')) {
nodeColorStyle = ColorStyle.fromJson(
_json['nodeColorStyle'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('nodeSize')) {
nodeSize = _json['nodeSize'] as core.String;
}
if (_json.containsKey('parentLabels')) {
parentLabels = ChartData.fromJson(
_json['parentLabels'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('selectedNodeColor')) {
selectedNodeColor = Color.fromJson(
_json['selectedNodeColor'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('selectedNodeColorStyle')) {
selectedNodeColorStyle = ColorStyle.fromJson(
_json['selectedNodeColorStyle']
as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('tooltips')) {
tooltips = ChartData.fromJson(
_json['tooltips'] as core.Map<core.String, core.dynamic>);
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (labels != null) {
_json['labels'] = labels.toJson();
}
if (nodeColor != null) {
_json['nodeColor'] = nodeColor.toJson();
}
if (nodeColorStyle != null) {
_json['nodeColorStyle'] = nodeColorStyle.toJson();
}
if (nodeSize != null) {
_json['nodeSize'] = nodeSize;
}
if (parentLabels != null) {
_json['parentLabels'] = parentLabels.toJson();
}
if (selectedNodeColor != null) {
_json['selectedNodeColor'] = selectedNodeColor.toJson();
}
if (selectedNodeColorStyle != null) {
_json['selectedNodeColorStyle'] = selectedNodeColorStyle.toJson();
}
if (tooltips != null) {
_json['tooltips'] = tooltips.toJson();
}
return _json;
}
}
/// The location an object is overlaid on top of a grid.
class OverlayPosition {
/// The cell the object is anchored to.
GridCoordinate anchorCell;
/// The height of the object, in pixels.
///
/// Defaults to 371.
core.int heightPixels;
/// The horizontal offset, in pixels, that the object is offset from the
/// anchor cell.
core.int offsetXPixels;
/// The vertical offset, in pixels, that the object is offset from the anchor
/// cell.
core.int offsetYPixels;
/// The width of the object, in pixels.
///
/// Defaults to 600.
core.int widthPixels;
OverlayPosition();
OverlayPosition.fromJson(core.Map _json) {
if (_json.containsKey('anchorCell')) {
anchorCell = GridCoordinate.fromJson(
_json['anchorCell'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('heightPixels')) {
heightPixels = _json['heightPixels'] as core.int;
}
if (_json.containsKey('offsetXPixels')) {
offsetXPixels = _json['offsetXPixels'] as core.int;
}
if (_json.containsKey('offsetYPixels')) {
offsetYPixels = _json['offsetYPixels'] as core.int;
}
if (_json.containsKey('widthPixels')) {
widthPixels = _json['widthPixels'] as core.int;
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (anchorCell != null) {
_json['anchorCell'] = anchorCell.toJson();
}
if (heightPixels != null) {
_json['heightPixels'] = heightPixels;
}
if (offsetXPixels != null) {
_json['offsetXPixels'] = offsetXPixels;
}
if (offsetYPixels != null) {
_json['offsetYPixels'] = offsetYPixels;
}
if (widthPixels != null) {
_json['widthPixels'] = widthPixels;
}
return _json;
}
}
/// The amount of padding around the cell, in pixels.
///
/// When updating padding, every field must be specified.
class Padding {
/// The bottom padding of the cell.
core.int bottom;
/// The left padding of the cell.
core.int left;
/// The right padding of the cell.
core.int right;
/// The top padding of the cell.
core.int top;
Padding();
Padding.fromJson(core.Map _json) {
if (_json.containsKey('bottom')) {
bottom = _json['bottom'] as core.int;
}
if (_json.containsKey('left')) {
left = _json['left'] as core.int;
}
if (_json.containsKey('right')) {
right = _json['right'] as core.int;
}
if (_json.containsKey('top')) {
top = _json['top'] as core.int;
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (bottom != null) {
_json['bottom'] = bottom;
}
if (left != null) {
_json['left'] = left;
}
if (right != null) {
_json['right'] = right;
}
if (top != null) {
_json['top'] = top;
}
return _json;
}
}
/// Inserts data into the spreadsheet starting at the specified coordinate.
class PasteDataRequest {
/// The coordinate at which the data should start being inserted.
GridCoordinate coordinate;
/// The data to insert.
core.String data;
/// The delimiter in the data.
core.String delimiter;
/// True if the data is HTML.
core.bool html;
/// How the data should be pasted.
/// Possible string values are:
/// - "PASTE_NORMAL" : Paste values, formulas, formats, and merges.
/// - "PASTE_VALUES" : Paste the values ONLY without formats, formulas, or
/// merges.
/// - "PASTE_FORMAT" : Paste the format and data validation only.
/// - "PASTE_NO_BORDERS" : Like PASTE_NORMAL but without borders.
/// - "PASTE_FORMULA" : Paste the formulas only.
/// - "PASTE_DATA_VALIDATION" : Paste the data validation only.
/// - "PASTE_CONDITIONAL_FORMATTING" : Paste the conditional formatting rules
/// only.
core.String type;
PasteDataRequest();
PasteDataRequest.fromJson(core.Map _json) {
if (_json.containsKey('coordinate')) {
coordinate = GridCoordinate.fromJson(
_json['coordinate'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('data')) {
data = _json['data'] as core.String;
}
if (_json.containsKey('delimiter')) {
delimiter = _json['delimiter'] as core.String;
}
if (_json.containsKey('html')) {
html = _json['html'] as core.bool;
}
if (_json.containsKey('type')) {
type = _json['type'] as core.String;
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (coordinate != null) {
_json['coordinate'] = coordinate.toJson();
}
if (data != null) {
_json['data'] = data;
}
if (delimiter != null) {
_json['delimiter'] = delimiter;
}
if (html != null) {
_json['html'] = html;
}
if (type != null) {
_json['type'] = type;
}
return _json;
}
}
/// A pie chart.
class PieChartSpec {
/// The data that covers the domain of the pie chart.
ChartData domain;
/// Where the legend of the pie chart should be drawn.
/// Possible string values are:
/// - "PIE_CHART_LEGEND_POSITION_UNSPECIFIED" : Default value, do not use.
/// - "BOTTOM_LEGEND" : The legend is rendered on the bottom of the chart.
/// - "LEFT_LEGEND" : The legend is rendered on the left of the chart.
/// - "RIGHT_LEGEND" : The legend is rendered on the right of the chart.
/// - "TOP_LEGEND" : The legend is rendered on the top of the chart.
/// - "NO_LEGEND" : No legend is rendered.
/// - "LABELED_LEGEND" : Each pie slice has a label attached to it.
core.String legendPosition;
/// The size of the hole in the pie chart.
core.double pieHole;
/// The data that covers the one and only series of the pie chart.
ChartData series;
/// True if the pie is three dimensional.
core.bool threeDimensional;
PieChartSpec();
PieChartSpec.fromJson(core.Map _json) {
if (_json.containsKey('domain')) {
domain = ChartData.fromJson(
_json['domain'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('legendPosition')) {
legendPosition = _json['legendPosition'] as core.String;
}
if (_json.containsKey('pieHole')) {
pieHole = (_json['pieHole'] as core.num).toDouble();
}
if (_json.containsKey('series')) {
series = ChartData.fromJson(
_json['series'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('threeDimensional')) {
threeDimensional = _json['threeDimensional'] as core.bool;
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (domain != null) {
_json['domain'] = domain.toJson();
}
if (legendPosition != null) {
_json['legendPosition'] = legendPosition;
}
if (pieHole != null) {
_json['pieHole'] = pieHole;
}
if (series != null) {
_json['series'] = series.toJson();
}
if (threeDimensional != null) {
_json['threeDimensional'] = threeDimensional;
}
return _json;
}
}
/// Criteria for showing/hiding rows in a pivot table.
class PivotFilterCriteria {
/// A condition that must be true for values to be shown.
///
/// (`visibleValues` does not override this -- even if a value is listed
/// there, it is still hidden if it does not meet the condition.) Condition
/// values that refer to ranges in A1-notation are evaluated relative to the
/// pivot table sheet. References are treated absolutely, so are not filled
/// down the pivot table. For example, a condition value of `=A1` on "Pivot
/// Table 1" is treated as `'Pivot Table 1'!$A$1`. The source data of the
/// pivot table can be referenced by column header name. For example, if the
/// source data has columns named "Revenue" and "Cost" and a condition is
/// applied to the "Revenue" column with type `NUMBER_GREATER` and value
/// `=Cost`, then only columns where "Revenue" > "Cost" are included.
BooleanCondition 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.
core.bool visibleByDefault;
/// Values that should be included.
///
/// Values not listed here are excluded.
core.List<core.String> visibleValues;
PivotFilterCriteria();
PivotFilterCriteria.fromJson(core.Map _json) {
if (_json.containsKey('condition')) {
condition = BooleanCondition.fromJson(
_json['condition'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('visibleByDefault')) {
visibleByDefault = _json['visibleByDefault'] as core.bool;
}
if (_json.containsKey('visibleValues')) {
visibleValues = (_json['visibleValues'] as core.List)
.map<core.String>((value) => value as core.String)
.toList();
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (condition != null) {
_json['condition'] = condition.toJson();
}
if (visibleByDefault != null) {
_json['visibleByDefault'] = visibleByDefault;
}
if (visibleValues != null) {
_json['visibleValues'] = visibleValues;
}
return _json;
}
}
/// The pivot table filter criteria associated with a specific source column
/// offset.
class PivotFilterSpec {
/// The column offset of the source range.
core.int columnOffsetIndex;
/// The reference to the data source column.
DataSourceColumnReference dataSourceColumnReference;
/// The criteria for the column.
PivotFilterCriteria filterCriteria;
PivotFilterSpec();
PivotFilterSpec.fromJson(core.Map _json) {
if (_json.containsKey('columnOffsetIndex')) {
columnOffsetIndex = _json['columnOffsetIndex'] as core.int;
}
if (_json.containsKey('dataSourceColumnReference')) {
dataSourceColumnReference = DataSourceColumnReference.fromJson(
_json['dataSourceColumnReference']
as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('filterCriteria')) {
filterCriteria = PivotFilterCriteria.fromJson(
_json['filterCriteria'] as core.Map<core.String, core.dynamic>);
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (columnOffsetIndex != null) {
_json['columnOffsetIndex'] = columnOffsetIndex;
}
if (dataSourceColumnReference != null) {
_json['dataSourceColumnReference'] = dataSourceColumnReference.toJson();
}
if (filterCriteria != null) {
_json['filterCriteria'] = filterCriteria.toJson();
}
return _json;
}
}
/// A single grouping (either row or column) in a pivot table.
class PivotGroup {
/// The reference to the data source column this grouping is based on.
DataSourceColumnReference dataSourceColumnReference;
/// The count limit on rows or columns to apply to this pivot group.
PivotGroupLimit groupLimit;
/// The group rule to apply to this row/column group.
PivotGroupRule groupRule;
/// 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 |
/// +--------------+---------+-------+
core.String 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 | +--------------+
core.bool repeatHeadings;
/// True if the pivot table should include the totals for this grouping.
core.bool showTotals;
/// The order the values in this group should be sorted.
/// Possible string values are:
/// - "SORT_ORDER_UNSPECIFIED" : Default value, do not use this.
/// - "ASCENDING" : Sort ascending.
/// - "DESCENDING" : Sort descending.
core.String sortOrder;
/// 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`.
core.int sourceColumnOffset;
/// The bucket of the opposite pivot group to sort by.
///
/// If not specified, sorting is alphabetical by this group's values.
PivotGroupSortValueBucket valueBucket;
/// Metadata about values in the grouping.
core.List<PivotGroupValueMetadata> valueMetadata;
PivotGroup();
PivotGroup.fromJson(core.Map _json) {
if (_json.containsKey('dataSourceColumnReference')) {
dataSourceColumnReference = DataSourceColumnReference.fromJson(
_json['dataSourceColumnReference']
as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('groupLimit')) {
groupLimit = PivotGroupLimit.fromJson(
_json['groupLimit'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('groupRule')) {
groupRule = PivotGroupRule.fromJson(
_json['groupRule'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('label')) {
label = _json['label'] as core.String;
}
if (_json.containsKey('repeatHeadings')) {
repeatHeadings = _json['repeatHeadings'] as core.bool;
}
if (_json.containsKey('showTotals')) {
showTotals = _json['showTotals'] as core.bool;
}
if (_json.containsKey('sortOrder')) {
sortOrder = _json['sortOrder'] as core.String;
}
if (_json.containsKey('sourceColumnOffset')) {
sourceColumnOffset = _json['sourceColumnOffset'] as core.int;
}
if (_json.containsKey('valueBucket')) {
valueBucket = PivotGroupSortValueBucket.fromJson(
_json['valueBucket'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('valueMetadata')) {
valueMetadata = (_json['valueMetadata'] as core.List)
.map<PivotGroupValueMetadata>((value) =>
PivotGroupValueMetadata.fromJson(
value as core.Map<core.String, core.dynamic>))
.toList();
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (dataSourceColumnReference != null) {
_json['dataSourceColumnReference'] = dataSourceColumnReference.toJson();
}
if (groupLimit != null) {
_json['groupLimit'] = groupLimit.toJson();
}
if (groupRule != null) {
_json['groupRule'] = groupRule.toJson();
}
if (label != null) {
_json['label'] = label;
}
if (repeatHeadings != null) {
_json['repeatHeadings'] = repeatHeadings;
}
if (showTotals != null) {
_json['showTotals'] = showTotals;
}
if (sortOrder != null) {
_json['sortOrder'] = sortOrder;
}
if (sourceColumnOffset != null) {
_json['sourceColumnOffset'] = sourceColumnOffset;
}
if (valueBucket != null) {
_json['valueBucket'] = valueBucket.toJson();
}
if (valueMetadata != null) {
_json['valueMetadata'] =
valueMetadata.map((value) => value.toJson()).toList();
}
return _json;
}
}
/// The count limit on rows or columns in the pivot group.
class PivotGroupLimit {
/// 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.
core.int applyOrder;
/// The count limit.
core.int countLimit;
PivotGroupLimit();
PivotGroupLimit.fromJson(core.Map _json) {
if (_json.containsKey('applyOrder')) {
applyOrder = _json['applyOrder'] as core.int;
}
if (_json.containsKey('countLimit')) {
countLimit = _json['countLimit'] as core.int;
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (applyOrder != null) {
_json['applyOrder'] = applyOrder;
}
if (countLimit != null) {
_json['countLimit'] = countLimit;
}
return _json;
}
}
/// 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 {
/// A DateTimeRule.
DateTimeRule dateTimeRule;
/// A HistogramRule.
HistogramRule histogramRule;
/// A ManualRule.
ManualRule manualRule;
PivotGroupRule();
PivotGroupRule.fromJson(core.Map _json) {
if (_json.containsKey('dateTimeRule')) {
dateTimeRule = DateTimeRule.fromJson(
_json['dateTimeRule'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('histogramRule')) {
histogramRule = HistogramRule.fromJson(
_json['histogramRule'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('manualRule')) {
manualRule = ManualRule.fromJson(
_json['manualRule'] as core.Map<core.String, core.dynamic>);
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (dateTimeRule != null) {
_json['dateTimeRule'] = dateTimeRule.toJson();
}
if (histogramRule != null) {
_json['histogramRule'] = histogramRule.toJson();
}
if (manualRule != null) {
_json['manualRule'] = manualRule.toJson();
}
return _json;
}
}
/// Information about which values in a pivot group should be used for sorting.
class PivotGroupSortValueBucket {
/// 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.
core.List<ExtendedValue> buckets;
/// The offset in the PivotTable.values list which the values in this grouping
/// should be sorted by.
core.int valuesIndex;
PivotGroupSortValueBucket();
PivotGroupSortValueBucket.fromJson(core.Map _json) {
if (_json.containsKey('buckets')) {
buckets = (_json['buckets'] as core.List)
.map<ExtendedValue>((value) => ExtendedValue.fromJson(
value as core.Map<core.String, core.dynamic>))
.toList();
}
if (_json.containsKey('valuesIndex')) {
valuesIndex = _json['valuesIndex'] as core.int;
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (buckets != null) {
_json['buckets'] = buckets.map((value) => value.toJson()).toList();
}
if (valuesIndex != null) {
_json['valuesIndex'] = valuesIndex;
}
return _json;
}
}
/// Metadata about a value in a pivot grouping.
class PivotGroupValueMetadata {
/// True if the data corresponding to the value is collapsed.
core.bool collapsed;
/// The calculated value the metadata corresponds to.
///
/// (Note that formulaValue is not valid, because the values will be
/// calculated.)
ExtendedValue value;
PivotGroupValueMetadata();
PivotGroupValueMetadata.fromJson(core.Map _json) {
if (_json.containsKey('collapsed')) {
collapsed = _json['collapsed'] as core.bool;
}
if (_json.containsKey('value')) {
value = ExtendedValue.fromJson(
_json['value'] as core.Map<core.String, core.dynamic>);
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (collapsed != null) {
_json['collapsed'] = collapsed;
}
if (value != null) {
_json['value'] = value.toJson();
}
return _json;
}
}
/// A pivot table.
class PivotTable {
/// Each column grouping in the pivot table.
core.List<PivotGroup> 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.
core.Map<core.String, PivotFilterCriteria> criteria;
/// The data execution status for data source pivot tables.
///
/// Output only.
DataExecutionStatus dataExecutionStatus;
/// The ID of the data source the pivot table is reading data from.
core.String dataSourceId;
/// 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.
core.List<PivotFilterSpec> filterSpecs;
/// Each row grouping in the pivot table.
core.List<PivotGroup> rows;
/// The range the pivot table is reading data from.
GridRange source;
/// Whether values should be listed horizontally (as columns) or vertically
/// (as rows).
/// Possible string values are:
/// - "HORIZONTAL" : Values are laid out horizontally (as columns).
/// - "VERTICAL" : Values are laid out vertically (as rows).
core.String valueLayout;
/// A list of values to include in the pivot table.
core.List<PivotValue> values;
PivotTable();
PivotTable.fromJson(core.Map _json) {
if (_json.containsKey('columns')) {
columns = (_json['columns'] as core.List)
.map<PivotGroup>((value) =>
PivotGroup.fromJson(value as core.Map<core.String, core.dynamic>))
.toList();
}
if (_json.containsKey('criteria')) {
criteria =
(_json['criteria'] as core.Map).cast<core.String, core.Map>().map(
(key, item) => core.MapEntry(
key,
PivotFilterCriteria.fromJson(
item as core.Map<core.String, core.dynamic>),
),
);
}
if (_json.containsKey('dataExecutionStatus')) {
dataExecutionStatus = DataExecutionStatus.fromJson(
_json['dataExecutionStatus'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('dataSourceId')) {
dataSourceId = _json['dataSourceId'] as core.String;
}
if (_json.containsKey('filterSpecs')) {
filterSpecs = (_json['filterSpecs'] as core.List)
.map<PivotFilterSpec>((value) => PivotFilterSpec.fromJson(
value as core.Map<core.String, core.dynamic>))
.toList();
}
if (_json.containsKey('rows')) {
rows = (_json['rows'] as core.List)
.map<PivotGroup>((value) =>
PivotGroup.fromJson(value as core.Map<core.String, core.dynamic>))
.toList();
}
if (_json.containsKey('source')) {
source = GridRange.fromJson(
_json['source'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('valueLayout')) {
valueLayout = _json['valueLayout'] as core.String;
}
if (_json.containsKey('values')) {
values = (_json['values'] as core.List)
.map<PivotValue>((value) =>
PivotValue.fromJson(value as core.Map<core.String, core.dynamic>))
.toList();
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (columns != null) {
_json['columns'] = columns.map((value) => value.toJson()).toList();
}
if (criteria != null) {
_json['criteria'] =
criteria.map((key, item) => core.MapEntry(key, item.toJson()));
}
if (dataExecutionStatus != null) {
_json['dataExecutionStatus'] = dataExecutionStatus.toJson();
}
if (dataSourceId != null) {
_json['dataSourceId'] = dataSourceId;
}
if (filterSpecs != null) {
_json['filterSpecs'] =
filterSpecs.map((value) => value.toJson()).toList();
}
if (rows != null) {
_json['rows'] = rows.map((value) => value.toJson()).toList();
}
if (source != null) {
_json['source'] = source.toJson();
}
if (valueLayout != null) {
_json['valueLayout'] = valueLayout;
}
if (values != null) {
_json['values'] = values.map((value) => value.toJson()).toList();
}
return _json;
}
}
/// The definition of how a value in a pivot table should be calculated.
class PivotValue {
/// 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.
/// Possible string values are:
/// - "PIVOT_VALUE_CALCULATED_DISPLAY_TYPE_UNSPECIFIED" : Default value, do
/// not use.
/// - "PERCENT_OF_ROW_TOTAL" : Shows the pivot values as percentage of the row
/// total values.
/// - "PERCENT_OF_COLUMN_TOTAL" : Shows the pivot values as percentage of the
/// column total values.
/// - "PERCENT_OF_GRAND_TOTAL" : Shows the pivot values as percentage of the
/// grand total values.
core.String calculatedDisplayType;
/// The reference to the data source column that this value reads from.
DataSourceColumnReference dataSourceColumnReference;
/// A custom formula to calculate the value.
///
/// The formula must start with an `=` character.
core.String formula;
/// A name to use for the value.
core.String 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`.
core.int sourceColumnOffset;
/// 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.
/// Possible string values are:
/// - "PIVOT_STANDARD_VALUE_FUNCTION_UNSPECIFIED" : The default, do not use.
/// - "SUM" : Corresponds to the `SUM` function.
/// - "COUNTA" : Corresponds to the `COUNTA` function.
/// - "COUNT" : Corresponds to the `COUNT` function.
/// - "COUNTUNIQUE" : Corresponds to the `COUNTUNIQUE` function.
/// - "AVERAGE" : Corresponds to the `AVERAGE` function.
/// - "MAX" : Corresponds to the `MAX` function.
/// - "MIN" : Corresponds to the `MIN` function.
/// - "MEDIAN" : Corresponds to the `MEDIAN` function.
/// - "PRODUCT" : Corresponds to the `PRODUCT` function.
/// - "STDEV" : Corresponds to the `STDEV` function.
/// - "STDEVP" : Corresponds to the `STDEVP` function.
/// - "VAR" : Corresponds to the `VAR` function.
/// - "VARP" : Corresponds to the `VARP` function.
/// - "CUSTOM" : Indicates the formula should be used as-is. Only valid if
/// PivotValue.formula was set.
core.String summarizeFunction;
PivotValue();
PivotValue.fromJson(core.Map _json) {
if (_json.containsKey('calculatedDisplayType')) {
calculatedDisplayType = _json['calculatedDisplayType'] as core.String;
}
if (_json.containsKey('dataSourceColumnReference')) {
dataSourceColumnReference = DataSourceColumnReference.fromJson(
_json['dataSourceColumnReference']
as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('formula')) {
formula = _json['formula'] as core.String;
}
if (_json.containsKey('name')) {
name = _json['name'] as core.String;
}
if (_json.containsKey('sourceColumnOffset')) {
sourceColumnOffset = _json['sourceColumnOffset'] as core.int;
}
if (_json.containsKey('summarizeFunction')) {
summarizeFunction = _json['summarizeFunction'] as core.String;
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (calculatedDisplayType != null) {
_json['calculatedDisplayType'] = calculatedDisplayType;
}
if (dataSourceColumnReference != null) {
_json['dataSourceColumnReference'] = dataSourceColumnReference.toJson();
}
if (formula != null) {
_json['formula'] = formula;
}
if (name != null) {
_json['name'] = name;
}
if (sourceColumnOffset != null) {
_json['sourceColumnOffset'] = sourceColumnOffset;
}
if (summarizeFunction != null) {
_json['summarizeFunction'] = summarizeFunction;
}
return _json;
}
}
/// The style of a point on the chart.
class PointStyle {
/// The point shape.
///
/// If empty or unspecified, a default shape is used.
/// Possible string values are:
/// - "POINT_SHAPE_UNSPECIFIED" : Default value.
/// - "CIRCLE" : A circle shape.
/// - "DIAMOND" : A diamond shape.
/// - "HEXAGON" : A hexagon shape.
/// - "PENTAGON" : A pentagon shape.
/// - "SQUARE" : A square shape.
/// - "STAR" : A star shape.
/// - "TRIANGLE" : A triangle shape.
/// - "X_MARK" : An x-mark shape.
core.String shape;
/// The point size.
///
/// If empty, a default size is used.
core.double size;
PointStyle();
PointStyle.fromJson(core.Map _json) {
if (_json.containsKey('shape')) {
shape = _json['shape'] as core.String;
}
if (_json.containsKey('size')) {
size = (_json['size'] as core.num).toDouble();
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (shape != null) {
_json['shape'] = shape;
}
if (size != null) {
_json['size'] = size;
}
return _json;
}
}
/// A protected range.
class ProtectedRange {
/// The description of this protected range.
core.String description;
/// The users and groups with edit access to the protected range.
///
/// This field is only visible to users with edit access to the protected
/// range and the document. Editors are not supported with warning_only
/// protection.
Editors 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.
core.String namedRangeId;
/// The ID of the protected range.
///
/// This field is read-only.
core.int protectedRangeId;
/// The range that is being protected.
///
/// The range may be fully unbounded, in which case this is considered a
/// protected sheet. When writing, only one of range or named_range_id may be
/// set.
GridRange range;
/// True if the user who requested this protected range can edit the protected
/// area.
///
/// This field is read-only.
core.bool requestingUserCanEdit;
/// The list of unprotected ranges within a protected sheet.
///
/// Unprotected ranges are only supported on protected sheets.
core.List<GridRange> unprotectedRanges;
/// 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.
core.bool warningOnly;
ProtectedRange();
ProtectedRange.fromJson(core.Map _json) {
if (_json.containsKey('description')) {
description = _json['description'] as core.String;
}
if (_json.containsKey('editors')) {
editors = Editors.fromJson(
_json['editors'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('namedRangeId')) {
namedRangeId = _json['namedRangeId'] as core.String;
}
if (_json.containsKey('protectedRangeId')) {
protectedRangeId = _json['protectedRangeId'] as core.int;
}
if (_json.containsKey('range')) {
range = GridRange.fromJson(
_json['range'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('requestingUserCanEdit')) {
requestingUserCanEdit = _json['requestingUserCanEdit'] as core.bool;
}
if (_json.containsKey('unprotectedRanges')) {
unprotectedRanges = (_json['unprotectedRanges'] as core.List)
.map<GridRange>((value) =>
GridRange.fromJson(value as core.Map<core.String, core.dynamic>))
.toList();
}
if (_json.containsKey('warningOnly')) {
warningOnly = _json['warningOnly'] as core.bool;
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (description != null) {
_json['description'] = description;
}
if (editors != null) {
_json['editors'] = editors.toJson();
}
if (namedRangeId != null) {
_json['namedRangeId'] = namedRangeId;
}
if (protectedRangeId != null) {
_json['protectedRangeId'] = protectedRangeId;
}
if (range != null) {
_json['range'] = range.toJson();
}
if (requestingUserCanEdit != null) {
_json['requestingUserCanEdit'] = requestingUserCanEdit;
}
if (unprotectedRanges != null) {
_json['unprotectedRanges'] =
unprotectedRanges.map((value) => value.toJson()).toList();
}
if (warningOnly != null) {
_json['warningOnly'] = warningOnly;
}
return _json;
}
}
/// Randomizes the order of the rows in a range.
class RandomizeRangeRequest {
/// The range to randomize.
GridRange range;
RandomizeRangeRequest();
RandomizeRangeRequest.fromJson(core.Map _json) {
if (_json.containsKey('range')) {
range = GridRange.fromJson(
_json['range'] as core.Map<core.String, core.dynamic>);
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (range != null) {
_json['range'] = range.toJson();
}
return _json;
}
}
/// The execution status of refreshing one data source object.
class RefreshDataSourceObjectExecutionStatus {
/// The data execution status.
DataExecutionStatus dataExecutionStatus;
/// Reference to a data source object being refreshed.
DataSourceObjectReference reference;
RefreshDataSourceObjectExecutionStatus();
RefreshDataSourceObjectExecutionStatus.fromJson(core.Map _json) {
if (_json.containsKey('dataExecutionStatus')) {
dataExecutionStatus = DataExecutionStatus.fromJson(
_json['dataExecutionStatus'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('reference')) {
reference = DataSourceObjectReference.fromJson(
_json['reference'] as core.Map<core.String, core.dynamic>);
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (dataExecutionStatus != null) {
_json['dataExecutionStatus'] = dataExecutionStatus.toJson();
}
if (reference != null) {
_json['reference'] = reference.toJson();
}
return _json;
}
}
/// 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 {
/// Reference to a DataSource.
///
/// If specified, refreshes all associated data source objects for the data
/// source.
core.String dataSourceId;
/// 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.
core.bool force;
/// Refreshes all existing data source objects in the spreadsheet.
core.bool isAll;
/// References to data source objects to refresh.
DataSourceObjectReferences references;
RefreshDataSourceRequest();
RefreshDataSourceRequest.fromJson(core.Map _json) {
if (_json.containsKey('dataSourceId')) {
dataSourceId = _json['dataSourceId'] as core.String;
}
if (_json.containsKey('force')) {
force = _json['force'] as core.bool;
}
if (_json.containsKey('isAll')) {
isAll = _json['isAll'] as core.bool;
}
if (_json.containsKey('references')) {
references = DataSourceObjectReferences.fromJson(
_json['references'] as core.Map<core.String, core.dynamic>);
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (dataSourceId != null) {
_json['dataSourceId'] = dataSourceId;
}
if (force != null) {
_json['force'] = force;
}
if (isAll != null) {
_json['isAll'] = isAll;
}
if (references != null) {
_json['references'] = references.toJson();
}
return _json;
}
}
/// The response from refreshing one or multiple data source objects.
class RefreshDataSourceResponse {
/// 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.
core.List<RefreshDataSourceObjectExecutionStatus> statuses;
RefreshDataSourceResponse();
RefreshDataSourceResponse.fromJson(core.Map _json) {
if (_json.containsKey('statuses')) {
statuses = (_json['statuses'] as core.List)
.map<RefreshDataSourceObjectExecutionStatus>((value) =>
RefreshDataSourceObjectExecutionStatus.fromJson(
value as core.Map<core.String, core.dynamic>))
.toList();
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (statuses != null) {
_json['statuses'] = statuses.map((value) => value.toJson()).toList();
}
return _json;
}
}
/// 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 {
/// The data to write.
CellData 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.
core.String fields;
/// The range to repeat the cell in.
GridRange range;
RepeatCellRequest();
RepeatCellRequest.fromJson(core.Map _json) {
if (_json.containsKey('cell')) {
cell = CellData.fromJson(
_json['cell'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('fields')) {
fields = _json['fields'] as core.String;
}
if (_json.containsKey('range')) {
range = GridRange.fromJson(
_json['range'] as core.Map<core.String, core.dynamic>);
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (cell != null) {
_json['cell'] = cell.toJson();
}
if (fields != null) {
_json['fields'] = fields;
}
if (range != null) {
_json['range'] = range.toJson();
}
return _json;
}
}
/// A single kind of update to apply to a spreadsheet.
class Request {
/// Adds a new banded range
AddBandingRequest addBanding;
/// Adds a chart.
AddChartRequest addChart;
/// Adds a new conditional format rule.
AddConditionalFormatRuleRequest addConditionalFormatRule;
/// Adds a data source.
AddDataSourceRequest addDataSource;
/// Creates a group over the specified range.
AddDimensionGroupRequest addDimensionGroup;
/// Adds a filter view.
AddFilterViewRequest addFilterView;
/// Adds a named range.
AddNamedRangeRequest addNamedRange;
/// Adds a protected range.
AddProtectedRangeRequest addProtectedRange;
/// Adds a sheet.
AddSheetRequest addSheet;
/// Adds a slicer.
AddSlicerRequest addSlicer;
/// Appends cells after the last row with data in a sheet.
AppendCellsRequest appendCells;
/// Appends dimensions to the end of a sheet.
AppendDimensionRequest appendDimension;
/// Automatically fills in more data based on existing data.
AutoFillRequest autoFill;
/// Automatically resizes one or more dimensions based on the contents of the
/// cells in that dimension.
AutoResizeDimensionsRequest autoResizeDimensions;
/// Clears the basic filter on a sheet.
ClearBasicFilterRequest clearBasicFilter;
/// Copies data from one area and pastes it to another.
CopyPasteRequest copyPaste;
/// Creates new developer metadata
CreateDeveloperMetadataRequest createDeveloperMetadata;
/// Cuts data from one area and pastes it to another.
CutPasteRequest cutPaste;
/// Removes a banded range
DeleteBandingRequest deleteBanding;
/// Deletes an existing conditional format rule.
DeleteConditionalFormatRuleRequest deleteConditionalFormatRule;
/// Deletes a data source.
DeleteDataSourceRequest deleteDataSource;
/// Deletes developer metadata
DeleteDeveloperMetadataRequest deleteDeveloperMetadata;
/// Deletes rows or columns in a sheet.
DeleteDimensionRequest deleteDimension;
/// Deletes a group over the specified range.
DeleteDimensionGroupRequest deleteDimensionGroup;
/// Removes rows containing duplicate values in specified columns of a cell
/// range.
DeleteDuplicatesRequest deleteDuplicates;
/// Deletes an embedded object (e.g, chart, image) in a sheet.
DeleteEmbeddedObjectRequest deleteEmbeddedObject;
/// Deletes a filter view from a sheet.
DeleteFilterViewRequest deleteFilterView;
/// Deletes a named range.
DeleteNamedRangeRequest deleteNamedRange;
/// Deletes a protected range.
DeleteProtectedRangeRequest deleteProtectedRange;
/// Deletes a range of cells from a sheet, shifting the remaining cells.
DeleteRangeRequest deleteRange;
/// Deletes a sheet.
DeleteSheetRequest deleteSheet;
/// Duplicates a filter view.
DuplicateFilterViewRequest duplicateFilterView;
/// Duplicates a sheet.
DuplicateSheetRequest duplicateSheet;
/// Finds and replaces occurrences of some text with other text.
FindReplaceRequest findReplace;
/// Inserts new rows or columns in a sheet.
InsertDimensionRequest insertDimension;
/// Inserts new cells in a sheet, shifting the existing cells.
InsertRangeRequest insertRange;
/// Merges cells together.
MergeCellsRequest mergeCells;
/// Moves rows or columns to another location in a sheet.
MoveDimensionRequest moveDimension;
/// Pastes data (HTML or delimited) into a sheet.
PasteDataRequest pasteData;
/// Randomizes the order of the rows in a range.
RandomizeRangeRequest randomizeRange;
/// Refreshs one or multiple data sources and associated dbobjects.
RefreshDataSourceRequest refreshDataSource;
/// Repeats a single cell across a range.
RepeatCellRequest repeatCell;
/// Sets the basic filter on a sheet.
SetBasicFilterRequest setBasicFilter;
/// Sets data validation for one or more cells.
SetDataValidationRequest setDataValidation;
/// Sorts data in a range.
SortRangeRequest sortRange;
/// Converts a column of text into many columns of text.
TextToColumnsRequest textToColumns;
/// Trims cells of whitespace (such as spaces, tabs, or new lines).
TrimWhitespaceRequest trimWhitespace;
/// Unmerges merged cells.
UnmergeCellsRequest unmergeCells;
/// Updates a banded range
UpdateBandingRequest updateBanding;
/// Updates the borders in a range of cells.
UpdateBordersRequest updateBorders;
/// Updates many cells at once.
UpdateCellsRequest updateCells;
/// Updates a chart's specifications.
UpdateChartSpecRequest updateChartSpec;
/// Updates an existing conditional format rule.
UpdateConditionalFormatRuleRequest updateConditionalFormatRule;
/// Updates a data source.
UpdateDataSourceRequest updateDataSource;
/// Updates an existing developer metadata entry
UpdateDeveloperMetadataRequest updateDeveloperMetadata;
/// Updates the state of the specified group.
UpdateDimensionGroupRequest updateDimensionGroup;
/// Updates dimensions' properties.
UpdateDimensionPropertiesRequest updateDimensionProperties;
/// Updates an embedded object's border.
UpdateEmbeddedObjectBorderRequest updateEmbeddedObjectBorder;
/// Updates an embedded object's (e.g. chart, image) position.
UpdateEmbeddedObjectPositionRequest updateEmbeddedObjectPosition;
/// Updates the properties of a filter view.
UpdateFilterViewRequest updateFilterView;
/// Updates a named range.
UpdateNamedRangeRequest updateNamedRange;
/// Updates a protected range.
UpdateProtectedRangeRequest updateProtectedRange;
/// Updates a sheet's properties.
UpdateSheetPropertiesRequest updateSheetProperties;
/// Updates a slicer's specifications.
UpdateSlicerSpecRequest updateSlicerSpec;
/// Updates the spreadsheet's properties.
UpdateSpreadsheetPropertiesRequest updateSpreadsheetProperties;
Request();
Request.fromJson(core.Map _json) {
if (_json.containsKey('addBanding')) {
addBanding = AddBandingRequest.fromJson(
_json['addBanding'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('addChart')) {
addChart = AddChartRequest.fromJson(
_json['addChart'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('addConditionalFormatRule')) {
addConditionalFormatRule = AddConditionalFormatRuleRequest.fromJson(
_json['addConditionalFormatRule']
as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('addDataSource')) {
addDataSource = AddDataSourceRequest.fromJson(
_json['addDataSource'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('addDimensionGroup')) {
addDimensionGroup = AddDimensionGroupRequest.fromJson(
_json['addDimensionGroup'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('addFilterView')) {
addFilterView = AddFilterViewRequest.fromJson(
_json['addFilterView'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('addNamedRange')) {
addNamedRange = AddNamedRangeRequest.fromJson(
_json['addNamedRange'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('addProtectedRange')) {
addProtectedRange = AddProtectedRangeRequest.fromJson(
_json['addProtectedRange'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('addSheet')) {
addSheet = AddSheetRequest.fromJson(
_json['addSheet'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('addSlicer')) {
addSlicer = AddSlicerRequest.fromJson(
_json['addSlicer'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('appendCells')) {
appendCells = AppendCellsRequest.fromJson(
_json['appendCells'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('appendDimension')) {
appendDimension = AppendDimensionRequest.fromJson(
_json['appendDimension'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('autoFill')) {
autoFill = AutoFillRequest.fromJson(
_json['autoFill'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('autoResizeDimensions')) {
autoResizeDimensions = AutoResizeDimensionsRequest.fromJson(
_json['autoResizeDimensions'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('clearBasicFilter')) {
clearBasicFilter = ClearBasicFilterRequest.fromJson(
_json['clearBasicFilter'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('copyPaste')) {
copyPaste = CopyPasteRequest.fromJson(
_json['copyPaste'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('createDeveloperMetadata')) {
createDeveloperMetadata = CreateDeveloperMetadataRequest.fromJson(
_json['createDeveloperMetadata']
as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('cutPaste')) {
cutPaste = CutPasteRequest.fromJson(
_json['cutPaste'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('deleteBanding')) {
deleteBanding = DeleteBandingRequest.fromJson(
_json['deleteBanding'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('deleteConditionalFormatRule')) {
deleteConditionalFormatRule = DeleteConditionalFormatRuleRequest.fromJson(
_json['deleteConditionalFormatRule']
as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('deleteDataSource')) {
deleteDataSource = DeleteDataSourceRequest.fromJson(
_json['deleteDataSource'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('deleteDeveloperMetadata')) {
deleteDeveloperMetadata = DeleteDeveloperMetadataRequest.fromJson(
_json['deleteDeveloperMetadata']
as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('deleteDimension')) {
deleteDimension = DeleteDimensionRequest.fromJson(
_json['deleteDimension'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('deleteDimensionGroup')) {
deleteDimensionGroup = DeleteDimensionGroupRequest.fromJson(
_json['deleteDimensionGroup'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('deleteDuplicates')) {
deleteDuplicates = DeleteDuplicatesRequest.fromJson(
_json['deleteDuplicates'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('deleteEmbeddedObject')) {
deleteEmbeddedObject = DeleteEmbeddedObjectRequest.fromJson(
_json['deleteEmbeddedObject'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('deleteFilterView')) {
deleteFilterView = DeleteFilterViewRequest.fromJson(
_json['deleteFilterView'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('deleteNamedRange')) {
deleteNamedRange = DeleteNamedRangeRequest.fromJson(
_json['deleteNamedRange'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('deleteProtectedRange')) {
deleteProtectedRange = DeleteProtectedRangeRequest.fromJson(
_json['deleteProtectedRange'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('deleteRange')) {
deleteRange = DeleteRangeRequest.fromJson(
_json['deleteRange'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('deleteSheet')) {
deleteSheet = DeleteSheetRequest.fromJson(
_json['deleteSheet'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('duplicateFilterView')) {
duplicateFilterView = DuplicateFilterViewRequest.fromJson(
_json['duplicateFilterView'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('duplicateSheet')) {
duplicateSheet = DuplicateSheetRequest.fromJson(
_json['duplicateSheet'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('findReplace')) {
findReplace = FindReplaceRequest.fromJson(
_json['findReplace'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('insertDimension')) {
insertDimension = InsertDimensionRequest.fromJson(
_json['insertDimension'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('insertRange')) {
insertRange = InsertRangeRequest.fromJson(
_json['insertRange'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('mergeCells')) {
mergeCells = MergeCellsRequest.fromJson(
_json['mergeCells'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('moveDimension')) {
moveDimension = MoveDimensionRequest.fromJson(
_json['moveDimension'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('pasteData')) {
pasteData = PasteDataRequest.fromJson(
_json['pasteData'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('randomizeRange')) {
randomizeRange = RandomizeRangeRequest.fromJson(
_json['randomizeRange'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('refreshDataSource')) {
refreshDataSource = RefreshDataSourceRequest.fromJson(
_json['refreshDataSource'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('repeatCell')) {
repeatCell = RepeatCellRequest.fromJson(
_json['repeatCell'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('setBasicFilter')) {
setBasicFilter = SetBasicFilterRequest.fromJson(
_json['setBasicFilter'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('setDataValidation')) {
setDataValidation = SetDataValidationRequest.fromJson(
_json['setDataValidation'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('sortRange')) {
sortRange = SortRangeRequest.fromJson(
_json['sortRange'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('textToColumns')) {
textToColumns = TextToColumnsRequest.fromJson(
_json['textToColumns'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('trimWhitespace')) {
trimWhitespace = TrimWhitespaceRequest.fromJson(
_json['trimWhitespace'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('unmergeCells')) {
unmergeCells = UnmergeCellsRequest.fromJson(
_json['unmergeCells'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('updateBanding')) {
updateBanding = UpdateBandingRequest.fromJson(
_json['updateBanding'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('updateBorders')) {
updateBorders = UpdateBordersRequest.fromJson(
_json['updateBorders'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('updateCells')) {
updateCells = UpdateCellsRequest.fromJson(
_json['updateCells'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('updateChartSpec')) {
updateChartSpec = UpdateChartSpecRequest.fromJson(
_json['updateChartSpec'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('updateConditionalFormatRule')) {
updateConditionalFormatRule = UpdateConditionalFormatRuleRequest.fromJson(
_json['updateConditionalFormatRule']
as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('updateDataSource')) {
updateDataSource = UpdateDataSourceRequest.fromJson(
_json['updateDataSource'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('updateDeveloperMetadata')) {
updateDeveloperMetadata = UpdateDeveloperMetadataRequest.fromJson(
_json['updateDeveloperMetadata']
as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('updateDimensionGroup')) {
updateDimensionGroup = UpdateDimensionGroupRequest.fromJson(
_json['updateDimensionGroup'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('updateDimensionProperties')) {
updateDimensionProperties = UpdateDimensionPropertiesRequest.fromJson(
_json['updateDimensionProperties']
as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('updateEmbeddedObjectBorder')) {
updateEmbeddedObjectBorder = UpdateEmbeddedObjectBorderRequest.fromJson(
_json['updateEmbeddedObjectBorder']
as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('updateEmbeddedObjectPosition')) {
updateEmbeddedObjectPosition =
UpdateEmbeddedObjectPositionRequest.fromJson(
_json['updateEmbeddedObjectPosition']
as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('updateFilterView')) {
updateFilterView = UpdateFilterViewRequest.fromJson(
_json['updateFilterView'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('updateNamedRange')) {
updateNamedRange = UpdateNamedRangeRequest.fromJson(
_json['updateNamedRange'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('updateProtectedRange')) {
updateProtectedRange = UpdateProtectedRangeRequest.fromJson(
_json['updateProtectedRange'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('updateSheetProperties')) {
updateSheetProperties = UpdateSheetPropertiesRequest.fromJson(
_json['updateSheetProperties']
as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('updateSlicerSpec')) {
updateSlicerSpec = UpdateSlicerSpecRequest.fromJson(
_json['updateSlicerSpec'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('updateSpreadsheetProperties')) {
updateSpreadsheetProperties = UpdateSpreadsheetPropertiesRequest.fromJson(
_json['updateSpreadsheetProperties']
as core.Map<core.String, core.dynamic>);
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (addBanding != null) {
_json['addBanding'] = addBanding.toJson();
}
if (addChart != null) {
_json['addChart'] = addChart.toJson();
}
if (addConditionalFormatRule != null) {
_json['addConditionalFormatRule'] = addConditionalFormatRule.toJson();
}
if (addDataSource != null) {
_json['addDataSource'] = addDataSource.toJson();
}
if (addDimensionGroup != null) {
_json['addDimensionGroup'] = addDimensionGroup.toJson();
}
if (addFilterView != null) {
_json['addFilterView'] = addFilterView.toJson();
}
if (addNamedRange != null) {
_json['addNamedRange'] = addNamedRange.toJson();
}
if (addProtectedRange != null) {
_json['addProtectedRange'] = addProtectedRange.toJson();
}
if (addSheet != null) {
_json['addSheet'] = addSheet.toJson();
}
if (addSlicer != null) {
_json['addSlicer'] = addSlicer.toJson();
}
if (appendCells != null) {
_json['appendCells'] = appendCells.toJson();
}
if (appendDimension != null) {
_json['appendDimension'] = appendDimension.toJson();
}
if (autoFill != null) {
_json['autoFill'] = autoFill.toJson();
}
if (autoResizeDimensions != null) {
_json['autoResizeDimensions'] = autoResizeDimensions.toJson();
}
if (clearBasicFilter != null) {
_json['clearBasicFilter'] = clearBasicFilter.toJson();
}
if (copyPaste != null) {
_json['copyPaste'] = copyPaste.toJson();
}
if (createDeveloperMetadata != null) {
_json['createDeveloperMetadata'] = createDeveloperMetadata.toJson();
}
if (cutPaste != null) {
_json['cutPaste'] = cutPaste.toJson();
}
if (deleteBanding != null) {
_json['deleteBanding'] = deleteBanding.toJson();
}
if (deleteConditionalFormatRule != null) {
_json['deleteConditionalFormatRule'] =
deleteConditionalFormatRule.toJson();
}
if (deleteDataSource != null) {
_json['deleteDataSource'] = deleteDataSource.toJson();
}
if (deleteDeveloperMetadata != null) {
_json['deleteDeveloperMetadata'] = deleteDeveloperMetadata.toJson();
}
if (deleteDimension != null) {
_json['deleteDimension'] = deleteDimension.toJson();
}
if (deleteDimensionGroup != null) {
_json['deleteDimensionGroup'] = deleteDimensionGroup.toJson();
}
if (deleteDuplicates != null) {
_json['deleteDuplicates'] = deleteDuplicates.toJson();
}
if (deleteEmbeddedObject != null) {
_json['deleteEmbeddedObject'] = deleteEmbeddedObject.toJson();
}
if (deleteFilterView != null) {
_json['deleteFilterView'] = deleteFilterView.toJson();
}
if (deleteNamedRange != null) {
_json['deleteNamedRange'] = deleteNamedRange.toJson();
}
if (deleteProtectedRange != null) {
_json['deleteProtectedRange'] = deleteProtectedRange.toJson();
}
if (deleteRange != null) {
_json['deleteRange'] = deleteRange.toJson();
}
if (deleteSheet != null) {
_json['deleteSheet'] = deleteSheet.toJson();
}
if (duplicateFilterView != null) {
_json['duplicateFilterView'] = duplicateFilterView.toJson();
}
if (duplicateSheet != null) {
_json['duplicateSheet'] = duplicateSheet.toJson();
}
if (findReplace != null) {
_json['findReplace'] = findReplace.toJson();
}
if (insertDimension != null) {
_json['insertDimension'] = insertDimension.toJson();
}
if (insertRange != null) {
_json['insertRange'] = insertRange.toJson();
}
if (mergeCells != null) {
_json['mergeCells'] = mergeCells.toJson();
}
if (moveDimension != null) {
_json['moveDimension'] = moveDimension.toJson();
}
if (pasteData != null) {
_json['pasteData'] = pasteData.toJson();
}
if (randomizeRange != null) {
_json['randomizeRange'] = randomizeRange.toJson();
}
if (refreshDataSource != null) {
_json['refreshDataSource'] = refreshDataSource.toJson();
}
if (repeatCell != null) {
_json['repeatCell'] = repeatCell.toJson();
}
if (setBasicFilter != null) {
_json['setBasicFilter'] = setBasicFilter.toJson();
}
if (setDataValidation != null) {
_json['setDataValidation'] = setDataValidation.toJson();
}
if (sortRange != null) {
_json['sortRange'] = sortRange.toJson();
}
if (textToColumns != null) {
_json['textToColumns'] = textToColumns.toJson();
}
if (trimWhitespace != null) {
_json['trimWhitespace'] = trimWhitespace.toJson();
}
if (unmergeCells != null) {
_json['unmergeCells'] = unmergeCells.toJson();
}
if (updateBanding != null) {
_json['updateBanding'] = updateBanding.toJson();
}
if (updateBorders != null) {
_json['updateBorders'] = updateBorders.toJson();
}
if (updateCells != null) {
_json['updateCells'] = updateCells.toJson();
}
if (updateChartSpec != null) {
_json['updateChartSpec'] = updateChartSpec.toJson();
}
if (updateConditionalFormatRule != null) {
_json['updateConditionalFormatRule'] =
updateConditionalFormatRule.toJson();
}
if (updateDataSource != null) {
_json['updateDataSource'] = updateDataSource.toJson();
}
if (updateDeveloperMetadata != null) {
_json['updateDeveloperMetadata'] = updateDeveloperMetadata.toJson();
}
if (updateDimensionGroup != null) {
_json['updateDimensionGroup'] = updateDimensionGroup.toJson();
}
if (updateDimensionProperties != null) {
_json['updateDimensionProperties'] = updateDimensionProperties.toJson();
}
if (updateEmbeddedObjectBorder != null) {
_json['updateEmbeddedObjectBorder'] = updateEmbeddedObjectBorder.toJson();
}
if (updateEmbeddedObjectPosition != null) {
_json['updateEmbeddedObjectPosition'] =
updateEmbeddedObjectPosition.toJson();
}
if (updateFilterView != null) {
_json['updateFilterView'] = updateFilterView.toJson();
}
if (updateNamedRange != null) {
_json['updateNamedRange'] = updateNamedRange.toJson();
}
if (updateProtectedRange != null) {
_json['updateProtectedRange'] = updateProtectedRange.toJson();
}
if (updateSheetProperties != null) {
_json['updateSheetProperties'] = updateSheetProperties.toJson();
}
if (updateSlicerSpec != null) {
_json['updateSlicerSpec'] = updateSlicerSpec.toJson();
}
if (updateSpreadsheetProperties != null) {
_json['updateSpreadsheetProperties'] =
updateSpreadsheetProperties.toJson();
}
return _json;
}
}
/// A single response from an update.
class Response {
/// A reply from adding a banded range.
AddBandingResponse addBanding;
/// A reply from adding a chart.
AddChartResponse addChart;
/// A reply from adding a data source.
AddDataSourceResponse addDataSource;
/// A reply from adding a dimension group.
AddDimensionGroupResponse addDimensionGroup;
/// A reply from adding a filter view.
AddFilterViewResponse addFilterView;
/// A reply from adding a named range.
AddNamedRangeResponse addNamedRange;
/// A reply from adding a protected range.
AddProtectedRangeResponse addProtectedRange;
/// A reply from adding a sheet.
AddSheetResponse addSheet;
/// A reply from adding a slicer.
AddSlicerResponse addSlicer;
/// A reply from creating a developer metadata entry.
CreateDeveloperMetadataResponse createDeveloperMetadata;
/// A reply from deleting a conditional format rule.
DeleteConditionalFormatRuleResponse deleteConditionalFormatRule;
/// A reply from deleting a developer metadata entry.
DeleteDeveloperMetadataResponse deleteDeveloperMetadata;
/// A reply from deleting a dimension group.
DeleteDimensionGroupResponse deleteDimensionGroup;
/// A reply from removing rows containing duplicate values.
DeleteDuplicatesResponse deleteDuplicates;
/// A reply from duplicating a filter view.
DuplicateFilterViewResponse duplicateFilterView;
/// A reply from duplicating a sheet.
DuplicateSheetResponse duplicateSheet;
/// A reply from doing a find/replace.
FindReplaceResponse findReplace;
/// A reply from refreshing data source objects.
RefreshDataSourceResponse refreshDataSource;
/// A reply from trimming whitespace.
TrimWhitespaceResponse trimWhitespace;
/// A reply from updating a conditional format rule.
UpdateConditionalFormatRuleResponse updateConditionalFormatRule;
/// A reply from updating a data source.
UpdateDataSourceResponse updateDataSource;
/// A reply from updating a developer metadata entry.
UpdateDeveloperMetadataResponse updateDeveloperMetadata;
/// A reply from updating an embedded object's position.
UpdateEmbeddedObjectPositionResponse updateEmbeddedObjectPosition;
Response();
Response.fromJson(core.Map _json) {
if (_json.containsKey('addBanding')) {
addBanding = AddBandingResponse.fromJson(
_json['addBanding'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('addChart')) {
addChart = AddChartResponse.fromJson(
_json['addChart'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('addDataSource')) {
addDataSource = AddDataSourceResponse.fromJson(
_json['addDataSource'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('addDimensionGroup')) {
addDimensionGroup = AddDimensionGroupResponse.fromJson(
_json['addDimensionGroup'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('addFilterView')) {
addFilterView = AddFilterViewResponse.fromJson(
_json['addFilterView'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('addNamedRange')) {
addNamedRange = AddNamedRangeResponse.fromJson(
_json['addNamedRange'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('addProtectedRange')) {
addProtectedRange = AddProtectedRangeResponse.fromJson(
_json['addProtectedRange'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('addSheet')) {
addSheet = AddSheetResponse.fromJson(
_json['addSheet'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('addSlicer')) {
addSlicer = AddSlicerResponse.fromJson(
_json['addSlicer'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('createDeveloperMetadata')) {
createDeveloperMetadata = CreateDeveloperMetadataResponse.fromJson(
_json['createDeveloperMetadata']
as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('deleteConditionalFormatRule')) {
deleteConditionalFormatRule =
DeleteConditionalFormatRuleResponse.fromJson(
_json['deleteConditionalFormatRule']
as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('deleteDeveloperMetadata')) {
deleteDeveloperMetadata = DeleteDeveloperMetadataResponse.fromJson(
_json['deleteDeveloperMetadata']
as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('deleteDimensionGroup')) {
deleteDimensionGroup = DeleteDimensionGroupResponse.fromJson(
_json['deleteDimensionGroup'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('deleteDuplicates')) {
deleteDuplicates = DeleteDuplicatesResponse.fromJson(
_json['deleteDuplicates'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('duplicateFilterView')) {
duplicateFilterView = DuplicateFilterViewResponse.fromJson(
_json['duplicateFilterView'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('duplicateSheet')) {
duplicateSheet = DuplicateSheetResponse.fromJson(
_json['duplicateSheet'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('findReplace')) {
findReplace = FindReplaceResponse.fromJson(
_json['findReplace'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('refreshDataSource')) {
refreshDataSource = RefreshDataSourceResponse.fromJson(
_json['refreshDataSource'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('trimWhitespace')) {
trimWhitespace = TrimWhitespaceResponse.fromJson(
_json['trimWhitespace'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('updateConditionalFormatRule')) {
updateConditionalFormatRule =
UpdateConditionalFormatRuleResponse.fromJson(
_json['updateConditionalFormatRule']
as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('updateDataSource')) {
updateDataSource = UpdateDataSourceResponse.fromJson(
_json['updateDataSource'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('updateDeveloperMetadata')) {
updateDeveloperMetadata = UpdateDeveloperMetadataResponse.fromJson(
_json['updateDeveloperMetadata']
as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('updateEmbeddedObjectPosition')) {
updateEmbeddedObjectPosition =
UpdateEmbeddedObjectPositionResponse.fromJson(
_json['updateEmbeddedObjectPosition']
as core.Map<core.String, core.dynamic>);
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (addBanding != null) {
_json['addBanding'] = addBanding.toJson();
}
if (addChart != null) {
_json['addChart'] = addChart.toJson();
}
if (addDataSource != null) {
_json['addDataSource'] = addDataSource.toJson();
}
if (addDimensionGroup != null) {
_json['addDimensionGroup'] = addDimensionGroup.toJson();
}
if (addFilterView != null) {
_json['addFilterView'] = addFilterView.toJson();
}
if (addNamedRange != null) {
_json['addNamedRange'] = addNamedRange.toJson();
}
if (addProtectedRange != null) {
_json['addProtectedRange'] = addProtectedRange.toJson();
}
if (addSheet != null) {
_json['addSheet'] = addSheet.toJson();
}
if (addSlicer != null) {
_json['addSlicer'] = addSlicer.toJson();
}
if (createDeveloperMetadata != null) {
_json['createDeveloperMetadata'] = createDeveloperMetadata.toJson();
}
if (deleteConditionalFormatRule != null) {
_json['deleteConditionalFormatRule'] =
deleteConditionalFormatRule.toJson();
}
if (deleteDeveloperMetadata != null) {
_json['deleteDeveloperMetadata'] = deleteDeveloperMetadata.toJson();
}
if (deleteDimensionGroup != null) {
_json['deleteDimensionGroup'] = deleteDimensionGroup.toJson();
}
if (deleteDuplicates != null) {
_json['deleteDuplicates'] = deleteDuplicates.toJson();
}
if (duplicateFilterView != null) {
_json['duplicateFilterView'] = duplicateFilterView.toJson();
}
if (duplicateSheet != null) {
_json['duplicateSheet'] = duplicateSheet.toJson();
}
if (findReplace != null) {
_json['findReplace'] = findReplace.toJson();
}
if (refreshDataSource != null) {
_json['refreshDataSource'] = refreshDataSource.toJson();
}
if (trimWhitespace != null) {
_json['trimWhitespace'] = trimWhitespace.toJson();
}
if (updateConditionalFormatRule != null) {
_json['updateConditionalFormatRule'] =
updateConditionalFormatRule.toJson();
}
if (updateDataSource != null) {
_json['updateDataSource'] = updateDataSource.toJson();
}
if (updateDeveloperMetadata != null) {
_json['updateDeveloperMetadata'] = updateDeveloperMetadata.toJson();
}
if (updateEmbeddedObjectPosition != null) {
_json['updateEmbeddedObjectPosition'] =
updateEmbeddedObjectPosition.toJson();
}
return _json;
}
}
/// Data about each cell in a row.
class RowData {
/// The values in the row, one per column.
core.List<CellData> values;
RowData();
RowData.fromJson(core.Map _json) {
if (_json.containsKey('values')) {
values = (_json['values'] as core.List)
.map<CellData>((value) =>
CellData.fromJson(value as core.Map<core.String, core.dynamic>))
.toList();
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (values != null) {
_json['values'] = values.map((value) => value.toJson()).toList();
}
return _json;
}
}
/// 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 {
/// 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.
/// Possible string values are:
/// - "CHART_AGGREGATE_TYPE_UNSPECIFIED" : Default value, do not use.
/// - "AVERAGE" : Average aggregate function.
/// - "COUNT" : Count aggregate function.
/// - "MAX" : Maximum aggregate function.
/// - "MEDIAN" : Median aggregate function.
/// - "MIN" : Minimum aggregate function.
/// - "SUM" : Sum aggregate function.
core.String aggregateType;
/// The data for scorecard baseline value.
///
/// This field is optional.
ChartData baselineValueData;
/// Formatting options for baseline value.
///
/// This field is needed only if baseline_value_data is specified.
BaselineValueFormat baselineValueFormat;
/// Custom formatting options for numeric key/baseline values in scorecard
/// chart.
///
/// This field is used only when number_format_source is set to CUSTOM. This
/// field is optional.
ChartCustomNumberFormatOptions customFormatOptions;
/// The data for scorecard key value.
ChartData keyValueData;
/// Formatting options for key value.
KeyValueFormat keyValueFormat;
/// The number format source used in the scorecard chart.
///
/// This field is optional.
/// Possible string values are:
/// - "CHART_NUMBER_FORMAT_SOURCE_UNDEFINED" : Default value, do not use.
/// - "FROM_DATA" : Inherit number formatting from data.
/// - "CUSTOM" : Apply custom formatting as specified by
/// ChartCustomNumberFormatOptions.
core.String numberFormatSource;
/// 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.
core.double scaleFactor;
ScorecardChartSpec();
ScorecardChartSpec.fromJson(core.Map _json) {
if (_json.containsKey('aggregateType')) {
aggregateType = _json['aggregateType'] as core.String;
}
if (_json.containsKey('baselineValueData')) {
baselineValueData = ChartData.fromJson(
_json['baselineValueData'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('baselineValueFormat')) {
baselineValueFormat = BaselineValueFormat.fromJson(
_json['baselineValueFormat'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('customFormatOptions')) {
customFormatOptions = ChartCustomNumberFormatOptions.fromJson(
_json['customFormatOptions'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('keyValueData')) {
keyValueData = ChartData.fromJson(
_json['keyValueData'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('keyValueFormat')) {
keyValueFormat = KeyValueFormat.fromJson(
_json['keyValueFormat'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('numberFormatSource')) {
numberFormatSource = _json['numberFormatSource'] as core.String;
}
if (_json.containsKey('scaleFactor')) {
scaleFactor = (_json['scaleFactor'] as core.num).toDouble();
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (aggregateType != null) {
_json['aggregateType'] = aggregateType;
}
if (baselineValueData != null) {
_json['baselineValueData'] = baselineValueData.toJson();
}
if (baselineValueFormat != null) {
_json['baselineValueFormat'] = baselineValueFormat.toJson();
}
if (customFormatOptions != null) {
_json['customFormatOptions'] = customFormatOptions.toJson();
}
if (keyValueData != null) {
_json['keyValueData'] = keyValueData.toJson();
}
if (keyValueFormat != null) {
_json['keyValueFormat'] = keyValueFormat.toJson();
}
if (numberFormatSource != null) {
_json['numberFormatSource'] = numberFormatSource;
}
if (scaleFactor != null) {
_json['scaleFactor'] = scaleFactor;
}
return _json;
}
}
/// A request to retrieve all developer metadata matching the set of specified
/// criteria.
class SearchDeveloperMetadataRequest {
/// 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.
core.List<DataFilter> dataFilters;
SearchDeveloperMetadataRequest();
SearchDeveloperMetadataRequest.fromJson(core.Map _json) {
if (_json.containsKey('dataFilters')) {
dataFilters = (_json['dataFilters'] as core.List)
.map<DataFilter>((value) =>
DataFilter.fromJson(value as core.Map<core.String, core.dynamic>))
.toList();
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (dataFilters != null) {
_json['dataFilters'] =
dataFilters.map((value) => value.toJson()).toList();
}
return _json;
}
}
/// A reply to a developer metadata search request.
class SearchDeveloperMetadataResponse {
/// The metadata matching the criteria of the search request.
core.List<MatchedDeveloperMetadata> matchedDeveloperMetadata;
SearchDeveloperMetadataResponse();
SearchDeveloperMetadataResponse.fromJson(core.Map _json) {
if (_json.containsKey('matchedDeveloperMetadata')) {
matchedDeveloperMetadata =
(_json['matchedDeveloperMetadata'] as core.List)
.map<MatchedDeveloperMetadata>((value) =>
MatchedDeveloperMetadata.fromJson(
value as core.Map<core.String, core.dynamic>))
.toList();
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (matchedDeveloperMetadata != null) {
_json['matchedDeveloperMetadata'] =
matchedDeveloperMetadata.map((value) => value.toJson()).toList();
}
return _json;
}
}
/// Sets the basic filter associated with a sheet.
class SetBasicFilterRequest {
/// The filter to set.
BasicFilter filter;
SetBasicFilterRequest();
SetBasicFilterRequest.fromJson(core.Map _json) {
if (_json.containsKey('filter')) {
filter = BasicFilter.fromJson(
_json['filter'] as core.Map<core.String, core.dynamic>);
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (filter != null) {
_json['filter'] = filter.toJson();
}
return _json;
}
}
/// 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 {
/// The range the data validation rule should apply to.
GridRange range;
/// The data validation rule to set on each cell in the range, or empty to
/// clear the data validation in the range.
DataValidationRule rule;
SetDataValidationRequest();
SetDataValidationRequest.fromJson(core.Map _json) {
if (_json.containsKey('range')) {
range = GridRange.fromJson(
_json['range'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('rule')) {
rule = DataValidationRule.fromJson(
_json['rule'] as core.Map<core.String, core.dynamic>);
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (range != null) {
_json['range'] = range.toJson();
}
if (rule != null) {
_json['rule'] = rule.toJson();
}
return _json;
}
}
/// A sheet in a spreadsheet.
class Sheet {
/// The banded (alternating colors) ranges on this sheet.
core.List<BandedRange> bandedRanges;
/// The filter on this sheet, if any.
BasicFilter basicFilter;
/// The specifications of every chart on this sheet.
core.List<EmbeddedChart> charts;
/// All column groups on this sheet, ordered by increasing range start index,
/// then by group depth.
core.List<DimensionGroup> columnGroups;
/// The conditional format rules in this sheet.
core.List<ConditionalFormatRule> conditionalFormats;
/// 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.
core.List<GridData> data;
/// The developer metadata associated with a sheet.
core.List<DeveloperMetadata> developerMetadata;
/// The filter views in this sheet.
core.List<FilterView> filterViews;
/// The ranges that are merged together.
core.List<GridRange> merges;
/// The properties of the sheet.
SheetProperties properties;
/// The protected ranges in this sheet.
core.List<ProtectedRange> protectedRanges;
/// All row groups on this sheet, ordered by increasing range start index,
/// then by group depth.
core.List<DimensionGroup> rowGroups;
/// The slicers on this sheet.
core.List<Slicer> slicers;
Sheet();
Sheet.fromJson(core.Map _json) {
if (_json.containsKey('bandedRanges')) {
bandedRanges = (_json['bandedRanges'] as core.List)
.map<BandedRange>((value) => BandedRange.fromJson(
value as core.Map<core.String, core.dynamic>))
.toList();
}
if (_json.containsKey('basicFilter')) {
basicFilter = BasicFilter.fromJson(
_json['basicFilter'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('charts')) {
charts = (_json['charts'] as core.List)
.map<EmbeddedChart>((value) => EmbeddedChart.fromJson(
value as core.Map<core.String, core.dynamic>))
.toList();
}
if (_json.containsKey('columnGroups')) {
columnGroups = (_json['columnGroups'] as core.List)
.map<DimensionGroup>((value) => DimensionGroup.fromJson(
value as core.Map<core.String, core.dynamic>))
.toList();
}
if (_json.containsKey('conditionalFormats')) {
conditionalFormats = (_json['conditionalFormats'] as core.List)
.map<ConditionalFormatRule>((value) => ConditionalFormatRule.fromJson(
value as core.Map<core.String, core.dynamic>))
.toList();
}
if (_json.containsKey('data')) {
data = (_json['data'] as core.List)
.map<GridData>((value) =>
GridData.fromJson(value as core.Map<core.String, core.dynamic>))
.toList();
}
if (_json.containsKey('developerMetadata')) {
developerMetadata = (_json['developerMetadata'] as core.List)
.map<DeveloperMetadata>((value) => DeveloperMetadata.fromJson(
value as core.Map<core.String, core.dynamic>))
.toList();
}
if (_json.containsKey('filterViews')) {
filterViews = (_json['filterViews'] as core.List)
.map<FilterView>((value) =>
FilterView.fromJson(value as core.Map<core.String, core.dynamic>))
.toList();
}
if (_json.containsKey('merges')) {
merges = (_json['merges'] as core.List)
.map<GridRange>((value) =>
GridRange.fromJson(value as core.Map<core.String, core.dynamic>))
.toList();
}
if (_json.containsKey('properties')) {
properties = SheetProperties.fromJson(
_json['properties'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('protectedRanges')) {
protectedRanges = (_json['protectedRanges'] as core.List)
.map<ProtectedRange>((value) => ProtectedRange.fromJson(
value as core.Map<core.String, core.dynamic>))
.toList();
}
if (_json.containsKey('rowGroups')) {
rowGroups = (_json['rowGroups'] as core.List)
.map<DimensionGroup>((value) => DimensionGroup.fromJson(
value as core.Map<core.String, core.dynamic>))
.toList();
}
if (_json.containsKey('slicers')) {
slicers = (_json['slicers'] as core.List)
.map<Slicer>((value) =>
Slicer.fromJson(value as core.Map<core.String, core.dynamic>))
.toList();
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (bandedRanges != null) {
_json['bandedRanges'] =
bandedRanges.map((value) => value.toJson()).toList();
}
if (basicFilter != null) {
_json['basicFilter'] = basicFilter.toJson();
}
if (charts != null) {
_json['charts'] = charts.map((value) => value.toJson()).toList();
}
if (columnGroups != null) {
_json['columnGroups'] =
columnGroups.map((value) => value.toJson()).toList();
}
if (conditionalFormats != null) {
_json['conditionalFormats'] =
conditionalFormats.map((value) => value.toJson()).toList();
}
if (data != null) {
_json['data'] = data.map((value) => value.toJson()).toList();
}
if (developerMetadata != null) {
_json['developerMetadata'] =
developerMetadata.map((value) => value.toJson()).toList();
}
if (filterViews != null) {
_json['filterViews'] =
filterViews.map((value) => value.toJson()).toList();
}
if (merges != null) {
_json['merges'] = merges.map((value) => value.toJson()).toList();
}
if (properties != null) {
_json['properties'] = properties.toJson();
}
if (protectedRanges != null) {
_json['protectedRanges'] =
protectedRanges.map((value) => value.toJson()).toList();
}
if (rowGroups != null) {
_json['rowGroups'] = rowGroups.map((value) => value.toJson()).toList();
}
if (slicers != null) {
_json['slicers'] = slicers.map((value) => value.toJson()).toList();
}
return _json;
}
}
/// Properties of a sheet.
class SheetProperties {
/// If present, the field contains DATA_SOURCE sheet specific properties.
///
/// Output only.
DataSourceSheetProperties dataSourceSheetProperties;
/// Additional properties of the sheet if this sheet is a grid.
///
/// (If the sheet is an object sheet, containing a chart or image, then this
/// field will be absent.) When writing it is an error to set any grid
/// properties on non-grid sheets. If this sheet is a DATA_SOURCE sheet, this
/// field is output only but contains the properties that reflect how a data
/// source sheet is rendered in the UI, e.g. row_count.
GridProperties gridProperties;
/// True if the sheet is hidden in the UI, false if it's visible.
core.bool 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.
core.int index;
/// True if the sheet is an RTL sheet instead of an LTR sheet.
core.bool rightToLeft;
/// The ID of the sheet.
///
/// Must be non-negative. This field cannot be changed once set.
core.int sheetId;
/// The type of sheet.
///
/// Defaults to GRID. This field cannot be changed once set.
/// Possible string values are:
/// - "SHEET_TYPE_UNSPECIFIED" : Default value, do not use.
/// - "GRID" : The sheet is a grid.
/// - "OBJECT" : The sheet has no grid and instead has an object like a chart
/// or image.
/// - "DATA_SOURCE" : The sheet connects with an external DataSource and shows
/// the preview of data.
core.String sheetType;
/// The color of the tab in the UI.
Color tabColor;
/// The color of the tab in the UI.
///
/// If tab_color is also set, this field takes precedence.
ColorStyle tabColorStyle;
/// The name of the sheet.
core.String title;
SheetProperties();
SheetProperties.fromJson(core.Map _json) {
if (_json.containsKey('dataSourceSheetProperties')) {
dataSourceSheetProperties = DataSourceSheetProperties.fromJson(
_json['dataSourceSheetProperties']
as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('gridProperties')) {
gridProperties = GridProperties.fromJson(
_json['gridProperties'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('hidden')) {
hidden = _json['hidden'] as core.bool;
}
if (_json.containsKey('index')) {
index = _json['index'] as core.int;
}
if (_json.containsKey('rightToLeft')) {
rightToLeft = _json['rightToLeft'] as core.bool;
}
if (_json.containsKey('sheetId')) {
sheetId = _json['sheetId'] as core.int;
}
if (_json.containsKey('sheetType')) {
sheetType = _json['sheetType'] as core.String;
}
if (_json.containsKey('tabColor')) {
tabColor = Color.fromJson(
_json['tabColor'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('tabColorStyle')) {
tabColorStyle = ColorStyle.fromJson(
_json['tabColorStyle'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('title')) {
title = _json['title'] as core.String;
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (dataSourceSheetProperties != null) {
_json['dataSourceSheetProperties'] = dataSourceSheetProperties.toJson();
}
if (gridProperties != null) {
_json['gridProperties'] = gridProperties.toJson();
}
if (hidden != null) {
_json['hidden'] = hidden;
}
if (index != null) {
_json['index'] = index;
}
if (rightToLeft != null) {
_json['rightToLeft'] = rightToLeft;
}
if (sheetId != null) {
_json['sheetId'] = sheetId;
}
if (sheetType != null) {
_json['sheetType'] = sheetType;
}
if (tabColor != null) {
_json['tabColor'] = tabColor.toJson();
}
if (tabColorStyle != null) {
_json['tabColorStyle'] = tabColorStyle.toJson();
}
if (title != null) {
_json['title'] = title;
}
return _json;
}
}
/// A slicer in a sheet.
class Slicer {
/// The position of the slicer.
///
/// Note that slicer can be positioned only on existing sheet. Also, width and
/// height of slicer can be automatically adjusted to keep it within permitted
/// limits.
EmbeddedObjectPosition position;
/// The ID of the slicer.
core.int slicerId;
/// The specification of the slicer.
SlicerSpec spec;
Slicer();
Slicer.fromJson(core.Map _json) {
if (_json.containsKey('position')) {
position = EmbeddedObjectPosition.fromJson(
_json['position'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('slicerId')) {
slicerId = _json['slicerId'] as core.int;
}
if (_json.containsKey('spec')) {
spec = SlicerSpec.fromJson(
_json['spec'] as core.Map<core.String, core.dynamic>);
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (position != null) {
_json['position'] = position.toJson();
}
if (slicerId != null) {
_json['slicerId'] = slicerId;
}
if (spec != null) {
_json['spec'] = spec.toJson();
}
return _json;
}
}
/// The specifications of a slicer.
class SlicerSpec {
/// True if the filter should apply to pivot tables.
///
/// If not set, default to `True`.
core.bool applyToPivotTables;
/// The background color of the slicer.
Color backgroundColor;
/// The background color of the slicer.
///
/// If background_color is also set, this field takes precedence.
ColorStyle backgroundColorStyle;
/// The column index in the data table on which the filter is applied to.
core.int columnIndex;
/// The data range of the slicer.
GridRange dataRange;
/// The filtering criteria of the slicer.
FilterCriteria filterCriteria;
/// The horizontal alignment of title in the slicer.
///
/// If unspecified, defaults to `LEFT`
/// Possible string values are:
/// - "HORIZONTAL_ALIGN_UNSPECIFIED" : The horizontal alignment is not
/// specified. Do not use this.
/// - "LEFT" : The text is explicitly aligned to the left of the cell.
/// - "CENTER" : The text is explicitly aligned to the center of the cell.
/// - "RIGHT" : The text is explicitly aligned to the right of the cell.
core.String horizontalAlignment;
/// The text format of title in the slicer.
TextFormat textFormat;
/// The title of the slicer.
core.String title;
SlicerSpec();
SlicerSpec.fromJson(core.Map _json) {
if (_json.containsKey('applyToPivotTables')) {
applyToPivotTables = _json['applyToPivotTables'] as core.bool;
}
if (_json.containsKey('backgroundColor')) {
backgroundColor = Color.fromJson(
_json['backgroundColor'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('backgroundColorStyle')) {
backgroundColorStyle = ColorStyle.fromJson(
_json['backgroundColorStyle'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('columnIndex')) {
columnIndex = _json['columnIndex'] as core.int;
}
if (_json.containsKey('dataRange')) {
dataRange = GridRange.fromJson(
_json['dataRange'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('filterCriteria')) {
filterCriteria = FilterCriteria.fromJson(
_json['filterCriteria'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('horizontalAlignment')) {
horizontalAlignment = _json['horizontalAlignment'] as core.String;
}
if (_json.containsKey('textFormat')) {
textFormat = TextFormat.fromJson(
_json['textFormat'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('title')) {
title = _json['title'] as core.String;
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (applyToPivotTables != null) {
_json['applyToPivotTables'] = applyToPivotTables;
}
if (backgroundColor != null) {
_json['backgroundColor'] = backgroundColor.toJson();
}
if (backgroundColorStyle != null) {
_json['backgroundColorStyle'] = backgroundColorStyle.toJson();
}
if (columnIndex != null) {
_json['columnIndex'] = columnIndex;
}
if (dataRange != null) {
_json['dataRange'] = dataRange.toJson();
}
if (filterCriteria != null) {
_json['filterCriteria'] = filterCriteria.toJson();
}
if (horizontalAlignment != null) {
_json['horizontalAlignment'] = horizontalAlignment;
}
if (textFormat != null) {
_json['textFormat'] = textFormat.toJson();
}
if (title != null) {
_json['title'] = title;
}
return _json;
}
}
/// Sorts data in rows based on a sort order per column.
class SortRangeRequest {
/// The range to sort.
GridRange range;
/// The sort order per column.
///
/// Later specifications are used when values are equal in the earlier
/// specifications.
core.List<SortSpec> sortSpecs;
SortRangeRequest();
SortRangeRequest.fromJson(core.Map _json) {
if (_json.containsKey('range')) {
range = GridRange.fromJson(
_json['range'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('sortSpecs')) {
sortSpecs = (_json['sortSpecs'] as core.List)
.map<SortSpec>((value) =>
SortSpec.fromJson(value as core.Map<core.String, core.dynamic>))
.toList();
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (range != null) {
_json['range'] = range.toJson();
}
if (sortSpecs != null) {
_json['sortSpecs'] = sortSpecs.map((value) => value.toJson()).toList();
}
return _json;
}
}
/// A sort order associated with a specific column or row.
class SortSpec {
/// The background fill color to sort by; cells with this fill color are
/// sorted to the top.
///
/// Mutually exclusive with foreground_color.
Color backgroundColor;
/// The background fill color to sort by; cells with this fill color are
/// sorted to the top.
///
/// Mutually exclusive with foreground_color, and must be an RGB-type color.
/// If background_color is also set, this field takes precedence.
ColorStyle backgroundColorStyle;
/// Reference to a data source column.
DataSourceColumnReference dataSourceColumnReference;
/// The dimension the sort should be applied to.
core.int dimensionIndex;
/// The foreground color to sort by; cells with this foreground color are
/// sorted to the top.
///
/// Mutually exclusive with background_color.
Color foregroundColor;
/// The foreground color to sort by; cells with this foreground color are
/// sorted to the top.
///
/// Mutually exclusive with background_color, and must be an RGB-type color.
/// If foreground_color is also set, this field takes precedence.
ColorStyle foregroundColorStyle;
/// The order data should be sorted.
/// Possible string values are:
/// - "SORT_ORDER_UNSPECIFIED" : Default value, do not use this.
/// - "ASCENDING" : Sort ascending.
/// - "DESCENDING" : Sort descending.
core.String sortOrder;
SortSpec();
SortSpec.fromJson(core.Map _json) {
if (_json.containsKey('backgroundColor')) {
backgroundColor = Color.fromJson(
_json['backgroundColor'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('backgroundColorStyle')) {
backgroundColorStyle = ColorStyle.fromJson(
_json['backgroundColorStyle'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('dataSourceColumnReference')) {
dataSourceColumnReference = DataSourceColumnReference.fromJson(
_json['dataSourceColumnReference']
as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('dimensionIndex')) {
dimensionIndex = _json['dimensionIndex'] as core.int;
}
if (_json.containsKey('foregroundColor')) {
foregroundColor = Color.fromJson(
_json['foregroundColor'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('foregroundColorStyle')) {
foregroundColorStyle = ColorStyle.fromJson(
_json['foregroundColorStyle'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('sortOrder')) {
sortOrder = _json['sortOrder'] as core.String;
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (backgroundColor != null) {
_json['backgroundColor'] = backgroundColor.toJson();
}
if (backgroundColorStyle != null) {
_json['backgroundColorStyle'] = backgroundColorStyle.toJson();
}
if (dataSourceColumnReference != null) {
_json['dataSourceColumnReference'] = dataSourceColumnReference.toJson();
}
if (dimensionIndex != null) {
_json['dimensionIndex'] = dimensionIndex;
}
if (foregroundColor != null) {
_json['foregroundColor'] = foregroundColor.toJson();
}
if (foregroundColorStyle != null) {
_json['foregroundColorStyle'] = foregroundColorStyle.toJson();
}
if (sortOrder != null) {
_json['sortOrder'] = sortOrder;
}
return _json;
}
}
/// A combination of a source range and how to extend that source.
class SourceAndDestination {
/// The dimension that data should be filled into.
/// Possible string values are:
/// - "DIMENSION_UNSPECIFIED" : The default value, do not use.
/// - "ROWS" : Operates on the rows of a sheet.
/// - "COLUMNS" : Operates on the columns of a sheet.
core.String 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.
core.int fillLength;
/// The location of the data to use as the source of the autofill.
GridRange source;
SourceAndDestination();
SourceAndDestination.fromJson(core.Map _json) {
if (_json.containsKey('dimension')) {
dimension = _json['dimension'] as core.String;
}
if (_json.containsKey('fillLength')) {
fillLength = _json['fillLength'] as core.int;
}
if (_json.containsKey('source')) {
source = GridRange.fromJson(
_json['source'] as core.Map<core.String, core.dynamic>);
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (dimension != null) {
_json['dimension'] = dimension;
}
if (fillLength != null) {
_json['fillLength'] = fillLength;
}
if (source != null) {
_json['source'] = source.toJson();
}
return _json;
}
}
/// Resource that represents a spreadsheet.
class Spreadsheet {
/// A list of data source refresh schedules.
///
/// Output only.
core.List<DataSourceRefreshSchedule> dataSourceSchedules;
/// A list of external data sources connected with the spreadsheet.
core.List<DataSource> dataSources;
/// The developer metadata associated with a spreadsheet.
core.List<DeveloperMetadata> developerMetadata;
/// The named ranges defined in a spreadsheet.
core.List<NamedRange> namedRanges;
/// Overall properties of a spreadsheet.
SpreadsheetProperties properties;
/// The sheets that are part of a spreadsheet.
core.List<Sheet> sheets;
/// The ID of the spreadsheet.
///
/// This field is read-only.
core.String spreadsheetId;
/// The url of the spreadsheet.
///
/// This field is read-only.
core.String spreadsheetUrl;
Spreadsheet();
Spreadsheet.fromJson(core.Map _json) {
if (_json.containsKey('dataSourceSchedules')) {
dataSourceSchedules = (_json['dataSourceSchedules'] as core.List)
.map<DataSourceRefreshSchedule>((value) =>
DataSourceRefreshSchedule.fromJson(
value as core.Map<core.String, core.dynamic>))
.toList();
}
if (_json.containsKey('dataSources')) {
dataSources = (_json['dataSources'] as core.List)
.map<DataSource>((value) =>
DataSource.fromJson(value as core.Map<core.String, core.dynamic>))
.toList();
}
if (_json.containsKey('developerMetadata')) {
developerMetadata = (_json['developerMetadata'] as core.List)
.map<DeveloperMetadata>((value) => DeveloperMetadata.fromJson(
value as core.Map<core.String, core.dynamic>))
.toList();
}
if (_json.containsKey('namedRanges')) {
namedRanges = (_json['namedRanges'] as core.List)
.map<NamedRange>((value) =>
NamedRange.fromJson(value as core.Map<core.String, core.dynamic>))
.toList();
}
if (_json.containsKey('properties')) {
properties = SpreadsheetProperties.fromJson(
_json['properties'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('sheets')) {
sheets = (_json['sheets'] as core.List)
.map<Sheet>((value) =>
Sheet.fromJson(value as core.Map<core.String, core.dynamic>))
.toList();
}
if (_json.containsKey('spreadsheetId')) {
spreadsheetId = _json['spreadsheetId'] as core.String;
}
if (_json.containsKey('spreadsheetUrl')) {
spreadsheetUrl = _json['spreadsheetUrl'] as core.String;
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (dataSourceSchedules != null) {
_json['dataSourceSchedules'] =
dataSourceSchedules.map((value) => value.toJson()).toList();
}
if (dataSources != null) {
_json['dataSources'] =
dataSources.map((value) => value.toJson()).toList();
}
if (developerMetadata != null) {
_json['developerMetadata'] =
developerMetadata.map((value) => value.toJson()).toList();
}
if (namedRanges != null) {
_json['namedRanges'] =
namedRanges.map((value) => value.toJson()).toList();
}
if (properties != null) {
_json['properties'] = properties.toJson();
}
if (sheets != null) {
_json['sheets'] = sheets.map((value) => value.toJson()).toList();
}
if (spreadsheetId != null) {
_json['spreadsheetId'] = spreadsheetId;
}
if (spreadsheetUrl != null) {
_json['spreadsheetUrl'] = spreadsheetUrl;
}
return _json;
}
}
/// Properties of a spreadsheet.
class SpreadsheetProperties {
/// The amount of time to wait before volatile functions are recalculated.
/// Possible string values are:
/// - "RECALCULATION_INTERVAL_UNSPECIFIED" : Default value. This value must
/// not be used.
/// - "ON_CHANGE" : Volatile functions are updated on every change.
/// - "MINUTE" : Volatile functions are updated on every change and every
/// minute.
/// - "HOUR" : Volatile functions are updated on every change and hourly.
core.String autoRecalc;
/// The default format of all cells in the spreadsheet.
///
/// CellData.effectiveFormat will not be set if the cell's format is equal to
/// this default format. This field is read-only.
CellFormat defaultFormat;
/// Determines whether and how circular references are resolved with iterative
/// calculation.
///
/// Absence of this field means that circular references result in calculation
/// errors.
IterativeCalculationSettings iterativeCalculationSettings;
/// 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.
core.String locale;
/// Theme applied to the spreadsheet.
SpreadsheetTheme spreadsheetTheme;
/// 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`.
core.String timeZone;
/// The title of the spreadsheet.
core.String title;
SpreadsheetProperties();
SpreadsheetProperties.fromJson(core.Map _json) {
if (_json.containsKey('autoRecalc')) {
autoRecalc = _json['autoRecalc'] as core.String;
}
if (_json.containsKey('defaultFormat')) {
defaultFormat = CellFormat.fromJson(
_json['defaultFormat'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('iterativeCalculationSettings')) {
iterativeCalculationSettings = IterativeCalculationSettings.fromJson(
_json['iterativeCalculationSettings']
as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('locale')) {
locale = _json['locale'] as core.String;
}
if (_json.containsKey('spreadsheetTheme')) {
spreadsheetTheme = SpreadsheetTheme.fromJson(
_json['spreadsheetTheme'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('timeZone')) {
timeZone = _json['timeZone'] as core.String;
}
if (_json.containsKey('title')) {
title = _json['title'] as core.String;
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (autoRecalc != null) {
_json['autoRecalc'] = autoRecalc;
}
if (defaultFormat != null) {
_json['defaultFormat'] = defaultFormat.toJson();
}
if (iterativeCalculationSettings != null) {
_json['iterativeCalculationSettings'] =
iterativeCalculationSettings.toJson();
}
if (locale != null) {
_json['locale'] = locale;
}
if (spreadsheetTheme != null) {
_json['spreadsheetTheme'] = spreadsheetTheme.toJson();
}
if (timeZone != null) {
_json['timeZone'] = timeZone;
}
if (title != null) {
_json['title'] = title;
}
return _json;
}
}
/// Represents spreadsheet theme
class SpreadsheetTheme {
/// Name of the primary font family.
core.String primaryFontFamily;
/// The spreadsheet theme color pairs.
///
/// To update you must provide all theme color pairs.
core.List<ThemeColorPair> themeColors;
SpreadsheetTheme();
SpreadsheetTheme.fromJson(core.Map _json) {
if (_json.containsKey('primaryFontFamily')) {
primaryFontFamily = _json['primaryFontFamily'] as core.String;
}
if (_json.containsKey('themeColors')) {
themeColors = (_json['themeColors'] as core.List)
.map<ThemeColorPair>((value) => ThemeColorPair.fromJson(
value as core.Map<core.String, core.dynamic>))
.toList();
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (primaryFontFamily != null) {
_json['primaryFontFamily'] = primaryFontFamily;
}
if (themeColors != null) {
_json['themeColors'] =
themeColors.map((value) => value.toJson()).toList();
}
return _json;
}
}
/// The format of a run of text in a cell.
///
/// Absent values indicate that the field isn't specified.
class TextFormat {
/// True if the text is bold.
core.bool bold;
/// The font family.
core.String fontFamily;
/// The size of the font.
core.int fontSize;
/// The foreground color of the text.
Color foregroundColor;
/// The foreground color of the text.
///
/// If foreground_color is also set, this field takes precedence.
ColorStyle foregroundColorStyle;
/// True if the text is italicized.
core.bool italic;
/// True if the text has a strikethrough.
core.bool strikethrough;
/// True if the text is underlined.
core.bool underline;
TextFormat();
TextFormat.fromJson(core.Map _json) {
if (_json.containsKey('bold')) {
bold = _json['bold'] as core.bool;
}
if (_json.containsKey('fontFamily')) {
fontFamily = _json['fontFamily'] as core.String;
}
if (_json.containsKey('fontSize')) {
fontSize = _json['fontSize'] as core.int;
}
if (_json.containsKey('foregroundColor')) {
foregroundColor = Color.fromJson(
_json['foregroundColor'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('foregroundColorStyle')) {
foregroundColorStyle = ColorStyle.fromJson(
_json['foregroundColorStyle'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('italic')) {
italic = _json['italic'] as core.bool;
}
if (_json.containsKey('strikethrough')) {
strikethrough = _json['strikethrough'] as core.bool;
}
if (_json.containsKey('underline')) {
underline = _json['underline'] as core.bool;
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (bold != null) {
_json['bold'] = bold;
}
if (fontFamily != null) {
_json['fontFamily'] = fontFamily;
}
if (fontSize != null) {
_json['fontSize'] = fontSize;
}
if (foregroundColor != null) {
_json['foregroundColor'] = foregroundColor.toJson();
}
if (foregroundColorStyle != null) {
_json['foregroundColorStyle'] = foregroundColorStyle.toJson();
}
if (italic != null) {
_json['italic'] = italic;
}
if (strikethrough != null) {
_json['strikethrough'] = strikethrough;
}
if (underline != null) {
_json['underline'] = underline;
}
return _json;
}
}
/// 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 {
/// The format of this run.
///
/// Absent values inherit the cell's format.
TextFormat format;
/// The character index where this run starts.
core.int startIndex;
TextFormatRun();
TextFormatRun.fromJson(core.Map _json) {
if (_json.containsKey('format')) {
format = TextFormat.fromJson(
_json['format'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('startIndex')) {
startIndex = _json['startIndex'] as core.int;
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (format != null) {
_json['format'] = format.toJson();
}
if (startIndex != null) {
_json['startIndex'] = startIndex;
}
return _json;
}
}
/// Position settings for text.
class TextPosition {
/// Horizontal alignment setting for the piece of text.
/// Possible string values are:
/// - "HORIZONTAL_ALIGN_UNSPECIFIED" : The horizontal alignment is not
/// specified. Do not use this.
/// - "LEFT" : The text is explicitly aligned to the left of the cell.
/// - "CENTER" : The text is explicitly aligned to the center of the cell.
/// - "RIGHT" : The text is explicitly aligned to the right of the cell.
core.String horizontalAlignment;
TextPosition();
TextPosition.fromJson(core.Map _json) {
if (_json.containsKey('horizontalAlignment')) {
horizontalAlignment = _json['horizontalAlignment'] as core.String;
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (horizontalAlignment != null) {
_json['horizontalAlignment'] = horizontalAlignment;
}
return _json;
}
}
/// The rotation applied to text in a cell.
class TextRotation {
/// 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
core.int 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 |
core.bool vertical;
TextRotation();
TextRotation.fromJson(core.Map _json) {
if (_json.containsKey('angle')) {
angle = _json['angle'] as core.int;
}
if (_json.containsKey('vertical')) {
vertical = _json['vertical'] as core.bool;
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (angle != null) {
_json['angle'] = angle;
}
if (vertical != null) {
_json['vertical'] = vertical;
}
return _json;
}
}
/// Splits a column of text into multiple columns, based on a delimiter in each
/// cell.
class TextToColumnsRequest {
/// The delimiter to use.
///
/// Used only if delimiterType is CUSTOM.
core.String delimiter;
/// The delimiter type to use.
/// Possible string values are:
/// - "DELIMITER_TYPE_UNSPECIFIED" : Default value. This value must not be
/// used.
/// - "COMMA" : ","
/// - "SEMICOLON" : ";"
/// - "PERIOD" : "."
/// - "SPACE" : " "
/// - "CUSTOM" : A custom value as defined in delimiter.
/// - "AUTODETECT" : Automatically detect columns.
core.String delimiterType;
/// The source data range.
///
/// This must span exactly one column.
GridRange source;
TextToColumnsRequest();
TextToColumnsRequest.fromJson(core.Map _json) {
if (_json.containsKey('delimiter')) {
delimiter = _json['delimiter'] as core.String;
}
if (_json.containsKey('delimiterType')) {
delimiterType = _json['delimiterType'] as core.String;
}
if (_json.containsKey('source')) {
source = GridRange.fromJson(
_json['source'] as core.Map<core.String, core.dynamic>);
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (delimiter != null) {
_json['delimiter'] = delimiter;
}
if (delimiterType != null) {
_json['delimiterType'] = delimiterType;
}
if (source != null) {
_json['source'] = source.toJson();
}
return _json;
}
}
/// A pair mapping a spreadsheet theme color type to the concrete color it
/// represents.
class ThemeColorPair {
/// The concrete color corresponding to the theme color type.
ColorStyle color;
/// The type of the spreadsheet theme color.
/// Possible string values are:
/// - "THEME_COLOR_TYPE_UNSPECIFIED" : Unspecified theme color
/// - "TEXT" : Represents the primary text color
/// - "BACKGROUND" : Represents the primary background color
/// - "ACCENT1" : Represents the first accent color
/// - "ACCENT2" : Represents the second accent color
/// - "ACCENT3" : Represents the third accent color
/// - "ACCENT4" : Represents the fourth accent color
/// - "ACCENT5" : Represents the fifth accent color
/// - "ACCENT6" : Represents the sixth accent color
/// - "LINK" : Represents the color to use for hyperlinks
core.String colorType;
ThemeColorPair();
ThemeColorPair.fromJson(core.Map _json) {
if (_json.containsKey('color')) {
color = ColorStyle.fromJson(
_json['color'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('colorType')) {
colorType = _json['colorType'] as core.String;
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (color != null) {
_json['color'] = color.toJson();
}
if (colorType != null) {
_json['colorType'] = colorType;
}
return _json;
}
}
/// 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 {
/// 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.
core.int hours;
/// Minutes of hour of day.
///
/// Must be from 0 to 59.
core.int minutes;
/// Fractions of seconds in nanoseconds.
///
/// Must be from 0 to 999,999,999.
core.int 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.
core.int seconds;
TimeOfDay();
TimeOfDay.fromJson(core.Map _json) {
if (_json.containsKey('hours')) {
hours = _json['hours'] as core.int;
}
if (_json.containsKey('minutes')) {
minutes = _json['minutes'] as core.int;
}
if (_json.containsKey('nanos')) {
nanos = _json['nanos'] as core.int;
}
if (_json.containsKey('seconds')) {
seconds = _json['seconds'] as core.int;
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (hours != null) {
_json['hours'] = hours;
}
if (minutes != null) {
_json['minutes'] = minutes;
}
if (nanos != null) {
_json['nanos'] = nanos;
}
if (seconds != null) {
_json['seconds'] = seconds;
}
return _json;
}
}
/// A color scale for a treemap chart.
class TreemapChartColorScale {
/// The background color for cells with a color value greater than or equal to
/// maxValue.
///
/// Defaults to #109618 if not specified.
Color maxValueColor;
/// The background color for cells with a color value greater than or equal to
/// maxValue.
///
/// Defaults to #109618 if not specified. If max_value_color is also set, this
/// field takes precedence.
ColorStyle maxValueColorStyle;
/// The background color for cells with a color value at the midpoint between
/// minValue and maxValue.
///
/// Defaults to #efe6dc if not specified.
Color midValueColor;
/// The background color for cells with a color value at the midpoint between
/// minValue and maxValue.
///
/// Defaults to #efe6dc if not specified. If mid_value_color is also set, this
/// field takes precedence.
ColorStyle midValueColorStyle;
/// The background color for cells with a color value less than or equal to
/// minValue.
///
/// Defaults to #dc3912 if not specified.
Color minValueColor;
/// The background color for cells with a color value less than or equal to
/// minValue.
///
/// Defaults to #dc3912 if not specified. If min_value_color is also set, this
/// field takes precedence.
ColorStyle minValueColorStyle;
/// The background color for cells that have no color data associated with
/// them.
///
/// Defaults to #000000 if not specified.
Color noDataColor;
/// The background color for cells that have no color data associated with
/// them.
///
/// Defaults to #000000 if not specified. If no_data_color is also set, this
/// field takes precedence.
ColorStyle noDataColorStyle;
TreemapChartColorScale();
TreemapChartColorScale.fromJson(core.Map _json) {
if (_json.containsKey('maxValueColor')) {
maxValueColor = Color.fromJson(
_json['maxValueColor'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('maxValueColorStyle')) {
maxValueColorStyle = ColorStyle.fromJson(
_json['maxValueColorStyle'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('midValueColor')) {
midValueColor = Color.fromJson(
_json['midValueColor'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('midValueColorStyle')) {
midValueColorStyle = ColorStyle.fromJson(
_json['midValueColorStyle'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('minValueColor')) {
minValueColor = Color.fromJson(
_json['minValueColor'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('minValueColorStyle')) {
minValueColorStyle = ColorStyle.fromJson(
_json['minValueColorStyle'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('noDataColor')) {
noDataColor = Color.fromJson(
_json['noDataColor'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('noDataColorStyle')) {
noDataColorStyle = ColorStyle.fromJson(
_json['noDataColorStyle'] as core.Map<core.String, core.dynamic>);
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (maxValueColor != null) {
_json['maxValueColor'] = maxValueColor.toJson();
}
if (maxValueColorStyle != null) {
_json['maxValueColorStyle'] = maxValueColorStyle.toJson();
}
if (midValueColor != null) {
_json['midValueColor'] = midValueColor.toJson();
}
if (midValueColorStyle != null) {
_json['midValueColorStyle'] = midValueColorStyle.toJson();
}
if (minValueColor != null) {
_json['minValueColor'] = minValueColor.toJson();
}
if (minValueColorStyle != null) {
_json['minValueColorStyle'] = minValueColorStyle.toJson();
}
if (noDataColor != null) {
_json['noDataColor'] = noDataColor.toJson();
}
if (noDataColorStyle != null) {
_json['noDataColorStyle'] = noDataColorStyle.toJson();
}
return _json;
}
}
/// A Treemap chart.
class TreemapChartSpec {
/// The data that determines the background color of each treemap data cell.
///
/// This field is optional. If not specified, size_data is used to determine
/// background colors. If specified, the data is expected to be numeric.
/// color_scale will determine how the values in this data map to data cell
/// background colors.
ChartData colorData;
/// The color scale for data cells in the treemap chart.
///
/// Data cells are assigned colors based on their color values. These color
/// values come from color_data, or from size_data if color_data is not
/// specified. Cells with color values less than or equal to min_value will
/// have minValueColor as their background color. Cells with color values
/// greater than or equal to max_value will have maxValueColor as their
/// background color. Cells with color values between min_value and max_value
/// will have background colors on a gradient between minValueColor and
/// maxValueColor, the midpoint of the gradient being midValueColor. Cells
/// with missing or non-numeric color values will have noDataColor as their
/// background color.
TreemapChartColorScale colorScale;
/// The background color for header cells.
Color headerColor;
/// The background color for header cells.
///
/// If header_color is also set, this field takes precedence.
ColorStyle headerColorStyle;
/// True to hide tooltips.
core.bool hideTooltips;
/// 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.
core.int hintedLevels;
/// The data that contains the treemap cell labels.
ChartData 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.
core.int 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.
core.double maxValue;
/// 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.
core.double minValue;
/// The data the contains the treemap cells' parent labels.
ChartData parentLabels;
/// The data that determines the size of each treemap data cell.
///
/// This data is expected to be numeric. The cells corresponding to
/// non-numeric or missing data will not be rendered. If color_data is not
/// specified, this data is used to determine data cell background colors as
/// well.
ChartData sizeData;
/// The text format for all labels on the chart.
TextFormat textFormat;
TreemapChartSpec();
TreemapChartSpec.fromJson(core.Map _json) {
if (_json.containsKey('colorData')) {
colorData = ChartData.fromJson(
_json['colorData'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('colorScale')) {
colorScale = TreemapChartColorScale.fromJson(
_json['colorScale'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('headerColor')) {
headerColor = Color.fromJson(
_json['headerColor'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('headerColorStyle')) {
headerColorStyle = ColorStyle.fromJson(
_json['headerColorStyle'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('hideTooltips')) {
hideTooltips = _json['hideTooltips'] as core.bool;
}
if (_json.containsKey('hintedLevels')) {
hintedLevels = _json['hintedLevels'] as core.int;
}
if (_json.containsKey('labels')) {
labels = ChartData.fromJson(
_json['labels'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('levels')) {
levels = _json['levels'] as core.int;
}
if (_json.containsKey('maxValue')) {
maxValue = (_json['maxValue'] as core.num).toDouble();
}
if (_json.containsKey('minValue')) {
minValue = (_json['minValue'] as core.num).toDouble();
}
if (_json.containsKey('parentLabels')) {
parentLabels = ChartData.fromJson(
_json['parentLabels'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('sizeData')) {
sizeData = ChartData.fromJson(
_json['sizeData'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('textFormat')) {
textFormat = TextFormat.fromJson(
_json['textFormat'] as core.Map<core.String, core.dynamic>);
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (colorData != null) {
_json['colorData'] = colorData.toJson();
}
if (colorScale != null) {
_json['colorScale'] = colorScale.toJson();
}
if (headerColor != null) {
_json['headerColor'] = headerColor.toJson();
}
if (headerColorStyle != null) {
_json['headerColorStyle'] = headerColorStyle.toJson();
}
if (hideTooltips != null) {
_json['hideTooltips'] = hideTooltips;
}
if (hintedLevels != null) {
_json['hintedLevels'] = hintedLevels;
}
if (labels != null) {
_json['labels'] = labels.toJson();
}
if (levels != null) {
_json['levels'] = levels;
}
if (maxValue != null) {
_json['maxValue'] = maxValue;
}
if (minValue != null) {
_json['minValue'] = minValue;
}
if (parentLabels != null) {
_json['parentLabels'] = parentLabels.toJson();
}
if (sizeData != null) {
_json['sizeData'] = sizeData.toJson();
}
if (textFormat != null) {
_json['textFormat'] = textFormat.toJson();
}
return _json;
}
}
/// 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 {
/// The range whose cells to trim.
GridRange range;
TrimWhitespaceRequest();
TrimWhitespaceRequest.fromJson(core.Map _json) {
if (_json.containsKey('range')) {
range = GridRange.fromJson(
_json['range'] as core.Map<core.String, core.dynamic>);
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (range != null) {
_json['range'] = range.toJson();
}
return _json;
}
}
/// The result of trimming whitespace in cells.
class TrimWhitespaceResponse {
/// The number of cells that were trimmed of whitespace.
core.int cellsChangedCount;
TrimWhitespaceResponse();
TrimWhitespaceResponse.fromJson(core.Map _json) {
if (_json.containsKey('cellsChangedCount')) {
cellsChangedCount = _json['cellsChangedCount'] as core.int;
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (cellsChangedCount != null) {
_json['cellsChangedCount'] = cellsChangedCount;
}
return _json;
}
}
/// Unmerges cells in the given range.
class UnmergeCellsRequest {
/// The range within which all cells should be unmerged.
///
/// If the range spans multiple merges, all will be unmerged. The range must
/// not partially span any merge.
GridRange range;
UnmergeCellsRequest();
UnmergeCellsRequest.fromJson(core.Map _json) {
if (_json.containsKey('range')) {
range = GridRange.fromJson(
_json['range'] as core.Map<core.String, core.dynamic>);
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (range != null) {
_json['range'] = range.toJson();
}
return _json;
}
}
/// Updates properties of the supplied banded range.
class UpdateBandingRequest {
/// The banded range to update with the new properties.
BandedRange bandedRange;
/// 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.
core.String fields;
UpdateBandingRequest();
UpdateBandingRequest.fromJson(core.Map _json) {
if (_json.containsKey('bandedRange')) {
bandedRange = BandedRange.fromJson(
_json['bandedRange'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('fields')) {
fields = _json['fields'] as core.String;
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (bandedRange != null) {
_json['bandedRange'] = bandedRange.toJson();
}
if (fields != null) {
_json['fields'] = fields;
}
return _json;
}
}
/// 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 {
/// The border to put at the bottom of the range.
Border bottom;
/// The horizontal border to put within the range.
Border innerHorizontal;
/// The vertical border to put within the range.
Border innerVertical;
/// The border to put at the left of the range.
Border left;
/// The range whose borders should be updated.
GridRange range;
/// The border to put at the right of the range.
Border right;
/// The border to put at the top of the range.
Border top;
UpdateBordersRequest();
UpdateBordersRequest.fromJson(core.Map _json) {
if (_json.containsKey('bottom')) {
bottom = Border.fromJson(
_json['bottom'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('innerHorizontal')) {
innerHorizontal = Border.fromJson(
_json['innerHorizontal'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('innerVertical')) {
innerVertical = Border.fromJson(
_json['innerVertical'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('left')) {
left =
Border.fromJson(_json['left'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('range')) {
range = GridRange.fromJson(
_json['range'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('right')) {
right = Border.fromJson(
_json['right'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('top')) {
top =
Border.fromJson(_json['top'] as core.Map<core.String, core.dynamic>);
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (bottom != null) {
_json['bottom'] = bottom.toJson();
}
if (innerHorizontal != null) {
_json['innerHorizontal'] = innerHorizontal.toJson();
}
if (innerVertical != null) {
_json['innerVertical'] = innerVertical.toJson();
}
if (left != null) {
_json['left'] = left.toJson();
}
if (range != null) {
_json['range'] = range.toJson();
}
if (right != null) {
_json['right'] = right.toJson();
}
if (top != null) {
_json['top'] = top.toJson();
}
return _json;
}
}
/// Updates all cells in a range with new data.
class UpdateCellsRequest {
/// 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.
core.String fields;
/// The range to write data to.
///
/// If the data in rows does not cover the entire requested range, the fields
/// matching those set in fields will be cleared.
GridRange range;
/// The data to write.
core.List<RowData> rows;
/// The coordinate to start writing data at.
///
/// Any number of rows and columns (including a different number of columns
/// per row) may be written.
GridCoordinate start;
UpdateCellsRequest();
UpdateCellsRequest.fromJson(core.Map _json) {
if (_json.containsKey('fields')) {
fields = _json['fields'] as core.String;
}
if (_json.containsKey('range')) {
range = GridRange.fromJson(
_json['range'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('rows')) {
rows = (_json['rows'] as core.List)
.map<RowData>((value) =>
RowData.fromJson(value as core.Map<core.String, core.dynamic>))
.toList();
}
if (_json.containsKey('start')) {
start = GridCoordinate.fromJson(
_json['start'] as core.Map<core.String, core.dynamic>);
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (fields != null) {
_json['fields'] = fields;
}
if (range != null) {
_json['range'] = range.toJson();
}
if (rows != null) {
_json['rows'] = rows.map((value) => value.toJson()).toList();
}
if (start != null) {
_json['start'] = start.toJson();
}
return _json;
}
}
/// Updates a chart's specifications.
///
/// (This does not move or resize a chart. To move or resize a chart, use
/// UpdateEmbeddedObjectPositionRequest.)
class UpdateChartSpecRequest {
/// The ID of the chart to update.
core.int chartId;
/// The specification to apply to the chart.
ChartSpec spec;
UpdateChartSpecRequest();
UpdateChartSpecRequest.fromJson(core.Map _json) {
if (_json.containsKey('chartId')) {
chartId = _json['chartId'] as core.int;
}
if (_json.containsKey('spec')) {
spec = ChartSpec.fromJson(
_json['spec'] as core.Map<core.String, core.dynamic>);
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (chartId != null) {
_json['chartId'] = chartId;
}
if (spec != null) {
_json['spec'] = spec.toJson();
}
return _json;
}
}
/// Updates a conditional format rule at the given index, or moves a conditional
/// format rule to another index.
class UpdateConditionalFormatRuleRequest {
/// The zero-based index of the rule that should be replaced or moved.
core.int index;
/// The zero-based new index the rule should end up at.
core.int newIndex;
/// The rule that should replace the rule at the given index.
ConditionalFormatRule rule;
/// The sheet of the rule to move.
///
/// Required if new_index is set, unused otherwise.
core.int sheetId;
UpdateConditionalFormatRuleRequest();
UpdateConditionalFormatRuleRequest.fromJson(core.Map _json) {
if (_json.containsKey('index')) {
index = _json['index'] as core.int;
}
if (_json.containsKey('newIndex')) {
newIndex = _json['newIndex'] as core.int;
}
if (_json.containsKey('rule')) {
rule = ConditionalFormatRule.fromJson(
_json['rule'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('sheetId')) {
sheetId = _json['sheetId'] as core.int;
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (index != null) {
_json['index'] = index;
}
if (newIndex != null) {
_json['newIndex'] = newIndex;
}
if (rule != null) {
_json['rule'] = rule.toJson();
}
if (sheetId != null) {
_json['sheetId'] = sheetId;
}
return _json;
}
}
/// The result of updating a conditional format rule.
class UpdateConditionalFormatRuleResponse {
/// The index of the new rule.
core.int newIndex;
/// The new rule that replaced the old rule (if replacing), or the rule that
/// was moved (if moved)
ConditionalFormatRule newRule;
/// The old index of the rule.
///
/// Not set if a rule was replaced (because it is the same as new_index).
core.int oldIndex;
/// The old (deleted) rule.
///
/// Not set if a rule was moved (because it is the same as new_rule).
ConditionalFormatRule oldRule;
UpdateConditionalFormatRuleResponse();
UpdateConditionalFormatRuleResponse.fromJson(core.Map _json) {
if (_json.containsKey('newIndex')) {
newIndex = _json['newIndex'] as core.int;
}
if (_json.containsKey('newRule')) {
newRule = ConditionalFormatRule.fromJson(
_json['newRule'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('oldIndex')) {
oldIndex = _json['oldIndex'] as core.int;
}
if (_json.containsKey('oldRule')) {
oldRule = ConditionalFormatRule.fromJson(
_json['oldRule'] as core.Map<core.String, core.dynamic>);
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (newIndex != null) {
_json['newIndex'] = newIndex;
}
if (newRule != null) {
_json['newRule'] = newRule.toJson();
}
if (oldIndex != null) {
_json['oldIndex'] = oldIndex;
}
if (oldRule != null) {
_json['oldRule'] = oldRule.toJson();
}
return _json;
}
}
/// 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 {
/// The data source to update.
DataSource dataSource;
/// 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.
core.String fields;
UpdateDataSourceRequest();
UpdateDataSourceRequest.fromJson(core.Map _json) {
if (_json.containsKey('dataSource')) {
dataSource = DataSource.fromJson(
_json['dataSource'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('fields')) {
fields = _json['fields'] as core.String;
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (dataSource != null) {
_json['dataSource'] = dataSource.toJson();
}
if (fields != null) {
_json['fields'] = fields;
}
return _json;
}
}
/// The response from updating data source.
class UpdateDataSourceResponse {
/// The data execution status.
DataExecutionStatus dataExecutionStatus;
/// The updated data source.
DataSource dataSource;
UpdateDataSourceResponse();
UpdateDataSourceResponse.fromJson(core.Map _json) {
if (_json.containsKey('dataExecutionStatus')) {
dataExecutionStatus = DataExecutionStatus.fromJson(
_json['dataExecutionStatus'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('dataSource')) {
dataSource = DataSource.fromJson(
_json['dataSource'] as core.Map<core.String, core.dynamic>);
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (dataExecutionStatus != null) {
_json['dataExecutionStatus'] = dataExecutionStatus.toJson();
}
if (dataSource != null) {
_json['dataSource'] = dataSource.toJson();
}
return _json;
}
}
/// 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 {
/// The filters matching the developer metadata entries to update.
core.List<DataFilter> dataFilters;
/// The value that all metadata matched by the data filters will be updated
/// to.
DeveloperMetadata developerMetadata;
/// 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.
core.String fields;
UpdateDeveloperMetadataRequest();
UpdateDeveloperMetadataRequest.fromJson(core.Map _json) {
if (_json.containsKey('dataFilters')) {
dataFilters = (_json['dataFilters'] as core.List)
.map<DataFilter>((value) =>
DataFilter.fromJson(value as core.Map<core.String, core.dynamic>))
.toList();
}
if (_json.containsKey('developerMetadata')) {
developerMetadata = DeveloperMetadata.fromJson(
_json['developerMetadata'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('fields')) {
fields = _json['fields'] as core.String;
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (dataFilters != null) {
_json['dataFilters'] =
dataFilters.map((value) => value.toJson()).toList();
}
if (developerMetadata != null) {
_json['developerMetadata'] = developerMetadata.toJson();
}
if (fields != null) {
_json['fields'] = fields;
}
return _json;
}
}
/// The response from updating developer metadata.
class UpdateDeveloperMetadataResponse {
/// The updated developer metadata.
core.List<DeveloperMetadata> developerMetadata;
UpdateDeveloperMetadataResponse();
UpdateDeveloperMetadataResponse.fromJson(core.Map _json) {
if (_json.containsKey('developerMetadata')) {
developerMetadata = (_json['developerMetadata'] as core.List)
.map<DeveloperMetadata>((value) => DeveloperMetadata.fromJson(
value as core.Map<core.String, core.dynamic>))
.toList();
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (developerMetadata != null) {
_json['developerMetadata'] =
developerMetadata.map((value) => value.toJson()).toList();
}
return _json;
}
}
/// Updates the state of the specified group.
class UpdateDimensionGroupRequest {
/// The group whose state should be updated.
///
/// The range and depth of the group should specify a valid group on the
/// sheet, and all other fields updated.
DimensionGroup dimensionGroup;
/// 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.
core.String fields;
UpdateDimensionGroupRequest();
UpdateDimensionGroupRequest.fromJson(core.Map _json) {
if (_json.containsKey('dimensionGroup')) {
dimensionGroup = DimensionGroup.fromJson(
_json['dimensionGroup'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('fields')) {
fields = _json['fields'] as core.String;
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (dimensionGroup != null) {
_json['dimensionGroup'] = dimensionGroup.toJson();
}
if (fields != null) {
_json['fields'] = fields;
}
return _json;
}
}
/// Updates properties of dimensions within the specified range.
class UpdateDimensionPropertiesRequest {
/// The columns on a data source sheet to update.
DataSourceSheetDimensionRange dataSourceSheetRange;
/// 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.
core.String fields;
/// Properties to update.
DimensionProperties properties;
/// The rows or columns to update.
DimensionRange range;
UpdateDimensionPropertiesRequest();
UpdateDimensionPropertiesRequest.fromJson(core.Map _json) {
if (_json.containsKey('dataSourceSheetRange')) {
dataSourceSheetRange = DataSourceSheetDimensionRange.fromJson(
_json['dataSourceSheetRange'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('fields')) {
fields = _json['fields'] as core.String;
}
if (_json.containsKey('properties')) {
properties = DimensionProperties.fromJson(
_json['properties'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('range')) {
range = DimensionRange.fromJson(
_json['range'] as core.Map<core.String, core.dynamic>);
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (dataSourceSheetRange != null) {
_json['dataSourceSheetRange'] = dataSourceSheetRange.toJson();
}
if (fields != null) {
_json['fields'] = fields;
}
if (properties != null) {
_json['properties'] = properties.toJson();
}
if (range != null) {
_json['range'] = range.toJson();
}
return _json;
}
}
/// Updates an embedded object's border property.
class UpdateEmbeddedObjectBorderRequest {
/// The border that applies to the embedded object.
EmbeddedObjectBorder 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.
core.String fields;
/// The ID of the embedded object to update.
core.int objectId;
UpdateEmbeddedObjectBorderRequest();
UpdateEmbeddedObjectBorderRequest.fromJson(core.Map _json) {
if (_json.containsKey('border')) {
border = EmbeddedObjectBorder.fromJson(
_json['border'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('fields')) {
fields = _json['fields'] as core.String;
}
if (_json.containsKey('objectId')) {
objectId = _json['objectId'] as core.int;
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (border != null) {
_json['border'] = border.toJson();
}
if (fields != null) {
_json['fields'] = fields;
}
if (objectId != null) {
_json['objectId'] = objectId;
}
return _json;
}
}
/// Update an embedded object's position (such as a moving or resizing a chart
/// or image).
class UpdateEmbeddedObjectPositionRequest {
/// 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.
core.String fields;
/// An explicit position to move the embedded object to.
///
/// If newPosition.sheetId is set, a new sheet with that ID will be created.
/// If newPosition.newSheet is set to true, a new sheet will be created with
/// an ID that will be chosen for you.
EmbeddedObjectPosition newPosition;
/// The ID of the object to moved.
core.int objectId;
UpdateEmbeddedObjectPositionRequest();
UpdateEmbeddedObjectPositionRequest.fromJson(core.Map _json) {
if (_json.containsKey('fields')) {
fields = _json['fields'] as core.String;
}
if (_json.containsKey('newPosition')) {
newPosition = EmbeddedObjectPosition.fromJson(
_json['newPosition'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('objectId')) {
objectId = _json['objectId'] as core.int;
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (fields != null) {
_json['fields'] = fields;
}
if (newPosition != null) {
_json['newPosition'] = newPosition.toJson();
}
if (objectId != null) {
_json['objectId'] = objectId;
}
return _json;
}
}
/// The result of updating an embedded object's position.
class UpdateEmbeddedObjectPositionResponse {
/// The new position of the embedded object.
EmbeddedObjectPosition position;
UpdateEmbeddedObjectPositionResponse();
UpdateEmbeddedObjectPositionResponse.fromJson(core.Map _json) {
if (_json.containsKey('position')) {
position = EmbeddedObjectPosition.fromJson(
_json['position'] as core.Map<core.String, core.dynamic>);
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (position != null) {
_json['position'] = position.toJson();
}
return _json;
}
}
/// Updates properties of the filter view.
class UpdateFilterViewRequest {
/// 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.
core.String fields;
/// The new properties of the filter view.
FilterView filter;
UpdateFilterViewRequest();
UpdateFilterViewRequest.fromJson(core.Map _json) {
if (_json.containsKey('fields')) {
fields = _json['fields'] as core.String;
}
if (_json.containsKey('filter')) {
filter = FilterView.fromJson(
_json['filter'] as core.Map<core.String, core.dynamic>);
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (fields != null) {
_json['fields'] = fields;
}
if (filter != null) {
_json['filter'] = filter.toJson();
}
return _json;
}
}
/// Updates properties of the named range with the specified namedRangeId.
class UpdateNamedRangeRequest {
/// 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.
core.String fields;
/// The named range to update with the new properties.
NamedRange namedRange;
UpdateNamedRangeRequest();
UpdateNamedRangeRequest.fromJson(core.Map _json) {
if (_json.containsKey('fields')) {
fields = _json['fields'] as core.String;
}
if (_json.containsKey('namedRange')) {
namedRange = NamedRange.fromJson(
_json['namedRange'] as core.Map<core.String, core.dynamic>);
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (fields != null) {
_json['fields'] = fields;
}
if (namedRange != null) {
_json['namedRange'] = namedRange.toJson();
}
return _json;
}
}
/// Updates an existing protected range with the specified protectedRangeId.
class UpdateProtectedRangeRequest {
/// 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.
core.String fields;
/// The protected range to update with the new properties.
ProtectedRange protectedRange;
UpdateProtectedRangeRequest();
UpdateProtectedRangeRequest.fromJson(core.Map _json) {
if (_json.containsKey('fields')) {
fields = _json['fields'] as core.String;
}
if (_json.containsKey('protectedRange')) {
protectedRange = ProtectedRange.fromJson(
_json['protectedRange'] as core.Map<core.String, core.dynamic>);
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (fields != null) {
_json['fields'] = fields;
}
if (protectedRange != null) {
_json['protectedRange'] = protectedRange.toJson();
}
return _json;
}
}
/// Updates properties of the sheet with the specified sheetId.
class UpdateSheetPropertiesRequest {
/// 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.
core.String fields;
/// The properties to update.
SheetProperties properties;
UpdateSheetPropertiesRequest();
UpdateSheetPropertiesRequest.fromJson(core.Map _json) {
if (_json.containsKey('fields')) {
fields = _json['fields'] as core.String;
}
if (_json.containsKey('properties')) {
properties = SheetProperties.fromJson(
_json['properties'] as core.Map<core.String, core.dynamic>);
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (fields != null) {
_json['fields'] = fields;
}
if (properties != null) {
_json['properties'] = properties.toJson();
}
return _json;
}
}
/// Updates a slicer's specifications.
///
/// (This does not move or resize a slicer. To move or resize a slicer use
/// UpdateEmbeddedObjectPositionRequest.
class UpdateSlicerSpecRequest {
/// 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.
core.String fields;
/// The id of the slicer to update.
core.int slicerId;
/// The specification to apply to the slicer.
SlicerSpec spec;
UpdateSlicerSpecRequest();
UpdateSlicerSpecRequest.fromJson(core.Map _json) {
if (_json.containsKey('fields')) {
fields = _json['fields'] as core.String;
}
if (_json.containsKey('slicerId')) {
slicerId = _json['slicerId'] as core.int;
}
if (_json.containsKey('spec')) {
spec = SlicerSpec.fromJson(
_json['spec'] as core.Map<core.String, core.dynamic>);
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (fields != null) {
_json['fields'] = fields;
}
if (slicerId != null) {
_json['slicerId'] = slicerId;
}
if (spec != null) {
_json['spec'] = spec.toJson();
}
return _json;
}
}
/// Updates properties of a spreadsheet.
class UpdateSpreadsheetPropertiesRequest {
/// 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.
core.String fields;
/// The properties to update.
SpreadsheetProperties properties;
UpdateSpreadsheetPropertiesRequest();
UpdateSpreadsheetPropertiesRequest.fromJson(core.Map _json) {
if (_json.containsKey('fields')) {
fields = _json['fields'] as core.String;
}
if (_json.containsKey('properties')) {
properties = SpreadsheetProperties.fromJson(
_json['properties'] as core.Map<core.String, core.dynamic>);
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (fields != null) {
_json['fields'] = fields;
}
if (properties != null) {
_json['properties'] = properties.toJson();
}
return _json;
}
}
/// The response when updating a range of values by a data filter in a
/// spreadsheet.
class UpdateValuesByDataFilterResponse {
/// The data filter that selected the range that was updated.
DataFilter dataFilter;
/// The number of cells updated.
core.int updatedCells;
/// The number of columns where at least one cell in the column was updated.
core.int updatedColumns;
/// The values of the cells in the range matched by the dataFilter after all
/// updates were applied.
///
/// This is only included if the request's `includeValuesInResponse` field was
/// `true`.
ValueRange updatedData;
/// The range (in A1 notation) that updates were applied to.
core.String updatedRange;
/// The number of rows where at least one cell in the row was updated.
core.int updatedRows;
UpdateValuesByDataFilterResponse();
UpdateValuesByDataFilterResponse.fromJson(core.Map _json) {
if (_json.containsKey('dataFilter')) {
dataFilter = DataFilter.fromJson(
_json['dataFilter'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('updatedCells')) {
updatedCells = _json['updatedCells'] as core.int;
}
if (_json.containsKey('updatedColumns')) {
updatedColumns = _json['updatedColumns'] as core.int;
}
if (_json.containsKey('updatedData')) {
updatedData = ValueRange.fromJson(
_json['updatedData'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('updatedRange')) {
updatedRange = _json['updatedRange'] as core.String;
}
if (_json.containsKey('updatedRows')) {
updatedRows = _json['updatedRows'] as core.int;
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (dataFilter != null) {
_json['dataFilter'] = dataFilter.toJson();
}
if (updatedCells != null) {
_json['updatedCells'] = updatedCells;
}
if (updatedColumns != null) {
_json['updatedColumns'] = updatedColumns;
}
if (updatedData != null) {
_json['updatedData'] = updatedData.toJson();
}
if (updatedRange != null) {
_json['updatedRange'] = updatedRange;
}
if (updatedRows != null) {
_json['updatedRows'] = updatedRows;
}
return _json;
}
}
/// The response when updating a range of values in a spreadsheet.
class UpdateValuesResponse {
/// The spreadsheet the updates were applied to.
core.String spreadsheetId;
/// The number of cells updated.
core.int updatedCells;
/// The number of columns where at least one cell in the column was updated.
core.int updatedColumns;
/// The values of the cells after updates were applied.
///
/// This is only included if the request's `includeValuesInResponse` field was
/// `true`.
ValueRange updatedData;
/// The range (in A1 notation) that updates were applied to.
core.String updatedRange;
/// The number of rows where at least one cell in the row was updated.
core.int updatedRows;
UpdateValuesResponse();
UpdateValuesResponse.fromJson(core.Map _json) {
if (_json.containsKey('spreadsheetId')) {
spreadsheetId = _json['spreadsheetId'] as core.String;
}
if (_json.containsKey('updatedCells')) {
updatedCells = _json['updatedCells'] as core.int;
}
if (_json.containsKey('updatedColumns')) {
updatedColumns = _json['updatedColumns'] as core.int;
}
if (_json.containsKey('updatedData')) {
updatedData = ValueRange.fromJson(
_json['updatedData'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('updatedRange')) {
updatedRange = _json['updatedRange'] as core.String;
}
if (_json.containsKey('updatedRows')) {
updatedRows = _json['updatedRows'] as core.int;
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (spreadsheetId != null) {
_json['spreadsheetId'] = spreadsheetId;
}
if (updatedCells != null) {
_json['updatedCells'] = updatedCells;
}
if (updatedColumns != null) {
_json['updatedColumns'] = updatedColumns;
}
if (updatedData != null) {
_json['updatedData'] = updatedData.toJson();
}
if (updatedRange != null) {
_json['updatedRange'] = updatedRange;
}
if (updatedRows != null) {
_json['updatedRows'] = updatedRows;
}
return _json;
}
}
/// Data within a range of the spreadsheet.
class ValueRange {
/// 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.
/// Possible string values are:
/// - "DIMENSION_UNSPECIFIED" : The default value, do not use.
/// - "ROWS" : Operates on the rows of a sheet.
/// - "COLUMNS" : Operates on the columns of a sheet.
core.String majorDimension;
/// 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.
core.String 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.
///
/// The values for Object must be JSON objects. It can consist of `num`,
/// `String`, `bool` and `null` as well as `Map` and `List` values.
core.List<core.List<core.Object>> values;
ValueRange();
ValueRange.fromJson(core.Map _json) {
if (_json.containsKey('majorDimension')) {
majorDimension = _json['majorDimension'] as core.String;
}
if (_json.containsKey('range')) {
range = _json['range'] as core.String;
}
if (_json.containsKey('values')) {
values = (_json['values'] as core.List)
.map<core.List<core.Object>>((value) => (value as core.List)
.map<core.Object>((value) => value as core.Object)
.toList())
.toList();
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (majorDimension != null) {
_json['majorDimension'] = majorDimension;
}
if (range != null) {
_json['range'] = range;
}
if (values != null) {
_json['values'] = values;
}
return _json;
}
}
/// Styles for a waterfall chart column.
class WaterfallChartColumnStyle {
/// The color of the column.
Color color;
/// The color of the column.
///
/// If color is also set, this field takes precedence.
ColorStyle colorStyle;
/// The label of the column's legend.
core.String label;
WaterfallChartColumnStyle();
WaterfallChartColumnStyle.fromJson(core.Map _json) {
if (_json.containsKey('color')) {
color =
Color.fromJson(_json['color'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('colorStyle')) {
colorStyle = ColorStyle.fromJson(
_json['colorStyle'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('label')) {
label = _json['label'] as core.String;
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (color != null) {
_json['color'] = color.toJson();
}
if (colorStyle != null) {
_json['colorStyle'] = colorStyle.toJson();
}
if (label != null) {
_json['label'] = label;
}
return _json;
}
}
/// A custom subtotal column for a waterfall chart series.
class WaterfallChartCustomSubtotal {
/// True if the data point at subtotal_index is the subtotal.
///
/// If false, the subtotal will be computed and appear after the data point.
core.bool dataIsSubtotal;
/// A label for the subtotal column.
core.String 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.
core.int subtotalIndex;
WaterfallChartCustomSubtotal();
WaterfallChartCustomSubtotal.fromJson(core.Map _json) {
if (_json.containsKey('dataIsSubtotal')) {
dataIsSubtotal = _json['dataIsSubtotal'] as core.bool;
}
if (_json.containsKey('label')) {
label = _json['label'] as core.String;
}
if (_json.containsKey('subtotalIndex')) {
subtotalIndex = _json['subtotalIndex'] as core.int;
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (dataIsSubtotal != null) {
_json['dataIsSubtotal'] = dataIsSubtotal;
}
if (label != null) {
_json['label'] = label;
}
if (subtotalIndex != null) {
_json['subtotalIndex'] = subtotalIndex;
}
return _json;
}
}
/// The domain of a waterfall chart.
class WaterfallChartDomain {
/// The data of the WaterfallChartDomain.
ChartData data;
/// True to reverse the order of the domain values (horizontal axis).
core.bool reversed;
WaterfallChartDomain();
WaterfallChartDomain.fromJson(core.Map _json) {
if (_json.containsKey('data')) {
data = ChartData.fromJson(
_json['data'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('reversed')) {
reversed = _json['reversed'] as core.bool;
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (data != null) {
_json['data'] = data.toJson();
}
if (reversed != null) {
_json['reversed'] = reversed;
}
return _json;
}
}
/// A single series of data for a waterfall chart.
class WaterfallChartSeries {
/// 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.
core.List<WaterfallChartCustomSubtotal> customSubtotals;
/// The data being visualized in this series.
ChartData data;
/// Information about the data labels for this series.
DataLabel dataLabel;
/// 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.
core.bool hideTrailingSubtotal;
/// Styles for all columns in this series with negative values.
WaterfallChartColumnStyle negativeColumnsStyle;
/// Styles for all columns in this series with positive values.
WaterfallChartColumnStyle positiveColumnsStyle;
/// Styles for all subtotal columns in this series.
WaterfallChartColumnStyle subtotalColumnsStyle;
WaterfallChartSeries();
WaterfallChartSeries.fromJson(core.Map _json) {
if (_json.containsKey('customSubtotals')) {
customSubtotals = (_json['customSubtotals'] as core.List)
.map<WaterfallChartCustomSubtotal>((value) =>
WaterfallChartCustomSubtotal.fromJson(
value as core.Map<core.String, core.dynamic>))
.toList();
}
if (_json.containsKey('data')) {
data = ChartData.fromJson(
_json['data'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('dataLabel')) {
dataLabel = DataLabel.fromJson(
_json['dataLabel'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('hideTrailingSubtotal')) {
hideTrailingSubtotal = _json['hideTrailingSubtotal'] as core.bool;
}
if (_json.containsKey('negativeColumnsStyle')) {
negativeColumnsStyle = WaterfallChartColumnStyle.fromJson(
_json['negativeColumnsStyle'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('positiveColumnsStyle')) {
positiveColumnsStyle = WaterfallChartColumnStyle.fromJson(
_json['positiveColumnsStyle'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('subtotalColumnsStyle')) {
subtotalColumnsStyle = WaterfallChartColumnStyle.fromJson(
_json['subtotalColumnsStyle'] as core.Map<core.String, core.dynamic>);
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (customSubtotals != null) {
_json['customSubtotals'] =
customSubtotals.map((value) => value.toJson()).toList();
}
if (data != null) {
_json['data'] = data.toJson();
}
if (dataLabel != null) {
_json['dataLabel'] = dataLabel.toJson();
}
if (hideTrailingSubtotal != null) {
_json['hideTrailingSubtotal'] = hideTrailingSubtotal;
}
if (negativeColumnsStyle != null) {
_json['negativeColumnsStyle'] = negativeColumnsStyle.toJson();
}
if (positiveColumnsStyle != null) {
_json['positiveColumnsStyle'] = positiveColumnsStyle.toJson();
}
if (subtotalColumnsStyle != null) {
_json['subtotalColumnsStyle'] = subtotalColumnsStyle.toJson();
}
return _json;
}
}
/// A waterfall chart.
class WaterfallChartSpec {
/// The line style for the connector lines.
LineStyle connectorLineStyle;
/// The domain data (horizontal axis) for the waterfall chart.
WaterfallChartDomain domain;
/// True to interpret the first value as a total.
core.bool firstValueIsTotal;
/// True to hide connector lines between columns.
core.bool hideConnectorLines;
/// The data this waterfall chart is visualizing.
core.List<WaterfallChartSeries> series;
/// The stacked type.
/// Possible string values are:
/// - "WATERFALL_STACKED_TYPE_UNSPECIFIED" : Default value, do not use.
/// - "STACKED" : Values corresponding to the same domain (horizontal axis)
/// value will be stacked vertically.
/// - "SEQUENTIAL" : Series will spread out along the horizontal axis.
core.String stackedType;
/// Controls whether to display additional data labels on stacked charts which
/// sum the total value of all stacked values at each value along the domain
/// axis.
///
/// stacked_type must be STACKED and neither CUSTOM nor placement can be set
/// on the total_data_label.
DataLabel totalDataLabel;
WaterfallChartSpec();
WaterfallChartSpec.fromJson(core.Map _json) {
if (_json.containsKey('connectorLineStyle')) {
connectorLineStyle = LineStyle.fromJson(
_json['connectorLineStyle'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('domain')) {
domain = WaterfallChartDomain.fromJson(
_json['domain'] as core.Map<core.String, core.dynamic>);
}
if (_json.containsKey('firstValueIsTotal')) {
firstValueIsTotal = _json['firstValueIsTotal'] as core.bool;
}
if (_json.containsKey('hideConnectorLines')) {
hideConnectorLines = _json['hideConnectorLines'] as core.bool;
}
if (_json.containsKey('series')) {
series = (_json['series'] as core.List)
.map<WaterfallChartSeries>((value) => WaterfallChartSeries.fromJson(
value as core.Map<core.String, core.dynamic>))
.toList();
}
if (_json.containsKey('stackedType')) {
stackedType = _json['stackedType'] as core.String;
}
if (_json.containsKey('totalDataLabel')) {
totalDataLabel = DataLabel.fromJson(
_json['totalDataLabel'] as core.Map<core.String, core.dynamic>);
}
}
core.Map<core.String, core.Object> toJson() {
final _json = <core.String, core.Object>{};
if (connectorLineStyle != null) {
_json['connectorLineStyle'] = connectorLineStyle.toJson();
}
if (domain != null) {
_json['domain'] = domain.toJson();
}
if (firstValueIsTotal != null) {
_json['firstValueIsTotal'] = firstValueIsTotal;
}
if (hideConnectorLines != null) {
_json['hideConnectorLines'] = hideConnectorLines;
}
if (series != null) {
_json['series'] = series.map((value) => value.toJson()).toList();
}
if (stackedType != null) {
_json['stackedType'] = stackedType;
}
if (totalDataLabel != null) {
_json['totalDataLabel'] = totalDataLabel.toJson();
}
return _json;
}
}