<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="#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="#batchUpdate">batchUpdate(spreadsheetId, body, x__xgafv=None)</a></code></p>
<p class="firstline">Sets values in a range of 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)</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="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.
  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 ValueRenderOption option is
FORMATTED_VALUE.
  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 to retrieve data 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.
        "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 and empty 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="batchUpdate">batchUpdate(spreadsheetId, body, x__xgafv=None)</code>
  <pre>Sets values in a range 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.
    "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.
        "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 and empty 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": "A String", # How the input data should be interpreted.
  }

  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.
        "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.
        "updatedCells": 42, # The number of cells updated.
        "updatedRows": 42, # The number of rows where at least one cell in the row was updated.
        "spreadsheetId": "A String", # The spreadsheet the updates were applied to.
      },
    ],
    "totalUpdatedCells": 42, # The total number of cells updated.
    "totalUpdatedColumns": 42, # The total number of columns where at least one cell in the column was
        # 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="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.
  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 the ValueRenderOption option is
FORMATTED_VALUE.
  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.
    "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 and empty 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)</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.
  "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 and empty 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

Returns:
  An object of the form:

    { # The response when updating a range of values 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.
    "updatedCells": 42, # The number of cells updated.
    "updatedRows": 42, # The number of rows where at least one cell in the row was updated.
    "spreadsheetId": "A String", # The spreadsheet the updates were applied to.
  }</pre>
</div>

</body></html>