<html><body>
<style>

body, h1, h2, h3, div, span, p, pre, a {
  margin: 0;
  padding: 0;
  border: 0;
  font-weight: inherit;
  font-style: inherit;
  font-size: 100%;
  font-family: inherit;
  vertical-align: baseline;
}

body {
  font-size: 13px;
  padding: 1em;
}

h1 {
  font-size: 26px;
  margin-bottom: 1em;
}

h2 {
  font-size: 24px;
  margin-bottom: 1em;
}

h3 {
  font-size: 20px;
  margin-bottom: 1em;
  margin-top: 1em;
}

pre, code {
  line-height: 1.5;
  font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;
}

pre {
  margin-top: 0.5em;
}

h1, h2, h3, p {
  font-family: Arial, sans serif;
}

h1, h2, h3 {
  border-bottom: solid #CCC 1px;
}

.toc_element {
  margin-top: 0.5em;
}

.firstline {
  margin-left: 2 em;
}

.method  {
  margin-top: 1em;
  border: solid 1px #CCC;
  padding: 1em;
  background: #EEE;
}

.details {
  font-weight: bold;
  font-size: 14px;
}

</style>

<h1><a href="sheets_v4.html">Google Sheets API</a> . <a href="sheets_v4.spreadsheets.html">spreadsheets</a> . <a href="sheets_v4.spreadsheets.values.html">values</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="#append">append(spreadsheetId, range, body, valueInputOption=None, x__xgafv=None, responseValueRenderOption=None, insertDataOption=None, includeValuesInResponse=None, responseDateTimeRenderOption=None)</a></code></p>
<p class="firstline">Appends values to a spreadsheet. The input range is used to search for</p>
<p class="toc_element">
  <code><a href="#batchClear">batchClear(spreadsheetId, body, x__xgafv=None)</a></code></p>
<p class="firstline">Clears one or more ranges of values from a spreadsheet.</p>
<p class="toc_element">
  <code><a href="#batchClearByDataFilter">batchClearByDataFilter(spreadsheetId, body, x__xgafv=None)</a></code></p>
<p class="firstline">Clears one or more ranges of values from a spreadsheet.</p>
<p class="toc_element">
  <code><a href="#batchGet">batchGet(spreadsheetId, valueRenderOption=None, majorDimension=None, ranges=None, dateTimeRenderOption=None, x__xgafv=None)</a></code></p>
<p class="firstline">Returns one or more ranges of values from a spreadsheet.</p>
<p class="toc_element">
  <code><a href="#batchGetByDataFilter">batchGetByDataFilter(spreadsheetId, body, x__xgafv=None)</a></code></p>
<p class="firstline">Returns one or more ranges of values that match the specified data filters.</p>
<p class="toc_element">
  <code><a href="#batchUpdate">batchUpdate(spreadsheetId, body, x__xgafv=None)</a></code></p>
<p class="firstline">Sets values in one or more ranges of a spreadsheet.</p>
<p class="toc_element">
  <code><a href="#batchUpdateByDataFilter">batchUpdateByDataFilter(spreadsheetId, body, x__xgafv=None)</a></code></p>
<p class="firstline">Sets values in one or more ranges of a spreadsheet.</p>
<p class="toc_element">
  <code><a href="#clear">clear(spreadsheetId, range, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Clears values from a spreadsheet.</p>
<p class="toc_element">
  <code><a href="#get">get(spreadsheetId, range, valueRenderOption=None, majorDimension=None, dateTimeRenderOption=None, x__xgafv=None)</a></code></p>
<p class="firstline">Returns a range of values from a spreadsheet.</p>
<p class="toc_element">
  <code><a href="#update">update(spreadsheetId, range, body, valueInputOption=None, x__xgafv=None, responseValueRenderOption=None, includeValuesInResponse=None, responseDateTimeRenderOption=None)</a></code></p>
<p class="firstline">Sets values in a range of a spreadsheet.</p>
<h3>Method Details</h3>
<div class="method">
    <code class="details" id="append">append(spreadsheetId, range, body, valueInputOption=None, x__xgafv=None, responseValueRenderOption=None, insertDataOption=None, includeValuesInResponse=None, responseDateTimeRenderOption=None)</code>
  <pre>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.

Args:
  spreadsheetId: string, The ID of the spreadsheet to update. (required)
  range: string, The A1 notation of a range to search for a logical table of data.
Values will be appended after the last row of the table. (required)
  body: object, The request body. (required)
    The object takes the form of:

{ # Data within a range of the spreadsheet.
  "range": "A String", # 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.
  "values": [ # 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.
    [
      "",
    ],
  ],
  "majorDimension": "A String", # 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.
}

  valueInputOption: string, How the input data should be interpreted.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format
  responseValueRenderOption: string, Determines how values in the response should be rendered.
The default render option is ValueRenderOption.FORMATTED_VALUE.
  insertDataOption: string, How the input data should be inserted.
  includeValuesInResponse: boolean, Determines if the update response should include the values
of the cells that were appended. By default, responses
do not include the updated values.
  responseDateTimeRenderOption: string, 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].

Returns:
  An object of the form:

    { # The response when updating a range of values in a spreadsheet.
    "spreadsheetId": "A String", # The spreadsheet the updates were applied to.
    "tableRange": "A String", # 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.
    "updates": { # The response when updating a range of values in a spreadsheet. # Information about the updates that were applied.
      "updatedColumns": 42, # The number of columns where at least one cell in the column was updated.
      "updatedRange": "A String", # The range (in A1 notation) that updates were applied to.
      "updatedRows": 42, # The number of rows where at least one cell in the row was updated.
      "updatedData": { # Data within a range of the spreadsheet. # The values of the cells after updates were applied.
          # This is only included if the request's `includeValuesInResponse` field
          # was `true`.
        "range": "A String", # 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.
        "values": [ # 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.
          [
            "",
          ],
        ],
        "majorDimension": "A String", # 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.
      },
      "spreadsheetId": "A String", # The spreadsheet the updates were applied to.
      "updatedCells": 42, # The number of cells updated.
    },
  }</pre>
</div>

<div class="method">
    <code class="details" id="batchClear">batchClear(spreadsheetId, body, x__xgafv=None)</code>
  <pre>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.

Args:
  spreadsheetId: string, The ID of the spreadsheet to update. (required)
  body: object, The request body. (required)
    The object takes the form of:

{ # The request for clearing more than one range of values in a spreadsheet.
    "ranges": [ # The ranges to clear, in A1 notation.
      "A String",
    ],
  }

  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # The response when clearing a range of values in a spreadsheet.
    "spreadsheetId": "A String", # The spreadsheet the updates were applied to.
    "clearedRanges": [ # The ranges that were cleared, in A1 notation.
        # (If the requests were for an unbounded range or a ranger larger
        #  than the bounds of the sheet, this will be the actual ranges
        #  that were cleared, bounded to the sheet's limits.)
      "A String",
    ],
  }</pre>
</div>

<div class="method">
    <code class="details" id="batchClearByDataFilter">batchClearByDataFilter(spreadsheetId, body, x__xgafv=None)</code>
  <pre>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.

Args:
  spreadsheetId: string, The ID of the spreadsheet to update. (required)
  body: object, The request body. (required)
    The object takes the form of:

{ # The request for clearing more than one range selected by a
      # DataFilter in a spreadsheet.
    "dataFilters": [ # The DataFilters used to determine which ranges to clear.
      { # Filter that describes what data should be selected or returned from a
          # request.
        "developerMetadataLookup": { # Selects DeveloperMetadata that matches all of the specified fields.  For # Selects data associated with the developer metadata matching the criteria
            # described by this DeveloperMetadataLookup.
            # 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.
          "metadataLocation": { # A location where metadata may be associated in a spreadsheet. # 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.
            "locationType": "A String", # The type of location this object represents.  This field is read-only.
            "dimensionRange": { # A range along a single dimension on a sheet. # 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.
                # 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.
              "endIndex": 42, # The end (exclusive) of the span, or not set if unbounded.
              "startIndex": 42, # The start (inclusive) of the span, or not set if unbounded.
              "sheetId": 42, # The sheet this span is on.
              "dimension": "A String", # The dimension of the span.
            },
            "spreadsheet": True or False, # True when metadata is associated with an entire spreadsheet.
            "sheetId": 42, # The ID of the sheet when metadata is associated with an entire sheet.
          },
          "metadataValue": "A String", # Limits the selected developer metadata to that which has a matching
              # DeveloperMetadata.metadata_value.
          "locationMatchingStrategy": "A String", # 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.
          "locationType": "A String", # 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.
          "metadataId": 42, # Limits the selected developer metadata to that which has a matching
              # DeveloperMetadata.metadata_id.
          "visibility": "A String", # 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.
          "metadataKey": "A String", # Limits the selected developer metadata to that which has a matching
              # DeveloperMetadata.metadata_key.
        },
        "a1Range": "A String", # Selects data that matches the specified A1 range.
        "gridRange": { # A range on a sheet. # Selects data that matches the range described by the GridRange.
            # All indexes are zero-based.
            # Indexes are half open, e.g 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!`.
          "endRowIndex": 42, # The end row (exclusive) of the range, or not set if unbounded.
          "endColumnIndex": 42, # The end column (exclusive) of the range, or not set if unbounded.
          "sheetId": 42, # The sheet this range is on.
          "startColumnIndex": 42, # The start column (inclusive) of the range, or not set if unbounded.
          "startRowIndex": 42, # The start row (inclusive) of the range, or not set if unbounded.
        },
      },
    ],
  }

  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # The response when clearing a range of values selected with
      # DataFilters in a spreadsheet.
    "spreadsheetId": "A String", # The spreadsheet the updates were applied to.
    "clearedRanges": [ # The ranges that were cleared, in A1 notation.
        # (If the requests were for an unbounded range or a ranger larger
        #  than the bounds of the sheet, this will be the actual ranges
        #  that were cleared, bounded to the sheet's limits.)
      "A String",
    ],
  }</pre>
</div>

<div class="method">
    <code class="details" id="batchGet">batchGet(spreadsheetId, valueRenderOption=None, majorDimension=None, ranges=None, dateTimeRenderOption=None, x__xgafv=None)</code>
  <pre>Returns one or more ranges of values from a spreadsheet.
The caller must specify the spreadsheet ID and one or more ranges.

Args:
  spreadsheetId: string, The ID of the spreadsheet to retrieve data from. (required)
  valueRenderOption: string, How values should be represented in the output.
The default render option is ValueRenderOption.FORMATTED_VALUE.
  majorDimension: string, 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` will return
`[[1,2],[3,4]]`,
whereas requesting `range=A1:B2,majorDimension=COLUMNS` will return
`[[1,3],[2,4]]`.
  ranges: string, The A1 notation of the values to retrieve. (repeated)
  dateTimeRenderOption: string, 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].
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # The response when retrieving more than one range of values in a spreadsheet.
    "spreadsheetId": "A String", # The ID of the spreadsheet the data was retrieved from.
    "valueRanges": [ # The requested values. The order of the ValueRanges is the same as the
        # order of the requested ranges.
      { # Data within a range of the spreadsheet.
        "range": "A String", # 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.
        "values": [ # 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.
          [
            "",
          ],
        ],
        "majorDimension": "A String", # 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.
      },
    ],
  }</pre>
</div>

<div class="method">
    <code class="details" id="batchGetByDataFilter">batchGetByDataFilter(spreadsheetId, body, x__xgafv=None)</code>
  <pre>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.

Args:
  spreadsheetId: string, The ID of the spreadsheet to retrieve data from. (required)
  body: object, The request body. (required)
    The object takes the form of:

{ # The request for retrieving a range of values in a spreadsheet selected by a
      # set of DataFilters.
    "dateTimeRenderOption": "A String", # 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].
    "valueRenderOption": "A String", # How values should be represented in the output.
        # The default render option is ValueRenderOption.FORMATTED_VALUE.
    "dataFilters": [ # The data filters used to match the ranges of values to retrieve.  Ranges
        # that match any of the specified data filters will be included in the
        # response.
      { # Filter that describes what data should be selected or returned from a
          # request.
        "developerMetadataLookup": { # Selects DeveloperMetadata that matches all of the specified fields.  For # Selects data associated with the developer metadata matching the criteria
            # described by this DeveloperMetadataLookup.
            # 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.
          "metadataLocation": { # A location where metadata may be associated in a spreadsheet. # 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.
            "locationType": "A String", # The type of location this object represents.  This field is read-only.
            "dimensionRange": { # A range along a single dimension on a sheet. # 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.
                # 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.
              "endIndex": 42, # The end (exclusive) of the span, or not set if unbounded.
              "startIndex": 42, # The start (inclusive) of the span, or not set if unbounded.
              "sheetId": 42, # The sheet this span is on.
              "dimension": "A String", # The dimension of the span.
            },
            "spreadsheet": True or False, # True when metadata is associated with an entire spreadsheet.
            "sheetId": 42, # The ID of the sheet when metadata is associated with an entire sheet.
          },
          "metadataValue": "A String", # Limits the selected developer metadata to that which has a matching
              # DeveloperMetadata.metadata_value.
          "locationMatchingStrategy": "A String", # 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.
          "locationType": "A String", # 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.
          "metadataId": 42, # Limits the selected developer metadata to that which has a matching
              # DeveloperMetadata.metadata_id.
          "visibility": "A String", # 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.
          "metadataKey": "A String", # Limits the selected developer metadata to that which has a matching
              # DeveloperMetadata.metadata_key.
        },
        "a1Range": "A String", # Selects data that matches the specified A1 range.
        "gridRange": { # A range on a sheet. # Selects data that matches the range described by the GridRange.
            # All indexes are zero-based.
            # Indexes are half open, e.g 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!`.
          "endRowIndex": 42, # The end row (exclusive) of the range, or not set if unbounded.
          "endColumnIndex": 42, # The end column (exclusive) of the range, or not set if unbounded.
          "sheetId": 42, # The sheet this range is on.
          "startColumnIndex": 42, # The start column (inclusive) of the range, or not set if unbounded.
          "startRowIndex": 42, # The start row (inclusive) of the range, or not set if unbounded.
        },
      },
    ],
    "majorDimension": "A String", # 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` will
        # return `[[1,2],[3,4]]`,
        # whereas a request that sets `majorDimension=COLUMNS` will return
        # `[[1,3],[2,4]]`.
  }

  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # The response when retrieving more than one range of values in a spreadsheet
      # selected by DataFilters.
    "spreadsheetId": "A String", # The ID of the spreadsheet the data was retrieved from.
    "valueRanges": [ # The requested values with the list of data filters that matched them.
      { # A value range that was matched by one or more data filers.
        "valueRange": { # Data within a range of the spreadsheet. # The values matched by the DataFilter.
          "range": "A String", # 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.
          "values": [ # 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.
            [
              "",
            ],
          ],
          "majorDimension": "A String", # 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.
        },
        "dataFilters": [ # The DataFilters from the request that matched the range of
            # values.
          { # Filter that describes what data should be selected or returned from a
              # request.
            "developerMetadataLookup": { # Selects DeveloperMetadata that matches all of the specified fields.  For # Selects data associated with the developer metadata matching the criteria
                # described by this DeveloperMetadataLookup.
                # 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.
              "metadataLocation": { # A location where metadata may be associated in a spreadsheet. # 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.
                "locationType": "A String", # The type of location this object represents.  This field is read-only.
                "dimensionRange": { # A range along a single dimension on a sheet. # 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.
                    # 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.
                  "endIndex": 42, # The end (exclusive) of the span, or not set if unbounded.
                  "startIndex": 42, # The start (inclusive) of the span, or not set if unbounded.
                  "sheetId": 42, # The sheet this span is on.
                  "dimension": "A String", # The dimension of the span.
                },
                "spreadsheet": True or False, # True when metadata is associated with an entire spreadsheet.
                "sheetId": 42, # The ID of the sheet when metadata is associated with an entire sheet.
              },
              "metadataValue": "A String", # Limits the selected developer metadata to that which has a matching
                  # DeveloperMetadata.metadata_value.
              "locationMatchingStrategy": "A String", # 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.
              "locationType": "A String", # 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.
              "metadataId": 42, # Limits the selected developer metadata to that which has a matching
                  # DeveloperMetadata.metadata_id.
              "visibility": "A String", # 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.
              "metadataKey": "A String", # Limits the selected developer metadata to that which has a matching
                  # DeveloperMetadata.metadata_key.
            },
            "a1Range": "A String", # Selects data that matches the specified A1 range.
            "gridRange": { # A range on a sheet. # Selects data that matches the range described by the GridRange.
                # All indexes are zero-based.
                # Indexes are half open, e.g 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!`.
              "endRowIndex": 42, # The end row (exclusive) of the range, or not set if unbounded.
              "endColumnIndex": 42, # The end column (exclusive) of the range, or not set if unbounded.
              "sheetId": 42, # The sheet this range is on.
              "startColumnIndex": 42, # The start column (inclusive) of the range, or not set if unbounded.
              "startRowIndex": 42, # The start row (inclusive) of the range, or not set if unbounded.
            },
          },
        ],
      },
    ],
  }</pre>
</div>

<div class="method">
    <code class="details" id="batchUpdate">batchUpdate(spreadsheetId, body, x__xgafv=None)</code>
  <pre>Sets values in one or more ranges of a spreadsheet.
The caller must specify the spreadsheet ID,
a valueInputOption, and one or more
ValueRanges.

Args:
  spreadsheetId: string, The ID of the spreadsheet to update. (required)
  body: object, The request body. (required)
    The object takes the form of:

{ # The request for updating more than one range of values in a spreadsheet.
    "valueInputOption": "A String", # How the input data should be interpreted.
    "data": [ # The new values to apply to the spreadsheet.
      { # Data within a range of the spreadsheet.
        "range": "A String", # 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.
        "values": [ # 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.
          [
            "",
          ],
        ],
        "majorDimension": "A String", # 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.
      },
    ],
    "includeValuesInResponse": True or False, # 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 will contain
        # the updated values. If the range to write was larger than than the range
        # actually written, the response will include all values in the requested
        # range (excluding trailing empty rows and columns).
    "responseValueRenderOption": "A String", # Determines how values in the response should be rendered.
        # The default render option is ValueRenderOption.FORMATTED_VALUE.
    "responseDateTimeRenderOption": "A String", # 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.
  }

  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # The response when updating a range of values in a spreadsheet.
    "responses": [ # One UpdateValuesResponse per requested range, in the same order as
        # the requests appeared.
      { # The response when updating a range of values in a spreadsheet.
        "updatedColumns": 42, # The number of columns where at least one cell in the column was updated.
        "updatedRange": "A String", # The range (in A1 notation) that updates were applied to.
        "updatedRows": 42, # The number of rows where at least one cell in the row was updated.
        "updatedData": { # Data within a range of the spreadsheet. # The values of the cells after updates were applied.
            # This is only included if the request's `includeValuesInResponse` field
            # was `true`.
          "range": "A String", # 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.
          "values": [ # 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.
            [
              "",
            ],
          ],
          "majorDimension": "A String", # 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.
        },
        "spreadsheetId": "A String", # The spreadsheet the updates were applied to.
        "updatedCells": 42, # The number of cells updated.
      },
    ],
    "totalUpdatedColumns": 42, # The total number of columns where at least one cell in the column was
        # updated.
    "totalUpdatedCells": 42, # The total number of cells updated.
    "totalUpdatedRows": 42, # The total number of rows where at least one cell in the row was updated.
    "spreadsheetId": "A String", # The spreadsheet the updates were applied to.
    "totalUpdatedSheets": 42, # The total number of sheets where at least one cell in the sheet was
        # updated.
  }</pre>
</div>

<div class="method">
    <code class="details" id="batchUpdateByDataFilter">batchUpdateByDataFilter(spreadsheetId, body, x__xgafv=None)</code>
  <pre>Sets values in one or more ranges of a spreadsheet.
The caller must specify the spreadsheet ID,
a valueInputOption, and one or more
DataFilterValueRanges.

Args:
  spreadsheetId: string, The ID of the spreadsheet to update. (required)
  body: object, The request body. (required)
    The object takes the form of:

{ # The request for updating more than one range of values in a spreadsheet.
    "valueInputOption": "A String", # How the input data should be interpreted.
    "data": [ # The new values to apply to the spreadsheet.  If more than one range is
        # matched by the specified DataFilter the specified values will be
        # applied to all of those ranges.
      { # A range of values whose location is specified by a DataFilter.
        "values": [ # The data to be written.  If the provided values exceed any of the ranges
            # matched by the data filter then the request will fail.  If the provided
            # values are less than the matched ranges only the specified values will be
            # written, existing values in the matched ranges will remain unaffected.
          [
            "",
          ],
        ],
        "dataFilter": { # Filter that describes what data should be selected or returned from a # The data filter describing the location of the values in the spreadsheet.
            # request.
          "developerMetadataLookup": { # Selects DeveloperMetadata that matches all of the specified fields.  For # Selects data associated with the developer metadata matching the criteria
              # described by this DeveloperMetadataLookup.
              # 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.
            "metadataLocation": { # A location where metadata may be associated in a spreadsheet. # 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.
              "locationType": "A String", # The type of location this object represents.  This field is read-only.
              "dimensionRange": { # A range along a single dimension on a sheet. # 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.
                  # 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.
                "endIndex": 42, # The end (exclusive) of the span, or not set if unbounded.
                "startIndex": 42, # The start (inclusive) of the span, or not set if unbounded.
                "sheetId": 42, # The sheet this span is on.
                "dimension": "A String", # The dimension of the span.
              },
              "spreadsheet": True or False, # True when metadata is associated with an entire spreadsheet.
              "sheetId": 42, # The ID of the sheet when metadata is associated with an entire sheet.
            },
            "metadataValue": "A String", # Limits the selected developer metadata to that which has a matching
                # DeveloperMetadata.metadata_value.
            "locationMatchingStrategy": "A String", # 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.
            "locationType": "A String", # 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.
            "metadataId": 42, # Limits the selected developer metadata to that which has a matching
                # DeveloperMetadata.metadata_id.
            "visibility": "A String", # 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.
            "metadataKey": "A String", # Limits the selected developer metadata to that which has a matching
                # DeveloperMetadata.metadata_key.
          },
          "a1Range": "A String", # Selects data that matches the specified A1 range.
          "gridRange": { # A range on a sheet. # Selects data that matches the range described by the GridRange.
              # All indexes are zero-based.
              # Indexes are half open, e.g 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!`.
            "endRowIndex": 42, # The end row (exclusive) of the range, or not set if unbounded.
            "endColumnIndex": 42, # The end column (exclusive) of the range, or not set if unbounded.
            "sheetId": 42, # The sheet this range is on.
            "startColumnIndex": 42, # The start column (inclusive) of the range, or not set if unbounded.
            "startRowIndex": 42, # The start row (inclusive) of the range, or not set if unbounded.
          },
        },
        "majorDimension": "A String", # The major dimension of the values.
      },
    ],
    "includeValuesInResponse": True or False, # 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 will contain
        # the updated values. If the range to write was larger than than the range
        # actually written, the response will include all values in the requested
        # range (excluding trailing empty rows and columns).
    "responseValueRenderOption": "A String", # Determines how values in the response should be rendered.
        # The default render option is ValueRenderOption.FORMATTED_VALUE.
    "responseDateTimeRenderOption": "A String", # 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.
  }

  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # The response when updating a range of values in a spreadsheet.
    "responses": [ # The response for each range updated.
      { # The response when updating a range of values by a data filter in a
          # spreadsheet.
        "updatedRange": "A String", # The range (in A1 notation) that updates were applied to.
        "updatedColumns": 42, # The number of columns where at least one cell in the column was updated.
        "dataFilter": { # Filter that describes what data should be selected or returned from a # The data filter that selected the range that was updated.
            # request.
          "developerMetadataLookup": { # Selects DeveloperMetadata that matches all of the specified fields.  For # Selects data associated with the developer metadata matching the criteria
              # described by this DeveloperMetadataLookup.
              # 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.
            "metadataLocation": { # A location where metadata may be associated in a spreadsheet. # 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.
              "locationType": "A String", # The type of location this object represents.  This field is read-only.
              "dimensionRange": { # A range along a single dimension on a sheet. # 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.
                  # 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.
                "endIndex": 42, # The end (exclusive) of the span, or not set if unbounded.
                "startIndex": 42, # The start (inclusive) of the span, or not set if unbounded.
                "sheetId": 42, # The sheet this span is on.
                "dimension": "A String", # The dimension of the span.
              },
              "spreadsheet": True or False, # True when metadata is associated with an entire spreadsheet.
              "sheetId": 42, # The ID of the sheet when metadata is associated with an entire sheet.
            },
            "metadataValue": "A String", # Limits the selected developer metadata to that which has a matching
                # DeveloperMetadata.metadata_value.
            "locationMatchingStrategy": "A String", # 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.
            "locationType": "A String", # 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.
            "metadataId": 42, # Limits the selected developer metadata to that which has a matching
                # DeveloperMetadata.metadata_id.
            "visibility": "A String", # 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.
            "metadataKey": "A String", # Limits the selected developer metadata to that which has a matching
                # DeveloperMetadata.metadata_key.
          },
          "a1Range": "A String", # Selects data that matches the specified A1 range.
          "gridRange": { # A range on a sheet. # Selects data that matches the range described by the GridRange.
              # All indexes are zero-based.
              # Indexes are half open, e.g 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!`.
            "endRowIndex": 42, # The end row (exclusive) of the range, or not set if unbounded.
            "endColumnIndex": 42, # The end column (exclusive) of the range, or not set if unbounded.
            "sheetId": 42, # The sheet this range is on.
            "startColumnIndex": 42, # The start column (inclusive) of the range, or not set if unbounded.
            "startRowIndex": 42, # The start row (inclusive) of the range, or not set if unbounded.
          },
        },
        "updatedRows": 42, # The number of rows where at least one cell in the row was updated.
        "updatedData": { # Data within a range of the spreadsheet. # 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`.
          "range": "A String", # 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.
          "values": [ # 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.
            [
              "",
            ],
          ],
          "majorDimension": "A String", # 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.
        },
        "updatedCells": 42, # The number of cells updated.
      },
    ],
    "totalUpdatedColumns": 42, # The total number of columns where at least one cell in the column was
        # updated.
    "totalUpdatedCells": 42, # The total number of cells updated.
    "totalUpdatedRows": 42, # The total number of rows where at least one cell in the row was updated.
    "spreadsheetId": "A String", # The spreadsheet the updates were applied to.
    "totalUpdatedSheets": 42, # The total number of sheets where at least one cell in the sheet was
        # updated.
  }</pre>
</div>

<div class="method">
    <code class="details" id="clear">clear(spreadsheetId, range, body=None, x__xgafv=None)</code>
  <pre>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.

Args:
  spreadsheetId: string, The ID of the spreadsheet to update. (required)
  range: string, The A1 notation of the values to clear. (required)
  body: object, The request body.
    The object takes the form of:

{ # The request for clearing a range of values in a spreadsheet.
  }

  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # The response when clearing a range of values in a spreadsheet.
    "spreadsheetId": "A String", # The spreadsheet the updates were applied to.
    "clearedRange": "A String", # 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.)
  }</pre>
</div>

<div class="method">
    <code class="details" id="get">get(spreadsheetId, range, valueRenderOption=None, majorDimension=None, dateTimeRenderOption=None, x__xgafv=None)</code>
  <pre>Returns a range of values from a spreadsheet.
The caller must specify the spreadsheet ID and a range.

Args:
  spreadsheetId: string, The ID of the spreadsheet to retrieve data from. (required)
  range: string, The A1 notation of the values to retrieve. (required)
  valueRenderOption: string, How values should be represented in the output.
The default render option is ValueRenderOption.FORMATTED_VALUE.
  majorDimension: string, 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` will return
`[[1,2],[3,4]]`,
whereas requesting `range=A1:B2,majorDimension=COLUMNS` will return
`[[1,3],[2,4]]`.
  dateTimeRenderOption: string, 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].
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # Data within a range of the spreadsheet.
    "range": "A String", # 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.
    "values": [ # 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.
      [
        "",
      ],
    ],
    "majorDimension": "A String", # 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.
  }</pre>
</div>

<div class="method">
    <code class="details" id="update">update(spreadsheetId, range, body, valueInputOption=None, x__xgafv=None, responseValueRenderOption=None, includeValuesInResponse=None, responseDateTimeRenderOption=None)</code>
  <pre>Sets values in a range of a spreadsheet.
The caller must specify the spreadsheet ID, range, and
a valueInputOption.

Args:
  spreadsheetId: string, The ID of the spreadsheet to update. (required)
  range: string, The A1 notation of the values to update. (required)
  body: object, The request body. (required)
    The object takes the form of:

{ # Data within a range of the spreadsheet.
  "range": "A String", # 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.
  "values": [ # 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.
    [
      "",
    ],
  ],
  "majorDimension": "A String", # 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.
}

  valueInputOption: string, How the input data should be interpreted.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format
  responseValueRenderOption: string, Determines how values in the response should be rendered.
The default render option is ValueRenderOption.FORMATTED_VALUE.
  includeValuesInResponse: boolean, 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 than the range actually written,
the response will include all values in the requested range (excluding
trailing empty rows and columns).
  responseDateTimeRenderOption: string, 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.

Returns:
  An object of the form:

    { # The response when updating a range of values in a spreadsheet.
    "updatedColumns": 42, # The number of columns where at least one cell in the column was updated.
    "updatedRange": "A String", # The range (in A1 notation) that updates were applied to.
    "updatedRows": 42, # The number of rows where at least one cell in the row was updated.
    "updatedData": { # Data within a range of the spreadsheet. # The values of the cells after updates were applied.
        # This is only included if the request's `includeValuesInResponse` field
        # was `true`.
      "range": "A String", # 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.
      "values": [ # 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.
        [
          "",
        ],
      ],
      "majorDimension": "A String", # 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.
    },
    "spreadsheetId": "A String", # The spreadsheet the updates were applied to.
    "updatedCells": 42, # The number of cells updated.
  }</pre>
</div>

</body></html>