Update docs
diff --git a/docs/dyn/sheets_v4.spreadsheets.html b/docs/dyn/sheets_v4.spreadsheets.html
new file mode 100644
index 0000000..9aee20a
--- /dev/null
+++ b/docs/dyn/sheets_v4.spreadsheets.html
@@ -0,0 +1,34290 @@
+<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></h1>
+<h2>Instance Methods</h2>
+<p class="toc_element">
+  <code><a href="sheets_v4.spreadsheets.sheets.html">sheets()</a></code>
+</p>
+<p class="firstline">Returns the sheets Resource.</p>
+
+<p class="toc_element">
+  <code><a href="sheets_v4.spreadsheets.values.html">values()</a></code>
+</p>
+<p class="firstline">Returns the values Resource.</p>
+
+<p class="toc_element">
+  <code><a href="#batchUpdate">batchUpdate(spreadsheetId, body, x__xgafv=None)</a></code></p>
+<p class="firstline">Applies one or more updates to the spreadsheet.</p>
+<p class="toc_element">
+  <code><a href="#create">create(body, x__xgafv=None)</a></code></p>
+<p class="firstline">Creates a spreadsheet, returning the newly created spreadsheet.</p>
+<p class="toc_element">
+  <code><a href="#get">get(spreadsheetId, ranges=None, x__xgafv=None, includeGridData=None)</a></code></p>
+<p class="firstline">Returns the spreadsheet at the given id.</p>
+<h3>Method Details</h3>
+<div class="method">
+    <code class="details" id="batchUpdate">batchUpdate(spreadsheetId, body, x__xgafv=None)</code>
+  <pre>Applies one or more updates to the spreadsheet.
+
+Each request is validated before
+being applied. If any request is not valid then the entire request will
+fail and nothing will be applied.
+
+Some requests have replies to
+give you some information about how
+they applied. The replies will mirror the requests.  For example,
+if you applied 4 updates and the 3rd one had a reply, then the
+response will have 2 empty replies, the actual reply, and another empty
+reply, in that order.
+
+Due to the collaborative nature of spreadsheets, it is not guaranteed that
+the spreadsheet will reflect exactly your changes after this completes,
+however it is guaranteed that all the updates in the request will be
+applied atomically. Your changes may be altered with respect to
+collaborator changes. If there are no collaborators, the spreadsheet
+should reflect your changes.
+
+Args:
+  spreadsheetId: string, The spreadsheet to apply the updates to. (required)
+  body: object, The request body. (required)
+    The object takes the form of:
+
+{ # The request for updating any aspect of a spreadsheet.
+    "requests": [ # A list of updates to apply to the spreadsheet.
+      { # A single kind of update to apply to a spreadsheet.
+        "duplicateFilterView": { # Duplicates a particular filter view. # Duplicates a filter view.
+          "filterId": 42, # The ID of the filter being duplicated.
+        },
+        "sortRange": { # Sorts data in rows based on a sort order per column. # Sorts data in a range.
+          "range": { # A range on a sheet. # The range to sort.
+              # 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 grid 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.
+            "startRowIndex": 42, # The start row (inclusive) 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.
+            "endColumnIndex": 42, # The end column (exclusive) of the range, or not set if unbounded.
+          },
+          "sortSpecs": [ # The sort order per column. Later specifications are used when values
+              # are equal in the earlier specifications.
+            { # A sort order associated with a specific column or row.
+              "sortOrder": "A String", # The order data should be sorted.
+              "dimensionIndex": 42, # The dimension the sort should be applied to.
+            },
+          ],
+        },
+        "updateEmbeddedObjectPosition": { # Update an embedded object's position (such as a moving or resizing a # Updates an embedded object's (e.g. chart, image) position.
+            # chart or image).
+          "newPosition": { # The position of an embedded object such as a chart. # An explicit position to move the embedded object to.
+              # If newPosition.sheetId is set,
+              # a new sheet with that ID will be created.
+              # If newPosition.newSheet is set to true,
+              # a new sheet will be created with an ID that will be chosen for you.
+            "newSheet": True or False, # If true, the embedded object will be put on a new sheet whose ID
+                # is chosen for you. Used only when writing.
+            "sheetId": 42, # The sheet this is on. Set only if the embedded object
+                # is on its own sheet. Must be non-negative.
+            "overlayPosition": { # The location an object is overlaid on top of a grid. # The position the object is overlaid on top of a grid.
+              "anchorCell": { # A coordinate in a sheet. # The cell the object is anchored to.
+                  # All indexes are zero-based.
+                "rowIndex": 42, # The row index of the coordinate.
+                "columnIndex": 42, # The column index of the coordinate.
+                "sheetId": 42, # The sheet this coordinate is on.
+              },
+              "offsetYPixels": 42, # The vertical offset, in pixels, that the object is offset
+                  # from the anchor cell.
+              "widthPixels": 42, # The width of the object, in pixels. Defaults to 600.
+              "offsetXPixels": 42, # The horizontal offset, in pixels, that the object is offset
+                  # from the anchor cell.
+              "heightPixels": 42, # The height of the object, in pixels. Defaults to 371.
+            },
+          },
+          "fields": "A String", # The fields of OverlayPosition that should be updated when
+              # setting a new position. Used only if
+              # newPosition.overlayPosition
+              # is set, in which case at least one field must
+              # be specified.  The root `newPosition.overlayPosition` is implied and
+              # should not be specified.
+              # A single `"*"` can be used as short-hand for listing every field.
+          "objectId": 42, # The id of the object to moved.
+        },
+        "updateConditionalFormatRule": { # Updates a conditional format rule at the given index, # Updates an existing conditional format rule.
+            # or moves a conditional format rule to another index.
+          "index": 42, # The zero-based index of the rule that should be replaced or moved.
+          "newIndex": 42, # The zero-based new index the rule should end up at.
+          "sheetId": 42, # The sheet of the rule to move.  Required if newIndex is set,
+              # unused otherwise.
+          "rule": { # A rule describing a conditional format. # The rule that should replace the rule at the given index.
+            "ranges": [ # The ranges that will be formatted if the condition is true.
+                # All the ranges must be on the same grid.
+              { # A range on a sheet.
+                  # 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 grid 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.
+                "startRowIndex": 42, # The start row (inclusive) 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.
+                "endColumnIndex": 42, # The end column (exclusive) of the range, or not set if unbounded.
+              },
+            ],
+            "booleanRule": { # A rule that may or may not match, depending on the condition. # The formatting is either "on" or "off" according to the rule.
+              "condition": { # A condition that can evaluate to true or false. # The condition of the rule. If the condition evaluates to true,
+                  # the format will be applied.
+                  # BooleanConditions are used by conditional formatting,
+                  # data validation, and the criteria in filters.
+                "type": "A String", # The type of condition.
+                "values": [ # The values of the condition. The number of supported values depends
+                    # on the condition type.  Some support zero values,
+                    # others one or two values,
+                    # and ConditionType.ONE_OF_LIST supports an arbitrary number of values.
+                  { # The value of the condition.
+                    "relativeDate": "A String", # A relative date (based on the current date).
+                        # Valid only if the type is
+                        # DATE_BEFORE,
+                        # DATE_AFTER,
+                        # DATE_ON_OR_BEFORE or
+                        # DATE_ON_OR_AFTER.
+                        #
+                        # Relative dates are not supported in data validation.
+                        # They are supported only in conditional formatting and
+                        # conditional filters.
+                    "userEnteredValue": "A String", # A value the condition is based on.
+                        # The value will be parsed as if the user typed into a cell.
+                        # Formulas are supported (and must begin with an `=`).
+                  },
+                ],
+              },
+              "format": { # The format of a cell. # The format to apply.
+                  # Conditional formatting can only apply a subset of formatting:
+                  # bold, italic,
+                  # strikethrough,
+                  # foreground color &
+                  # background color.
+                "numberFormat": { # The number format of a cell. # A format describing how number values should be represented to the user.
+                    # When updating, all fields must be set.
+                  "pattern": "A String", # Pattern string used for formatting.
+                  "type": "A String", # The type of the number format.
+                },
+                "textDirection": "A String", # The direction of the text in the cell.
+                "padding": { # The amount of padding around the cell, in pixels. # The padding of the cell.
+                    # When updating padding, every field must be specified.
+                  "top": 42, # The top padding of the cell.
+                  "right": 42, # The right padding of the cell.
+                  "bottom": 42, # The bottom padding of the cell.
+                  "left": 42, # The left padding of the cell.
+                },
+                "horizontalAlignment": "A String", # The horizontal alignment of the value in cell.
+                "backgroundColor": { # Represents a color in the RGBA color space. This representation is designed # The background color of the cell.
+                    # for simplicity of conversion to/from color representations in various
+                    # languages over compactness; for example, the fields of this representation
+                    # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                    # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                    # method in iOS; and, with just a little work, it can be easily formatted into
+                    # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                    #
+                    # Example (Java):
+                    #
+                    #      import com.google.type.Color;
+                    #
+                    #      // ...
+                    #      public static java.awt.Color fromProto(Color protocolor) {
+                    #        float alpha = protocolor.hasAlpha()
+                    #            ? protocolor.getAlpha().getValue()
+                    #            : 1.0;
+                    #
+                    #        return new java.awt.Color(
+                    #            protocolor.getRed(),
+                    #            protocolor.getGreen(),
+                    #            protocolor.getBlue(),
+                    #            alpha);
+                    #      }
+                    #
+                    #      public static Color toProto(java.awt.Color color) {
+                    #        float red = (float) color.getRed();
+                    #        float green = (float) color.getGreen();
+                    #        float blue = (float) color.getBlue();
+                    #        float denominator = 255.0;
+                    #        Color.Builder resultBuilder =
+                    #            Color
+                    #                .newBuilder()
+                    #                .setRed(red / denominator)
+                    #                .setGreen(green / denominator)
+                    #                .setBlue(blue / denominator);
+                    #        int alpha = color.getAlpha();
+                    #        if (alpha != 255) {
+                    #          result.setAlpha(
+                    #              FloatValue
+                    #                  .newBuilder()
+                    #                  .setValue(((float) alpha) / denominator)
+                    #                  .build());
+                    #        }
+                    #        return resultBuilder.build();
+                    #      }
+                    #      // ...
+                    #
+                    # Example (iOS / Obj-C):
+                    #
+                    #      // ...
+                    #      static UIColor* fromProto(Color* protocolor) {
+                    #         float red = [protocolor red];
+                    #         float green = [protocolor green];
+                    #         float blue = [protocolor blue];
+                    #         FloatValue* alpha_wrapper = [protocolor alpha];
+                    #         float alpha = 1.0;
+                    #         if (alpha_wrapper != nil) {
+                    #           alpha = [alpha_wrapper value];
+                    #         }
+                    #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                    #      }
+                    #
+                    #      static Color* toProto(UIColor* color) {
+                    #          CGFloat red, green, blue, alpha;
+                    #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                    #            return nil;
+                    #          }
+                    #          Color* result = [Color alloc] init];
+                    #          [result setRed:red];
+                    #          [result setGreen:green];
+                    #          [result setBlue:blue];
+                    #          if (alpha <= 0.9999) {
+                    #            [result setAlpha:floatWrapperWithValue(alpha)];
+                    #          }
+                    #          [result autorelease];
+                    #          return result;
+                    #     }
+                    #     // ...
+                    #
+                    #  Example (JavaScript):
+                    #
+                    #     // ...
+                    #
+                    #     var protoToCssColor = function(rgb_color) {
+                    #        var redFrac = rgb_color.red || 0.0;
+                    #        var greenFrac = rgb_color.green || 0.0;
+                    #        var blueFrac = rgb_color.blue || 0.0;
+                    #        var red = Math.floor(redFrac * 255);
+                    #        var green = Math.floor(greenFrac * 255);
+                    #        var blue = Math.floor(blueFrac * 255);
+                    #
+                    #        if (!('alpha' in rgb_color)) {
+                    #           return rgbToCssColor_(red, green, blue);
+                    #        }
+                    #
+                    #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                    #        var rgbParams = [red, green, blue].join(',');
+                    #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                    #     };
+                    #
+                    #     var rgbToCssColor_ = function(red, green, blue) {
+                    #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                    #       var hexString = rgbNumber.toString(16);
+                    #       var missingZeros = 6 - hexString.length;
+                    #       var resultBuilder = ['#'];
+                    #       for (var i = 0; i < missingZeros; i++) {
+                    #          resultBuilder.push('0');
+                    #       }
+                    #       resultBuilder.push(hexString);
+                    #       return resultBuilder.join('');
+                    #     };
+                    #
+                    #     // ...
+                  "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                  "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                      # the final pixel color is defined by the equation:
+                      #
+                      #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                      #
+                      # This means that a value of 1.0 corresponds to a solid color, whereas
+                      # a value of 0.0 corresponds to a completely transparent color. This
+                      # uses a wrapper message rather than a simple float scalar so that it is
+                      # possible to distinguish between a default value and the value being unset.
+                      # If omitted, this color object is to be rendered as a solid color
+                      # (as if the alpha value had been explicitly given with a value of 1.0).
+                  "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                  "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                },
+                "verticalAlignment": "A String", # The vertical alignment of the value in cell.
+                "textFormat": { # The format of a run of text in a cell. # The format of the text in the cell (unless overridden by a format run).
+                    # Absent values indicate that the field isn't specified.
+                  "foregroundColor": { # Represents a color in the RGBA color space. This representation is designed # The foreground color of the text.
+                      # for simplicity of conversion to/from color representations in various
+                      # languages over compactness; for example, the fields of this representation
+                      # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                      # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                      # method in iOS; and, with just a little work, it can be easily formatted into
+                      # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                      #
+                      # Example (Java):
+                      #
+                      #      import com.google.type.Color;
+                      #
+                      #      // ...
+                      #      public static java.awt.Color fromProto(Color protocolor) {
+                      #        float alpha = protocolor.hasAlpha()
+                      #            ? protocolor.getAlpha().getValue()
+                      #            : 1.0;
+                      #
+                      #        return new java.awt.Color(
+                      #            protocolor.getRed(),
+                      #            protocolor.getGreen(),
+                      #            protocolor.getBlue(),
+                      #            alpha);
+                      #      }
+                      #
+                      #      public static Color toProto(java.awt.Color color) {
+                      #        float red = (float) color.getRed();
+                      #        float green = (float) color.getGreen();
+                      #        float blue = (float) color.getBlue();
+                      #        float denominator = 255.0;
+                      #        Color.Builder resultBuilder =
+                      #            Color
+                      #                .newBuilder()
+                      #                .setRed(red / denominator)
+                      #                .setGreen(green / denominator)
+                      #                .setBlue(blue / denominator);
+                      #        int alpha = color.getAlpha();
+                      #        if (alpha != 255) {
+                      #          result.setAlpha(
+                      #              FloatValue
+                      #                  .newBuilder()
+                      #                  .setValue(((float) alpha) / denominator)
+                      #                  .build());
+                      #        }
+                      #        return resultBuilder.build();
+                      #      }
+                      #      // ...
+                      #
+                      # Example (iOS / Obj-C):
+                      #
+                      #      // ...
+                      #      static UIColor* fromProto(Color* protocolor) {
+                      #         float red = [protocolor red];
+                      #         float green = [protocolor green];
+                      #         float blue = [protocolor blue];
+                      #         FloatValue* alpha_wrapper = [protocolor alpha];
+                      #         float alpha = 1.0;
+                      #         if (alpha_wrapper != nil) {
+                      #           alpha = [alpha_wrapper value];
+                      #         }
+                      #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                      #      }
+                      #
+                      #      static Color* toProto(UIColor* color) {
+                      #          CGFloat red, green, blue, alpha;
+                      #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                      #            return nil;
+                      #          }
+                      #          Color* result = [Color alloc] init];
+                      #          [result setRed:red];
+                      #          [result setGreen:green];
+                      #          [result setBlue:blue];
+                      #          if (alpha <= 0.9999) {
+                      #            [result setAlpha:floatWrapperWithValue(alpha)];
+                      #          }
+                      #          [result autorelease];
+                      #          return result;
+                      #     }
+                      #     // ...
+                      #
+                      #  Example (JavaScript):
+                      #
+                      #     // ...
+                      #
+                      #     var protoToCssColor = function(rgb_color) {
+                      #        var redFrac = rgb_color.red || 0.0;
+                      #        var greenFrac = rgb_color.green || 0.0;
+                      #        var blueFrac = rgb_color.blue || 0.0;
+                      #        var red = Math.floor(redFrac * 255);
+                      #        var green = Math.floor(greenFrac * 255);
+                      #        var blue = Math.floor(blueFrac * 255);
+                      #
+                      #        if (!('alpha' in rgb_color)) {
+                      #           return rgbToCssColor_(red, green, blue);
+                      #        }
+                      #
+                      #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                      #        var rgbParams = [red, green, blue].join(',');
+                      #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                      #     };
+                      #
+                      #     var rgbToCssColor_ = function(red, green, blue) {
+                      #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                      #       var hexString = rgbNumber.toString(16);
+                      #       var missingZeros = 6 - hexString.length;
+                      #       var resultBuilder = ['#'];
+                      #       for (var i = 0; i < missingZeros; i++) {
+                      #          resultBuilder.push('0');
+                      #       }
+                      #       resultBuilder.push(hexString);
+                      #       return resultBuilder.join('');
+                      #     };
+                      #
+                      #     // ...
+                    "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                    "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                        # the final pixel color is defined by the equation:
+                        #
+                        #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                        #
+                        # This means that a value of 1.0 corresponds to a solid color, whereas
+                        # a value of 0.0 corresponds to a completely transparent color. This
+                        # uses a wrapper message rather than a simple float scalar so that it is
+                        # possible to distinguish between a default value and the value being unset.
+                        # If omitted, this color object is to be rendered as a solid color
+                        # (as if the alpha value had been explicitly given with a value of 1.0).
+                    "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                    "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                  },
+                  "bold": True or False, # True if the text is bold.
+                  "strikethrough": True or False, # True if the text has a strikethrough.
+                  "fontFamily": "A String", # The font family.
+                  "fontSize": 42, # The size of the font.
+                  "italic": True or False, # True if the text is italicized.
+                  "underline": True or False, # True if the text is underlined.
+                },
+                "hyperlinkDisplayType": "A String", # How a hyperlink, if it exists, should be displayed in the cell.
+                "borders": { # The borders of the cell. # The borders of the cell.
+                  "top": { # A border along a cell. # The top border of the cell.
+                    "color": { # Represents a color in the RGBA color space. This representation is designed # The color of the border.
+                        # for simplicity of conversion to/from color representations in various
+                        # languages over compactness; for example, the fields of this representation
+                        # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                        # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                        # method in iOS; and, with just a little work, it can be easily formatted into
+                        # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                        #
+                        # Example (Java):
+                        #
+                        #      import com.google.type.Color;
+                        #
+                        #      // ...
+                        #      public static java.awt.Color fromProto(Color protocolor) {
+                        #        float alpha = protocolor.hasAlpha()
+                        #            ? protocolor.getAlpha().getValue()
+                        #            : 1.0;
+                        #
+                        #        return new java.awt.Color(
+                        #            protocolor.getRed(),
+                        #            protocolor.getGreen(),
+                        #            protocolor.getBlue(),
+                        #            alpha);
+                        #      }
+                        #
+                        #      public static Color toProto(java.awt.Color color) {
+                        #        float red = (float) color.getRed();
+                        #        float green = (float) color.getGreen();
+                        #        float blue = (float) color.getBlue();
+                        #        float denominator = 255.0;
+                        #        Color.Builder resultBuilder =
+                        #            Color
+                        #                .newBuilder()
+                        #                .setRed(red / denominator)
+                        #                .setGreen(green / denominator)
+                        #                .setBlue(blue / denominator);
+                        #        int alpha = color.getAlpha();
+                        #        if (alpha != 255) {
+                        #          result.setAlpha(
+                        #              FloatValue
+                        #                  .newBuilder()
+                        #                  .setValue(((float) alpha) / denominator)
+                        #                  .build());
+                        #        }
+                        #        return resultBuilder.build();
+                        #      }
+                        #      // ...
+                        #
+                        # Example (iOS / Obj-C):
+                        #
+                        #      // ...
+                        #      static UIColor* fromProto(Color* protocolor) {
+                        #         float red = [protocolor red];
+                        #         float green = [protocolor green];
+                        #         float blue = [protocolor blue];
+                        #         FloatValue* alpha_wrapper = [protocolor alpha];
+                        #         float alpha = 1.0;
+                        #         if (alpha_wrapper != nil) {
+                        #           alpha = [alpha_wrapper value];
+                        #         }
+                        #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                        #      }
+                        #
+                        #      static Color* toProto(UIColor* color) {
+                        #          CGFloat red, green, blue, alpha;
+                        #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                        #            return nil;
+                        #          }
+                        #          Color* result = [Color alloc] init];
+                        #          [result setRed:red];
+                        #          [result setGreen:green];
+                        #          [result setBlue:blue];
+                        #          if (alpha <= 0.9999) {
+                        #            [result setAlpha:floatWrapperWithValue(alpha)];
+                        #          }
+                        #          [result autorelease];
+                        #          return result;
+                        #     }
+                        #     // ...
+                        #
+                        #  Example (JavaScript):
+                        #
+                        #     // ...
+                        #
+                        #     var protoToCssColor = function(rgb_color) {
+                        #        var redFrac = rgb_color.red || 0.0;
+                        #        var greenFrac = rgb_color.green || 0.0;
+                        #        var blueFrac = rgb_color.blue || 0.0;
+                        #        var red = Math.floor(redFrac * 255);
+                        #        var green = Math.floor(greenFrac * 255);
+                        #        var blue = Math.floor(blueFrac * 255);
+                        #
+                        #        if (!('alpha' in rgb_color)) {
+                        #           return rgbToCssColor_(red, green, blue);
+                        #        }
+                        #
+                        #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                        #        var rgbParams = [red, green, blue].join(',');
+                        #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                        #     };
+                        #
+                        #     var rgbToCssColor_ = function(red, green, blue) {
+                        #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                        #       var hexString = rgbNumber.toString(16);
+                        #       var missingZeros = 6 - hexString.length;
+                        #       var resultBuilder = ['#'];
+                        #       for (var i = 0; i < missingZeros; i++) {
+                        #          resultBuilder.push('0');
+                        #       }
+                        #       resultBuilder.push(hexString);
+                        #       return resultBuilder.join('');
+                        #     };
+                        #
+                        #     // ...
+                      "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                      "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                          # the final pixel color is defined by the equation:
+                          #
+                          #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                          #
+                          # This means that a value of 1.0 corresponds to a solid color, whereas
+                          # a value of 0.0 corresponds to a completely transparent color. This
+                          # uses a wrapper message rather than a simple float scalar so that it is
+                          # possible to distinguish between a default value and the value being unset.
+                          # If omitted, this color object is to be rendered as a solid color
+                          # (as if the alpha value had been explicitly given with a value of 1.0).
+                      "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                      "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                    },
+                    "width": 42, # The width of the border, in pixels.
+                        # Border widths must be between 0 and 3 pixels.
+                    "style": "A String", # The style of the border.
+                  },
+                  "right": { # A border along a cell. # The right border of the cell.
+                    "color": { # Represents a color in the RGBA color space. This representation is designed # The color of the border.
+                        # for simplicity of conversion to/from color representations in various
+                        # languages over compactness; for example, the fields of this representation
+                        # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                        # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                        # method in iOS; and, with just a little work, it can be easily formatted into
+                        # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                        #
+                        # Example (Java):
+                        #
+                        #      import com.google.type.Color;
+                        #
+                        #      // ...
+                        #      public static java.awt.Color fromProto(Color protocolor) {
+                        #        float alpha = protocolor.hasAlpha()
+                        #            ? protocolor.getAlpha().getValue()
+                        #            : 1.0;
+                        #
+                        #        return new java.awt.Color(
+                        #            protocolor.getRed(),
+                        #            protocolor.getGreen(),
+                        #            protocolor.getBlue(),
+                        #            alpha);
+                        #      }
+                        #
+                        #      public static Color toProto(java.awt.Color color) {
+                        #        float red = (float) color.getRed();
+                        #        float green = (float) color.getGreen();
+                        #        float blue = (float) color.getBlue();
+                        #        float denominator = 255.0;
+                        #        Color.Builder resultBuilder =
+                        #            Color
+                        #                .newBuilder()
+                        #                .setRed(red / denominator)
+                        #                .setGreen(green / denominator)
+                        #                .setBlue(blue / denominator);
+                        #        int alpha = color.getAlpha();
+                        #        if (alpha != 255) {
+                        #          result.setAlpha(
+                        #              FloatValue
+                        #                  .newBuilder()
+                        #                  .setValue(((float) alpha) / denominator)
+                        #                  .build());
+                        #        }
+                        #        return resultBuilder.build();
+                        #      }
+                        #      // ...
+                        #
+                        # Example (iOS / Obj-C):
+                        #
+                        #      // ...
+                        #      static UIColor* fromProto(Color* protocolor) {
+                        #         float red = [protocolor red];
+                        #         float green = [protocolor green];
+                        #         float blue = [protocolor blue];
+                        #         FloatValue* alpha_wrapper = [protocolor alpha];
+                        #         float alpha = 1.0;
+                        #         if (alpha_wrapper != nil) {
+                        #           alpha = [alpha_wrapper value];
+                        #         }
+                        #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                        #      }
+                        #
+                        #      static Color* toProto(UIColor* color) {
+                        #          CGFloat red, green, blue, alpha;
+                        #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                        #            return nil;
+                        #          }
+                        #          Color* result = [Color alloc] init];
+                        #          [result setRed:red];
+                        #          [result setGreen:green];
+                        #          [result setBlue:blue];
+                        #          if (alpha <= 0.9999) {
+                        #            [result setAlpha:floatWrapperWithValue(alpha)];
+                        #          }
+                        #          [result autorelease];
+                        #          return result;
+                        #     }
+                        #     // ...
+                        #
+                        #  Example (JavaScript):
+                        #
+                        #     // ...
+                        #
+                        #     var protoToCssColor = function(rgb_color) {
+                        #        var redFrac = rgb_color.red || 0.0;
+                        #        var greenFrac = rgb_color.green || 0.0;
+                        #        var blueFrac = rgb_color.blue || 0.0;
+                        #        var red = Math.floor(redFrac * 255);
+                        #        var green = Math.floor(greenFrac * 255);
+                        #        var blue = Math.floor(blueFrac * 255);
+                        #
+                        #        if (!('alpha' in rgb_color)) {
+                        #           return rgbToCssColor_(red, green, blue);
+                        #        }
+                        #
+                        #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                        #        var rgbParams = [red, green, blue].join(',');
+                        #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                        #     };
+                        #
+                        #     var rgbToCssColor_ = function(red, green, blue) {
+                        #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                        #       var hexString = rgbNumber.toString(16);
+                        #       var missingZeros = 6 - hexString.length;
+                        #       var resultBuilder = ['#'];
+                        #       for (var i = 0; i < missingZeros; i++) {
+                        #          resultBuilder.push('0');
+                        #       }
+                        #       resultBuilder.push(hexString);
+                        #       return resultBuilder.join('');
+                        #     };
+                        #
+                        #     // ...
+                      "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                      "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                          # the final pixel color is defined by the equation:
+                          #
+                          #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                          #
+                          # This means that a value of 1.0 corresponds to a solid color, whereas
+                          # a value of 0.0 corresponds to a completely transparent color. This
+                          # uses a wrapper message rather than a simple float scalar so that it is
+                          # possible to distinguish between a default value and the value being unset.
+                          # If omitted, this color object is to be rendered as a solid color
+                          # (as if the alpha value had been explicitly given with a value of 1.0).
+                      "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                      "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                    },
+                    "width": 42, # The width of the border, in pixels.
+                        # Border widths must be between 0 and 3 pixels.
+                    "style": "A String", # The style of the border.
+                  },
+                  "bottom": { # A border along a cell. # The bottom border of the cell.
+                    "color": { # Represents a color in the RGBA color space. This representation is designed # The color of the border.
+                        # for simplicity of conversion to/from color representations in various
+                        # languages over compactness; for example, the fields of this representation
+                        # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                        # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                        # method in iOS; and, with just a little work, it can be easily formatted into
+                        # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                        #
+                        # Example (Java):
+                        #
+                        #      import com.google.type.Color;
+                        #
+                        #      // ...
+                        #      public static java.awt.Color fromProto(Color protocolor) {
+                        #        float alpha = protocolor.hasAlpha()
+                        #            ? protocolor.getAlpha().getValue()
+                        #            : 1.0;
+                        #
+                        #        return new java.awt.Color(
+                        #            protocolor.getRed(),
+                        #            protocolor.getGreen(),
+                        #            protocolor.getBlue(),
+                        #            alpha);
+                        #      }
+                        #
+                        #      public static Color toProto(java.awt.Color color) {
+                        #        float red = (float) color.getRed();
+                        #        float green = (float) color.getGreen();
+                        #        float blue = (float) color.getBlue();
+                        #        float denominator = 255.0;
+                        #        Color.Builder resultBuilder =
+                        #            Color
+                        #                .newBuilder()
+                        #                .setRed(red / denominator)
+                        #                .setGreen(green / denominator)
+                        #                .setBlue(blue / denominator);
+                        #        int alpha = color.getAlpha();
+                        #        if (alpha != 255) {
+                        #          result.setAlpha(
+                        #              FloatValue
+                        #                  .newBuilder()
+                        #                  .setValue(((float) alpha) / denominator)
+                        #                  .build());
+                        #        }
+                        #        return resultBuilder.build();
+                        #      }
+                        #      // ...
+                        #
+                        # Example (iOS / Obj-C):
+                        #
+                        #      // ...
+                        #      static UIColor* fromProto(Color* protocolor) {
+                        #         float red = [protocolor red];
+                        #         float green = [protocolor green];
+                        #         float blue = [protocolor blue];
+                        #         FloatValue* alpha_wrapper = [protocolor alpha];
+                        #         float alpha = 1.0;
+                        #         if (alpha_wrapper != nil) {
+                        #           alpha = [alpha_wrapper value];
+                        #         }
+                        #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                        #      }
+                        #
+                        #      static Color* toProto(UIColor* color) {
+                        #          CGFloat red, green, blue, alpha;
+                        #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                        #            return nil;
+                        #          }
+                        #          Color* result = [Color alloc] init];
+                        #          [result setRed:red];
+                        #          [result setGreen:green];
+                        #          [result setBlue:blue];
+                        #          if (alpha <= 0.9999) {
+                        #            [result setAlpha:floatWrapperWithValue(alpha)];
+                        #          }
+                        #          [result autorelease];
+                        #          return result;
+                        #     }
+                        #     // ...
+                        #
+                        #  Example (JavaScript):
+                        #
+                        #     // ...
+                        #
+                        #     var protoToCssColor = function(rgb_color) {
+                        #        var redFrac = rgb_color.red || 0.0;
+                        #        var greenFrac = rgb_color.green || 0.0;
+                        #        var blueFrac = rgb_color.blue || 0.0;
+                        #        var red = Math.floor(redFrac * 255);
+                        #        var green = Math.floor(greenFrac * 255);
+                        #        var blue = Math.floor(blueFrac * 255);
+                        #
+                        #        if (!('alpha' in rgb_color)) {
+                        #           return rgbToCssColor_(red, green, blue);
+                        #        }
+                        #
+                        #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                        #        var rgbParams = [red, green, blue].join(',');
+                        #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                        #     };
+                        #
+                        #     var rgbToCssColor_ = function(red, green, blue) {
+                        #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                        #       var hexString = rgbNumber.toString(16);
+                        #       var missingZeros = 6 - hexString.length;
+                        #       var resultBuilder = ['#'];
+                        #       for (var i = 0; i < missingZeros; i++) {
+                        #          resultBuilder.push('0');
+                        #       }
+                        #       resultBuilder.push(hexString);
+                        #       return resultBuilder.join('');
+                        #     };
+                        #
+                        #     // ...
+                      "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                      "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                          # the final pixel color is defined by the equation:
+                          #
+                          #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                          #
+                          # This means that a value of 1.0 corresponds to a solid color, whereas
+                          # a value of 0.0 corresponds to a completely transparent color. This
+                          # uses a wrapper message rather than a simple float scalar so that it is
+                          # possible to distinguish between a default value and the value being unset.
+                          # If omitted, this color object is to be rendered as a solid color
+                          # (as if the alpha value had been explicitly given with a value of 1.0).
+                      "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                      "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                    },
+                    "width": 42, # The width of the border, in pixels.
+                        # Border widths must be between 0 and 3 pixels.
+                    "style": "A String", # The style of the border.
+                  },
+                  "left": { # A border along a cell. # The left border of the cell.
+                    "color": { # Represents a color in the RGBA color space. This representation is designed # The color of the border.
+                        # for simplicity of conversion to/from color representations in various
+                        # languages over compactness; for example, the fields of this representation
+                        # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                        # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                        # method in iOS; and, with just a little work, it can be easily formatted into
+                        # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                        #
+                        # Example (Java):
+                        #
+                        #      import com.google.type.Color;
+                        #
+                        #      // ...
+                        #      public static java.awt.Color fromProto(Color protocolor) {
+                        #        float alpha = protocolor.hasAlpha()
+                        #            ? protocolor.getAlpha().getValue()
+                        #            : 1.0;
+                        #
+                        #        return new java.awt.Color(
+                        #            protocolor.getRed(),
+                        #            protocolor.getGreen(),
+                        #            protocolor.getBlue(),
+                        #            alpha);
+                        #      }
+                        #
+                        #      public static Color toProto(java.awt.Color color) {
+                        #        float red = (float) color.getRed();
+                        #        float green = (float) color.getGreen();
+                        #        float blue = (float) color.getBlue();
+                        #        float denominator = 255.0;
+                        #        Color.Builder resultBuilder =
+                        #            Color
+                        #                .newBuilder()
+                        #                .setRed(red / denominator)
+                        #                .setGreen(green / denominator)
+                        #                .setBlue(blue / denominator);
+                        #        int alpha = color.getAlpha();
+                        #        if (alpha != 255) {
+                        #          result.setAlpha(
+                        #              FloatValue
+                        #                  .newBuilder()
+                        #                  .setValue(((float) alpha) / denominator)
+                        #                  .build());
+                        #        }
+                        #        return resultBuilder.build();
+                        #      }
+                        #      // ...
+                        #
+                        # Example (iOS / Obj-C):
+                        #
+                        #      // ...
+                        #      static UIColor* fromProto(Color* protocolor) {
+                        #         float red = [protocolor red];
+                        #         float green = [protocolor green];
+                        #         float blue = [protocolor blue];
+                        #         FloatValue* alpha_wrapper = [protocolor alpha];
+                        #         float alpha = 1.0;
+                        #         if (alpha_wrapper != nil) {
+                        #           alpha = [alpha_wrapper value];
+                        #         }
+                        #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                        #      }
+                        #
+                        #      static Color* toProto(UIColor* color) {
+                        #          CGFloat red, green, blue, alpha;
+                        #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                        #            return nil;
+                        #          }
+                        #          Color* result = [Color alloc] init];
+                        #          [result setRed:red];
+                        #          [result setGreen:green];
+                        #          [result setBlue:blue];
+                        #          if (alpha <= 0.9999) {
+                        #            [result setAlpha:floatWrapperWithValue(alpha)];
+                        #          }
+                        #          [result autorelease];
+                        #          return result;
+                        #     }
+                        #     // ...
+                        #
+                        #  Example (JavaScript):
+                        #
+                        #     // ...
+                        #
+                        #     var protoToCssColor = function(rgb_color) {
+                        #        var redFrac = rgb_color.red || 0.0;
+                        #        var greenFrac = rgb_color.green || 0.0;
+                        #        var blueFrac = rgb_color.blue || 0.0;
+                        #        var red = Math.floor(redFrac * 255);
+                        #        var green = Math.floor(greenFrac * 255);
+                        #        var blue = Math.floor(blueFrac * 255);
+                        #
+                        #        if (!('alpha' in rgb_color)) {
+                        #           return rgbToCssColor_(red, green, blue);
+                        #        }
+                        #
+                        #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                        #        var rgbParams = [red, green, blue].join(',');
+                        #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                        #     };
+                        #
+                        #     var rgbToCssColor_ = function(red, green, blue) {
+                        #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                        #       var hexString = rgbNumber.toString(16);
+                        #       var missingZeros = 6 - hexString.length;
+                        #       var resultBuilder = ['#'];
+                        #       for (var i = 0; i < missingZeros; i++) {
+                        #          resultBuilder.push('0');
+                        #       }
+                        #       resultBuilder.push(hexString);
+                        #       return resultBuilder.join('');
+                        #     };
+                        #
+                        #     // ...
+                      "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                      "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                          # the final pixel color is defined by the equation:
+                          #
+                          #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                          #
+                          # This means that a value of 1.0 corresponds to a solid color, whereas
+                          # a value of 0.0 corresponds to a completely transparent color. This
+                          # uses a wrapper message rather than a simple float scalar so that it is
+                          # possible to distinguish between a default value and the value being unset.
+                          # If omitted, this color object is to be rendered as a solid color
+                          # (as if the alpha value had been explicitly given with a value of 1.0).
+                      "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                      "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                    },
+                    "width": 42, # The width of the border, in pixels.
+                        # Border widths must be between 0 and 3 pixels.
+                    "style": "A String", # The style of the border.
+                  },
+                },
+                "wrapStrategy": "A String", # The wrap strategy for the value in the cell.
+              },
+            },
+            "gradientRule": { # A rule that applies a gradient color scale format, based on # The formatting will vary based on the gradients in the rule.
+                # the interpolation points listed. The format of a cell will vary
+                # based on its contents as compared to the values of the interpolation
+                # points.
+              "maxpoint": { # A single interpolation point a gradient conditional format. # The final interpolation point.
+                  # These pin the gradient color scale according to the color,
+                  # type and value chosen.
+                "color": { # Represents a color in the RGBA color space. This representation is designed # The color this interpolation point should use.
+                    # for simplicity of conversion to/from color representations in various
+                    # languages over compactness; for example, the fields of this representation
+                    # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                    # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                    # method in iOS; and, with just a little work, it can be easily formatted into
+                    # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                    #
+                    # Example (Java):
+                    #
+                    #      import com.google.type.Color;
+                    #
+                    #      // ...
+                    #      public static java.awt.Color fromProto(Color protocolor) {
+                    #        float alpha = protocolor.hasAlpha()
+                    #            ? protocolor.getAlpha().getValue()
+                    #            : 1.0;
+                    #
+                    #        return new java.awt.Color(
+                    #            protocolor.getRed(),
+                    #            protocolor.getGreen(),
+                    #            protocolor.getBlue(),
+                    #            alpha);
+                    #      }
+                    #
+                    #      public static Color toProto(java.awt.Color color) {
+                    #        float red = (float) color.getRed();
+                    #        float green = (float) color.getGreen();
+                    #        float blue = (float) color.getBlue();
+                    #        float denominator = 255.0;
+                    #        Color.Builder resultBuilder =
+                    #            Color
+                    #                .newBuilder()
+                    #                .setRed(red / denominator)
+                    #                .setGreen(green / denominator)
+                    #                .setBlue(blue / denominator);
+                    #        int alpha = color.getAlpha();
+                    #        if (alpha != 255) {
+                    #          result.setAlpha(
+                    #              FloatValue
+                    #                  .newBuilder()
+                    #                  .setValue(((float) alpha) / denominator)
+                    #                  .build());
+                    #        }
+                    #        return resultBuilder.build();
+                    #      }
+                    #      // ...
+                    #
+                    # Example (iOS / Obj-C):
+                    #
+                    #      // ...
+                    #      static UIColor* fromProto(Color* protocolor) {
+                    #         float red = [protocolor red];
+                    #         float green = [protocolor green];
+                    #         float blue = [protocolor blue];
+                    #         FloatValue* alpha_wrapper = [protocolor alpha];
+                    #         float alpha = 1.0;
+                    #         if (alpha_wrapper != nil) {
+                    #           alpha = [alpha_wrapper value];
+                    #         }
+                    #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                    #      }
+                    #
+                    #      static Color* toProto(UIColor* color) {
+                    #          CGFloat red, green, blue, alpha;
+                    #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                    #            return nil;
+                    #          }
+                    #          Color* result = [Color alloc] init];
+                    #          [result setRed:red];
+                    #          [result setGreen:green];
+                    #          [result setBlue:blue];
+                    #          if (alpha <= 0.9999) {
+                    #            [result setAlpha:floatWrapperWithValue(alpha)];
+                    #          }
+                    #          [result autorelease];
+                    #          return result;
+                    #     }
+                    #     // ...
+                    #
+                    #  Example (JavaScript):
+                    #
+                    #     // ...
+                    #
+                    #     var protoToCssColor = function(rgb_color) {
+                    #        var redFrac = rgb_color.red || 0.0;
+                    #        var greenFrac = rgb_color.green || 0.0;
+                    #        var blueFrac = rgb_color.blue || 0.0;
+                    #        var red = Math.floor(redFrac * 255);
+                    #        var green = Math.floor(greenFrac * 255);
+                    #        var blue = Math.floor(blueFrac * 255);
+                    #
+                    #        if (!('alpha' in rgb_color)) {
+                    #           return rgbToCssColor_(red, green, blue);
+                    #        }
+                    #
+                    #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                    #        var rgbParams = [red, green, blue].join(',');
+                    #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                    #     };
+                    #
+                    #     var rgbToCssColor_ = function(red, green, blue) {
+                    #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                    #       var hexString = rgbNumber.toString(16);
+                    #       var missingZeros = 6 - hexString.length;
+                    #       var resultBuilder = ['#'];
+                    #       for (var i = 0; i < missingZeros; i++) {
+                    #          resultBuilder.push('0');
+                    #       }
+                    #       resultBuilder.push(hexString);
+                    #       return resultBuilder.join('');
+                    #     };
+                    #
+                    #     // ...
+                  "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                  "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                      # the final pixel color is defined by the equation:
+                      #
+                      #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                      #
+                      # This means that a value of 1.0 corresponds to a solid color, whereas
+                      # a value of 0.0 corresponds to a completely transparent color. This
+                      # uses a wrapper message rather than a simple float scalar so that it is
+                      # possible to distinguish between a default value and the value being unset.
+                      # If omitted, this color object is to be rendered as a solid color
+                      # (as if the alpha value had been explicitly given with a value of 1.0).
+                  "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                  "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                },
+                "type": "A String", # How the value should be interpreted.
+                "value": "A String", # The value this interpolation point uses.  May be a formula.
+                    # Unused if type is MIN or
+                    # MAX.
+              },
+              "midpoint": { # A single interpolation point a gradient conditional format. # An optional midway interpolation point.
+                  # These pin the gradient color scale according to the color,
+                  # type and value chosen.
+                "color": { # Represents a color in the RGBA color space. This representation is designed # The color this interpolation point should use.
+                    # for simplicity of conversion to/from color representations in various
+                    # languages over compactness; for example, the fields of this representation
+                    # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                    # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                    # method in iOS; and, with just a little work, it can be easily formatted into
+                    # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                    #
+                    # Example (Java):
+                    #
+                    #      import com.google.type.Color;
+                    #
+                    #      // ...
+                    #      public static java.awt.Color fromProto(Color protocolor) {
+                    #        float alpha = protocolor.hasAlpha()
+                    #            ? protocolor.getAlpha().getValue()
+                    #            : 1.0;
+                    #
+                    #        return new java.awt.Color(
+                    #            protocolor.getRed(),
+                    #            protocolor.getGreen(),
+                    #            protocolor.getBlue(),
+                    #            alpha);
+                    #      }
+                    #
+                    #      public static Color toProto(java.awt.Color color) {
+                    #        float red = (float) color.getRed();
+                    #        float green = (float) color.getGreen();
+                    #        float blue = (float) color.getBlue();
+                    #        float denominator = 255.0;
+                    #        Color.Builder resultBuilder =
+                    #            Color
+                    #                .newBuilder()
+                    #                .setRed(red / denominator)
+                    #                .setGreen(green / denominator)
+                    #                .setBlue(blue / denominator);
+                    #        int alpha = color.getAlpha();
+                    #        if (alpha != 255) {
+                    #          result.setAlpha(
+                    #              FloatValue
+                    #                  .newBuilder()
+                    #                  .setValue(((float) alpha) / denominator)
+                    #                  .build());
+                    #        }
+                    #        return resultBuilder.build();
+                    #      }
+                    #      // ...
+                    #
+                    # Example (iOS / Obj-C):
+                    #
+                    #      // ...
+                    #      static UIColor* fromProto(Color* protocolor) {
+                    #         float red = [protocolor red];
+                    #         float green = [protocolor green];
+                    #         float blue = [protocolor blue];
+                    #         FloatValue* alpha_wrapper = [protocolor alpha];
+                    #         float alpha = 1.0;
+                    #         if (alpha_wrapper != nil) {
+                    #           alpha = [alpha_wrapper value];
+                    #         }
+                    #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                    #      }
+                    #
+                    #      static Color* toProto(UIColor* color) {
+                    #          CGFloat red, green, blue, alpha;
+                    #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                    #            return nil;
+                    #          }
+                    #          Color* result = [Color alloc] init];
+                    #          [result setRed:red];
+                    #          [result setGreen:green];
+                    #          [result setBlue:blue];
+                    #          if (alpha <= 0.9999) {
+                    #            [result setAlpha:floatWrapperWithValue(alpha)];
+                    #          }
+                    #          [result autorelease];
+                    #          return result;
+                    #     }
+                    #     // ...
+                    #
+                    #  Example (JavaScript):
+                    #
+                    #     // ...
+                    #
+                    #     var protoToCssColor = function(rgb_color) {
+                    #        var redFrac = rgb_color.red || 0.0;
+                    #        var greenFrac = rgb_color.green || 0.0;
+                    #        var blueFrac = rgb_color.blue || 0.0;
+                    #        var red = Math.floor(redFrac * 255);
+                    #        var green = Math.floor(greenFrac * 255);
+                    #        var blue = Math.floor(blueFrac * 255);
+                    #
+                    #        if (!('alpha' in rgb_color)) {
+                    #           return rgbToCssColor_(red, green, blue);
+                    #        }
+                    #
+                    #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                    #        var rgbParams = [red, green, blue].join(',');
+                    #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                    #     };
+                    #
+                    #     var rgbToCssColor_ = function(red, green, blue) {
+                    #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                    #       var hexString = rgbNumber.toString(16);
+                    #       var missingZeros = 6 - hexString.length;
+                    #       var resultBuilder = ['#'];
+                    #       for (var i = 0; i < missingZeros; i++) {
+                    #          resultBuilder.push('0');
+                    #       }
+                    #       resultBuilder.push(hexString);
+                    #       return resultBuilder.join('');
+                    #     };
+                    #
+                    #     // ...
+                  "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                  "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                      # the final pixel color is defined by the equation:
+                      #
+                      #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                      #
+                      # This means that a value of 1.0 corresponds to a solid color, whereas
+                      # a value of 0.0 corresponds to a completely transparent color. This
+                      # uses a wrapper message rather than a simple float scalar so that it is
+                      # possible to distinguish between a default value and the value being unset.
+                      # If omitted, this color object is to be rendered as a solid color
+                      # (as if the alpha value had been explicitly given with a value of 1.0).
+                  "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                  "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                },
+                "type": "A String", # How the value should be interpreted.
+                "value": "A String", # The value this interpolation point uses.  May be a formula.
+                    # Unused if type is MIN or
+                    # MAX.
+              },
+              "minpoint": { # A single interpolation point a gradient conditional format. # The starting interpolation point.
+                  # These pin the gradient color scale according to the color,
+                  # type and value chosen.
+                "color": { # Represents a color in the RGBA color space. This representation is designed # The color this interpolation point should use.
+                    # for simplicity of conversion to/from color representations in various
+                    # languages over compactness; for example, the fields of this representation
+                    # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                    # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                    # method in iOS; and, with just a little work, it can be easily formatted into
+                    # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                    #
+                    # Example (Java):
+                    #
+                    #      import com.google.type.Color;
+                    #
+                    #      // ...
+                    #      public static java.awt.Color fromProto(Color protocolor) {
+                    #        float alpha = protocolor.hasAlpha()
+                    #            ? protocolor.getAlpha().getValue()
+                    #            : 1.0;
+                    #
+                    #        return new java.awt.Color(
+                    #            protocolor.getRed(),
+                    #            protocolor.getGreen(),
+                    #            protocolor.getBlue(),
+                    #            alpha);
+                    #      }
+                    #
+                    #      public static Color toProto(java.awt.Color color) {
+                    #        float red = (float) color.getRed();
+                    #        float green = (float) color.getGreen();
+                    #        float blue = (float) color.getBlue();
+                    #        float denominator = 255.0;
+                    #        Color.Builder resultBuilder =
+                    #            Color
+                    #                .newBuilder()
+                    #                .setRed(red / denominator)
+                    #                .setGreen(green / denominator)
+                    #                .setBlue(blue / denominator);
+                    #        int alpha = color.getAlpha();
+                    #        if (alpha != 255) {
+                    #          result.setAlpha(
+                    #              FloatValue
+                    #                  .newBuilder()
+                    #                  .setValue(((float) alpha) / denominator)
+                    #                  .build());
+                    #        }
+                    #        return resultBuilder.build();
+                    #      }
+                    #      // ...
+                    #
+                    # Example (iOS / Obj-C):
+                    #
+                    #      // ...
+                    #      static UIColor* fromProto(Color* protocolor) {
+                    #         float red = [protocolor red];
+                    #         float green = [protocolor green];
+                    #         float blue = [protocolor blue];
+                    #         FloatValue* alpha_wrapper = [protocolor alpha];
+                    #         float alpha = 1.0;
+                    #         if (alpha_wrapper != nil) {
+                    #           alpha = [alpha_wrapper value];
+                    #         }
+                    #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                    #      }
+                    #
+                    #      static Color* toProto(UIColor* color) {
+                    #          CGFloat red, green, blue, alpha;
+                    #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                    #            return nil;
+                    #          }
+                    #          Color* result = [Color alloc] init];
+                    #          [result setRed:red];
+                    #          [result setGreen:green];
+                    #          [result setBlue:blue];
+                    #          if (alpha <= 0.9999) {
+                    #            [result setAlpha:floatWrapperWithValue(alpha)];
+                    #          }
+                    #          [result autorelease];
+                    #          return result;
+                    #     }
+                    #     // ...
+                    #
+                    #  Example (JavaScript):
+                    #
+                    #     // ...
+                    #
+                    #     var protoToCssColor = function(rgb_color) {
+                    #        var redFrac = rgb_color.red || 0.0;
+                    #        var greenFrac = rgb_color.green || 0.0;
+                    #        var blueFrac = rgb_color.blue || 0.0;
+                    #        var red = Math.floor(redFrac * 255);
+                    #        var green = Math.floor(greenFrac * 255);
+                    #        var blue = Math.floor(blueFrac * 255);
+                    #
+                    #        if (!('alpha' in rgb_color)) {
+                    #           return rgbToCssColor_(red, green, blue);
+                    #        }
+                    #
+                    #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                    #        var rgbParams = [red, green, blue].join(',');
+                    #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                    #     };
+                    #
+                    #     var rgbToCssColor_ = function(red, green, blue) {
+                    #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                    #       var hexString = rgbNumber.toString(16);
+                    #       var missingZeros = 6 - hexString.length;
+                    #       var resultBuilder = ['#'];
+                    #       for (var i = 0; i < missingZeros; i++) {
+                    #          resultBuilder.push('0');
+                    #       }
+                    #       resultBuilder.push(hexString);
+                    #       return resultBuilder.join('');
+                    #     };
+                    #
+                    #     // ...
+                  "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                  "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                      # the final pixel color is defined by the equation:
+                      #
+                      #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                      #
+                      # This means that a value of 1.0 corresponds to a solid color, whereas
+                      # a value of 0.0 corresponds to a completely transparent color. This
+                      # uses a wrapper message rather than a simple float scalar so that it is
+                      # possible to distinguish between a default value and the value being unset.
+                      # If omitted, this color object is to be rendered as a solid color
+                      # (as if the alpha value had been explicitly given with a value of 1.0).
+                  "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                  "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                },
+                "type": "A String", # How the value should be interpreted.
+                "value": "A String", # The value this interpolation point uses.  May be a formula.
+                    # Unused if type is MIN or
+                    # MAX.
+              },
+            },
+          },
+        },
+        "updateProtectedRange": { # Updates an existing protected range with the specified # Updates a protected range.
+            # protectedRangeId.
+          "fields": "A String", # The fields that should be updated.  At least one field must be specified.
+              # The root `protectedRange` is implied and should not be specified.
+              # A single `"*"` can be used as short-hand for listing every field.
+          "protectedRange": { # A protected range. # The protected range to update with the new properties. If a nonzero
+              # protectedRangeId is
+              # specified, the protected range will use that ID. (It is an error to
+              # specify the ID of a protected range that already exists.)
+            "unprotectedRanges": [ # The list of unprotected ranges within a protected sheet.
+                # Unprotected ranges are only supported on protected sheets.
+              { # A range on a sheet.
+                  # 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 grid 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.
+                "startRowIndex": 42, # The start row (inclusive) 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.
+                "endColumnIndex": 42, # The end column (exclusive) of the range, or not set if unbounded.
+              },
+            ],
+            "requestingUserCanEdit": True or False, # True if the user who requested this protected range can edit the
+                # protected area.
+                # This field is read-only.
+            "description": "A String", # The description of this protected range.
+            "namedRangeId": "A String", # The named range this protected range is backed by, if any.
+                #
+                # When writing, only one of range or namedRangeId
+                # may be set.
+            "editors": { # The editors of a protected range. # The users and groups with edit access to the protected range.
+                # This field is only visible to users with edit access to the protected
+                # range and the document.
+                # Editors are not supported with warningOnly protection.
+              "domainUsersCanEdit": True or False, # True if anyone in the document's domain has edit access to the protected
+                  # range.  Domain protection is only supported on documents within a domain.
+              "users": [ # The email addresses of users with edit access to the protected range.
+                "A String",
+              ],
+              "groups": [ # The email addresses of groups with edit access to the protected range.
+                "A String",
+              ],
+            },
+            "protectedRangeId": 42, # The ID of the protected range.
+                # This field is read-only.
+            "warningOnly": True or False, # True if this this protected range will show a warning when editing.
+                # Warning-based protection means that every user can edit data in the
+                # protected range, except editing will prompt a warning asking the user
+                # to confirm the edit.
+                #
+                # When warning: if this field is true, then editors is ignored.
+                # Additionally, if this field is changed from true to false and the
+                # `editors` field is not set (nor included in the field mask), then
+                # the editors will be set to all the editors in the document.
+            "range": { # A range on a sheet. # The range that is being protected.
+                # The range may be fully unbounded, in which case this is considered
+                # a protected sheet.
+                #
+                # When writing, only one of range or namedRangeId
+                # may be set.
+                # 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 grid 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.
+              "startRowIndex": 42, # The start row (inclusive) 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.
+              "endColumnIndex": 42, # The end column (exclusive) of the range, or not set if unbounded.
+            },
+          },
+        },
+        "deleteDimension": { # Deletes the dimensions from the sheet. # Deletes rows or columns in a sheet.
+          "range": { # A range along a single dimension on a sheet. # The dimensions to delete from the sheet.
+              # All indexes are zero-based.
+              # Indexes are half open: the start index is inclusive
+              # and the end index is exclusive.
+              # Missing indexes indicate the range is unbounded on that side.
+            "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.
+          },
+        },
+        "addProtectedRange": { # Adds a new protected range. # Adds a protected range.
+          "protectedRange": { # A protected range. # The protected range to be added.
+            "unprotectedRanges": [ # The list of unprotected ranges within a protected sheet.
+                # Unprotected ranges are only supported on protected sheets.
+              { # A range on a sheet.
+                  # 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 grid 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.
+                "startRowIndex": 42, # The start row (inclusive) 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.
+                "endColumnIndex": 42, # The end column (exclusive) of the range, or not set if unbounded.
+              },
+            ],
+            "requestingUserCanEdit": True or False, # True if the user who requested this protected range can edit the
+                # protected area.
+                # This field is read-only.
+            "description": "A String", # The description of this protected range.
+            "namedRangeId": "A String", # The named range this protected range is backed by, if any.
+                #
+                # When writing, only one of range or namedRangeId
+                # may be set.
+            "editors": { # The editors of a protected range. # The users and groups with edit access to the protected range.
+                # This field is only visible to users with edit access to the protected
+                # range and the document.
+                # Editors are not supported with warningOnly protection.
+              "domainUsersCanEdit": True or False, # True if anyone in the document's domain has edit access to the protected
+                  # range.  Domain protection is only supported on documents within a domain.
+              "users": [ # The email addresses of users with edit access to the protected range.
+                "A String",
+              ],
+              "groups": [ # The email addresses of groups with edit access to the protected range.
+                "A String",
+              ],
+            },
+            "protectedRangeId": 42, # The ID of the protected range.
+                # This field is read-only.
+            "warningOnly": True or False, # True if this this protected range will show a warning when editing.
+                # Warning-based protection means that every user can edit data in the
+                # protected range, except editing will prompt a warning asking the user
+                # to confirm the edit.
+                #
+                # When warning: if this field is true, then editors is ignored.
+                # Additionally, if this field is changed from true to false and the
+                # `editors` field is not set (nor included in the field mask), then
+                # the editors will be set to all the editors in the document.
+            "range": { # A range on a sheet. # The range that is being protected.
+                # The range may be fully unbounded, in which case this is considered
+                # a protected sheet.
+                #
+                # When writing, only one of range or namedRangeId
+                # may be set.
+                # 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 grid 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.
+              "startRowIndex": 42, # The start row (inclusive) 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.
+              "endColumnIndex": 42, # The end column (exclusive) of the range, or not set if unbounded.
+            },
+          },
+        },
+        "deleteEmbeddedObject": { # Deletes the embedded object with the given ID. # Deletes an embedded object (e.g, chart, image) in a sheet.
+          "objectId": 42, # The ID of the embedded object to delete.
+        },
+        "pasteData": { # Inserts data into the spreadsheet starting at the specified coordinate. # Pastes data (HTML or delimited) into a sheet.
+          "coordinate": { # A coordinate in a sheet. # The coordinate at which the data should start being inserted.
+              # All indexes are zero-based.
+            "rowIndex": 42, # The row index of the coordinate.
+            "columnIndex": 42, # The column index of the coordinate.
+            "sheetId": 42, # The sheet this coordinate is on.
+          },
+          "type": "A String", # How the data should be pasted.
+          "delimiter": "A String", # The delimiter in the data.
+          "html": True or False, # True if the data is HTML.
+          "data": "A String", # The data to insert.
+        },
+        "appendCells": { # Adds new cells to the last row with data in a sheet, # Appends cells to the last row with data in a sheet.
+            # inserting new rows into the sheet if necessary.
+          "fields": "A String", # The fields of CellData that should be updated.
+              # At least one field must be specified.
+              # The root is the CellData; 'row.values.' should not be specified.
+              # A single `"*"` can be used as short-hand for listing every field.
+          "rows": [ # The data to append.
+            { # Data about each cell in a row.
+              "values": [ # The values in the row, one per column.
+                { # Data about a specific cell.
+                  "pivotTable": { # A pivot table. # A pivot table anchored at this cell. The size of pivot table itself
+                      # is computed dynamically based on its data, grouping, filters, values,
+                      # etc... Only the top-left cell of the pivot table contains the pivot table
+                      # definition. The other cells will contain the calculated values of the
+                      # results of the pivot in their effectiveValue fields.
+                    "valueLayout": "A String", # Whether values should be listed horizontally (as columns)
+                        # or vertically (as rows).
+                    "rows": [ # Each row grouping in the pivot table.
+                      { # A single grouping (either row or column) in a pivot table.
+                        "showTotals": True or False, # True if the pivot table should include the totals for this grouping.
+                        "valueMetadata": [ # Metadata about values in the grouping.
+                          { # Metadata about a value in a pivot grouping.
+                            "collapsed": True or False, # True if the data corresponding to the value is collapsed.
+                            "value": { # The kinds of value that a cell in a spreadsheet can have. # The calculated value the metadata corresponds to.
+                                # (Note that formulaValue is not valid,
+                                #  because the values will be calculated.)
+                              "numberValue": 3.14, # Represents a double value.
+                                  # Note: Dates, Times and DateTimes are represented as doubles in
+                                  # "serial number" format.
+                              "boolValue": True or False, # Represents a boolean value.
+                              "formulaValue": "A String", # Represents a formula.
+                              "stringValue": "A String", # Represents a string value.
+                                  # Leading single quotes are not included. For example, if the user typed
+                                  # `'123` into the UI, this would be represented as a `stringValue` of
+                                  # `"123"`.
+                              "errorValue": { # An error in a cell. # Represents an error.
+                                  # This field is read-only.
+                                "message": "A String", # A message with more information about the error
+                                    # (in the spreadsheet's locale).
+                                "type": "A String", # The type of error.
+                              },
+                            },
+                          },
+                        ],
+                        "valueBucket": { # Information about which values in a pivot group should be used for sorting. # The bucket of the opposite pivot group to sort by.
+                            # If not specified, sorting is alphabetical by this group's values.
+                          "buckets": [ # Determines the bucket from which values are chosen to sort.
+                              #
+                              # For example, in a pivot table with one row group & two column groups,
+                              # the row group can list up to two values. The first value corresponds
+                              # to a value within the first column group, and the second value
+                              # corresponds to a value in the second column group.  If no values
+                              # are listed, this would indicate that the row should be sorted according
+                              # to the "Grand Total" over the column groups. If a single value is listed,
+                              # this would correspond to using the "Total" of that bucket.
+                            { # The kinds of value that a cell in a spreadsheet can have.
+                              "numberValue": 3.14, # Represents a double value.
+                                  # Note: Dates, Times and DateTimes are represented as doubles in
+                                  # "serial number" format.
+                              "boolValue": True or False, # Represents a boolean value.
+                              "formulaValue": "A String", # Represents a formula.
+                              "stringValue": "A String", # Represents a string value.
+                                  # Leading single quotes are not included. For example, if the user typed
+                                  # `'123` into the UI, this would be represented as a `stringValue` of
+                                  # `"123"`.
+                              "errorValue": { # An error in a cell. # Represents an error.
+                                  # This field is read-only.
+                                "message": "A String", # A message with more information about the error
+                                    # (in the spreadsheet's locale).
+                                "type": "A String", # The type of error.
+                              },
+                            },
+                          ],
+                          "valuesIndex": 42, # The offset in the [PivotTable.values] list which the values in this
+                              # grouping should be sorted by.
+                        },
+                        "sortOrder": "A String", # The order the values in this group should be sorted.
+                        "sourceColumnOffset": 42, # The column offset of the source range that this grouping is based on.
+                            #
+                            # For example, if the source was `C10:E15', a `sourceColumnOffset` of `0`
+                            # means this group refers to column `C`, whereas the offset `1` would refer
+                            # to column `D`.
+                      },
+                    ],
+                    "source": { # A range on a sheet. # The range the pivot table is reading data from.
+                        # 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 grid 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.
+                      "startRowIndex": 42, # The start row (inclusive) 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.
+                      "endColumnIndex": 42, # The end column (exclusive) of the range, or not set if unbounded.
+                    },
+                    "values": [ # A list of values to include in the pivot table.
+                      { # The definition of how a value in a pivot table should be calculated.
+                        "formula": "A String", # A custom formula to calculate the value.  The formula must start
+                            # with an `=` character.
+                        "summarizeFunction": "A String", # A function to summarize the value.
+                            # If formula is set, the only supported values are
+                            # SUM and
+                            # CUSTOM.
+                            # If sourceColumnOffset is set, then `CUSTOM`
+                            # is not supported.
+                        "sourceColumnOffset": 42, # The column offset of the source range that this value reads from.
+                            #
+                            # For example, if the source was `C10:E15', a `sourceColumnOffset` of `0`
+                            # means this value refers to column `C`, whereas the offset `1` would
+                            # refer to column `D`.
+                        "name": "A String", # A name to use for the value. This is only used if formula was set.
+                            # Otherwise, the column name is used.
+                      },
+                    ],
+                    "criteria": { # An optional mapping of filters per source column offset.
+                        #
+                        # The filters will be applied before aggregating data into the pivot table.
+                        # The map's key is the column offset of the source range that you want to
+                        # filter, and the value is the criteria for that column.
+                        #
+                        # For example, if the source was `C10:E15', a key of `0` will have the filter
+                        # for column `C`, whereas the key `1` is for column `D`.
+                      "a_key": { # Criteria for showing/hiding rows in a pivot table.
+                        "visibleValues": [ # Values that should be included.  Values not listed here are excluded.
+                          "A String",
+                        ],
+                      },
+                    },
+                    "columns": [ # Each column grouping in the pivot table.
+                      { # A single grouping (either row or column) in a pivot table.
+                        "showTotals": True or False, # True if the pivot table should include the totals for this grouping.
+                        "valueMetadata": [ # Metadata about values in the grouping.
+                          { # Metadata about a value in a pivot grouping.
+                            "collapsed": True or False, # True if the data corresponding to the value is collapsed.
+                            "value": { # The kinds of value that a cell in a spreadsheet can have. # The calculated value the metadata corresponds to.
+                                # (Note that formulaValue is not valid,
+                                #  because the values will be calculated.)
+                              "numberValue": 3.14, # Represents a double value.
+                                  # Note: Dates, Times and DateTimes are represented as doubles in
+                                  # "serial number" format.
+                              "boolValue": True or False, # Represents a boolean value.
+                              "formulaValue": "A String", # Represents a formula.
+                              "stringValue": "A String", # Represents a string value.
+                                  # Leading single quotes are not included. For example, if the user typed
+                                  # `'123` into the UI, this would be represented as a `stringValue` of
+                                  # `"123"`.
+                              "errorValue": { # An error in a cell. # Represents an error.
+                                  # This field is read-only.
+                                "message": "A String", # A message with more information about the error
+                                    # (in the spreadsheet's locale).
+                                "type": "A String", # The type of error.
+                              },
+                            },
+                          },
+                        ],
+                        "valueBucket": { # Information about which values in a pivot group should be used for sorting. # The bucket of the opposite pivot group to sort by.
+                            # If not specified, sorting is alphabetical by this group's values.
+                          "buckets": [ # Determines the bucket from which values are chosen to sort.
+                              #
+                              # For example, in a pivot table with one row group & two column groups,
+                              # the row group can list up to two values. The first value corresponds
+                              # to a value within the first column group, and the second value
+                              # corresponds to a value in the second column group.  If no values
+                              # are listed, this would indicate that the row should be sorted according
+                              # to the "Grand Total" over the column groups. If a single value is listed,
+                              # this would correspond to using the "Total" of that bucket.
+                            { # The kinds of value that a cell in a spreadsheet can have.
+                              "numberValue": 3.14, # Represents a double value.
+                                  # Note: Dates, Times and DateTimes are represented as doubles in
+                                  # "serial number" format.
+                              "boolValue": True or False, # Represents a boolean value.
+                              "formulaValue": "A String", # Represents a formula.
+                              "stringValue": "A String", # Represents a string value.
+                                  # Leading single quotes are not included. For example, if the user typed
+                                  # `'123` into the UI, this would be represented as a `stringValue` of
+                                  # `"123"`.
+                              "errorValue": { # An error in a cell. # Represents an error.
+                                  # This field is read-only.
+                                "message": "A String", # A message with more information about the error
+                                    # (in the spreadsheet's locale).
+                                "type": "A String", # The type of error.
+                              },
+                            },
+                          ],
+                          "valuesIndex": 42, # The offset in the [PivotTable.values] list which the values in this
+                              # grouping should be sorted by.
+                        },
+                        "sortOrder": "A String", # The order the values in this group should be sorted.
+                        "sourceColumnOffset": 42, # The column offset of the source range that this grouping is based on.
+                            #
+                            # For example, if the source was `C10:E15', a `sourceColumnOffset` of `0`
+                            # means this group refers to column `C`, whereas the offset `1` would refer
+                            # to column `D`.
+                      },
+                    ],
+                  },
+                  "hyperlink": "A String", # A hyperlink this cell points to, if any.
+                      # This field is read-only.  (To set it, use a `=HYPERLINK` formula.)
+                  "effectiveValue": { # The kinds of value that a cell in a spreadsheet can have. # The effective value of the cell. For cells with formulas, this will be
+                      # the calculated value.  For cells with literals, this will be
+                      # the same as the user_entered_value.
+                      # This field is read-only.
+                    "numberValue": 3.14, # Represents a double value.
+                        # Note: Dates, Times and DateTimes are represented as doubles in
+                        # "serial number" format.
+                    "boolValue": True or False, # Represents a boolean value.
+                    "formulaValue": "A String", # Represents a formula.
+                    "stringValue": "A String", # Represents a string value.
+                        # Leading single quotes are not included. For example, if the user typed
+                        # `'123` into the UI, this would be represented as a `stringValue` of
+                        # `"123"`.
+                    "errorValue": { # An error in a cell. # Represents an error.
+                        # This field is read-only.
+                      "message": "A String", # A message with more information about the error
+                          # (in the spreadsheet's locale).
+                      "type": "A String", # The type of error.
+                    },
+                  },
+                  "formattedValue": "A String", # The formatted value of the cell.
+                      # This is the value as it's shown to the user.
+                      # This field is read-only.
+                  "userEnteredValue": { # The kinds of value that a cell in a spreadsheet can have. # The value the user entered in the cell. e.g, `1234`, `'Hello'`, or `=NOW()`
+                      # Note: Dates, Times and DateTimes are represented as doubles in
+                      # serial number format.
+                    "numberValue": 3.14, # Represents a double value.
+                        # Note: Dates, Times and DateTimes are represented as doubles in
+                        # "serial number" format.
+                    "boolValue": True or False, # Represents a boolean value.
+                    "formulaValue": "A String", # Represents a formula.
+                    "stringValue": "A String", # Represents a string value.
+                        # Leading single quotes are not included. For example, if the user typed
+                        # `'123` into the UI, this would be represented as a `stringValue` of
+                        # `"123"`.
+                    "errorValue": { # An error in a cell. # Represents an error.
+                        # This field is read-only.
+                      "message": "A String", # A message with more information about the error
+                          # (in the spreadsheet's locale).
+                      "type": "A String", # The type of error.
+                    },
+                  },
+                  "note": "A String", # Any note on the cell.
+                  "effectiveFormat": { # The format of a cell. # The effective format being used by the cell.
+                      # This includes the results of applying any conditional formatting and,
+                      # if the cell contains a formula, the computed number format.
+                      # If the effective format is the default format, effective format will
+                      # not be written.
+                      # This field is read-only.
+                    "numberFormat": { # The number format of a cell. # A format describing how number values should be represented to the user.
+                        # When updating, all fields must be set.
+                      "pattern": "A String", # Pattern string used for formatting.
+                      "type": "A String", # The type of the number format.
+                    },
+                    "textDirection": "A String", # The direction of the text in the cell.
+                    "padding": { # The amount of padding around the cell, in pixels. # The padding of the cell.
+                        # When updating padding, every field must be specified.
+                      "top": 42, # The top padding of the cell.
+                      "right": 42, # The right padding of the cell.
+                      "bottom": 42, # The bottom padding of the cell.
+                      "left": 42, # The left padding of the cell.
+                    },
+                    "horizontalAlignment": "A String", # The horizontal alignment of the value in cell.
+                    "backgroundColor": { # Represents a color in the RGBA color space. This representation is designed # The background color of the cell.
+                        # for simplicity of conversion to/from color representations in various
+                        # languages over compactness; for example, the fields of this representation
+                        # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                        # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                        # method in iOS; and, with just a little work, it can be easily formatted into
+                        # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                        #
+                        # Example (Java):
+                        #
+                        #      import com.google.type.Color;
+                        #
+                        #      // ...
+                        #      public static java.awt.Color fromProto(Color protocolor) {
+                        #        float alpha = protocolor.hasAlpha()
+                        #            ? protocolor.getAlpha().getValue()
+                        #            : 1.0;
+                        #
+                        #        return new java.awt.Color(
+                        #            protocolor.getRed(),
+                        #            protocolor.getGreen(),
+                        #            protocolor.getBlue(),
+                        #            alpha);
+                        #      }
+                        #
+                        #      public static Color toProto(java.awt.Color color) {
+                        #        float red = (float) color.getRed();
+                        #        float green = (float) color.getGreen();
+                        #        float blue = (float) color.getBlue();
+                        #        float denominator = 255.0;
+                        #        Color.Builder resultBuilder =
+                        #            Color
+                        #                .newBuilder()
+                        #                .setRed(red / denominator)
+                        #                .setGreen(green / denominator)
+                        #                .setBlue(blue / denominator);
+                        #        int alpha = color.getAlpha();
+                        #        if (alpha != 255) {
+                        #          result.setAlpha(
+                        #              FloatValue
+                        #                  .newBuilder()
+                        #                  .setValue(((float) alpha) / denominator)
+                        #                  .build());
+                        #        }
+                        #        return resultBuilder.build();
+                        #      }
+                        #      // ...
+                        #
+                        # Example (iOS / Obj-C):
+                        #
+                        #      // ...
+                        #      static UIColor* fromProto(Color* protocolor) {
+                        #         float red = [protocolor red];
+                        #         float green = [protocolor green];
+                        #         float blue = [protocolor blue];
+                        #         FloatValue* alpha_wrapper = [protocolor alpha];
+                        #         float alpha = 1.0;
+                        #         if (alpha_wrapper != nil) {
+                        #           alpha = [alpha_wrapper value];
+                        #         }
+                        #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                        #      }
+                        #
+                        #      static Color* toProto(UIColor* color) {
+                        #          CGFloat red, green, blue, alpha;
+                        #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                        #            return nil;
+                        #          }
+                        #          Color* result = [Color alloc] init];
+                        #          [result setRed:red];
+                        #          [result setGreen:green];
+                        #          [result setBlue:blue];
+                        #          if (alpha <= 0.9999) {
+                        #            [result setAlpha:floatWrapperWithValue(alpha)];
+                        #          }
+                        #          [result autorelease];
+                        #          return result;
+                        #     }
+                        #     // ...
+                        #
+                        #  Example (JavaScript):
+                        #
+                        #     // ...
+                        #
+                        #     var protoToCssColor = function(rgb_color) {
+                        #        var redFrac = rgb_color.red || 0.0;
+                        #        var greenFrac = rgb_color.green || 0.0;
+                        #        var blueFrac = rgb_color.blue || 0.0;
+                        #        var red = Math.floor(redFrac * 255);
+                        #        var green = Math.floor(greenFrac * 255);
+                        #        var blue = Math.floor(blueFrac * 255);
+                        #
+                        #        if (!('alpha' in rgb_color)) {
+                        #           return rgbToCssColor_(red, green, blue);
+                        #        }
+                        #
+                        #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                        #        var rgbParams = [red, green, blue].join(',');
+                        #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                        #     };
+                        #
+                        #     var rgbToCssColor_ = function(red, green, blue) {
+                        #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                        #       var hexString = rgbNumber.toString(16);
+                        #       var missingZeros = 6 - hexString.length;
+                        #       var resultBuilder = ['#'];
+                        #       for (var i = 0; i < missingZeros; i++) {
+                        #          resultBuilder.push('0');
+                        #       }
+                        #       resultBuilder.push(hexString);
+                        #       return resultBuilder.join('');
+                        #     };
+                        #
+                        #     // ...
+                      "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                      "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                          # the final pixel color is defined by the equation:
+                          #
+                          #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                          #
+                          # This means that a value of 1.0 corresponds to a solid color, whereas
+                          # a value of 0.0 corresponds to a completely transparent color. This
+                          # uses a wrapper message rather than a simple float scalar so that it is
+                          # possible to distinguish between a default value and the value being unset.
+                          # If omitted, this color object is to be rendered as a solid color
+                          # (as if the alpha value had been explicitly given with a value of 1.0).
+                      "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                      "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                    },
+                    "verticalAlignment": "A String", # The vertical alignment of the value in cell.
+                    "textFormat": { # The format of a run of text in a cell. # The format of the text in the cell (unless overridden by a format run).
+                        # Absent values indicate that the field isn't specified.
+                      "foregroundColor": { # Represents a color in the RGBA color space. This representation is designed # The foreground color of the text.
+                          # for simplicity of conversion to/from color representations in various
+                          # languages over compactness; for example, the fields of this representation
+                          # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                          # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                          # method in iOS; and, with just a little work, it can be easily formatted into
+                          # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                          #
+                          # Example (Java):
+                          #
+                          #      import com.google.type.Color;
+                          #
+                          #      // ...
+                          #      public static java.awt.Color fromProto(Color protocolor) {
+                          #        float alpha = protocolor.hasAlpha()
+                          #            ? protocolor.getAlpha().getValue()
+                          #            : 1.0;
+                          #
+                          #        return new java.awt.Color(
+                          #            protocolor.getRed(),
+                          #            protocolor.getGreen(),
+                          #            protocolor.getBlue(),
+                          #            alpha);
+                          #      }
+                          #
+                          #      public static Color toProto(java.awt.Color color) {
+                          #        float red = (float) color.getRed();
+                          #        float green = (float) color.getGreen();
+                          #        float blue = (float) color.getBlue();
+                          #        float denominator = 255.0;
+                          #        Color.Builder resultBuilder =
+                          #            Color
+                          #                .newBuilder()
+                          #                .setRed(red / denominator)
+                          #                .setGreen(green / denominator)
+                          #                .setBlue(blue / denominator);
+                          #        int alpha = color.getAlpha();
+                          #        if (alpha != 255) {
+                          #          result.setAlpha(
+                          #              FloatValue
+                          #                  .newBuilder()
+                          #                  .setValue(((float) alpha) / denominator)
+                          #                  .build());
+                          #        }
+                          #        return resultBuilder.build();
+                          #      }
+                          #      // ...
+                          #
+                          # Example (iOS / Obj-C):
+                          #
+                          #      // ...
+                          #      static UIColor* fromProto(Color* protocolor) {
+                          #         float red = [protocolor red];
+                          #         float green = [protocolor green];
+                          #         float blue = [protocolor blue];
+                          #         FloatValue* alpha_wrapper = [protocolor alpha];
+                          #         float alpha = 1.0;
+                          #         if (alpha_wrapper != nil) {
+                          #           alpha = [alpha_wrapper value];
+                          #         }
+                          #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                          #      }
+                          #
+                          #      static Color* toProto(UIColor* color) {
+                          #          CGFloat red, green, blue, alpha;
+                          #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                          #            return nil;
+                          #          }
+                          #          Color* result = [Color alloc] init];
+                          #          [result setRed:red];
+                          #          [result setGreen:green];
+                          #          [result setBlue:blue];
+                          #          if (alpha <= 0.9999) {
+                          #            [result setAlpha:floatWrapperWithValue(alpha)];
+                          #          }
+                          #          [result autorelease];
+                          #          return result;
+                          #     }
+                          #     // ...
+                          #
+                          #  Example (JavaScript):
+                          #
+                          #     // ...
+                          #
+                          #     var protoToCssColor = function(rgb_color) {
+                          #        var redFrac = rgb_color.red || 0.0;
+                          #        var greenFrac = rgb_color.green || 0.0;
+                          #        var blueFrac = rgb_color.blue || 0.0;
+                          #        var red = Math.floor(redFrac * 255);
+                          #        var green = Math.floor(greenFrac * 255);
+                          #        var blue = Math.floor(blueFrac * 255);
+                          #
+                          #        if (!('alpha' in rgb_color)) {
+                          #           return rgbToCssColor_(red, green, blue);
+                          #        }
+                          #
+                          #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                          #        var rgbParams = [red, green, blue].join(',');
+                          #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                          #     };
+                          #
+                          #     var rgbToCssColor_ = function(red, green, blue) {
+                          #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                          #       var hexString = rgbNumber.toString(16);
+                          #       var missingZeros = 6 - hexString.length;
+                          #       var resultBuilder = ['#'];
+                          #       for (var i = 0; i < missingZeros; i++) {
+                          #          resultBuilder.push('0');
+                          #       }
+                          #       resultBuilder.push(hexString);
+                          #       return resultBuilder.join('');
+                          #     };
+                          #
+                          #     // ...
+                        "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                        "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                            # the final pixel color is defined by the equation:
+                            #
+                            #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                            #
+                            # This means that a value of 1.0 corresponds to a solid color, whereas
+                            # a value of 0.0 corresponds to a completely transparent color. This
+                            # uses a wrapper message rather than a simple float scalar so that it is
+                            # possible to distinguish between a default value and the value being unset.
+                            # If omitted, this color object is to be rendered as a solid color
+                            # (as if the alpha value had been explicitly given with a value of 1.0).
+                        "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                        "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                      },
+                      "bold": True or False, # True if the text is bold.
+                      "strikethrough": True or False, # True if the text has a strikethrough.
+                      "fontFamily": "A String", # The font family.
+                      "fontSize": 42, # The size of the font.
+                      "italic": True or False, # True if the text is italicized.
+                      "underline": True or False, # True if the text is underlined.
+                    },
+                    "hyperlinkDisplayType": "A String", # How a hyperlink, if it exists, should be displayed in the cell.
+                    "borders": { # The borders of the cell. # The borders of the cell.
+                      "top": { # A border along a cell. # The top border of the cell.
+                        "color": { # Represents a color in the RGBA color space. This representation is designed # The color of the border.
+                            # for simplicity of conversion to/from color representations in various
+                            # languages over compactness; for example, the fields of this representation
+                            # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                            # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                            # method in iOS; and, with just a little work, it can be easily formatted into
+                            # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                            #
+                            # Example (Java):
+                            #
+                            #      import com.google.type.Color;
+                            #
+                            #      // ...
+                            #      public static java.awt.Color fromProto(Color protocolor) {
+                            #        float alpha = protocolor.hasAlpha()
+                            #            ? protocolor.getAlpha().getValue()
+                            #            : 1.0;
+                            #
+                            #        return new java.awt.Color(
+                            #            protocolor.getRed(),
+                            #            protocolor.getGreen(),
+                            #            protocolor.getBlue(),
+                            #            alpha);
+                            #      }
+                            #
+                            #      public static Color toProto(java.awt.Color color) {
+                            #        float red = (float) color.getRed();
+                            #        float green = (float) color.getGreen();
+                            #        float blue = (float) color.getBlue();
+                            #        float denominator = 255.0;
+                            #        Color.Builder resultBuilder =
+                            #            Color
+                            #                .newBuilder()
+                            #                .setRed(red / denominator)
+                            #                .setGreen(green / denominator)
+                            #                .setBlue(blue / denominator);
+                            #        int alpha = color.getAlpha();
+                            #        if (alpha != 255) {
+                            #          result.setAlpha(
+                            #              FloatValue
+                            #                  .newBuilder()
+                            #                  .setValue(((float) alpha) / denominator)
+                            #                  .build());
+                            #        }
+                            #        return resultBuilder.build();
+                            #      }
+                            #      // ...
+                            #
+                            # Example (iOS / Obj-C):
+                            #
+                            #      // ...
+                            #      static UIColor* fromProto(Color* protocolor) {
+                            #         float red = [protocolor red];
+                            #         float green = [protocolor green];
+                            #         float blue = [protocolor blue];
+                            #         FloatValue* alpha_wrapper = [protocolor alpha];
+                            #         float alpha = 1.0;
+                            #         if (alpha_wrapper != nil) {
+                            #           alpha = [alpha_wrapper value];
+                            #         }
+                            #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                            #      }
+                            #
+                            #      static Color* toProto(UIColor* color) {
+                            #          CGFloat red, green, blue, alpha;
+                            #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                            #            return nil;
+                            #          }
+                            #          Color* result = [Color alloc] init];
+                            #          [result setRed:red];
+                            #          [result setGreen:green];
+                            #          [result setBlue:blue];
+                            #          if (alpha <= 0.9999) {
+                            #            [result setAlpha:floatWrapperWithValue(alpha)];
+                            #          }
+                            #          [result autorelease];
+                            #          return result;
+                            #     }
+                            #     // ...
+                            #
+                            #  Example (JavaScript):
+                            #
+                            #     // ...
+                            #
+                            #     var protoToCssColor = function(rgb_color) {
+                            #        var redFrac = rgb_color.red || 0.0;
+                            #        var greenFrac = rgb_color.green || 0.0;
+                            #        var blueFrac = rgb_color.blue || 0.0;
+                            #        var red = Math.floor(redFrac * 255);
+                            #        var green = Math.floor(greenFrac * 255);
+                            #        var blue = Math.floor(blueFrac * 255);
+                            #
+                            #        if (!('alpha' in rgb_color)) {
+                            #           return rgbToCssColor_(red, green, blue);
+                            #        }
+                            #
+                            #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                            #        var rgbParams = [red, green, blue].join(',');
+                            #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                            #     };
+                            #
+                            #     var rgbToCssColor_ = function(red, green, blue) {
+                            #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                            #       var hexString = rgbNumber.toString(16);
+                            #       var missingZeros = 6 - hexString.length;
+                            #       var resultBuilder = ['#'];
+                            #       for (var i = 0; i < missingZeros; i++) {
+                            #          resultBuilder.push('0');
+                            #       }
+                            #       resultBuilder.push(hexString);
+                            #       return resultBuilder.join('');
+                            #     };
+                            #
+                            #     // ...
+                          "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                          "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                              # the final pixel color is defined by the equation:
+                              #
+                              #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                              #
+                              # This means that a value of 1.0 corresponds to a solid color, whereas
+                              # a value of 0.0 corresponds to a completely transparent color. This
+                              # uses a wrapper message rather than a simple float scalar so that it is
+                              # possible to distinguish between a default value and the value being unset.
+                              # If omitted, this color object is to be rendered as a solid color
+                              # (as if the alpha value had been explicitly given with a value of 1.0).
+                          "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                          "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                        },
+                        "width": 42, # The width of the border, in pixels.
+                            # Border widths must be between 0 and 3 pixels.
+                        "style": "A String", # The style of the border.
+                      },
+                      "right": { # A border along a cell. # The right border of the cell.
+                        "color": { # Represents a color in the RGBA color space. This representation is designed # The color of the border.
+                            # for simplicity of conversion to/from color representations in various
+                            # languages over compactness; for example, the fields of this representation
+                            # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                            # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                            # method in iOS; and, with just a little work, it can be easily formatted into
+                            # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                            #
+                            # Example (Java):
+                            #
+                            #      import com.google.type.Color;
+                            #
+                            #      // ...
+                            #      public static java.awt.Color fromProto(Color protocolor) {
+                            #        float alpha = protocolor.hasAlpha()
+                            #            ? protocolor.getAlpha().getValue()
+                            #            : 1.0;
+                            #
+                            #        return new java.awt.Color(
+                            #            protocolor.getRed(),
+                            #            protocolor.getGreen(),
+                            #            protocolor.getBlue(),
+                            #            alpha);
+                            #      }
+                            #
+                            #      public static Color toProto(java.awt.Color color) {
+                            #        float red = (float) color.getRed();
+                            #        float green = (float) color.getGreen();
+                            #        float blue = (float) color.getBlue();
+                            #        float denominator = 255.0;
+                            #        Color.Builder resultBuilder =
+                            #            Color
+                            #                .newBuilder()
+                            #                .setRed(red / denominator)
+                            #                .setGreen(green / denominator)
+                            #                .setBlue(blue / denominator);
+                            #        int alpha = color.getAlpha();
+                            #        if (alpha != 255) {
+                            #          result.setAlpha(
+                            #              FloatValue
+                            #                  .newBuilder()
+                            #                  .setValue(((float) alpha) / denominator)
+                            #                  .build());
+                            #        }
+                            #        return resultBuilder.build();
+                            #      }
+                            #      // ...
+                            #
+                            # Example (iOS / Obj-C):
+                            #
+                            #      // ...
+                            #      static UIColor* fromProto(Color* protocolor) {
+                            #         float red = [protocolor red];
+                            #         float green = [protocolor green];
+                            #         float blue = [protocolor blue];
+                            #         FloatValue* alpha_wrapper = [protocolor alpha];
+                            #         float alpha = 1.0;
+                            #         if (alpha_wrapper != nil) {
+                            #           alpha = [alpha_wrapper value];
+                            #         }
+                            #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                            #      }
+                            #
+                            #      static Color* toProto(UIColor* color) {
+                            #          CGFloat red, green, blue, alpha;
+                            #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                            #            return nil;
+                            #          }
+                            #          Color* result = [Color alloc] init];
+                            #          [result setRed:red];
+                            #          [result setGreen:green];
+                            #          [result setBlue:blue];
+                            #          if (alpha <= 0.9999) {
+                            #            [result setAlpha:floatWrapperWithValue(alpha)];
+                            #          }
+                            #          [result autorelease];
+                            #          return result;
+                            #     }
+                            #     // ...
+                            #
+                            #  Example (JavaScript):
+                            #
+                            #     // ...
+                            #
+                            #     var protoToCssColor = function(rgb_color) {
+                            #        var redFrac = rgb_color.red || 0.0;
+                            #        var greenFrac = rgb_color.green || 0.0;
+                            #        var blueFrac = rgb_color.blue || 0.0;
+                            #        var red = Math.floor(redFrac * 255);
+                            #        var green = Math.floor(greenFrac * 255);
+                            #        var blue = Math.floor(blueFrac * 255);
+                            #
+                            #        if (!('alpha' in rgb_color)) {
+                            #           return rgbToCssColor_(red, green, blue);
+                            #        }
+                            #
+                            #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                            #        var rgbParams = [red, green, blue].join(',');
+                            #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                            #     };
+                            #
+                            #     var rgbToCssColor_ = function(red, green, blue) {
+                            #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                            #       var hexString = rgbNumber.toString(16);
+                            #       var missingZeros = 6 - hexString.length;
+                            #       var resultBuilder = ['#'];
+                            #       for (var i = 0; i < missingZeros; i++) {
+                            #          resultBuilder.push('0');
+                            #       }
+                            #       resultBuilder.push(hexString);
+                            #       return resultBuilder.join('');
+                            #     };
+                            #
+                            #     // ...
+                          "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                          "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                              # the final pixel color is defined by the equation:
+                              #
+                              #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                              #
+                              # This means that a value of 1.0 corresponds to a solid color, whereas
+                              # a value of 0.0 corresponds to a completely transparent color. This
+                              # uses a wrapper message rather than a simple float scalar so that it is
+                              # possible to distinguish between a default value and the value being unset.
+                              # If omitted, this color object is to be rendered as a solid color
+                              # (as if the alpha value had been explicitly given with a value of 1.0).
+                          "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                          "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                        },
+                        "width": 42, # The width of the border, in pixels.
+                            # Border widths must be between 0 and 3 pixels.
+                        "style": "A String", # The style of the border.
+                      },
+                      "bottom": { # A border along a cell. # The bottom border of the cell.
+                        "color": { # Represents a color in the RGBA color space. This representation is designed # The color of the border.
+                            # for simplicity of conversion to/from color representations in various
+                            # languages over compactness; for example, the fields of this representation
+                            # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                            # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                            # method in iOS; and, with just a little work, it can be easily formatted into
+                            # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                            #
+                            # Example (Java):
+                            #
+                            #      import com.google.type.Color;
+                            #
+                            #      // ...
+                            #      public static java.awt.Color fromProto(Color protocolor) {
+                            #        float alpha = protocolor.hasAlpha()
+                            #            ? protocolor.getAlpha().getValue()
+                            #            : 1.0;
+                            #
+                            #        return new java.awt.Color(
+                            #            protocolor.getRed(),
+                            #            protocolor.getGreen(),
+                            #            protocolor.getBlue(),
+                            #            alpha);
+                            #      }
+                            #
+                            #      public static Color toProto(java.awt.Color color) {
+                            #        float red = (float) color.getRed();
+                            #        float green = (float) color.getGreen();
+                            #        float blue = (float) color.getBlue();
+                            #        float denominator = 255.0;
+                            #        Color.Builder resultBuilder =
+                            #            Color
+                            #                .newBuilder()
+                            #                .setRed(red / denominator)
+                            #                .setGreen(green / denominator)
+                            #                .setBlue(blue / denominator);
+                            #        int alpha = color.getAlpha();
+                            #        if (alpha != 255) {
+                            #          result.setAlpha(
+                            #              FloatValue
+                            #                  .newBuilder()
+                            #                  .setValue(((float) alpha) / denominator)
+                            #                  .build());
+                            #        }
+                            #        return resultBuilder.build();
+                            #      }
+                            #      // ...
+                            #
+                            # Example (iOS / Obj-C):
+                            #
+                            #      // ...
+                            #      static UIColor* fromProto(Color* protocolor) {
+                            #         float red = [protocolor red];
+                            #         float green = [protocolor green];
+                            #         float blue = [protocolor blue];
+                            #         FloatValue* alpha_wrapper = [protocolor alpha];
+                            #         float alpha = 1.0;
+                            #         if (alpha_wrapper != nil) {
+                            #           alpha = [alpha_wrapper value];
+                            #         }
+                            #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                            #      }
+                            #
+                            #      static Color* toProto(UIColor* color) {
+                            #          CGFloat red, green, blue, alpha;
+                            #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                            #            return nil;
+                            #          }
+                            #          Color* result = [Color alloc] init];
+                            #          [result setRed:red];
+                            #          [result setGreen:green];
+                            #          [result setBlue:blue];
+                            #          if (alpha <= 0.9999) {
+                            #            [result setAlpha:floatWrapperWithValue(alpha)];
+                            #          }
+                            #          [result autorelease];
+                            #          return result;
+                            #     }
+                            #     // ...
+                            #
+                            #  Example (JavaScript):
+                            #
+                            #     // ...
+                            #
+                            #     var protoToCssColor = function(rgb_color) {
+                            #        var redFrac = rgb_color.red || 0.0;
+                            #        var greenFrac = rgb_color.green || 0.0;
+                            #        var blueFrac = rgb_color.blue || 0.0;
+                            #        var red = Math.floor(redFrac * 255);
+                            #        var green = Math.floor(greenFrac * 255);
+                            #        var blue = Math.floor(blueFrac * 255);
+                            #
+                            #        if (!('alpha' in rgb_color)) {
+                            #           return rgbToCssColor_(red, green, blue);
+                            #        }
+                            #
+                            #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                            #        var rgbParams = [red, green, blue].join(',');
+                            #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                            #     };
+                            #
+                            #     var rgbToCssColor_ = function(red, green, blue) {
+                            #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                            #       var hexString = rgbNumber.toString(16);
+                            #       var missingZeros = 6 - hexString.length;
+                            #       var resultBuilder = ['#'];
+                            #       for (var i = 0; i < missingZeros; i++) {
+                            #          resultBuilder.push('0');
+                            #       }
+                            #       resultBuilder.push(hexString);
+                            #       return resultBuilder.join('');
+                            #     };
+                            #
+                            #     // ...
+                          "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                          "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                              # the final pixel color is defined by the equation:
+                              #
+                              #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                              #
+                              # This means that a value of 1.0 corresponds to a solid color, whereas
+                              # a value of 0.0 corresponds to a completely transparent color. This
+                              # uses a wrapper message rather than a simple float scalar so that it is
+                              # possible to distinguish between a default value and the value being unset.
+                              # If omitted, this color object is to be rendered as a solid color
+                              # (as if the alpha value had been explicitly given with a value of 1.0).
+                          "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                          "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                        },
+                        "width": 42, # The width of the border, in pixels.
+                            # Border widths must be between 0 and 3 pixels.
+                        "style": "A String", # The style of the border.
+                      },
+                      "left": { # A border along a cell. # The left border of the cell.
+                        "color": { # Represents a color in the RGBA color space. This representation is designed # The color of the border.
+                            # for simplicity of conversion to/from color representations in various
+                            # languages over compactness; for example, the fields of this representation
+                            # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                            # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                            # method in iOS; and, with just a little work, it can be easily formatted into
+                            # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                            #
+                            # Example (Java):
+                            #
+                            #      import com.google.type.Color;
+                            #
+                            #      // ...
+                            #      public static java.awt.Color fromProto(Color protocolor) {
+                            #        float alpha = protocolor.hasAlpha()
+                            #            ? protocolor.getAlpha().getValue()
+                            #            : 1.0;
+                            #
+                            #        return new java.awt.Color(
+                            #            protocolor.getRed(),
+                            #            protocolor.getGreen(),
+                            #            protocolor.getBlue(),
+                            #            alpha);
+                            #      }
+                            #
+                            #      public static Color toProto(java.awt.Color color) {
+                            #        float red = (float) color.getRed();
+                            #        float green = (float) color.getGreen();
+                            #        float blue = (float) color.getBlue();
+                            #        float denominator = 255.0;
+                            #        Color.Builder resultBuilder =
+                            #            Color
+                            #                .newBuilder()
+                            #                .setRed(red / denominator)
+                            #                .setGreen(green / denominator)
+                            #                .setBlue(blue / denominator);
+                            #        int alpha = color.getAlpha();
+                            #        if (alpha != 255) {
+                            #          result.setAlpha(
+                            #              FloatValue
+                            #                  .newBuilder()
+                            #                  .setValue(((float) alpha) / denominator)
+                            #                  .build());
+                            #        }
+                            #        return resultBuilder.build();
+                            #      }
+                            #      // ...
+                            #
+                            # Example (iOS / Obj-C):
+                            #
+                            #      // ...
+                            #      static UIColor* fromProto(Color* protocolor) {
+                            #         float red = [protocolor red];
+                            #         float green = [protocolor green];
+                            #         float blue = [protocolor blue];
+                            #         FloatValue* alpha_wrapper = [protocolor alpha];
+                            #         float alpha = 1.0;
+                            #         if (alpha_wrapper != nil) {
+                            #           alpha = [alpha_wrapper value];
+                            #         }
+                            #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                            #      }
+                            #
+                            #      static Color* toProto(UIColor* color) {
+                            #          CGFloat red, green, blue, alpha;
+                            #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                            #            return nil;
+                            #          }
+                            #          Color* result = [Color alloc] init];
+                            #          [result setRed:red];
+                            #          [result setGreen:green];
+                            #          [result setBlue:blue];
+                            #          if (alpha <= 0.9999) {
+                            #            [result setAlpha:floatWrapperWithValue(alpha)];
+                            #          }
+                            #          [result autorelease];
+                            #          return result;
+                            #     }
+                            #     // ...
+                            #
+                            #  Example (JavaScript):
+                            #
+                            #     // ...
+                            #
+                            #     var protoToCssColor = function(rgb_color) {
+                            #        var redFrac = rgb_color.red || 0.0;
+                            #        var greenFrac = rgb_color.green || 0.0;
+                            #        var blueFrac = rgb_color.blue || 0.0;
+                            #        var red = Math.floor(redFrac * 255);
+                            #        var green = Math.floor(greenFrac * 255);
+                            #        var blue = Math.floor(blueFrac * 255);
+                            #
+                            #        if (!('alpha' in rgb_color)) {
+                            #           return rgbToCssColor_(red, green, blue);
+                            #        }
+                            #
+                            #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                            #        var rgbParams = [red, green, blue].join(',');
+                            #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                            #     };
+                            #
+                            #     var rgbToCssColor_ = function(red, green, blue) {
+                            #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                            #       var hexString = rgbNumber.toString(16);
+                            #       var missingZeros = 6 - hexString.length;
+                            #       var resultBuilder = ['#'];
+                            #       for (var i = 0; i < missingZeros; i++) {
+                            #          resultBuilder.push('0');
+                            #       }
+                            #       resultBuilder.push(hexString);
+                            #       return resultBuilder.join('');
+                            #     };
+                            #
+                            #     // ...
+                          "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                          "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                              # the final pixel color is defined by the equation:
+                              #
+                              #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                              #
+                              # This means that a value of 1.0 corresponds to a solid color, whereas
+                              # a value of 0.0 corresponds to a completely transparent color. This
+                              # uses a wrapper message rather than a simple float scalar so that it is
+                              # possible to distinguish between a default value and the value being unset.
+                              # If omitted, this color object is to be rendered as a solid color
+                              # (as if the alpha value had been explicitly given with a value of 1.0).
+                          "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                          "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                        },
+                        "width": 42, # The width of the border, in pixels.
+                            # Border widths must be between 0 and 3 pixels.
+                        "style": "A String", # The style of the border.
+                      },
+                    },
+                    "wrapStrategy": "A String", # The wrap strategy for the value in the cell.
+                  },
+                  "userEnteredFormat": { # The format of a cell. # The format the user entered for the cell.
+                      #
+                      # When writing, the new format will be merged with the existing format.
+                    "numberFormat": { # The number format of a cell. # A format describing how number values should be represented to the user.
+                        # When updating, all fields must be set.
+                      "pattern": "A String", # Pattern string used for formatting.
+                      "type": "A String", # The type of the number format.
+                    },
+                    "textDirection": "A String", # The direction of the text in the cell.
+                    "padding": { # The amount of padding around the cell, in pixels. # The padding of the cell.
+                        # When updating padding, every field must be specified.
+                      "top": 42, # The top padding of the cell.
+                      "right": 42, # The right padding of the cell.
+                      "bottom": 42, # The bottom padding of the cell.
+                      "left": 42, # The left padding of the cell.
+                    },
+                    "horizontalAlignment": "A String", # The horizontal alignment of the value in cell.
+                    "backgroundColor": { # Represents a color in the RGBA color space. This representation is designed # The background color of the cell.
+                        # for simplicity of conversion to/from color representations in various
+                        # languages over compactness; for example, the fields of this representation
+                        # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                        # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                        # method in iOS; and, with just a little work, it can be easily formatted into
+                        # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                        #
+                        # Example (Java):
+                        #
+                        #      import com.google.type.Color;
+                        #
+                        #      // ...
+                        #      public static java.awt.Color fromProto(Color protocolor) {
+                        #        float alpha = protocolor.hasAlpha()
+                        #            ? protocolor.getAlpha().getValue()
+                        #            : 1.0;
+                        #
+                        #        return new java.awt.Color(
+                        #            protocolor.getRed(),
+                        #            protocolor.getGreen(),
+                        #            protocolor.getBlue(),
+                        #            alpha);
+                        #      }
+                        #
+                        #      public static Color toProto(java.awt.Color color) {
+                        #        float red = (float) color.getRed();
+                        #        float green = (float) color.getGreen();
+                        #        float blue = (float) color.getBlue();
+                        #        float denominator = 255.0;
+                        #        Color.Builder resultBuilder =
+                        #            Color
+                        #                .newBuilder()
+                        #                .setRed(red / denominator)
+                        #                .setGreen(green / denominator)
+                        #                .setBlue(blue / denominator);
+                        #        int alpha = color.getAlpha();
+                        #        if (alpha != 255) {
+                        #          result.setAlpha(
+                        #              FloatValue
+                        #                  .newBuilder()
+                        #                  .setValue(((float) alpha) / denominator)
+                        #                  .build());
+                        #        }
+                        #        return resultBuilder.build();
+                        #      }
+                        #      // ...
+                        #
+                        # Example (iOS / Obj-C):
+                        #
+                        #      // ...
+                        #      static UIColor* fromProto(Color* protocolor) {
+                        #         float red = [protocolor red];
+                        #         float green = [protocolor green];
+                        #         float blue = [protocolor blue];
+                        #         FloatValue* alpha_wrapper = [protocolor alpha];
+                        #         float alpha = 1.0;
+                        #         if (alpha_wrapper != nil) {
+                        #           alpha = [alpha_wrapper value];
+                        #         }
+                        #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                        #      }
+                        #
+                        #      static Color* toProto(UIColor* color) {
+                        #          CGFloat red, green, blue, alpha;
+                        #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                        #            return nil;
+                        #          }
+                        #          Color* result = [Color alloc] init];
+                        #          [result setRed:red];
+                        #          [result setGreen:green];
+                        #          [result setBlue:blue];
+                        #          if (alpha <= 0.9999) {
+                        #            [result setAlpha:floatWrapperWithValue(alpha)];
+                        #          }
+                        #          [result autorelease];
+                        #          return result;
+                        #     }
+                        #     // ...
+                        #
+                        #  Example (JavaScript):
+                        #
+                        #     // ...
+                        #
+                        #     var protoToCssColor = function(rgb_color) {
+                        #        var redFrac = rgb_color.red || 0.0;
+                        #        var greenFrac = rgb_color.green || 0.0;
+                        #        var blueFrac = rgb_color.blue || 0.0;
+                        #        var red = Math.floor(redFrac * 255);
+                        #        var green = Math.floor(greenFrac * 255);
+                        #        var blue = Math.floor(blueFrac * 255);
+                        #
+                        #        if (!('alpha' in rgb_color)) {
+                        #           return rgbToCssColor_(red, green, blue);
+                        #        }
+                        #
+                        #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                        #        var rgbParams = [red, green, blue].join(',');
+                        #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                        #     };
+                        #
+                        #     var rgbToCssColor_ = function(red, green, blue) {
+                        #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                        #       var hexString = rgbNumber.toString(16);
+                        #       var missingZeros = 6 - hexString.length;
+                        #       var resultBuilder = ['#'];
+                        #       for (var i = 0; i < missingZeros; i++) {
+                        #          resultBuilder.push('0');
+                        #       }
+                        #       resultBuilder.push(hexString);
+                        #       return resultBuilder.join('');
+                        #     };
+                        #
+                        #     // ...
+                      "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                      "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                          # the final pixel color is defined by the equation:
+                          #
+                          #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                          #
+                          # This means that a value of 1.0 corresponds to a solid color, whereas
+                          # a value of 0.0 corresponds to a completely transparent color. This
+                          # uses a wrapper message rather than a simple float scalar so that it is
+                          # possible to distinguish between a default value and the value being unset.
+                          # If omitted, this color object is to be rendered as a solid color
+                          # (as if the alpha value had been explicitly given with a value of 1.0).
+                      "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                      "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                    },
+                    "verticalAlignment": "A String", # The vertical alignment of the value in cell.
+                    "textFormat": { # The format of a run of text in a cell. # The format of the text in the cell (unless overridden by a format run).
+                        # Absent values indicate that the field isn't specified.
+                      "foregroundColor": { # Represents a color in the RGBA color space. This representation is designed # The foreground color of the text.
+                          # for simplicity of conversion to/from color representations in various
+                          # languages over compactness; for example, the fields of this representation
+                          # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                          # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                          # method in iOS; and, with just a little work, it can be easily formatted into
+                          # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                          #
+                          # Example (Java):
+                          #
+                          #      import com.google.type.Color;
+                          #
+                          #      // ...
+                          #      public static java.awt.Color fromProto(Color protocolor) {
+                          #        float alpha = protocolor.hasAlpha()
+                          #            ? protocolor.getAlpha().getValue()
+                          #            : 1.0;
+                          #
+                          #        return new java.awt.Color(
+                          #            protocolor.getRed(),
+                          #            protocolor.getGreen(),
+                          #            protocolor.getBlue(),
+                          #            alpha);
+                          #      }
+                          #
+                          #      public static Color toProto(java.awt.Color color) {
+                          #        float red = (float) color.getRed();
+                          #        float green = (float) color.getGreen();
+                          #        float blue = (float) color.getBlue();
+                          #        float denominator = 255.0;
+                          #        Color.Builder resultBuilder =
+                          #            Color
+                          #                .newBuilder()
+                          #                .setRed(red / denominator)
+                          #                .setGreen(green / denominator)
+                          #                .setBlue(blue / denominator);
+                          #        int alpha = color.getAlpha();
+                          #        if (alpha != 255) {
+                          #          result.setAlpha(
+                          #              FloatValue
+                          #                  .newBuilder()
+                          #                  .setValue(((float) alpha) / denominator)
+                          #                  .build());
+                          #        }
+                          #        return resultBuilder.build();
+                          #      }
+                          #      // ...
+                          #
+                          # Example (iOS / Obj-C):
+                          #
+                          #      // ...
+                          #      static UIColor* fromProto(Color* protocolor) {
+                          #         float red = [protocolor red];
+                          #         float green = [protocolor green];
+                          #         float blue = [protocolor blue];
+                          #         FloatValue* alpha_wrapper = [protocolor alpha];
+                          #         float alpha = 1.0;
+                          #         if (alpha_wrapper != nil) {
+                          #           alpha = [alpha_wrapper value];
+                          #         }
+                          #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                          #      }
+                          #
+                          #      static Color* toProto(UIColor* color) {
+                          #          CGFloat red, green, blue, alpha;
+                          #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                          #            return nil;
+                          #          }
+                          #          Color* result = [Color alloc] init];
+                          #          [result setRed:red];
+                          #          [result setGreen:green];
+                          #          [result setBlue:blue];
+                          #          if (alpha <= 0.9999) {
+                          #            [result setAlpha:floatWrapperWithValue(alpha)];
+                          #          }
+                          #          [result autorelease];
+                          #          return result;
+                          #     }
+                          #     // ...
+                          #
+                          #  Example (JavaScript):
+                          #
+                          #     // ...
+                          #
+                          #     var protoToCssColor = function(rgb_color) {
+                          #        var redFrac = rgb_color.red || 0.0;
+                          #        var greenFrac = rgb_color.green || 0.0;
+                          #        var blueFrac = rgb_color.blue || 0.0;
+                          #        var red = Math.floor(redFrac * 255);
+                          #        var green = Math.floor(greenFrac * 255);
+                          #        var blue = Math.floor(blueFrac * 255);
+                          #
+                          #        if (!('alpha' in rgb_color)) {
+                          #           return rgbToCssColor_(red, green, blue);
+                          #        }
+                          #
+                          #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                          #        var rgbParams = [red, green, blue].join(',');
+                          #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                          #     };
+                          #
+                          #     var rgbToCssColor_ = function(red, green, blue) {
+                          #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                          #       var hexString = rgbNumber.toString(16);
+                          #       var missingZeros = 6 - hexString.length;
+                          #       var resultBuilder = ['#'];
+                          #       for (var i = 0; i < missingZeros; i++) {
+                          #          resultBuilder.push('0');
+                          #       }
+                          #       resultBuilder.push(hexString);
+                          #       return resultBuilder.join('');
+                          #     };
+                          #
+                          #     // ...
+                        "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                        "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                            # the final pixel color is defined by the equation:
+                            #
+                            #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                            #
+                            # This means that a value of 1.0 corresponds to a solid color, whereas
+                            # a value of 0.0 corresponds to a completely transparent color. This
+                            # uses a wrapper message rather than a simple float scalar so that it is
+                            # possible to distinguish between a default value and the value being unset.
+                            # If omitted, this color object is to be rendered as a solid color
+                            # (as if the alpha value had been explicitly given with a value of 1.0).
+                        "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                        "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                      },
+                      "bold": True or False, # True if the text is bold.
+                      "strikethrough": True or False, # True if the text has a strikethrough.
+                      "fontFamily": "A String", # The font family.
+                      "fontSize": 42, # The size of the font.
+                      "italic": True or False, # True if the text is italicized.
+                      "underline": True or False, # True if the text is underlined.
+                    },
+                    "hyperlinkDisplayType": "A String", # How a hyperlink, if it exists, should be displayed in the cell.
+                    "borders": { # The borders of the cell. # The borders of the cell.
+                      "top": { # A border along a cell. # The top border of the cell.
+                        "color": { # Represents a color in the RGBA color space. This representation is designed # The color of the border.
+                            # for simplicity of conversion to/from color representations in various
+                            # languages over compactness; for example, the fields of this representation
+                            # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                            # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                            # method in iOS; and, with just a little work, it can be easily formatted into
+                            # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                            #
+                            # Example (Java):
+                            #
+                            #      import com.google.type.Color;
+                            #
+                            #      // ...
+                            #      public static java.awt.Color fromProto(Color protocolor) {
+                            #        float alpha = protocolor.hasAlpha()
+                            #            ? protocolor.getAlpha().getValue()
+                            #            : 1.0;
+                            #
+                            #        return new java.awt.Color(
+                            #            protocolor.getRed(),
+                            #            protocolor.getGreen(),
+                            #            protocolor.getBlue(),
+                            #            alpha);
+                            #      }
+                            #
+                            #      public static Color toProto(java.awt.Color color) {
+                            #        float red = (float) color.getRed();
+                            #        float green = (float) color.getGreen();
+                            #        float blue = (float) color.getBlue();
+                            #        float denominator = 255.0;
+                            #        Color.Builder resultBuilder =
+                            #            Color
+                            #                .newBuilder()
+                            #                .setRed(red / denominator)
+                            #                .setGreen(green / denominator)
+                            #                .setBlue(blue / denominator);
+                            #        int alpha = color.getAlpha();
+                            #        if (alpha != 255) {
+                            #          result.setAlpha(
+                            #              FloatValue
+                            #                  .newBuilder()
+                            #                  .setValue(((float) alpha) / denominator)
+                            #                  .build());
+                            #        }
+                            #        return resultBuilder.build();
+                            #      }
+                            #      // ...
+                            #
+                            # Example (iOS / Obj-C):
+                            #
+                            #      // ...
+                            #      static UIColor* fromProto(Color* protocolor) {
+                            #         float red = [protocolor red];
+                            #         float green = [protocolor green];
+                            #         float blue = [protocolor blue];
+                            #         FloatValue* alpha_wrapper = [protocolor alpha];
+                            #         float alpha = 1.0;
+                            #         if (alpha_wrapper != nil) {
+                            #           alpha = [alpha_wrapper value];
+                            #         }
+                            #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                            #      }
+                            #
+                            #      static Color* toProto(UIColor* color) {
+                            #          CGFloat red, green, blue, alpha;
+                            #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                            #            return nil;
+                            #          }
+                            #          Color* result = [Color alloc] init];
+                            #          [result setRed:red];
+                            #          [result setGreen:green];
+                            #          [result setBlue:blue];
+                            #          if (alpha <= 0.9999) {
+                            #            [result setAlpha:floatWrapperWithValue(alpha)];
+                            #          }
+                            #          [result autorelease];
+                            #          return result;
+                            #     }
+                            #     // ...
+                            #
+                            #  Example (JavaScript):
+                            #
+                            #     // ...
+                            #
+                            #     var protoToCssColor = function(rgb_color) {
+                            #        var redFrac = rgb_color.red || 0.0;
+                            #        var greenFrac = rgb_color.green || 0.0;
+                            #        var blueFrac = rgb_color.blue || 0.0;
+                            #        var red = Math.floor(redFrac * 255);
+                            #        var green = Math.floor(greenFrac * 255);
+                            #        var blue = Math.floor(blueFrac * 255);
+                            #
+                            #        if (!('alpha' in rgb_color)) {
+                            #           return rgbToCssColor_(red, green, blue);
+                            #        }
+                            #
+                            #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                            #        var rgbParams = [red, green, blue].join(',');
+                            #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                            #     };
+                            #
+                            #     var rgbToCssColor_ = function(red, green, blue) {
+                            #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                            #       var hexString = rgbNumber.toString(16);
+                            #       var missingZeros = 6 - hexString.length;
+                            #       var resultBuilder = ['#'];
+                            #       for (var i = 0; i < missingZeros; i++) {
+                            #          resultBuilder.push('0');
+                            #       }
+                            #       resultBuilder.push(hexString);
+                            #       return resultBuilder.join('');
+                            #     };
+                            #
+                            #     // ...
+                          "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                          "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                              # the final pixel color is defined by the equation:
+                              #
+                              #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                              #
+                              # This means that a value of 1.0 corresponds to a solid color, whereas
+                              # a value of 0.0 corresponds to a completely transparent color. This
+                              # uses a wrapper message rather than a simple float scalar so that it is
+                              # possible to distinguish between a default value and the value being unset.
+                              # If omitted, this color object is to be rendered as a solid color
+                              # (as if the alpha value had been explicitly given with a value of 1.0).
+                          "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                          "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                        },
+                        "width": 42, # The width of the border, in pixels.
+                            # Border widths must be between 0 and 3 pixels.
+                        "style": "A String", # The style of the border.
+                      },
+                      "right": { # A border along a cell. # The right border of the cell.
+                        "color": { # Represents a color in the RGBA color space. This representation is designed # The color of the border.
+                            # for simplicity of conversion to/from color representations in various
+                            # languages over compactness; for example, the fields of this representation
+                            # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                            # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                            # method in iOS; and, with just a little work, it can be easily formatted into
+                            # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                            #
+                            # Example (Java):
+                            #
+                            #      import com.google.type.Color;
+                            #
+                            #      // ...
+                            #      public static java.awt.Color fromProto(Color protocolor) {
+                            #        float alpha = protocolor.hasAlpha()
+                            #            ? protocolor.getAlpha().getValue()
+                            #            : 1.0;
+                            #
+                            #        return new java.awt.Color(
+                            #            protocolor.getRed(),
+                            #            protocolor.getGreen(),
+                            #            protocolor.getBlue(),
+                            #            alpha);
+                            #      }
+                            #
+                            #      public static Color toProto(java.awt.Color color) {
+                            #        float red = (float) color.getRed();
+                            #        float green = (float) color.getGreen();
+                            #        float blue = (float) color.getBlue();
+                            #        float denominator = 255.0;
+                            #        Color.Builder resultBuilder =
+                            #            Color
+                            #                .newBuilder()
+                            #                .setRed(red / denominator)
+                            #                .setGreen(green / denominator)
+                            #                .setBlue(blue / denominator);
+                            #        int alpha = color.getAlpha();
+                            #        if (alpha != 255) {
+                            #          result.setAlpha(
+                            #              FloatValue
+                            #                  .newBuilder()
+                            #                  .setValue(((float) alpha) / denominator)
+                            #                  .build());
+                            #        }
+                            #        return resultBuilder.build();
+                            #      }
+                            #      // ...
+                            #
+                            # Example (iOS / Obj-C):
+                            #
+                            #      // ...
+                            #      static UIColor* fromProto(Color* protocolor) {
+                            #         float red = [protocolor red];
+                            #         float green = [protocolor green];
+                            #         float blue = [protocolor blue];
+                            #         FloatValue* alpha_wrapper = [protocolor alpha];
+                            #         float alpha = 1.0;
+                            #         if (alpha_wrapper != nil) {
+                            #           alpha = [alpha_wrapper value];
+                            #         }
+                            #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                            #      }
+                            #
+                            #      static Color* toProto(UIColor* color) {
+                            #          CGFloat red, green, blue, alpha;
+                            #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                            #            return nil;
+                            #          }
+                            #          Color* result = [Color alloc] init];
+                            #          [result setRed:red];
+                            #          [result setGreen:green];
+                            #          [result setBlue:blue];
+                            #          if (alpha <= 0.9999) {
+                            #            [result setAlpha:floatWrapperWithValue(alpha)];
+                            #          }
+                            #          [result autorelease];
+                            #          return result;
+                            #     }
+                            #     // ...
+                            #
+                            #  Example (JavaScript):
+                            #
+                            #     // ...
+                            #
+                            #     var protoToCssColor = function(rgb_color) {
+                            #        var redFrac = rgb_color.red || 0.0;
+                            #        var greenFrac = rgb_color.green || 0.0;
+                            #        var blueFrac = rgb_color.blue || 0.0;
+                            #        var red = Math.floor(redFrac * 255);
+                            #        var green = Math.floor(greenFrac * 255);
+                            #        var blue = Math.floor(blueFrac * 255);
+                            #
+                            #        if (!('alpha' in rgb_color)) {
+                            #           return rgbToCssColor_(red, green, blue);
+                            #        }
+                            #
+                            #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                            #        var rgbParams = [red, green, blue].join(',');
+                            #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                            #     };
+                            #
+                            #     var rgbToCssColor_ = function(red, green, blue) {
+                            #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                            #       var hexString = rgbNumber.toString(16);
+                            #       var missingZeros = 6 - hexString.length;
+                            #       var resultBuilder = ['#'];
+                            #       for (var i = 0; i < missingZeros; i++) {
+                            #          resultBuilder.push('0');
+                            #       }
+                            #       resultBuilder.push(hexString);
+                            #       return resultBuilder.join('');
+                            #     };
+                            #
+                            #     // ...
+                          "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                          "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                              # the final pixel color is defined by the equation:
+                              #
+                              #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                              #
+                              # This means that a value of 1.0 corresponds to a solid color, whereas
+                              # a value of 0.0 corresponds to a completely transparent color. This
+                              # uses a wrapper message rather than a simple float scalar so that it is
+                              # possible to distinguish between a default value and the value being unset.
+                              # If omitted, this color object is to be rendered as a solid color
+                              # (as if the alpha value had been explicitly given with a value of 1.0).
+                          "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                          "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                        },
+                        "width": 42, # The width of the border, in pixels.
+                            # Border widths must be between 0 and 3 pixels.
+                        "style": "A String", # The style of the border.
+                      },
+                      "bottom": { # A border along a cell. # The bottom border of the cell.
+                        "color": { # Represents a color in the RGBA color space. This representation is designed # The color of the border.
+                            # for simplicity of conversion to/from color representations in various
+                            # languages over compactness; for example, the fields of this representation
+                            # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                            # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                            # method in iOS; and, with just a little work, it can be easily formatted into
+                            # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                            #
+                            # Example (Java):
+                            #
+                            #      import com.google.type.Color;
+                            #
+                            #      // ...
+                            #      public static java.awt.Color fromProto(Color protocolor) {
+                            #        float alpha = protocolor.hasAlpha()
+                            #            ? protocolor.getAlpha().getValue()
+                            #            : 1.0;
+                            #
+                            #        return new java.awt.Color(
+                            #            protocolor.getRed(),
+                            #            protocolor.getGreen(),
+                            #            protocolor.getBlue(),
+                            #            alpha);
+                            #      }
+                            #
+                            #      public static Color toProto(java.awt.Color color) {
+                            #        float red = (float) color.getRed();
+                            #        float green = (float) color.getGreen();
+                            #        float blue = (float) color.getBlue();
+                            #        float denominator = 255.0;
+                            #        Color.Builder resultBuilder =
+                            #            Color
+                            #                .newBuilder()
+                            #                .setRed(red / denominator)
+                            #                .setGreen(green / denominator)
+                            #                .setBlue(blue / denominator);
+                            #        int alpha = color.getAlpha();
+                            #        if (alpha != 255) {
+                            #          result.setAlpha(
+                            #              FloatValue
+                            #                  .newBuilder()
+                            #                  .setValue(((float) alpha) / denominator)
+                            #                  .build());
+                            #        }
+                            #        return resultBuilder.build();
+                            #      }
+                            #      // ...
+                            #
+                            # Example (iOS / Obj-C):
+                            #
+                            #      // ...
+                            #      static UIColor* fromProto(Color* protocolor) {
+                            #         float red = [protocolor red];
+                            #         float green = [protocolor green];
+                            #         float blue = [protocolor blue];
+                            #         FloatValue* alpha_wrapper = [protocolor alpha];
+                            #         float alpha = 1.0;
+                            #         if (alpha_wrapper != nil) {
+                            #           alpha = [alpha_wrapper value];
+                            #         }
+                            #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                            #      }
+                            #
+                            #      static Color* toProto(UIColor* color) {
+                            #          CGFloat red, green, blue, alpha;
+                            #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                            #            return nil;
+                            #          }
+                            #          Color* result = [Color alloc] init];
+                            #          [result setRed:red];
+                            #          [result setGreen:green];
+                            #          [result setBlue:blue];
+                            #          if (alpha <= 0.9999) {
+                            #            [result setAlpha:floatWrapperWithValue(alpha)];
+                            #          }
+                            #          [result autorelease];
+                            #          return result;
+                            #     }
+                            #     // ...
+                            #
+                            #  Example (JavaScript):
+                            #
+                            #     // ...
+                            #
+                            #     var protoToCssColor = function(rgb_color) {
+                            #        var redFrac = rgb_color.red || 0.0;
+                            #        var greenFrac = rgb_color.green || 0.0;
+                            #        var blueFrac = rgb_color.blue || 0.0;
+                            #        var red = Math.floor(redFrac * 255);
+                            #        var green = Math.floor(greenFrac * 255);
+                            #        var blue = Math.floor(blueFrac * 255);
+                            #
+                            #        if (!('alpha' in rgb_color)) {
+                            #           return rgbToCssColor_(red, green, blue);
+                            #        }
+                            #
+                            #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                            #        var rgbParams = [red, green, blue].join(',');
+                            #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                            #     };
+                            #
+                            #     var rgbToCssColor_ = function(red, green, blue) {
+                            #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                            #       var hexString = rgbNumber.toString(16);
+                            #       var missingZeros = 6 - hexString.length;
+                            #       var resultBuilder = ['#'];
+                            #       for (var i = 0; i < missingZeros; i++) {
+                            #          resultBuilder.push('0');
+                            #       }
+                            #       resultBuilder.push(hexString);
+                            #       return resultBuilder.join('');
+                            #     };
+                            #
+                            #     // ...
+                          "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                          "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                              # the final pixel color is defined by the equation:
+                              #
+                              #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                              #
+                              # This means that a value of 1.0 corresponds to a solid color, whereas
+                              # a value of 0.0 corresponds to a completely transparent color. This
+                              # uses a wrapper message rather than a simple float scalar so that it is
+                              # possible to distinguish between a default value and the value being unset.
+                              # If omitted, this color object is to be rendered as a solid color
+                              # (as if the alpha value had been explicitly given with a value of 1.0).
+                          "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                          "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                        },
+                        "width": 42, # The width of the border, in pixels.
+                            # Border widths must be between 0 and 3 pixels.
+                        "style": "A String", # The style of the border.
+                      },
+                      "left": { # A border along a cell. # The left border of the cell.
+                        "color": { # Represents a color in the RGBA color space. This representation is designed # The color of the border.
+                            # for simplicity of conversion to/from color representations in various
+                            # languages over compactness; for example, the fields of this representation
+                            # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                            # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                            # method in iOS; and, with just a little work, it can be easily formatted into
+                            # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                            #
+                            # Example (Java):
+                            #
+                            #      import com.google.type.Color;
+                            #
+                            #      // ...
+                            #      public static java.awt.Color fromProto(Color protocolor) {
+                            #        float alpha = protocolor.hasAlpha()
+                            #            ? protocolor.getAlpha().getValue()
+                            #            : 1.0;
+                            #
+                            #        return new java.awt.Color(
+                            #            protocolor.getRed(),
+                            #            protocolor.getGreen(),
+                            #            protocolor.getBlue(),
+                            #            alpha);
+                            #      }
+                            #
+                            #      public static Color toProto(java.awt.Color color) {
+                            #        float red = (float) color.getRed();
+                            #        float green = (float) color.getGreen();
+                            #        float blue = (float) color.getBlue();
+                            #        float denominator = 255.0;
+                            #        Color.Builder resultBuilder =
+                            #            Color
+                            #                .newBuilder()
+                            #                .setRed(red / denominator)
+                            #                .setGreen(green / denominator)
+                            #                .setBlue(blue / denominator);
+                            #        int alpha = color.getAlpha();
+                            #        if (alpha != 255) {
+                            #          result.setAlpha(
+                            #              FloatValue
+                            #                  .newBuilder()
+                            #                  .setValue(((float) alpha) / denominator)
+                            #                  .build());
+                            #        }
+                            #        return resultBuilder.build();
+                            #      }
+                            #      // ...
+                            #
+                            # Example (iOS / Obj-C):
+                            #
+                            #      // ...
+                            #      static UIColor* fromProto(Color* protocolor) {
+                            #         float red = [protocolor red];
+                            #         float green = [protocolor green];
+                            #         float blue = [protocolor blue];
+                            #         FloatValue* alpha_wrapper = [protocolor alpha];
+                            #         float alpha = 1.0;
+                            #         if (alpha_wrapper != nil) {
+                            #           alpha = [alpha_wrapper value];
+                            #         }
+                            #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                            #      }
+                            #
+                            #      static Color* toProto(UIColor* color) {
+                            #          CGFloat red, green, blue, alpha;
+                            #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                            #            return nil;
+                            #          }
+                            #          Color* result = [Color alloc] init];
+                            #          [result setRed:red];
+                            #          [result setGreen:green];
+                            #          [result setBlue:blue];
+                            #          if (alpha <= 0.9999) {
+                            #            [result setAlpha:floatWrapperWithValue(alpha)];
+                            #          }
+                            #          [result autorelease];
+                            #          return result;
+                            #     }
+                            #     // ...
+                            #
+                            #  Example (JavaScript):
+                            #
+                            #     // ...
+                            #
+                            #     var protoToCssColor = function(rgb_color) {
+                            #        var redFrac = rgb_color.red || 0.0;
+                            #        var greenFrac = rgb_color.green || 0.0;
+                            #        var blueFrac = rgb_color.blue || 0.0;
+                            #        var red = Math.floor(redFrac * 255);
+                            #        var green = Math.floor(greenFrac * 255);
+                            #        var blue = Math.floor(blueFrac * 255);
+                            #
+                            #        if (!('alpha' in rgb_color)) {
+                            #           return rgbToCssColor_(red, green, blue);
+                            #        }
+                            #
+                            #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                            #        var rgbParams = [red, green, blue].join(',');
+                            #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                            #     };
+                            #
+                            #     var rgbToCssColor_ = function(red, green, blue) {
+                            #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                            #       var hexString = rgbNumber.toString(16);
+                            #       var missingZeros = 6 - hexString.length;
+                            #       var resultBuilder = ['#'];
+                            #       for (var i = 0; i < missingZeros; i++) {
+                            #          resultBuilder.push('0');
+                            #       }
+                            #       resultBuilder.push(hexString);
+                            #       return resultBuilder.join('');
+                            #     };
+                            #
+                            #     // ...
+                          "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                          "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                              # the final pixel color is defined by the equation:
+                              #
+                              #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                              #
+                              # This means that a value of 1.0 corresponds to a solid color, whereas
+                              # a value of 0.0 corresponds to a completely transparent color. This
+                              # uses a wrapper message rather than a simple float scalar so that it is
+                              # possible to distinguish between a default value and the value being unset.
+                              # If omitted, this color object is to be rendered as a solid color
+                              # (as if the alpha value had been explicitly given with a value of 1.0).
+                          "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                          "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                        },
+                        "width": 42, # The width of the border, in pixels.
+                            # Border widths must be between 0 and 3 pixels.
+                        "style": "A String", # The style of the border.
+                      },
+                    },
+                    "wrapStrategy": "A String", # The wrap strategy for the value in the cell.
+                  },
+                  "dataValidation": { # A data validation rule. # A data validation rule on the cell, if any.
+                      #
+                      # When writing, the new data validation rule will overwrite any prior rule.
+                    "showCustomUi": True or False, # True if the UI should be customized based on the kind of condition.
+                        # If true, "List" conditions will show a dropdown.
+                    "strict": True or False, # True if invalid data should be rejected.
+                    "inputMessage": "A String", # A message to show the user when adding data to the cell.
+                    "condition": { # A condition that can evaluate to true or false. # The condition that data in the cell must match.
+                        # BooleanConditions are used by conditional formatting,
+                        # data validation, and the criteria in filters.
+                      "type": "A String", # The type of condition.
+                      "values": [ # The values of the condition. The number of supported values depends
+                          # on the condition type.  Some support zero values,
+                          # others one or two values,
+                          # and ConditionType.ONE_OF_LIST supports an arbitrary number of values.
+                        { # The value of the condition.
+                          "relativeDate": "A String", # A relative date (based on the current date).
+                              # Valid only if the type is
+                              # DATE_BEFORE,
+                              # DATE_AFTER,
+                              # DATE_ON_OR_BEFORE or
+                              # DATE_ON_OR_AFTER.
+                              #
+                              # Relative dates are not supported in data validation.
+                              # They are supported only in conditional formatting and
+                              # conditional filters.
+                          "userEnteredValue": "A String", # A value the condition is based on.
+                              # The value will be parsed as if the user typed into a cell.
+                              # Formulas are supported (and must begin with an `=`).
+                        },
+                      ],
+                    },
+                  },
+                  "textFormatRuns": [ # Runs of rich text applied to subsections of the cell.
+                      # Runs start at specific indexes in the text and continue until the next
+                      # run. Properties of a run will continue unless explicitly changed
+                      # in a subsequent run (and properties of the first run will continue
+                      # the properties of the cell unless explicitly changed).
+                      #
+                      # When writing, the new runs will overwrite any prior runs.
+                    { # A run of a text format. The format of this run continues until explicitly
+                        # overridden in the next run.
+                        # When updating, all fields must be set.
+                      "startIndex": 42, # The character index where this run starts.
+                      "format": { # The format of a run of text in a cell. # The format of this run.  Absent values inherit the cell's format.
+                          # Absent values indicate that the field isn't specified.
+                        "foregroundColor": { # Represents a color in the RGBA color space. This representation is designed # The foreground color of the text.
+                            # for simplicity of conversion to/from color representations in various
+                            # languages over compactness; for example, the fields of this representation
+                            # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                            # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                            # method in iOS; and, with just a little work, it can be easily formatted into
+                            # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                            #
+                            # Example (Java):
+                            #
+                            #      import com.google.type.Color;
+                            #
+                            #      // ...
+                            #      public static java.awt.Color fromProto(Color protocolor) {
+                            #        float alpha = protocolor.hasAlpha()
+                            #            ? protocolor.getAlpha().getValue()
+                            #            : 1.0;
+                            #
+                            #        return new java.awt.Color(
+                            #            protocolor.getRed(),
+                            #            protocolor.getGreen(),
+                            #            protocolor.getBlue(),
+                            #            alpha);
+                            #      }
+                            #
+                            #      public static Color toProto(java.awt.Color color) {
+                            #        float red = (float) color.getRed();
+                            #        float green = (float) color.getGreen();
+                            #        float blue = (float) color.getBlue();
+                            #        float denominator = 255.0;
+                            #        Color.Builder resultBuilder =
+                            #            Color
+                            #                .newBuilder()
+                            #                .setRed(red / denominator)
+                            #                .setGreen(green / denominator)
+                            #                .setBlue(blue / denominator);
+                            #        int alpha = color.getAlpha();
+                            #        if (alpha != 255) {
+                            #          result.setAlpha(
+                            #              FloatValue
+                            #                  .newBuilder()
+                            #                  .setValue(((float) alpha) / denominator)
+                            #                  .build());
+                            #        }
+                            #        return resultBuilder.build();
+                            #      }
+                            #      // ...
+                            #
+                            # Example (iOS / Obj-C):
+                            #
+                            #      // ...
+                            #      static UIColor* fromProto(Color* protocolor) {
+                            #         float red = [protocolor red];
+                            #         float green = [protocolor green];
+                            #         float blue = [protocolor blue];
+                            #         FloatValue* alpha_wrapper = [protocolor alpha];
+                            #         float alpha = 1.0;
+                            #         if (alpha_wrapper != nil) {
+                            #           alpha = [alpha_wrapper value];
+                            #         }
+                            #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                            #      }
+                            #
+                            #      static Color* toProto(UIColor* color) {
+                            #          CGFloat red, green, blue, alpha;
+                            #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                            #            return nil;
+                            #          }
+                            #          Color* result = [Color alloc] init];
+                            #          [result setRed:red];
+                            #          [result setGreen:green];
+                            #          [result setBlue:blue];
+                            #          if (alpha <= 0.9999) {
+                            #            [result setAlpha:floatWrapperWithValue(alpha)];
+                            #          }
+                            #          [result autorelease];
+                            #          return result;
+                            #     }
+                            #     // ...
+                            #
+                            #  Example (JavaScript):
+                            #
+                            #     // ...
+                            #
+                            #     var protoToCssColor = function(rgb_color) {
+                            #        var redFrac = rgb_color.red || 0.0;
+                            #        var greenFrac = rgb_color.green || 0.0;
+                            #        var blueFrac = rgb_color.blue || 0.0;
+                            #        var red = Math.floor(redFrac * 255);
+                            #        var green = Math.floor(greenFrac * 255);
+                            #        var blue = Math.floor(blueFrac * 255);
+                            #
+                            #        if (!('alpha' in rgb_color)) {
+                            #           return rgbToCssColor_(red, green, blue);
+                            #        }
+                            #
+                            #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                            #        var rgbParams = [red, green, blue].join(',');
+                            #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                            #     };
+                            #
+                            #     var rgbToCssColor_ = function(red, green, blue) {
+                            #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                            #       var hexString = rgbNumber.toString(16);
+                            #       var missingZeros = 6 - hexString.length;
+                            #       var resultBuilder = ['#'];
+                            #       for (var i = 0; i < missingZeros; i++) {
+                            #          resultBuilder.push('0');
+                            #       }
+                            #       resultBuilder.push(hexString);
+                            #       return resultBuilder.join('');
+                            #     };
+                            #
+                            #     // ...
+                          "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                          "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                              # the final pixel color is defined by the equation:
+                              #
+                              #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                              #
+                              # This means that a value of 1.0 corresponds to a solid color, whereas
+                              # a value of 0.0 corresponds to a completely transparent color. This
+                              # uses a wrapper message rather than a simple float scalar so that it is
+                              # possible to distinguish between a default value and the value being unset.
+                              # If omitted, this color object is to be rendered as a solid color
+                              # (as if the alpha value had been explicitly given with a value of 1.0).
+                          "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                          "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                        },
+                        "bold": True or False, # True if the text is bold.
+                        "strikethrough": True or False, # True if the text has a strikethrough.
+                        "fontFamily": "A String", # The font family.
+                        "fontSize": 42, # The size of the font.
+                        "italic": True or False, # True if the text is italicized.
+                        "underline": True or False, # True if the text is underlined.
+                      },
+                    },
+                  ],
+                },
+              ],
+            },
+          ],
+          "sheetId": 42, # The sheet ID to append the data to.
+        },
+        "duplicateSheet": { # Duplicates the contents of a sheet. # Duplicates a sheet.
+          "sourceSheetId": 42, # The sheet to duplicate.
+          "insertSheetIndex": 42, # The zero-based index where the new sheet should be inserted.
+              # The index of all sheets after this are incremented.
+          "newSheetName": "A String", # The name of the new sheet.  If empty, a new name is chosen for you.
+          "newSheetId": 42, # If set, the ID of the new sheet. If not set, an ID is chosen.
+              # If set, the ID must not conflict with any existing sheet ID.
+              # If set, it must be non-negative.
+        },
+        "updateSheetProperties": { # Updates properties of the sheet with the specified # Updates a sheet's properties.
+            # sheetId.
+            # It is an error to specify read only fields in the field mask.
+          "fields": "A String", # The fields that should be updated.  At least one field must be specified.
+              # The root `properties` is implied and should not be specified.
+              # A single `"*"` can be used as short-hand for listing every field.
+          "properties": { # Properties of a sheet. # The properties to update.
+            "sheetType": "A String", # The type of sheet. Defaults to GRID.
+                # This field cannot be changed once set.
+            "index": 42, # The index of the sheet within the spreadsheet.
+                # When adding or updating sheet properties, if this field
+                # is excluded then the sheet will be added or moved to the end
+                # of the sheet list.
+            "title": "A String", # The name of the sheet.
+            "gridProperties": { # Properties of a grid. # Additional properties of the sheet if this sheet is a grid.
+                # (If the sheet is an object sheet, containing a chart or image, then
+                # this field will be absent.)
+                # When writing it is an error to set any grid properties on non-grid sheets.
+              "columnCount": 42, # The number of columns in the grid.
+              "rowCount": 42, # The number of rows in the grid.
+              "frozenColumnCount": 42, # The number of columns that are frozen in the grid.
+              "hideGridlines": True or False, # True if the grid isn't showing gridlines in the UI.
+              "frozenRowCount": 42, # The number of rows that are frozen in the grid.
+            },
+            "rightToLeft": True or False, # True if the sheet is an RTL sheet instead of an LTR sheet.
+            "tabColor": { # Represents a color in the RGBA color space. This representation is designed # The color of the tab in the UI.
+                # for simplicity of conversion to/from color representations in various
+                # languages over compactness; for example, the fields of this representation
+                # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                # method in iOS; and, with just a little work, it can be easily formatted into
+                # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                #
+                # Example (Java):
+                #
+                #      import com.google.type.Color;
+                #
+                #      // ...
+                #      public static java.awt.Color fromProto(Color protocolor) {
+                #        float alpha = protocolor.hasAlpha()
+                #            ? protocolor.getAlpha().getValue()
+                #            : 1.0;
+                #
+                #        return new java.awt.Color(
+                #            protocolor.getRed(),
+                #            protocolor.getGreen(),
+                #            protocolor.getBlue(),
+                #            alpha);
+                #      }
+                #
+                #      public static Color toProto(java.awt.Color color) {
+                #        float red = (float) color.getRed();
+                #        float green = (float) color.getGreen();
+                #        float blue = (float) color.getBlue();
+                #        float denominator = 255.0;
+                #        Color.Builder resultBuilder =
+                #            Color
+                #                .newBuilder()
+                #                .setRed(red / denominator)
+                #                .setGreen(green / denominator)
+                #                .setBlue(blue / denominator);
+                #        int alpha = color.getAlpha();
+                #        if (alpha != 255) {
+                #          result.setAlpha(
+                #              FloatValue
+                #                  .newBuilder()
+                #                  .setValue(((float) alpha) / denominator)
+                #                  .build());
+                #        }
+                #        return resultBuilder.build();
+                #      }
+                #      // ...
+                #
+                # Example (iOS / Obj-C):
+                #
+                #      // ...
+                #      static UIColor* fromProto(Color* protocolor) {
+                #         float red = [protocolor red];
+                #         float green = [protocolor green];
+                #         float blue = [protocolor blue];
+                #         FloatValue* alpha_wrapper = [protocolor alpha];
+                #         float alpha = 1.0;
+                #         if (alpha_wrapper != nil) {
+                #           alpha = [alpha_wrapper value];
+                #         }
+                #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                #      }
+                #
+                #      static Color* toProto(UIColor* color) {
+                #          CGFloat red, green, blue, alpha;
+                #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                #            return nil;
+                #          }
+                #          Color* result = [Color alloc] init];
+                #          [result setRed:red];
+                #          [result setGreen:green];
+                #          [result setBlue:blue];
+                #          if (alpha <= 0.9999) {
+                #            [result setAlpha:floatWrapperWithValue(alpha)];
+                #          }
+                #          [result autorelease];
+                #          return result;
+                #     }
+                #     // ...
+                #
+                #  Example (JavaScript):
+                #
+                #     // ...
+                #
+                #     var protoToCssColor = function(rgb_color) {
+                #        var redFrac = rgb_color.red || 0.0;
+                #        var greenFrac = rgb_color.green || 0.0;
+                #        var blueFrac = rgb_color.blue || 0.0;
+                #        var red = Math.floor(redFrac * 255);
+                #        var green = Math.floor(greenFrac * 255);
+                #        var blue = Math.floor(blueFrac * 255);
+                #
+                #        if (!('alpha' in rgb_color)) {
+                #           return rgbToCssColor_(red, green, blue);
+                #        }
+                #
+                #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                #        var rgbParams = [red, green, blue].join(',');
+                #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                #     };
+                #
+                #     var rgbToCssColor_ = function(red, green, blue) {
+                #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                #       var hexString = rgbNumber.toString(16);
+                #       var missingZeros = 6 - hexString.length;
+                #       var resultBuilder = ['#'];
+                #       for (var i = 0; i < missingZeros; i++) {
+                #          resultBuilder.push('0');
+                #       }
+                #       resultBuilder.push(hexString);
+                #       return resultBuilder.join('');
+                #     };
+                #
+                #     // ...
+              "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+              "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                  # the final pixel color is defined by the equation:
+                  #
+                  #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                  #
+                  # This means that a value of 1.0 corresponds to a solid color, whereas
+                  # a value of 0.0 corresponds to a completely transparent color. This
+                  # uses a wrapper message rather than a simple float scalar so that it is
+                  # possible to distinguish between a default value and the value being unset.
+                  # If omitted, this color object is to be rendered as a solid color
+                  # (as if the alpha value had been explicitly given with a value of 1.0).
+              "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+              "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+            },
+            "hidden": True or False, # True if the sheet is hidden in the UI, false if it's visible.
+            "sheetId": 42, # The ID of the sheet. Must be non-negative.
+                # This field cannot be changed once set.
+          },
+        },
+        "addChart": { # Adds a chart to a sheet in the spreadsheet. # Adds a chart.
+          "chart": { # A chart embedded in a sheet. # The chart that should be added to the spreadsheet, including the position
+              # where it should be placed.
+            "chartId": 42, # The ID of the chart.
+            "position": { # The position of an embedded object such as a chart. # The position of the chart.
+              "newSheet": True or False, # If true, the embedded object will be put on a new sheet whose ID
+                  # is chosen for you. Used only when writing.
+              "sheetId": 42, # The sheet this is on. Set only if the embedded object
+                  # is on its own sheet. Must be non-negative.
+              "overlayPosition": { # The location an object is overlaid on top of a grid. # The position the object is overlaid on top of a grid.
+                "anchorCell": { # A coordinate in a sheet. # The cell the object is anchored to.
+                    # All indexes are zero-based.
+                  "rowIndex": 42, # The row index of the coordinate.
+                  "columnIndex": 42, # The column index of the coordinate.
+                  "sheetId": 42, # The sheet this coordinate is on.
+                },
+                "offsetYPixels": 42, # The vertical offset, in pixels, that the object is offset
+                    # from the anchor cell.
+                "widthPixels": 42, # The width of the object, in pixels. Defaults to 600.
+                "offsetXPixels": 42, # The horizontal offset, in pixels, that the object is offset
+                    # from the anchor cell.
+                "heightPixels": 42, # The height of the object, in pixels. Defaults to 371.
+              },
+            },
+            "spec": { # The specifications of a chart. # The specification of the chart.
+              "hiddenDimensionStrategy": "A String", # Determines how the charts will use hidden rows or columns.
+                  # This value is only meaningful if the
+                  # ChartData.sourceRange
+                  # is used for a domain or series.
+              "pieChart": { # A <a href="/chart/interactive/docs/gallery/piechart">pie chart</a>. # A pie chart specification.
+                "series": { # The data included in a domain or series. # The data that covers the one and only series of the pie chart.
+                  "sourceRange": { # Source ranges for a chart. # The source ranges of the data.
+                    "sources": [ # The ranges of data for a series or domain.
+                        # Exactly one dimension must have a length of 1,
+                        # and all sources in the list must have the same dimension
+                        # with length 1.
+                        # The domain (if it exists) & all series must have the same number
+                        # of source ranges. If using more than one source range, then the source
+                        # range at a given offset must be contiguous across the domain and series.
+                        #
+                        # For example, these are valid configurations:
+                        #
+                        #     domain sources: A1:A5
+                        #     series1 sources: B1:B5
+                        #     series2 sources: D6:D10
+                        #
+                        #     domain sources: A1:A5, C10:C12
+                        #     series1 sources: B1:B5, D10:D12
+                        #     series2 sources: C1:C5, E10:E12
+                      { # A range on a sheet.
+                          # 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 grid 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.
+                        "startRowIndex": 42, # The start row (inclusive) 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.
+                        "endColumnIndex": 42, # The end column (exclusive) of the range, or not set if unbounded.
+                      },
+                    ],
+                  },
+                },
+                "domain": { # The data included in a domain or series. # The data that covers the domain of the pie chart.
+                  "sourceRange": { # Source ranges for a chart. # The source ranges of the data.
+                    "sources": [ # The ranges of data for a series or domain.
+                        # Exactly one dimension must have a length of 1,
+                        # and all sources in the list must have the same dimension
+                        # with length 1.
+                        # The domain (if it exists) & all series must have the same number
+                        # of source ranges. If using more than one source range, then the source
+                        # range at a given offset must be contiguous across the domain and series.
+                        #
+                        # For example, these are valid configurations:
+                        #
+                        #     domain sources: A1:A5
+                        #     series1 sources: B1:B5
+                        #     series2 sources: D6:D10
+                        #
+                        #     domain sources: A1:A5, C10:C12
+                        #     series1 sources: B1:B5, D10:D12
+                        #     series2 sources: C1:C5, E10:E12
+                      { # A range on a sheet.
+                          # 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 grid 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.
+                        "startRowIndex": 42, # The start row (inclusive) 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.
+                        "endColumnIndex": 42, # The end column (exclusive) of the range, or not set if unbounded.
+                      },
+                    ],
+                  },
+                },
+                "threeDimensional": True or False, # True if the pie is three dimensional.
+                "legendPosition": "A String", # Where the legend of the pie chart should be drawn.
+                "pieHole": 3.14, # The size of the hole in the pie chart.
+              },
+              "basicChart": { # The specification for a basic chart.  See BasicChartType for the list # A basic chart specification, can be one of many kinds of charts.
+                  # See BasicChartType for the list of all charts this supports.
+                  # of charts this supports.
+                "headerCount": 42, # The number of rows or columns in the data that are "headers".
+                    # If not set, Google Sheets will guess how many rows are headers based
+                    # on the data.
+                    #
+                    # (Note that BasicChartAxis.title may override the axis title
+                    #  inferred from the header values.)
+                "series": [ # The data this chart is visualizing.
+                  { # A single series of data in a chart.
+                      # For example, if charting stock prices over time, multiple series may exist,
+                      # one for the "Open Price", "High Price", "Low Price" and "Close Price".
+                    "series": { # The data included in a domain or series. # The data being visualized in this chart series.
+                      "sourceRange": { # Source ranges for a chart. # The source ranges of the data.
+                        "sources": [ # The ranges of data for a series or domain.
+                            # Exactly one dimension must have a length of 1,
+                            # and all sources in the list must have the same dimension
+                            # with length 1.
+                            # The domain (if it exists) & all series must have the same number
+                            # of source ranges. If using more than one source range, then the source
+                            # range at a given offset must be contiguous across the domain and series.
+                            #
+                            # For example, these are valid configurations:
+                            #
+                            #     domain sources: A1:A5
+                            #     series1 sources: B1:B5
+                            #     series2 sources: D6:D10
+                            #
+                            #     domain sources: A1:A5, C10:C12
+                            #     series1 sources: B1:B5, D10:D12
+                            #     series2 sources: C1:C5, E10:E12
+                          { # A range on a sheet.
+                              # 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 grid 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.
+                            "startRowIndex": 42, # The start row (inclusive) 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.
+                            "endColumnIndex": 42, # The end column (exclusive) of the range, or not set if unbounded.
+                          },
+                        ],
+                      },
+                    },
+                    "targetAxis": "A String", # The minor axis that will specify the range of values for this series.
+                        # For example, if charting stocks over time, the "Volume" series
+                        # may want to be pinned to the right with the prices pinned to the left,
+                        # because the scale of trading volume is different than the scale of
+                        # prices.
+                        # It is an error to specify an axis that isn't a valid minor axis
+                        # for the chart's type.
+                    "type": "A String", # The type of this series. Valid only if the
+                        # chartType is
+                        # COMBO.
+                        # Different types will change the way the series is visualized.
+                        # Only LINE, AREA,
+                        # and COLUMN are supported.
+                  },
+                ],
+                "legendPosition": "A String", # The position of the chart legend.
+                "domains": [ # The domain of data this is charting.
+                    # Only a single domain is currently supported.
+                  { # The domain of a chart.
+                      # For example, if charting stock prices over time, this would be the date.
+                    "domain": { # The data included in a domain or series. # The data of the domain. For example, if charting stock prices over time,
+                        # this be the data representing the dates.
+                      "sourceRange": { # Source ranges for a chart. # The source ranges of the data.
+                        "sources": [ # The ranges of data for a series or domain.
+                            # Exactly one dimension must have a length of 1,
+                            # and all sources in the list must have the same dimension
+                            # with length 1.
+                            # The domain (if it exists) & all series must have the same number
+                            # of source ranges. If using more than one source range, then the source
+                            # range at a given offset must be contiguous across the domain and series.
+                            #
+                            # For example, these are valid configurations:
+                            #
+                            #     domain sources: A1:A5
+                            #     series1 sources: B1:B5
+                            #     series2 sources: D6:D10
+                            #
+                            #     domain sources: A1:A5, C10:C12
+                            #     series1 sources: B1:B5, D10:D12
+                            #     series2 sources: C1:C5, E10:E12
+                          { # A range on a sheet.
+                              # 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 grid 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.
+                            "startRowIndex": 42, # The start row (inclusive) 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.
+                            "endColumnIndex": 42, # The end column (exclusive) of the range, or not set if unbounded.
+                          },
+                        ],
+                      },
+                    },
+                  },
+                ],
+                "chartType": "A String", # The type of the chart.
+                "axis": [ # The axis on the chart.
+                  { # An axis of the chart.
+                      # A chart may not have more than one axis per
+                      # axis position.
+                    "position": "A String", # The position of this axis.
+                    "format": { # The format of a run of text in a cell. # The format of the title.
+                        # Only valid if the axis is not associated with the domain.
+                        # Absent values indicate that the field isn't specified.
+                      "foregroundColor": { # Represents a color in the RGBA color space. This representation is designed # The foreground color of the text.
+                          # for simplicity of conversion to/from color representations in various
+                          # languages over compactness; for example, the fields of this representation
+                          # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                          # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                          # method in iOS; and, with just a little work, it can be easily formatted into
+                          # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                          #
+                          # Example (Java):
+                          #
+                          #      import com.google.type.Color;
+                          #
+                          #      // ...
+                          #      public static java.awt.Color fromProto(Color protocolor) {
+                          #        float alpha = protocolor.hasAlpha()
+                          #            ? protocolor.getAlpha().getValue()
+                          #            : 1.0;
+                          #
+                          #        return new java.awt.Color(
+                          #            protocolor.getRed(),
+                          #            protocolor.getGreen(),
+                          #            protocolor.getBlue(),
+                          #            alpha);
+                          #      }
+                          #
+                          #      public static Color toProto(java.awt.Color color) {
+                          #        float red = (float) color.getRed();
+                          #        float green = (float) color.getGreen();
+                          #        float blue = (float) color.getBlue();
+                          #        float denominator = 255.0;
+                          #        Color.Builder resultBuilder =
+                          #            Color
+                          #                .newBuilder()
+                          #                .setRed(red / denominator)
+                          #                .setGreen(green / denominator)
+                          #                .setBlue(blue / denominator);
+                          #        int alpha = color.getAlpha();
+                          #        if (alpha != 255) {
+                          #          result.setAlpha(
+                          #              FloatValue
+                          #                  .newBuilder()
+                          #                  .setValue(((float) alpha) / denominator)
+                          #                  .build());
+                          #        }
+                          #        return resultBuilder.build();
+                          #      }
+                          #      // ...
+                          #
+                          # Example (iOS / Obj-C):
+                          #
+                          #      // ...
+                          #      static UIColor* fromProto(Color* protocolor) {
+                          #         float red = [protocolor red];
+                          #         float green = [protocolor green];
+                          #         float blue = [protocolor blue];
+                          #         FloatValue* alpha_wrapper = [protocolor alpha];
+                          #         float alpha = 1.0;
+                          #         if (alpha_wrapper != nil) {
+                          #           alpha = [alpha_wrapper value];
+                          #         }
+                          #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                          #      }
+                          #
+                          #      static Color* toProto(UIColor* color) {
+                          #          CGFloat red, green, blue, alpha;
+                          #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                          #            return nil;
+                          #          }
+                          #          Color* result = [Color alloc] init];
+                          #          [result setRed:red];
+                          #          [result setGreen:green];
+                          #          [result setBlue:blue];
+                          #          if (alpha <= 0.9999) {
+                          #            [result setAlpha:floatWrapperWithValue(alpha)];
+                          #          }
+                          #          [result autorelease];
+                          #          return result;
+                          #     }
+                          #     // ...
+                          #
+                          #  Example (JavaScript):
+                          #
+                          #     // ...
+                          #
+                          #     var protoToCssColor = function(rgb_color) {
+                          #        var redFrac = rgb_color.red || 0.0;
+                          #        var greenFrac = rgb_color.green || 0.0;
+                          #        var blueFrac = rgb_color.blue || 0.0;
+                          #        var red = Math.floor(redFrac * 255);
+                          #        var green = Math.floor(greenFrac * 255);
+                          #        var blue = Math.floor(blueFrac * 255);
+                          #
+                          #        if (!('alpha' in rgb_color)) {
+                          #           return rgbToCssColor_(red, green, blue);
+                          #        }
+                          #
+                          #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                          #        var rgbParams = [red, green, blue].join(',');
+                          #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                          #     };
+                          #
+                          #     var rgbToCssColor_ = function(red, green, blue) {
+                          #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                          #       var hexString = rgbNumber.toString(16);
+                          #       var missingZeros = 6 - hexString.length;
+                          #       var resultBuilder = ['#'];
+                          #       for (var i = 0; i < missingZeros; i++) {
+                          #          resultBuilder.push('0');
+                          #       }
+                          #       resultBuilder.push(hexString);
+                          #       return resultBuilder.join('');
+                          #     };
+                          #
+                          #     // ...
+                        "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                        "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                            # the final pixel color is defined by the equation:
+                            #
+                            #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                            #
+                            # This means that a value of 1.0 corresponds to a solid color, whereas
+                            # a value of 0.0 corresponds to a completely transparent color. This
+                            # uses a wrapper message rather than a simple float scalar so that it is
+                            # possible to distinguish between a default value and the value being unset.
+                            # If omitted, this color object is to be rendered as a solid color
+                            # (as if the alpha value had been explicitly given with a value of 1.0).
+                        "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                        "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                      },
+                      "bold": True or False, # True if the text is bold.
+                      "strikethrough": True or False, # True if the text has a strikethrough.
+                      "fontFamily": "A String", # The font family.
+                      "fontSize": 42, # The size of the font.
+                      "italic": True or False, # True if the text is italicized.
+                      "underline": True or False, # True if the text is underlined.
+                    },
+                    "title": "A String", # The title of this axis. If set, this overrides any title inferred
+                        # from headers of the data.
+                  },
+                ],
+              },
+              "title": "A String", # The title of the chart.
+            },
+          },
+        },
+        "addConditionalFormatRule": { # Adds a new conditional format rule at the given index. # Adds a new conditional format rule.
+            # All subsequent rules' indexes are incremented.
+          "index": 42, # The zero-based index where the rule should be inserted.
+          "rule": { # A rule describing a conditional format. # The rule to add.
+            "ranges": [ # The ranges that will be formatted if the condition is true.
+                # All the ranges must be on the same grid.
+              { # A range on a sheet.
+                  # 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 grid 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.
+                "startRowIndex": 42, # The start row (inclusive) 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.
+                "endColumnIndex": 42, # The end column (exclusive) of the range, or not set if unbounded.
+              },
+            ],
+            "booleanRule": { # A rule that may or may not match, depending on the condition. # The formatting is either "on" or "off" according to the rule.
+              "condition": { # A condition that can evaluate to true or false. # The condition of the rule. If the condition evaluates to true,
+                  # the format will be applied.
+                  # BooleanConditions are used by conditional formatting,
+                  # data validation, and the criteria in filters.
+                "type": "A String", # The type of condition.
+                "values": [ # The values of the condition. The number of supported values depends
+                    # on the condition type.  Some support zero values,
+                    # others one or two values,
+                    # and ConditionType.ONE_OF_LIST supports an arbitrary number of values.
+                  { # The value of the condition.
+                    "relativeDate": "A String", # A relative date (based on the current date).
+                        # Valid only if the type is
+                        # DATE_BEFORE,
+                        # DATE_AFTER,
+                        # DATE_ON_OR_BEFORE or
+                        # DATE_ON_OR_AFTER.
+                        #
+                        # Relative dates are not supported in data validation.
+                        # They are supported only in conditional formatting and
+                        # conditional filters.
+                    "userEnteredValue": "A String", # A value the condition is based on.
+                        # The value will be parsed as if the user typed into a cell.
+                        # Formulas are supported (and must begin with an `=`).
+                  },
+                ],
+              },
+              "format": { # The format of a cell. # The format to apply.
+                  # Conditional formatting can only apply a subset of formatting:
+                  # bold, italic,
+                  # strikethrough,
+                  # foreground color &
+                  # background color.
+                "numberFormat": { # The number format of a cell. # A format describing how number values should be represented to the user.
+                    # When updating, all fields must be set.
+                  "pattern": "A String", # Pattern string used for formatting.
+                  "type": "A String", # The type of the number format.
+                },
+                "textDirection": "A String", # The direction of the text in the cell.
+                "padding": { # The amount of padding around the cell, in pixels. # The padding of the cell.
+                    # When updating padding, every field must be specified.
+                  "top": 42, # The top padding of the cell.
+                  "right": 42, # The right padding of the cell.
+                  "bottom": 42, # The bottom padding of the cell.
+                  "left": 42, # The left padding of the cell.
+                },
+                "horizontalAlignment": "A String", # The horizontal alignment of the value in cell.
+                "backgroundColor": { # Represents a color in the RGBA color space. This representation is designed # The background color of the cell.
+                    # for simplicity of conversion to/from color representations in various
+                    # languages over compactness; for example, the fields of this representation
+                    # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                    # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                    # method in iOS; and, with just a little work, it can be easily formatted into
+                    # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                    #
+                    # Example (Java):
+                    #
+                    #      import com.google.type.Color;
+                    #
+                    #      // ...
+                    #      public static java.awt.Color fromProto(Color protocolor) {
+                    #        float alpha = protocolor.hasAlpha()
+                    #            ? protocolor.getAlpha().getValue()
+                    #            : 1.0;
+                    #
+                    #        return new java.awt.Color(
+                    #            protocolor.getRed(),
+                    #            protocolor.getGreen(),
+                    #            protocolor.getBlue(),
+                    #            alpha);
+                    #      }
+                    #
+                    #      public static Color toProto(java.awt.Color color) {
+                    #        float red = (float) color.getRed();
+                    #        float green = (float) color.getGreen();
+                    #        float blue = (float) color.getBlue();
+                    #        float denominator = 255.0;
+                    #        Color.Builder resultBuilder =
+                    #            Color
+                    #                .newBuilder()
+                    #                .setRed(red / denominator)
+                    #                .setGreen(green / denominator)
+                    #                .setBlue(blue / denominator);
+                    #        int alpha = color.getAlpha();
+                    #        if (alpha != 255) {
+                    #          result.setAlpha(
+                    #              FloatValue
+                    #                  .newBuilder()
+                    #                  .setValue(((float) alpha) / denominator)
+                    #                  .build());
+                    #        }
+                    #        return resultBuilder.build();
+                    #      }
+                    #      // ...
+                    #
+                    # Example (iOS / Obj-C):
+                    #
+                    #      // ...
+                    #      static UIColor* fromProto(Color* protocolor) {
+                    #         float red = [protocolor red];
+                    #         float green = [protocolor green];
+                    #         float blue = [protocolor blue];
+                    #         FloatValue* alpha_wrapper = [protocolor alpha];
+                    #         float alpha = 1.0;
+                    #         if (alpha_wrapper != nil) {
+                    #           alpha = [alpha_wrapper value];
+                    #         }
+                    #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                    #      }
+                    #
+                    #      static Color* toProto(UIColor* color) {
+                    #          CGFloat red, green, blue, alpha;
+                    #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                    #            return nil;
+                    #          }
+                    #          Color* result = [Color alloc] init];
+                    #          [result setRed:red];
+                    #          [result setGreen:green];
+                    #          [result setBlue:blue];
+                    #          if (alpha <= 0.9999) {
+                    #            [result setAlpha:floatWrapperWithValue(alpha)];
+                    #          }
+                    #          [result autorelease];
+                    #          return result;
+                    #     }
+                    #     // ...
+                    #
+                    #  Example (JavaScript):
+                    #
+                    #     // ...
+                    #
+                    #     var protoToCssColor = function(rgb_color) {
+                    #        var redFrac = rgb_color.red || 0.0;
+                    #        var greenFrac = rgb_color.green || 0.0;
+                    #        var blueFrac = rgb_color.blue || 0.0;
+                    #        var red = Math.floor(redFrac * 255);
+                    #        var green = Math.floor(greenFrac * 255);
+                    #        var blue = Math.floor(blueFrac * 255);
+                    #
+                    #        if (!('alpha' in rgb_color)) {
+                    #           return rgbToCssColor_(red, green, blue);
+                    #        }
+                    #
+                    #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                    #        var rgbParams = [red, green, blue].join(',');
+                    #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                    #     };
+                    #
+                    #     var rgbToCssColor_ = function(red, green, blue) {
+                    #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                    #       var hexString = rgbNumber.toString(16);
+                    #       var missingZeros = 6 - hexString.length;
+                    #       var resultBuilder = ['#'];
+                    #       for (var i = 0; i < missingZeros; i++) {
+                    #          resultBuilder.push('0');
+                    #       }
+                    #       resultBuilder.push(hexString);
+                    #       return resultBuilder.join('');
+                    #     };
+                    #
+                    #     // ...
+                  "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                  "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                      # the final pixel color is defined by the equation:
+                      #
+                      #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                      #
+                      # This means that a value of 1.0 corresponds to a solid color, whereas
+                      # a value of 0.0 corresponds to a completely transparent color. This
+                      # uses a wrapper message rather than a simple float scalar so that it is
+                      # possible to distinguish between a default value and the value being unset.
+                      # If omitted, this color object is to be rendered as a solid color
+                      # (as if the alpha value had been explicitly given with a value of 1.0).
+                  "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                  "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                },
+                "verticalAlignment": "A String", # The vertical alignment of the value in cell.
+                "textFormat": { # The format of a run of text in a cell. # The format of the text in the cell (unless overridden by a format run).
+                    # Absent values indicate that the field isn't specified.
+                  "foregroundColor": { # Represents a color in the RGBA color space. This representation is designed # The foreground color of the text.
+                      # for simplicity of conversion to/from color representations in various
+                      # languages over compactness; for example, the fields of this representation
+                      # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                      # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                      # method in iOS; and, with just a little work, it can be easily formatted into
+                      # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                      #
+                      # Example (Java):
+                      #
+                      #      import com.google.type.Color;
+                      #
+                      #      // ...
+                      #      public static java.awt.Color fromProto(Color protocolor) {
+                      #        float alpha = protocolor.hasAlpha()
+                      #            ? protocolor.getAlpha().getValue()
+                      #            : 1.0;
+                      #
+                      #        return new java.awt.Color(
+                      #            protocolor.getRed(),
+                      #            protocolor.getGreen(),
+                      #            protocolor.getBlue(),
+                      #            alpha);
+                      #      }
+                      #
+                      #      public static Color toProto(java.awt.Color color) {
+                      #        float red = (float) color.getRed();
+                      #        float green = (float) color.getGreen();
+                      #        float blue = (float) color.getBlue();
+                      #        float denominator = 255.0;
+                      #        Color.Builder resultBuilder =
+                      #            Color
+                      #                .newBuilder()
+                      #                .setRed(red / denominator)
+                      #                .setGreen(green / denominator)
+                      #                .setBlue(blue / denominator);
+                      #        int alpha = color.getAlpha();
+                      #        if (alpha != 255) {
+                      #          result.setAlpha(
+                      #              FloatValue
+                      #                  .newBuilder()
+                      #                  .setValue(((float) alpha) / denominator)
+                      #                  .build());
+                      #        }
+                      #        return resultBuilder.build();
+                      #      }
+                      #      // ...
+                      #
+                      # Example (iOS / Obj-C):
+                      #
+                      #      // ...
+                      #      static UIColor* fromProto(Color* protocolor) {
+                      #         float red = [protocolor red];
+                      #         float green = [protocolor green];
+                      #         float blue = [protocolor blue];
+                      #         FloatValue* alpha_wrapper = [protocolor alpha];
+                      #         float alpha = 1.0;
+                      #         if (alpha_wrapper != nil) {
+                      #           alpha = [alpha_wrapper value];
+                      #         }
+                      #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                      #      }
+                      #
+                      #      static Color* toProto(UIColor* color) {
+                      #          CGFloat red, green, blue, alpha;
+                      #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                      #            return nil;
+                      #          }
+                      #          Color* result = [Color alloc] init];
+                      #          [result setRed:red];
+                      #          [result setGreen:green];
+                      #          [result setBlue:blue];
+                      #          if (alpha <= 0.9999) {
+                      #            [result setAlpha:floatWrapperWithValue(alpha)];
+                      #          }
+                      #          [result autorelease];
+                      #          return result;
+                      #     }
+                      #     // ...
+                      #
+                      #  Example (JavaScript):
+                      #
+                      #     // ...
+                      #
+                      #     var protoToCssColor = function(rgb_color) {
+                      #        var redFrac = rgb_color.red || 0.0;
+                      #        var greenFrac = rgb_color.green || 0.0;
+                      #        var blueFrac = rgb_color.blue || 0.0;
+                      #        var red = Math.floor(redFrac * 255);
+                      #        var green = Math.floor(greenFrac * 255);
+                      #        var blue = Math.floor(blueFrac * 255);
+                      #
+                      #        if (!('alpha' in rgb_color)) {
+                      #           return rgbToCssColor_(red, green, blue);
+                      #        }
+                      #
+                      #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                      #        var rgbParams = [red, green, blue].join(',');
+                      #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                      #     };
+                      #
+                      #     var rgbToCssColor_ = function(red, green, blue) {
+                      #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                      #       var hexString = rgbNumber.toString(16);
+                      #       var missingZeros = 6 - hexString.length;
+                      #       var resultBuilder = ['#'];
+                      #       for (var i = 0; i < missingZeros; i++) {
+                      #          resultBuilder.push('0');
+                      #       }
+                      #       resultBuilder.push(hexString);
+                      #       return resultBuilder.join('');
+                      #     };
+                      #
+                      #     // ...
+                    "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                    "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                        # the final pixel color is defined by the equation:
+                        #
+                        #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                        #
+                        # This means that a value of 1.0 corresponds to a solid color, whereas
+                        # a value of 0.0 corresponds to a completely transparent color. This
+                        # uses a wrapper message rather than a simple float scalar so that it is
+                        # possible to distinguish between a default value and the value being unset.
+                        # If omitted, this color object is to be rendered as a solid color
+                        # (as if the alpha value had been explicitly given with a value of 1.0).
+                    "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                    "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                  },
+                  "bold": True or False, # True if the text is bold.
+                  "strikethrough": True or False, # True if the text has a strikethrough.
+                  "fontFamily": "A String", # The font family.
+                  "fontSize": 42, # The size of the font.
+                  "italic": True or False, # True if the text is italicized.
+                  "underline": True or False, # True if the text is underlined.
+                },
+                "hyperlinkDisplayType": "A String", # How a hyperlink, if it exists, should be displayed in the cell.
+                "borders": { # The borders of the cell. # The borders of the cell.
+                  "top": { # A border along a cell. # The top border of the cell.
+                    "color": { # Represents a color in the RGBA color space. This representation is designed # The color of the border.
+                        # for simplicity of conversion to/from color representations in various
+                        # languages over compactness; for example, the fields of this representation
+                        # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                        # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                        # method in iOS; and, with just a little work, it can be easily formatted into
+                        # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                        #
+                        # Example (Java):
+                        #
+                        #      import com.google.type.Color;
+                        #
+                        #      // ...
+                        #      public static java.awt.Color fromProto(Color protocolor) {
+                        #        float alpha = protocolor.hasAlpha()
+                        #            ? protocolor.getAlpha().getValue()
+                        #            : 1.0;
+                        #
+                        #        return new java.awt.Color(
+                        #            protocolor.getRed(),
+                        #            protocolor.getGreen(),
+                        #            protocolor.getBlue(),
+                        #            alpha);
+                        #      }
+                        #
+                        #      public static Color toProto(java.awt.Color color) {
+                        #        float red = (float) color.getRed();
+                        #        float green = (float) color.getGreen();
+                        #        float blue = (float) color.getBlue();
+                        #        float denominator = 255.0;
+                        #        Color.Builder resultBuilder =
+                        #            Color
+                        #                .newBuilder()
+                        #                .setRed(red / denominator)
+                        #                .setGreen(green / denominator)
+                        #                .setBlue(blue / denominator);
+                        #        int alpha = color.getAlpha();
+                        #        if (alpha != 255) {
+                        #          result.setAlpha(
+                        #              FloatValue
+                        #                  .newBuilder()
+                        #                  .setValue(((float) alpha) / denominator)
+                        #                  .build());
+                        #        }
+                        #        return resultBuilder.build();
+                        #      }
+                        #      // ...
+                        #
+                        # Example (iOS / Obj-C):
+                        #
+                        #      // ...
+                        #      static UIColor* fromProto(Color* protocolor) {
+                        #         float red = [protocolor red];
+                        #         float green = [protocolor green];
+                        #         float blue = [protocolor blue];
+                        #         FloatValue* alpha_wrapper = [protocolor alpha];
+                        #         float alpha = 1.0;
+                        #         if (alpha_wrapper != nil) {
+                        #           alpha = [alpha_wrapper value];
+                        #         }
+                        #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                        #      }
+                        #
+                        #      static Color* toProto(UIColor* color) {
+                        #          CGFloat red, green, blue, alpha;
+                        #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                        #            return nil;
+                        #          }
+                        #          Color* result = [Color alloc] init];
+                        #          [result setRed:red];
+                        #          [result setGreen:green];
+                        #          [result setBlue:blue];
+                        #          if (alpha <= 0.9999) {
+                        #            [result setAlpha:floatWrapperWithValue(alpha)];
+                        #          }
+                        #          [result autorelease];
+                        #          return result;
+                        #     }
+                        #     // ...
+                        #
+                        #  Example (JavaScript):
+                        #
+                        #     // ...
+                        #
+                        #     var protoToCssColor = function(rgb_color) {
+                        #        var redFrac = rgb_color.red || 0.0;
+                        #        var greenFrac = rgb_color.green || 0.0;
+                        #        var blueFrac = rgb_color.blue || 0.0;
+                        #        var red = Math.floor(redFrac * 255);
+                        #        var green = Math.floor(greenFrac * 255);
+                        #        var blue = Math.floor(blueFrac * 255);
+                        #
+                        #        if (!('alpha' in rgb_color)) {
+                        #           return rgbToCssColor_(red, green, blue);
+                        #        }
+                        #
+                        #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                        #        var rgbParams = [red, green, blue].join(',');
+                        #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                        #     };
+                        #
+                        #     var rgbToCssColor_ = function(red, green, blue) {
+                        #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                        #       var hexString = rgbNumber.toString(16);
+                        #       var missingZeros = 6 - hexString.length;
+                        #       var resultBuilder = ['#'];
+                        #       for (var i = 0; i < missingZeros; i++) {
+                        #          resultBuilder.push('0');
+                        #       }
+                        #       resultBuilder.push(hexString);
+                        #       return resultBuilder.join('');
+                        #     };
+                        #
+                        #     // ...
+                      "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                      "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                          # the final pixel color is defined by the equation:
+                          #
+                          #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                          #
+                          # This means that a value of 1.0 corresponds to a solid color, whereas
+                          # a value of 0.0 corresponds to a completely transparent color. This
+                          # uses a wrapper message rather than a simple float scalar so that it is
+                          # possible to distinguish between a default value and the value being unset.
+                          # If omitted, this color object is to be rendered as a solid color
+                          # (as if the alpha value had been explicitly given with a value of 1.0).
+                      "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                      "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                    },
+                    "width": 42, # The width of the border, in pixels.
+                        # Border widths must be between 0 and 3 pixels.
+                    "style": "A String", # The style of the border.
+                  },
+                  "right": { # A border along a cell. # The right border of the cell.
+                    "color": { # Represents a color in the RGBA color space. This representation is designed # The color of the border.
+                        # for simplicity of conversion to/from color representations in various
+                        # languages over compactness; for example, the fields of this representation
+                        # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                        # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                        # method in iOS; and, with just a little work, it can be easily formatted into
+                        # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                        #
+                        # Example (Java):
+                        #
+                        #      import com.google.type.Color;
+                        #
+                        #      // ...
+                        #      public static java.awt.Color fromProto(Color protocolor) {
+                        #        float alpha = protocolor.hasAlpha()
+                        #            ? protocolor.getAlpha().getValue()
+                        #            : 1.0;
+                        #
+                        #        return new java.awt.Color(
+                        #            protocolor.getRed(),
+                        #            protocolor.getGreen(),
+                        #            protocolor.getBlue(),
+                        #            alpha);
+                        #      }
+                        #
+                        #      public static Color toProto(java.awt.Color color) {
+                        #        float red = (float) color.getRed();
+                        #        float green = (float) color.getGreen();
+                        #        float blue = (float) color.getBlue();
+                        #        float denominator = 255.0;
+                        #        Color.Builder resultBuilder =
+                        #            Color
+                        #                .newBuilder()
+                        #                .setRed(red / denominator)
+                        #                .setGreen(green / denominator)
+                        #                .setBlue(blue / denominator);
+                        #        int alpha = color.getAlpha();
+                        #        if (alpha != 255) {
+                        #          result.setAlpha(
+                        #              FloatValue
+                        #                  .newBuilder()
+                        #                  .setValue(((float) alpha) / denominator)
+                        #                  .build());
+                        #        }
+                        #        return resultBuilder.build();
+                        #      }
+                        #      // ...
+                        #
+                        # Example (iOS / Obj-C):
+                        #
+                        #      // ...
+                        #      static UIColor* fromProto(Color* protocolor) {
+                        #         float red = [protocolor red];
+                        #         float green = [protocolor green];
+                        #         float blue = [protocolor blue];
+                        #         FloatValue* alpha_wrapper = [protocolor alpha];
+                        #         float alpha = 1.0;
+                        #         if (alpha_wrapper != nil) {
+                        #           alpha = [alpha_wrapper value];
+                        #         }
+                        #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                        #      }
+                        #
+                        #      static Color* toProto(UIColor* color) {
+                        #          CGFloat red, green, blue, alpha;
+                        #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                        #            return nil;
+                        #          }
+                        #          Color* result = [Color alloc] init];
+                        #          [result setRed:red];
+                        #          [result setGreen:green];
+                        #          [result setBlue:blue];
+                        #          if (alpha <= 0.9999) {
+                        #            [result setAlpha:floatWrapperWithValue(alpha)];
+                        #          }
+                        #          [result autorelease];
+                        #          return result;
+                        #     }
+                        #     // ...
+                        #
+                        #  Example (JavaScript):
+                        #
+                        #     // ...
+                        #
+                        #     var protoToCssColor = function(rgb_color) {
+                        #        var redFrac = rgb_color.red || 0.0;
+                        #        var greenFrac = rgb_color.green || 0.0;
+                        #        var blueFrac = rgb_color.blue || 0.0;
+                        #        var red = Math.floor(redFrac * 255);
+                        #        var green = Math.floor(greenFrac * 255);
+                        #        var blue = Math.floor(blueFrac * 255);
+                        #
+                        #        if (!('alpha' in rgb_color)) {
+                        #           return rgbToCssColor_(red, green, blue);
+                        #        }
+                        #
+                        #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                        #        var rgbParams = [red, green, blue].join(',');
+                        #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                        #     };
+                        #
+                        #     var rgbToCssColor_ = function(red, green, blue) {
+                        #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                        #       var hexString = rgbNumber.toString(16);
+                        #       var missingZeros = 6 - hexString.length;
+                        #       var resultBuilder = ['#'];
+                        #       for (var i = 0; i < missingZeros; i++) {
+                        #          resultBuilder.push('0');
+                        #       }
+                        #       resultBuilder.push(hexString);
+                        #       return resultBuilder.join('');
+                        #     };
+                        #
+                        #     // ...
+                      "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                      "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                          # the final pixel color is defined by the equation:
+                          #
+                          #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                          #
+                          # This means that a value of 1.0 corresponds to a solid color, whereas
+                          # a value of 0.0 corresponds to a completely transparent color. This
+                          # uses a wrapper message rather than a simple float scalar so that it is
+                          # possible to distinguish between a default value and the value being unset.
+                          # If omitted, this color object is to be rendered as a solid color
+                          # (as if the alpha value had been explicitly given with a value of 1.0).
+                      "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                      "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                    },
+                    "width": 42, # The width of the border, in pixels.
+                        # Border widths must be between 0 and 3 pixels.
+                    "style": "A String", # The style of the border.
+                  },
+                  "bottom": { # A border along a cell. # The bottom border of the cell.
+                    "color": { # Represents a color in the RGBA color space. This representation is designed # The color of the border.
+                        # for simplicity of conversion to/from color representations in various
+                        # languages over compactness; for example, the fields of this representation
+                        # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                        # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                        # method in iOS; and, with just a little work, it can be easily formatted into
+                        # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                        #
+                        # Example (Java):
+                        #
+                        #      import com.google.type.Color;
+                        #
+                        #      // ...
+                        #      public static java.awt.Color fromProto(Color protocolor) {
+                        #        float alpha = protocolor.hasAlpha()
+                        #            ? protocolor.getAlpha().getValue()
+                        #            : 1.0;
+                        #
+                        #        return new java.awt.Color(
+                        #            protocolor.getRed(),
+                        #            protocolor.getGreen(),
+                        #            protocolor.getBlue(),
+                        #            alpha);
+                        #      }
+                        #
+                        #      public static Color toProto(java.awt.Color color) {
+                        #        float red = (float) color.getRed();
+                        #        float green = (float) color.getGreen();
+                        #        float blue = (float) color.getBlue();
+                        #        float denominator = 255.0;
+                        #        Color.Builder resultBuilder =
+                        #            Color
+                        #                .newBuilder()
+                        #                .setRed(red / denominator)
+                        #                .setGreen(green / denominator)
+                        #                .setBlue(blue / denominator);
+                        #        int alpha = color.getAlpha();
+                        #        if (alpha != 255) {
+                        #          result.setAlpha(
+                        #              FloatValue
+                        #                  .newBuilder()
+                        #                  .setValue(((float) alpha) / denominator)
+                        #                  .build());
+                        #        }
+                        #        return resultBuilder.build();
+                        #      }
+                        #      // ...
+                        #
+                        # Example (iOS / Obj-C):
+                        #
+                        #      // ...
+                        #      static UIColor* fromProto(Color* protocolor) {
+                        #         float red = [protocolor red];
+                        #         float green = [protocolor green];
+                        #         float blue = [protocolor blue];
+                        #         FloatValue* alpha_wrapper = [protocolor alpha];
+                        #         float alpha = 1.0;
+                        #         if (alpha_wrapper != nil) {
+                        #           alpha = [alpha_wrapper value];
+                        #         }
+                        #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                        #      }
+                        #
+                        #      static Color* toProto(UIColor* color) {
+                        #          CGFloat red, green, blue, alpha;
+                        #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                        #            return nil;
+                        #          }
+                        #          Color* result = [Color alloc] init];
+                        #          [result setRed:red];
+                        #          [result setGreen:green];
+                        #          [result setBlue:blue];
+                        #          if (alpha <= 0.9999) {
+                        #            [result setAlpha:floatWrapperWithValue(alpha)];
+                        #          }
+                        #          [result autorelease];
+                        #          return result;
+                        #     }
+                        #     // ...
+                        #
+                        #  Example (JavaScript):
+                        #
+                        #     // ...
+                        #
+                        #     var protoToCssColor = function(rgb_color) {
+                        #        var redFrac = rgb_color.red || 0.0;
+                        #        var greenFrac = rgb_color.green || 0.0;
+                        #        var blueFrac = rgb_color.blue || 0.0;
+                        #        var red = Math.floor(redFrac * 255);
+                        #        var green = Math.floor(greenFrac * 255);
+                        #        var blue = Math.floor(blueFrac * 255);
+                        #
+                        #        if (!('alpha' in rgb_color)) {
+                        #           return rgbToCssColor_(red, green, blue);
+                        #        }
+                        #
+                        #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                        #        var rgbParams = [red, green, blue].join(',');
+                        #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                        #     };
+                        #
+                        #     var rgbToCssColor_ = function(red, green, blue) {
+                        #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                        #       var hexString = rgbNumber.toString(16);
+                        #       var missingZeros = 6 - hexString.length;
+                        #       var resultBuilder = ['#'];
+                        #       for (var i = 0; i < missingZeros; i++) {
+                        #          resultBuilder.push('0');
+                        #       }
+                        #       resultBuilder.push(hexString);
+                        #       return resultBuilder.join('');
+                        #     };
+                        #
+                        #     // ...
+                      "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                      "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                          # the final pixel color is defined by the equation:
+                          #
+                          #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                          #
+                          # This means that a value of 1.0 corresponds to a solid color, whereas
+                          # a value of 0.0 corresponds to a completely transparent color. This
+                          # uses a wrapper message rather than a simple float scalar so that it is
+                          # possible to distinguish between a default value and the value being unset.
+                          # If omitted, this color object is to be rendered as a solid color
+                          # (as if the alpha value had been explicitly given with a value of 1.0).
+                      "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                      "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                    },
+                    "width": 42, # The width of the border, in pixels.
+                        # Border widths must be between 0 and 3 pixels.
+                    "style": "A String", # The style of the border.
+                  },
+                  "left": { # A border along a cell. # The left border of the cell.
+                    "color": { # Represents a color in the RGBA color space. This representation is designed # The color of the border.
+                        # for simplicity of conversion to/from color representations in various
+                        # languages over compactness; for example, the fields of this representation
+                        # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                        # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                        # method in iOS; and, with just a little work, it can be easily formatted into
+                        # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                        #
+                        # Example (Java):
+                        #
+                        #      import com.google.type.Color;
+                        #
+                        #      // ...
+                        #      public static java.awt.Color fromProto(Color protocolor) {
+                        #        float alpha = protocolor.hasAlpha()
+                        #            ? protocolor.getAlpha().getValue()
+                        #            : 1.0;
+                        #
+                        #        return new java.awt.Color(
+                        #            protocolor.getRed(),
+                        #            protocolor.getGreen(),
+                        #            protocolor.getBlue(),
+                        #            alpha);
+                        #      }
+                        #
+                        #      public static Color toProto(java.awt.Color color) {
+                        #        float red = (float) color.getRed();
+                        #        float green = (float) color.getGreen();
+                        #        float blue = (float) color.getBlue();
+                        #        float denominator = 255.0;
+                        #        Color.Builder resultBuilder =
+                        #            Color
+                        #                .newBuilder()
+                        #                .setRed(red / denominator)
+                        #                .setGreen(green / denominator)
+                        #                .setBlue(blue / denominator);
+                        #        int alpha = color.getAlpha();
+                        #        if (alpha != 255) {
+                        #          result.setAlpha(
+                        #              FloatValue
+                        #                  .newBuilder()
+                        #                  .setValue(((float) alpha) / denominator)
+                        #                  .build());
+                        #        }
+                        #        return resultBuilder.build();
+                        #      }
+                        #      // ...
+                        #
+                        # Example (iOS / Obj-C):
+                        #
+                        #      // ...
+                        #      static UIColor* fromProto(Color* protocolor) {
+                        #         float red = [protocolor red];
+                        #         float green = [protocolor green];
+                        #         float blue = [protocolor blue];
+                        #         FloatValue* alpha_wrapper = [protocolor alpha];
+                        #         float alpha = 1.0;
+                        #         if (alpha_wrapper != nil) {
+                        #           alpha = [alpha_wrapper value];
+                        #         }
+                        #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                        #      }
+                        #
+                        #      static Color* toProto(UIColor* color) {
+                        #          CGFloat red, green, blue, alpha;
+                        #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                        #            return nil;
+                        #          }
+                        #          Color* result = [Color alloc] init];
+                        #          [result setRed:red];
+                        #          [result setGreen:green];
+                        #          [result setBlue:blue];
+                        #          if (alpha <= 0.9999) {
+                        #            [result setAlpha:floatWrapperWithValue(alpha)];
+                        #          }
+                        #          [result autorelease];
+                        #          return result;
+                        #     }
+                        #     // ...
+                        #
+                        #  Example (JavaScript):
+                        #
+                        #     // ...
+                        #
+                        #     var protoToCssColor = function(rgb_color) {
+                        #        var redFrac = rgb_color.red || 0.0;
+                        #        var greenFrac = rgb_color.green || 0.0;
+                        #        var blueFrac = rgb_color.blue || 0.0;
+                        #        var red = Math.floor(redFrac * 255);
+                        #        var green = Math.floor(greenFrac * 255);
+                        #        var blue = Math.floor(blueFrac * 255);
+                        #
+                        #        if (!('alpha' in rgb_color)) {
+                        #           return rgbToCssColor_(red, green, blue);
+                        #        }
+                        #
+                        #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                        #        var rgbParams = [red, green, blue].join(',');
+                        #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                        #     };
+                        #
+                        #     var rgbToCssColor_ = function(red, green, blue) {
+                        #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                        #       var hexString = rgbNumber.toString(16);
+                        #       var missingZeros = 6 - hexString.length;
+                        #       var resultBuilder = ['#'];
+                        #       for (var i = 0; i < missingZeros; i++) {
+                        #          resultBuilder.push('0');
+                        #       }
+                        #       resultBuilder.push(hexString);
+                        #       return resultBuilder.join('');
+                        #     };
+                        #
+                        #     // ...
+                      "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                      "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                          # the final pixel color is defined by the equation:
+                          #
+                          #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                          #
+                          # This means that a value of 1.0 corresponds to a solid color, whereas
+                          # a value of 0.0 corresponds to a completely transparent color. This
+                          # uses a wrapper message rather than a simple float scalar so that it is
+                          # possible to distinguish between a default value and the value being unset.
+                          # If omitted, this color object is to be rendered as a solid color
+                          # (as if the alpha value had been explicitly given with a value of 1.0).
+                      "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                      "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                    },
+                    "width": 42, # The width of the border, in pixels.
+                        # Border widths must be between 0 and 3 pixels.
+                    "style": "A String", # The style of the border.
+                  },
+                },
+                "wrapStrategy": "A String", # The wrap strategy for the value in the cell.
+              },
+            },
+            "gradientRule": { # A rule that applies a gradient color scale format, based on # The formatting will vary based on the gradients in the rule.
+                # the interpolation points listed. The format of a cell will vary
+                # based on its contents as compared to the values of the interpolation
+                # points.
+              "maxpoint": { # A single interpolation point a gradient conditional format. # The final interpolation point.
+                  # These pin the gradient color scale according to the color,
+                  # type and value chosen.
+                "color": { # Represents a color in the RGBA color space. This representation is designed # The color this interpolation point should use.
+                    # for simplicity of conversion to/from color representations in various
+                    # languages over compactness; for example, the fields of this representation
+                    # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                    # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                    # method in iOS; and, with just a little work, it can be easily formatted into
+                    # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                    #
+                    # Example (Java):
+                    #
+                    #      import com.google.type.Color;
+                    #
+                    #      // ...
+                    #      public static java.awt.Color fromProto(Color protocolor) {
+                    #        float alpha = protocolor.hasAlpha()
+                    #            ? protocolor.getAlpha().getValue()
+                    #            : 1.0;
+                    #
+                    #        return new java.awt.Color(
+                    #            protocolor.getRed(),
+                    #            protocolor.getGreen(),
+                    #            protocolor.getBlue(),
+                    #            alpha);
+                    #      }
+                    #
+                    #      public static Color toProto(java.awt.Color color) {
+                    #        float red = (float) color.getRed();
+                    #        float green = (float) color.getGreen();
+                    #        float blue = (float) color.getBlue();
+                    #        float denominator = 255.0;
+                    #        Color.Builder resultBuilder =
+                    #            Color
+                    #                .newBuilder()
+                    #                .setRed(red / denominator)
+                    #                .setGreen(green / denominator)
+                    #                .setBlue(blue / denominator);
+                    #        int alpha = color.getAlpha();
+                    #        if (alpha != 255) {
+                    #          result.setAlpha(
+                    #              FloatValue
+                    #                  .newBuilder()
+                    #                  .setValue(((float) alpha) / denominator)
+                    #                  .build());
+                    #        }
+                    #        return resultBuilder.build();
+                    #      }
+                    #      // ...
+                    #
+                    # Example (iOS / Obj-C):
+                    #
+                    #      // ...
+                    #      static UIColor* fromProto(Color* protocolor) {
+                    #         float red = [protocolor red];
+                    #         float green = [protocolor green];
+                    #         float blue = [protocolor blue];
+                    #         FloatValue* alpha_wrapper = [protocolor alpha];
+                    #         float alpha = 1.0;
+                    #         if (alpha_wrapper != nil) {
+                    #           alpha = [alpha_wrapper value];
+                    #         }
+                    #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                    #      }
+                    #
+                    #      static Color* toProto(UIColor* color) {
+                    #          CGFloat red, green, blue, alpha;
+                    #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                    #            return nil;
+                    #          }
+                    #          Color* result = [Color alloc] init];
+                    #          [result setRed:red];
+                    #          [result setGreen:green];
+                    #          [result setBlue:blue];
+                    #          if (alpha <= 0.9999) {
+                    #            [result setAlpha:floatWrapperWithValue(alpha)];
+                    #          }
+                    #          [result autorelease];
+                    #          return result;
+                    #     }
+                    #     // ...
+                    #
+                    #  Example (JavaScript):
+                    #
+                    #     // ...
+                    #
+                    #     var protoToCssColor = function(rgb_color) {
+                    #        var redFrac = rgb_color.red || 0.0;
+                    #        var greenFrac = rgb_color.green || 0.0;
+                    #        var blueFrac = rgb_color.blue || 0.0;
+                    #        var red = Math.floor(redFrac * 255);
+                    #        var green = Math.floor(greenFrac * 255);
+                    #        var blue = Math.floor(blueFrac * 255);
+                    #
+                    #        if (!('alpha' in rgb_color)) {
+                    #           return rgbToCssColor_(red, green, blue);
+                    #        }
+                    #
+                    #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                    #        var rgbParams = [red, green, blue].join(',');
+                    #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                    #     };
+                    #
+                    #     var rgbToCssColor_ = function(red, green, blue) {
+                    #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                    #       var hexString = rgbNumber.toString(16);
+                    #       var missingZeros = 6 - hexString.length;
+                    #       var resultBuilder = ['#'];
+                    #       for (var i = 0; i < missingZeros; i++) {
+                    #          resultBuilder.push('0');
+                    #       }
+                    #       resultBuilder.push(hexString);
+                    #       return resultBuilder.join('');
+                    #     };
+                    #
+                    #     // ...
+                  "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                  "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                      # the final pixel color is defined by the equation:
+                      #
+                      #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                      #
+                      # This means that a value of 1.0 corresponds to a solid color, whereas
+                      # a value of 0.0 corresponds to a completely transparent color. This
+                      # uses a wrapper message rather than a simple float scalar so that it is
+                      # possible to distinguish between a default value and the value being unset.
+                      # If omitted, this color object is to be rendered as a solid color
+                      # (as if the alpha value had been explicitly given with a value of 1.0).
+                  "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                  "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                },
+                "type": "A String", # How the value should be interpreted.
+                "value": "A String", # The value this interpolation point uses.  May be a formula.
+                    # Unused if type is MIN or
+                    # MAX.
+              },
+              "midpoint": { # A single interpolation point a gradient conditional format. # An optional midway interpolation point.
+                  # These pin the gradient color scale according to the color,
+                  # type and value chosen.
+                "color": { # Represents a color in the RGBA color space. This representation is designed # The color this interpolation point should use.
+                    # for simplicity of conversion to/from color representations in various
+                    # languages over compactness; for example, the fields of this representation
+                    # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                    # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                    # method in iOS; and, with just a little work, it can be easily formatted into
+                    # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                    #
+                    # Example (Java):
+                    #
+                    #      import com.google.type.Color;
+                    #
+                    #      // ...
+                    #      public static java.awt.Color fromProto(Color protocolor) {
+                    #        float alpha = protocolor.hasAlpha()
+                    #            ? protocolor.getAlpha().getValue()
+                    #            : 1.0;
+                    #
+                    #        return new java.awt.Color(
+                    #            protocolor.getRed(),
+                    #            protocolor.getGreen(),
+                    #            protocolor.getBlue(),
+                    #            alpha);
+                    #      }
+                    #
+                    #      public static Color toProto(java.awt.Color color) {
+                    #        float red = (float) color.getRed();
+                    #        float green = (float) color.getGreen();
+                    #        float blue = (float) color.getBlue();
+                    #        float denominator = 255.0;
+                    #        Color.Builder resultBuilder =
+                    #            Color
+                    #                .newBuilder()
+                    #                .setRed(red / denominator)
+                    #                .setGreen(green / denominator)
+                    #                .setBlue(blue / denominator);
+                    #        int alpha = color.getAlpha();
+                    #        if (alpha != 255) {
+                    #          result.setAlpha(
+                    #              FloatValue
+                    #                  .newBuilder()
+                    #                  .setValue(((float) alpha) / denominator)
+                    #                  .build());
+                    #        }
+                    #        return resultBuilder.build();
+                    #      }
+                    #      // ...
+                    #
+                    # Example (iOS / Obj-C):
+                    #
+                    #      // ...
+                    #      static UIColor* fromProto(Color* protocolor) {
+                    #         float red = [protocolor red];
+                    #         float green = [protocolor green];
+                    #         float blue = [protocolor blue];
+                    #         FloatValue* alpha_wrapper = [protocolor alpha];
+                    #         float alpha = 1.0;
+                    #         if (alpha_wrapper != nil) {
+                    #           alpha = [alpha_wrapper value];
+                    #         }
+                    #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                    #      }
+                    #
+                    #      static Color* toProto(UIColor* color) {
+                    #          CGFloat red, green, blue, alpha;
+                    #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                    #            return nil;
+                    #          }
+                    #          Color* result = [Color alloc] init];
+                    #          [result setRed:red];
+                    #          [result setGreen:green];
+                    #          [result setBlue:blue];
+                    #          if (alpha <= 0.9999) {
+                    #            [result setAlpha:floatWrapperWithValue(alpha)];
+                    #          }
+                    #          [result autorelease];
+                    #          return result;
+                    #     }
+                    #     // ...
+                    #
+                    #  Example (JavaScript):
+                    #
+                    #     // ...
+                    #
+                    #     var protoToCssColor = function(rgb_color) {
+                    #        var redFrac = rgb_color.red || 0.0;
+                    #        var greenFrac = rgb_color.green || 0.0;
+                    #        var blueFrac = rgb_color.blue || 0.0;
+                    #        var red = Math.floor(redFrac * 255);
+                    #        var green = Math.floor(greenFrac * 255);
+                    #        var blue = Math.floor(blueFrac * 255);
+                    #
+                    #        if (!('alpha' in rgb_color)) {
+                    #           return rgbToCssColor_(red, green, blue);
+                    #        }
+                    #
+                    #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                    #        var rgbParams = [red, green, blue].join(',');
+                    #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                    #     };
+                    #
+                    #     var rgbToCssColor_ = function(red, green, blue) {
+                    #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                    #       var hexString = rgbNumber.toString(16);
+                    #       var missingZeros = 6 - hexString.length;
+                    #       var resultBuilder = ['#'];
+                    #       for (var i = 0; i < missingZeros; i++) {
+                    #          resultBuilder.push('0');
+                    #       }
+                    #       resultBuilder.push(hexString);
+                    #       return resultBuilder.join('');
+                    #     };
+                    #
+                    #     // ...
+                  "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                  "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                      # the final pixel color is defined by the equation:
+                      #
+                      #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                      #
+                      # This means that a value of 1.0 corresponds to a solid color, whereas
+                      # a value of 0.0 corresponds to a completely transparent color. This
+                      # uses a wrapper message rather than a simple float scalar so that it is
+                      # possible to distinguish between a default value and the value being unset.
+                      # If omitted, this color object is to be rendered as a solid color
+                      # (as if the alpha value had been explicitly given with a value of 1.0).
+                  "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                  "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                },
+                "type": "A String", # How the value should be interpreted.
+                "value": "A String", # The value this interpolation point uses.  May be a formula.
+                    # Unused if type is MIN or
+                    # MAX.
+              },
+              "minpoint": { # A single interpolation point a gradient conditional format. # The starting interpolation point.
+                  # These pin the gradient color scale according to the color,
+                  # type and value chosen.
+                "color": { # Represents a color in the RGBA color space. This representation is designed # The color this interpolation point should use.
+                    # for simplicity of conversion to/from color representations in various
+                    # languages over compactness; for example, the fields of this representation
+                    # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                    # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                    # method in iOS; and, with just a little work, it can be easily formatted into
+                    # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                    #
+                    # Example (Java):
+                    #
+                    #      import com.google.type.Color;
+                    #
+                    #      // ...
+                    #      public static java.awt.Color fromProto(Color protocolor) {
+                    #        float alpha = protocolor.hasAlpha()
+                    #            ? protocolor.getAlpha().getValue()
+                    #            : 1.0;
+                    #
+                    #        return new java.awt.Color(
+                    #            protocolor.getRed(),
+                    #            protocolor.getGreen(),
+                    #            protocolor.getBlue(),
+                    #            alpha);
+                    #      }
+                    #
+                    #      public static Color toProto(java.awt.Color color) {
+                    #        float red = (float) color.getRed();
+                    #        float green = (float) color.getGreen();
+                    #        float blue = (float) color.getBlue();
+                    #        float denominator = 255.0;
+                    #        Color.Builder resultBuilder =
+                    #            Color
+                    #                .newBuilder()
+                    #                .setRed(red / denominator)
+                    #                .setGreen(green / denominator)
+                    #                .setBlue(blue / denominator);
+                    #        int alpha = color.getAlpha();
+                    #        if (alpha != 255) {
+                    #          result.setAlpha(
+                    #              FloatValue
+                    #                  .newBuilder()
+                    #                  .setValue(((float) alpha) / denominator)
+                    #                  .build());
+                    #        }
+                    #        return resultBuilder.build();
+                    #      }
+                    #      // ...
+                    #
+                    # Example (iOS / Obj-C):
+                    #
+                    #      // ...
+                    #      static UIColor* fromProto(Color* protocolor) {
+                    #         float red = [protocolor red];
+                    #         float green = [protocolor green];
+                    #         float blue = [protocolor blue];
+                    #         FloatValue* alpha_wrapper = [protocolor alpha];
+                    #         float alpha = 1.0;
+                    #         if (alpha_wrapper != nil) {
+                    #           alpha = [alpha_wrapper value];
+                    #         }
+                    #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                    #      }
+                    #
+                    #      static Color* toProto(UIColor* color) {
+                    #          CGFloat red, green, blue, alpha;
+                    #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                    #            return nil;
+                    #          }
+                    #          Color* result = [Color alloc] init];
+                    #          [result setRed:red];
+                    #          [result setGreen:green];
+                    #          [result setBlue:blue];
+                    #          if (alpha <= 0.9999) {
+                    #            [result setAlpha:floatWrapperWithValue(alpha)];
+                    #          }
+                    #          [result autorelease];
+                    #          return result;
+                    #     }
+                    #     // ...
+                    #
+                    #  Example (JavaScript):
+                    #
+                    #     // ...
+                    #
+                    #     var protoToCssColor = function(rgb_color) {
+                    #        var redFrac = rgb_color.red || 0.0;
+                    #        var greenFrac = rgb_color.green || 0.0;
+                    #        var blueFrac = rgb_color.blue || 0.0;
+                    #        var red = Math.floor(redFrac * 255);
+                    #        var green = Math.floor(greenFrac * 255);
+                    #        var blue = Math.floor(blueFrac * 255);
+                    #
+                    #        if (!('alpha' in rgb_color)) {
+                    #           return rgbToCssColor_(red, green, blue);
+                    #        }
+                    #
+                    #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                    #        var rgbParams = [red, green, blue].join(',');
+                    #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                    #     };
+                    #
+                    #     var rgbToCssColor_ = function(red, green, blue) {
+                    #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                    #       var hexString = rgbNumber.toString(16);
+                    #       var missingZeros = 6 - hexString.length;
+                    #       var resultBuilder = ['#'];
+                    #       for (var i = 0; i < missingZeros; i++) {
+                    #          resultBuilder.push('0');
+                    #       }
+                    #       resultBuilder.push(hexString);
+                    #       return resultBuilder.join('');
+                    #     };
+                    #
+                    #     // ...
+                  "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                  "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                      # the final pixel color is defined by the equation:
+                      #
+                      #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                      #
+                      # This means that a value of 1.0 corresponds to a solid color, whereas
+                      # a value of 0.0 corresponds to a completely transparent color. This
+                      # uses a wrapper message rather than a simple float scalar so that it is
+                      # possible to distinguish between a default value and the value being unset.
+                      # If omitted, this color object is to be rendered as a solid color
+                      # (as if the alpha value had been explicitly given with a value of 1.0).
+                  "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                  "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                },
+                "type": "A String", # How the value should be interpreted.
+                "value": "A String", # The value this interpolation point uses.  May be a formula.
+                    # Unused if type is MIN or
+                    # MAX.
+              },
+            },
+          },
+        },
+        "repeatCell": { # Updates all cells in the range to the values in the given Cell object. # Repeats a single cell across a range.
+            # Only the fields listed in the fields field are updated; others are
+            # unchanged.
+            #
+            # If writing a cell with a formula, the formula's ranges will automatically
+            # increment for each field in the range.
+            # For example, if writing a cell with formula `=A1` into range B2:C4,
+            # B2 would be `=A1`, B3 would be `=A2`, B4 would be `=A3`,
+            # C2 would be `=B1`, C3 would be `=B2`, C4 would be `=B3`.
+            #
+            # To keep the formula's ranges static, use the `$` indicator.
+            # For example, using the formula was `=$A$1`, neither
+            # the row nor column would increment.
+          "cell": { # Data about a specific cell. # The data to write.
+            "pivotTable": { # A pivot table. # A pivot table anchored at this cell. The size of pivot table itself
+                # is computed dynamically based on its data, grouping, filters, values,
+                # etc... Only the top-left cell of the pivot table contains the pivot table
+                # definition. The other cells will contain the calculated values of the
+                # results of the pivot in their effectiveValue fields.
+              "valueLayout": "A String", # Whether values should be listed horizontally (as columns)
+                  # or vertically (as rows).
+              "rows": [ # Each row grouping in the pivot table.
+                { # A single grouping (either row or column) in a pivot table.
+                  "showTotals": True or False, # True if the pivot table should include the totals for this grouping.
+                  "valueMetadata": [ # Metadata about values in the grouping.
+                    { # Metadata about a value in a pivot grouping.
+                      "collapsed": True or False, # True if the data corresponding to the value is collapsed.
+                      "value": { # The kinds of value that a cell in a spreadsheet can have. # The calculated value the metadata corresponds to.
+                          # (Note that formulaValue is not valid,
+                          #  because the values will be calculated.)
+                        "numberValue": 3.14, # Represents a double value.
+                            # Note: Dates, Times and DateTimes are represented as doubles in
+                            # "serial number" format.
+                        "boolValue": True or False, # Represents a boolean value.
+                        "formulaValue": "A String", # Represents a formula.
+                        "stringValue": "A String", # Represents a string value.
+                            # Leading single quotes are not included. For example, if the user typed
+                            # `'123` into the UI, this would be represented as a `stringValue` of
+                            # `"123"`.
+                        "errorValue": { # An error in a cell. # Represents an error.
+                            # This field is read-only.
+                          "message": "A String", # A message with more information about the error
+                              # (in the spreadsheet's locale).
+                          "type": "A String", # The type of error.
+                        },
+                      },
+                    },
+                  ],
+                  "valueBucket": { # Information about which values in a pivot group should be used for sorting. # The bucket of the opposite pivot group to sort by.
+                      # If not specified, sorting is alphabetical by this group's values.
+                    "buckets": [ # Determines the bucket from which values are chosen to sort.
+                        #
+                        # For example, in a pivot table with one row group & two column groups,
+                        # the row group can list up to two values. The first value corresponds
+                        # to a value within the first column group, and the second value
+                        # corresponds to a value in the second column group.  If no values
+                        # are listed, this would indicate that the row should be sorted according
+                        # to the "Grand Total" over the column groups. If a single value is listed,
+                        # this would correspond to using the "Total" of that bucket.
+                      { # The kinds of value that a cell in a spreadsheet can have.
+                        "numberValue": 3.14, # Represents a double value.
+                            # Note: Dates, Times and DateTimes are represented as doubles in
+                            # "serial number" format.
+                        "boolValue": True or False, # Represents a boolean value.
+                        "formulaValue": "A String", # Represents a formula.
+                        "stringValue": "A String", # Represents a string value.
+                            # Leading single quotes are not included. For example, if the user typed
+                            # `'123` into the UI, this would be represented as a `stringValue` of
+                            # `"123"`.
+                        "errorValue": { # An error in a cell. # Represents an error.
+                            # This field is read-only.
+                          "message": "A String", # A message with more information about the error
+                              # (in the spreadsheet's locale).
+                          "type": "A String", # The type of error.
+                        },
+                      },
+                    ],
+                    "valuesIndex": 42, # The offset in the [PivotTable.values] list which the values in this
+                        # grouping should be sorted by.
+                  },
+                  "sortOrder": "A String", # The order the values in this group should be sorted.
+                  "sourceColumnOffset": 42, # The column offset of the source range that this grouping is based on.
+                      #
+                      # For example, if the source was `C10:E15', a `sourceColumnOffset` of `0`
+                      # means this group refers to column `C`, whereas the offset `1` would refer
+                      # to column `D`.
+                },
+              ],
+              "source": { # A range on a sheet. # The range the pivot table is reading data from.
+                  # 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 grid 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.
+                "startRowIndex": 42, # The start row (inclusive) 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.
+                "endColumnIndex": 42, # The end column (exclusive) of the range, or not set if unbounded.
+              },
+              "values": [ # A list of values to include in the pivot table.
+                { # The definition of how a value in a pivot table should be calculated.
+                  "formula": "A String", # A custom formula to calculate the value.  The formula must start
+                      # with an `=` character.
+                  "summarizeFunction": "A String", # A function to summarize the value.
+                      # If formula is set, the only supported values are
+                      # SUM and
+                      # CUSTOM.
+                      # If sourceColumnOffset is set, then `CUSTOM`
+                      # is not supported.
+                  "sourceColumnOffset": 42, # The column offset of the source range that this value reads from.
+                      #
+                      # For example, if the source was `C10:E15', a `sourceColumnOffset` of `0`
+                      # means this value refers to column `C`, whereas the offset `1` would
+                      # refer to column `D`.
+                  "name": "A String", # A name to use for the value. This is only used if formula was set.
+                      # Otherwise, the column name is used.
+                },
+              ],
+              "criteria": { # An optional mapping of filters per source column offset.
+                  #
+                  # The filters will be applied before aggregating data into the pivot table.
+                  # The map's key is the column offset of the source range that you want to
+                  # filter, and the value is the criteria for that column.
+                  #
+                  # For example, if the source was `C10:E15', a key of `0` will have the filter
+                  # for column `C`, whereas the key `1` is for column `D`.
+                "a_key": { # Criteria for showing/hiding rows in a pivot table.
+                  "visibleValues": [ # Values that should be included.  Values not listed here are excluded.
+                    "A String",
+                  ],
+                },
+              },
+              "columns": [ # Each column grouping in the pivot table.
+                { # A single grouping (either row or column) in a pivot table.
+                  "showTotals": True or False, # True if the pivot table should include the totals for this grouping.
+                  "valueMetadata": [ # Metadata about values in the grouping.
+                    { # Metadata about a value in a pivot grouping.
+                      "collapsed": True or False, # True if the data corresponding to the value is collapsed.
+                      "value": { # The kinds of value that a cell in a spreadsheet can have. # The calculated value the metadata corresponds to.
+                          # (Note that formulaValue is not valid,
+                          #  because the values will be calculated.)
+                        "numberValue": 3.14, # Represents a double value.
+                            # Note: Dates, Times and DateTimes are represented as doubles in
+                            # "serial number" format.
+                        "boolValue": True or False, # Represents a boolean value.
+                        "formulaValue": "A String", # Represents a formula.
+                        "stringValue": "A String", # Represents a string value.
+                            # Leading single quotes are not included. For example, if the user typed
+                            # `'123` into the UI, this would be represented as a `stringValue` of
+                            # `"123"`.
+                        "errorValue": { # An error in a cell. # Represents an error.
+                            # This field is read-only.
+                          "message": "A String", # A message with more information about the error
+                              # (in the spreadsheet's locale).
+                          "type": "A String", # The type of error.
+                        },
+                      },
+                    },
+                  ],
+                  "valueBucket": { # Information about which values in a pivot group should be used for sorting. # The bucket of the opposite pivot group to sort by.
+                      # If not specified, sorting is alphabetical by this group's values.
+                    "buckets": [ # Determines the bucket from which values are chosen to sort.
+                        #
+                        # For example, in a pivot table with one row group & two column groups,
+                        # the row group can list up to two values. The first value corresponds
+                        # to a value within the first column group, and the second value
+                        # corresponds to a value in the second column group.  If no values
+                        # are listed, this would indicate that the row should be sorted according
+                        # to the "Grand Total" over the column groups. If a single value is listed,
+                        # this would correspond to using the "Total" of that bucket.
+                      { # The kinds of value that a cell in a spreadsheet can have.
+                        "numberValue": 3.14, # Represents a double value.
+                            # Note: Dates, Times and DateTimes are represented as doubles in
+                            # "serial number" format.
+                        "boolValue": True or False, # Represents a boolean value.
+                        "formulaValue": "A String", # Represents a formula.
+                        "stringValue": "A String", # Represents a string value.
+                            # Leading single quotes are not included. For example, if the user typed
+                            # `'123` into the UI, this would be represented as a `stringValue` of
+                            # `"123"`.
+                        "errorValue": { # An error in a cell. # Represents an error.
+                            # This field is read-only.
+                          "message": "A String", # A message with more information about the error
+                              # (in the spreadsheet's locale).
+                          "type": "A String", # The type of error.
+                        },
+                      },
+                    ],
+                    "valuesIndex": 42, # The offset in the [PivotTable.values] list which the values in this
+                        # grouping should be sorted by.
+                  },
+                  "sortOrder": "A String", # The order the values in this group should be sorted.
+                  "sourceColumnOffset": 42, # The column offset of the source range that this grouping is based on.
+                      #
+                      # For example, if the source was `C10:E15', a `sourceColumnOffset` of `0`
+                      # means this group refers to column `C`, whereas the offset `1` would refer
+                      # to column `D`.
+                },
+              ],
+            },
+            "hyperlink": "A String", # A hyperlink this cell points to, if any.
+                # This field is read-only.  (To set it, use a `=HYPERLINK` formula.)
+            "effectiveValue": { # The kinds of value that a cell in a spreadsheet can have. # The effective value of the cell. For cells with formulas, this will be
+                # the calculated value.  For cells with literals, this will be
+                # the same as the user_entered_value.
+                # This field is read-only.
+              "numberValue": 3.14, # Represents a double value.
+                  # Note: Dates, Times and DateTimes are represented as doubles in
+                  # "serial number" format.
+              "boolValue": True or False, # Represents a boolean value.
+              "formulaValue": "A String", # Represents a formula.
+              "stringValue": "A String", # Represents a string value.
+                  # Leading single quotes are not included. For example, if the user typed
+                  # `'123` into the UI, this would be represented as a `stringValue` of
+                  # `"123"`.
+              "errorValue": { # An error in a cell. # Represents an error.
+                  # This field is read-only.
+                "message": "A String", # A message with more information about the error
+                    # (in the spreadsheet's locale).
+                "type": "A String", # The type of error.
+              },
+            },
+            "formattedValue": "A String", # The formatted value of the cell.
+                # This is the value as it's shown to the user.
+                # This field is read-only.
+            "userEnteredValue": { # The kinds of value that a cell in a spreadsheet can have. # The value the user entered in the cell. e.g, `1234`, `'Hello'`, or `=NOW()`
+                # Note: Dates, Times and DateTimes are represented as doubles in
+                # serial number format.
+              "numberValue": 3.14, # Represents a double value.
+                  # Note: Dates, Times and DateTimes are represented as doubles in
+                  # "serial number" format.
+              "boolValue": True or False, # Represents a boolean value.
+              "formulaValue": "A String", # Represents a formula.
+              "stringValue": "A String", # Represents a string value.
+                  # Leading single quotes are not included. For example, if the user typed
+                  # `'123` into the UI, this would be represented as a `stringValue` of
+                  # `"123"`.
+              "errorValue": { # An error in a cell. # Represents an error.
+                  # This field is read-only.
+                "message": "A String", # A message with more information about the error
+                    # (in the spreadsheet's locale).
+                "type": "A String", # The type of error.
+              },
+            },
+            "note": "A String", # Any note on the cell.
+            "effectiveFormat": { # The format of a cell. # The effective format being used by the cell.
+                # This includes the results of applying any conditional formatting and,
+                # if the cell contains a formula, the computed number format.
+                # If the effective format is the default format, effective format will
+                # not be written.
+                # This field is read-only.
+              "numberFormat": { # The number format of a cell. # A format describing how number values should be represented to the user.
+                  # When updating, all fields must be set.
+                "pattern": "A String", # Pattern string used for formatting.
+                "type": "A String", # The type of the number format.
+              },
+              "textDirection": "A String", # The direction of the text in the cell.
+              "padding": { # The amount of padding around the cell, in pixels. # The padding of the cell.
+                  # When updating padding, every field must be specified.
+                "top": 42, # The top padding of the cell.
+                "right": 42, # The right padding of the cell.
+                "bottom": 42, # The bottom padding of the cell.
+                "left": 42, # The left padding of the cell.
+              },
+              "horizontalAlignment": "A String", # The horizontal alignment of the value in cell.
+              "backgroundColor": { # Represents a color in the RGBA color space. This representation is designed # The background color of the cell.
+                  # for simplicity of conversion to/from color representations in various
+                  # languages over compactness; for example, the fields of this representation
+                  # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                  # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                  # method in iOS; and, with just a little work, it can be easily formatted into
+                  # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                  #
+                  # Example (Java):
+                  #
+                  #      import com.google.type.Color;
+                  #
+                  #      // ...
+                  #      public static java.awt.Color fromProto(Color protocolor) {
+                  #        float alpha = protocolor.hasAlpha()
+                  #            ? protocolor.getAlpha().getValue()
+                  #            : 1.0;
+                  #
+                  #        return new java.awt.Color(
+                  #            protocolor.getRed(),
+                  #            protocolor.getGreen(),
+                  #            protocolor.getBlue(),
+                  #            alpha);
+                  #      }
+                  #
+                  #      public static Color toProto(java.awt.Color color) {
+                  #        float red = (float) color.getRed();
+                  #        float green = (float) color.getGreen();
+                  #        float blue = (float) color.getBlue();
+                  #        float denominator = 255.0;
+                  #        Color.Builder resultBuilder =
+                  #            Color
+                  #                .newBuilder()
+                  #                .setRed(red / denominator)
+                  #                .setGreen(green / denominator)
+                  #                .setBlue(blue / denominator);
+                  #        int alpha = color.getAlpha();
+                  #        if (alpha != 255) {
+                  #          result.setAlpha(
+                  #              FloatValue
+                  #                  .newBuilder()
+                  #                  .setValue(((float) alpha) / denominator)
+                  #                  .build());
+                  #        }
+                  #        return resultBuilder.build();
+                  #      }
+                  #      // ...
+                  #
+                  # Example (iOS / Obj-C):
+                  #
+                  #      // ...
+                  #      static UIColor* fromProto(Color* protocolor) {
+                  #         float red = [protocolor red];
+                  #         float green = [protocolor green];
+                  #         float blue = [protocolor blue];
+                  #         FloatValue* alpha_wrapper = [protocolor alpha];
+                  #         float alpha = 1.0;
+                  #         if (alpha_wrapper != nil) {
+                  #           alpha = [alpha_wrapper value];
+                  #         }
+                  #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                  #      }
+                  #
+                  #      static Color* toProto(UIColor* color) {
+                  #          CGFloat red, green, blue, alpha;
+                  #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                  #            return nil;
+                  #          }
+                  #          Color* result = [Color alloc] init];
+                  #          [result setRed:red];
+                  #          [result setGreen:green];
+                  #          [result setBlue:blue];
+                  #          if (alpha <= 0.9999) {
+                  #            [result setAlpha:floatWrapperWithValue(alpha)];
+                  #          }
+                  #          [result autorelease];
+                  #          return result;
+                  #     }
+                  #     // ...
+                  #
+                  #  Example (JavaScript):
+                  #
+                  #     // ...
+                  #
+                  #     var protoToCssColor = function(rgb_color) {
+                  #        var redFrac = rgb_color.red || 0.0;
+                  #        var greenFrac = rgb_color.green || 0.0;
+                  #        var blueFrac = rgb_color.blue || 0.0;
+                  #        var red = Math.floor(redFrac * 255);
+                  #        var green = Math.floor(greenFrac * 255);
+                  #        var blue = Math.floor(blueFrac * 255);
+                  #
+                  #        if (!('alpha' in rgb_color)) {
+                  #           return rgbToCssColor_(red, green, blue);
+                  #        }
+                  #
+                  #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                  #        var rgbParams = [red, green, blue].join(',');
+                  #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                  #     };
+                  #
+                  #     var rgbToCssColor_ = function(red, green, blue) {
+                  #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                  #       var hexString = rgbNumber.toString(16);
+                  #       var missingZeros = 6 - hexString.length;
+                  #       var resultBuilder = ['#'];
+                  #       for (var i = 0; i < missingZeros; i++) {
+                  #          resultBuilder.push('0');
+                  #       }
+                  #       resultBuilder.push(hexString);
+                  #       return resultBuilder.join('');
+                  #     };
+                  #
+                  #     // ...
+                "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                    # the final pixel color is defined by the equation:
+                    #
+                    #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                    #
+                    # This means that a value of 1.0 corresponds to a solid color, whereas
+                    # a value of 0.0 corresponds to a completely transparent color. This
+                    # uses a wrapper message rather than a simple float scalar so that it is
+                    # possible to distinguish between a default value and the value being unset.
+                    # If omitted, this color object is to be rendered as a solid color
+                    # (as if the alpha value had been explicitly given with a value of 1.0).
+                "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+              },
+              "verticalAlignment": "A String", # The vertical alignment of the value in cell.
+              "textFormat": { # The format of a run of text in a cell. # The format of the text in the cell (unless overridden by a format run).
+                  # Absent values indicate that the field isn't specified.
+                "foregroundColor": { # Represents a color in the RGBA color space. This representation is designed # The foreground color of the text.
+                    # for simplicity of conversion to/from color representations in various
+                    # languages over compactness; for example, the fields of this representation
+                    # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                    # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                    # method in iOS; and, with just a little work, it can be easily formatted into
+                    # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                    #
+                    # Example (Java):
+                    #
+                    #      import com.google.type.Color;
+                    #
+                    #      // ...
+                    #      public static java.awt.Color fromProto(Color protocolor) {
+                    #        float alpha = protocolor.hasAlpha()
+                    #            ? protocolor.getAlpha().getValue()
+                    #            : 1.0;
+                    #
+                    #        return new java.awt.Color(
+                    #            protocolor.getRed(),
+                    #            protocolor.getGreen(),
+                    #            protocolor.getBlue(),
+                    #            alpha);
+                    #      }
+                    #
+                    #      public static Color toProto(java.awt.Color color) {
+                    #        float red = (float) color.getRed();
+                    #        float green = (float) color.getGreen();
+                    #        float blue = (float) color.getBlue();
+                    #        float denominator = 255.0;
+                    #        Color.Builder resultBuilder =
+                    #            Color
+                    #                .newBuilder()
+                    #                .setRed(red / denominator)
+                    #                .setGreen(green / denominator)
+                    #                .setBlue(blue / denominator);
+                    #        int alpha = color.getAlpha();
+                    #        if (alpha != 255) {
+                    #          result.setAlpha(
+                    #              FloatValue
+                    #                  .newBuilder()
+                    #                  .setValue(((float) alpha) / denominator)
+                    #                  .build());
+                    #        }
+                    #        return resultBuilder.build();
+                    #      }
+                    #      // ...
+                    #
+                    # Example (iOS / Obj-C):
+                    #
+                    #      // ...
+                    #      static UIColor* fromProto(Color* protocolor) {
+                    #         float red = [protocolor red];
+                    #         float green = [protocolor green];
+                    #         float blue = [protocolor blue];
+                    #         FloatValue* alpha_wrapper = [protocolor alpha];
+                    #         float alpha = 1.0;
+                    #         if (alpha_wrapper != nil) {
+                    #           alpha = [alpha_wrapper value];
+                    #         }
+                    #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                    #      }
+                    #
+                    #      static Color* toProto(UIColor* color) {
+                    #          CGFloat red, green, blue, alpha;
+                    #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                    #            return nil;
+                    #          }
+                    #          Color* result = [Color alloc] init];
+                    #          [result setRed:red];
+                    #          [result setGreen:green];
+                    #          [result setBlue:blue];
+                    #          if (alpha <= 0.9999) {
+                    #            [result setAlpha:floatWrapperWithValue(alpha)];
+                    #          }
+                    #          [result autorelease];
+                    #          return result;
+                    #     }
+                    #     // ...
+                    #
+                    #  Example (JavaScript):
+                    #
+                    #     // ...
+                    #
+                    #     var protoToCssColor = function(rgb_color) {
+                    #        var redFrac = rgb_color.red || 0.0;
+                    #        var greenFrac = rgb_color.green || 0.0;
+                    #        var blueFrac = rgb_color.blue || 0.0;
+                    #        var red = Math.floor(redFrac * 255);
+                    #        var green = Math.floor(greenFrac * 255);
+                    #        var blue = Math.floor(blueFrac * 255);
+                    #
+                    #        if (!('alpha' in rgb_color)) {
+                    #           return rgbToCssColor_(red, green, blue);
+                    #        }
+                    #
+                    #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                    #        var rgbParams = [red, green, blue].join(',');
+                    #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                    #     };
+                    #
+                    #     var rgbToCssColor_ = function(red, green, blue) {
+                    #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                    #       var hexString = rgbNumber.toString(16);
+                    #       var missingZeros = 6 - hexString.length;
+                    #       var resultBuilder = ['#'];
+                    #       for (var i = 0; i < missingZeros; i++) {
+                    #          resultBuilder.push('0');
+                    #       }
+                    #       resultBuilder.push(hexString);
+                    #       return resultBuilder.join('');
+                    #     };
+                    #
+                    #     // ...
+                  "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                  "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                      # the final pixel color is defined by the equation:
+                      #
+                      #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                      #
+                      # This means that a value of 1.0 corresponds to a solid color, whereas
+                      # a value of 0.0 corresponds to a completely transparent color. This
+                      # uses a wrapper message rather than a simple float scalar so that it is
+                      # possible to distinguish between a default value and the value being unset.
+                      # If omitted, this color object is to be rendered as a solid color
+                      # (as if the alpha value had been explicitly given with a value of 1.0).
+                  "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                  "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                },
+                "bold": True or False, # True if the text is bold.
+                "strikethrough": True or False, # True if the text has a strikethrough.
+                "fontFamily": "A String", # The font family.
+                "fontSize": 42, # The size of the font.
+                "italic": True or False, # True if the text is italicized.
+                "underline": True or False, # True if the text is underlined.
+              },
+              "hyperlinkDisplayType": "A String", # How a hyperlink, if it exists, should be displayed in the cell.
+              "borders": { # The borders of the cell. # The borders of the cell.
+                "top": { # A border along a cell. # The top border of the cell.
+                  "color": { # Represents a color in the RGBA color space. This representation is designed # The color of the border.
+                      # for simplicity of conversion to/from color representations in various
+                      # languages over compactness; for example, the fields of this representation
+                      # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                      # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                      # method in iOS; and, with just a little work, it can be easily formatted into
+                      # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                      #
+                      # Example (Java):
+                      #
+                      #      import com.google.type.Color;
+                      #
+                      #      // ...
+                      #      public static java.awt.Color fromProto(Color protocolor) {
+                      #        float alpha = protocolor.hasAlpha()
+                      #            ? protocolor.getAlpha().getValue()
+                      #            : 1.0;
+                      #
+                      #        return new java.awt.Color(
+                      #            protocolor.getRed(),
+                      #            protocolor.getGreen(),
+                      #            protocolor.getBlue(),
+                      #            alpha);
+                      #      }
+                      #
+                      #      public static Color toProto(java.awt.Color color) {
+                      #        float red = (float) color.getRed();
+                      #        float green = (float) color.getGreen();
+                      #        float blue = (float) color.getBlue();
+                      #        float denominator = 255.0;
+                      #        Color.Builder resultBuilder =
+                      #            Color
+                      #                .newBuilder()
+                      #                .setRed(red / denominator)
+                      #                .setGreen(green / denominator)
+                      #                .setBlue(blue / denominator);
+                      #        int alpha = color.getAlpha();
+                      #        if (alpha != 255) {
+                      #          result.setAlpha(
+                      #              FloatValue
+                      #                  .newBuilder()
+                      #                  .setValue(((float) alpha) / denominator)
+                      #                  .build());
+                      #        }
+                      #        return resultBuilder.build();
+                      #      }
+                      #      // ...
+                      #
+                      # Example (iOS / Obj-C):
+                      #
+                      #      // ...
+                      #      static UIColor* fromProto(Color* protocolor) {
+                      #         float red = [protocolor red];
+                      #         float green = [protocolor green];
+                      #         float blue = [protocolor blue];
+                      #         FloatValue* alpha_wrapper = [protocolor alpha];
+                      #         float alpha = 1.0;
+                      #         if (alpha_wrapper != nil) {
+                      #           alpha = [alpha_wrapper value];
+                      #         }
+                      #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                      #      }
+                      #
+                      #      static Color* toProto(UIColor* color) {
+                      #          CGFloat red, green, blue, alpha;
+                      #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                      #            return nil;
+                      #          }
+                      #          Color* result = [Color alloc] init];
+                      #          [result setRed:red];
+                      #          [result setGreen:green];
+                      #          [result setBlue:blue];
+                      #          if (alpha <= 0.9999) {
+                      #            [result setAlpha:floatWrapperWithValue(alpha)];
+                      #          }
+                      #          [result autorelease];
+                      #          return result;
+                      #     }
+                      #     // ...
+                      #
+                      #  Example (JavaScript):
+                      #
+                      #     // ...
+                      #
+                      #     var protoToCssColor = function(rgb_color) {
+                      #        var redFrac = rgb_color.red || 0.0;
+                      #        var greenFrac = rgb_color.green || 0.0;
+                      #        var blueFrac = rgb_color.blue || 0.0;
+                      #        var red = Math.floor(redFrac * 255);
+                      #        var green = Math.floor(greenFrac * 255);
+                      #        var blue = Math.floor(blueFrac * 255);
+                      #
+                      #        if (!('alpha' in rgb_color)) {
+                      #           return rgbToCssColor_(red, green, blue);
+                      #        }
+                      #
+                      #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                      #        var rgbParams = [red, green, blue].join(',');
+                      #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                      #     };
+                      #
+                      #     var rgbToCssColor_ = function(red, green, blue) {
+                      #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                      #       var hexString = rgbNumber.toString(16);
+                      #       var missingZeros = 6 - hexString.length;
+                      #       var resultBuilder = ['#'];
+                      #       for (var i = 0; i < missingZeros; i++) {
+                      #          resultBuilder.push('0');
+                      #       }
+                      #       resultBuilder.push(hexString);
+                      #       return resultBuilder.join('');
+                      #     };
+                      #
+                      #     // ...
+                    "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                    "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                        # the final pixel color is defined by the equation:
+                        #
+                        #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                        #
+                        # This means that a value of 1.0 corresponds to a solid color, whereas
+                        # a value of 0.0 corresponds to a completely transparent color. This
+                        # uses a wrapper message rather than a simple float scalar so that it is
+                        # possible to distinguish between a default value and the value being unset.
+                        # If omitted, this color object is to be rendered as a solid color
+                        # (as if the alpha value had been explicitly given with a value of 1.0).
+                    "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                    "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                  },
+                  "width": 42, # The width of the border, in pixels.
+                      # Border widths must be between 0 and 3 pixels.
+                  "style": "A String", # The style of the border.
+                },
+                "right": { # A border along a cell. # The right border of the cell.
+                  "color": { # Represents a color in the RGBA color space. This representation is designed # The color of the border.
+                      # for simplicity of conversion to/from color representations in various
+                      # languages over compactness; for example, the fields of this representation
+                      # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                      # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                      # method in iOS; and, with just a little work, it can be easily formatted into
+                      # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                      #
+                      # Example (Java):
+                      #
+                      #      import com.google.type.Color;
+                      #
+                      #      // ...
+                      #      public static java.awt.Color fromProto(Color protocolor) {
+                      #        float alpha = protocolor.hasAlpha()
+                      #            ? protocolor.getAlpha().getValue()
+                      #            : 1.0;
+                      #
+                      #        return new java.awt.Color(
+                      #            protocolor.getRed(),
+                      #            protocolor.getGreen(),
+                      #            protocolor.getBlue(),
+                      #            alpha);
+                      #      }
+                      #
+                      #      public static Color toProto(java.awt.Color color) {
+                      #        float red = (float) color.getRed();
+                      #        float green = (float) color.getGreen();
+                      #        float blue = (float) color.getBlue();
+                      #        float denominator = 255.0;
+                      #        Color.Builder resultBuilder =
+                      #            Color
+                      #                .newBuilder()
+                      #                .setRed(red / denominator)
+                      #                .setGreen(green / denominator)
+                      #                .setBlue(blue / denominator);
+                      #        int alpha = color.getAlpha();
+                      #        if (alpha != 255) {
+                      #          result.setAlpha(
+                      #              FloatValue
+                      #                  .newBuilder()
+                      #                  .setValue(((float) alpha) / denominator)
+                      #                  .build());
+                      #        }
+                      #        return resultBuilder.build();
+                      #      }
+                      #      // ...
+                      #
+                      # Example (iOS / Obj-C):
+                      #
+                      #      // ...
+                      #      static UIColor* fromProto(Color* protocolor) {
+                      #         float red = [protocolor red];
+                      #         float green = [protocolor green];
+                      #         float blue = [protocolor blue];
+                      #         FloatValue* alpha_wrapper = [protocolor alpha];
+                      #         float alpha = 1.0;
+                      #         if (alpha_wrapper != nil) {
+                      #           alpha = [alpha_wrapper value];
+                      #         }
+                      #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                      #      }
+                      #
+                      #      static Color* toProto(UIColor* color) {
+                      #          CGFloat red, green, blue, alpha;
+                      #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                      #            return nil;
+                      #          }
+                      #          Color* result = [Color alloc] init];
+                      #          [result setRed:red];
+                      #          [result setGreen:green];
+                      #          [result setBlue:blue];
+                      #          if (alpha <= 0.9999) {
+                      #            [result setAlpha:floatWrapperWithValue(alpha)];
+                      #          }
+                      #          [result autorelease];
+                      #          return result;
+                      #     }
+                      #     // ...
+                      #
+                      #  Example (JavaScript):
+                      #
+                      #     // ...
+                      #
+                      #     var protoToCssColor = function(rgb_color) {
+                      #        var redFrac = rgb_color.red || 0.0;
+                      #        var greenFrac = rgb_color.green || 0.0;
+                      #        var blueFrac = rgb_color.blue || 0.0;
+                      #        var red = Math.floor(redFrac * 255);
+                      #        var green = Math.floor(greenFrac * 255);
+                      #        var blue = Math.floor(blueFrac * 255);
+                      #
+                      #        if (!('alpha' in rgb_color)) {
+                      #           return rgbToCssColor_(red, green, blue);
+                      #        }
+                      #
+                      #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                      #        var rgbParams = [red, green, blue].join(',');
+                      #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                      #     };
+                      #
+                      #     var rgbToCssColor_ = function(red, green, blue) {
+                      #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                      #       var hexString = rgbNumber.toString(16);
+                      #       var missingZeros = 6 - hexString.length;
+                      #       var resultBuilder = ['#'];
+                      #       for (var i = 0; i < missingZeros; i++) {
+                      #          resultBuilder.push('0');
+                      #       }
+                      #       resultBuilder.push(hexString);
+                      #       return resultBuilder.join('');
+                      #     };
+                      #
+                      #     // ...
+                    "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                    "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                        # the final pixel color is defined by the equation:
+                        #
+                        #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                        #
+                        # This means that a value of 1.0 corresponds to a solid color, whereas
+                        # a value of 0.0 corresponds to a completely transparent color. This
+                        # uses a wrapper message rather than a simple float scalar so that it is
+                        # possible to distinguish between a default value and the value being unset.
+                        # If omitted, this color object is to be rendered as a solid color
+                        # (as if the alpha value had been explicitly given with a value of 1.0).
+                    "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                    "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                  },
+                  "width": 42, # The width of the border, in pixels.
+                      # Border widths must be between 0 and 3 pixels.
+                  "style": "A String", # The style of the border.
+                },
+                "bottom": { # A border along a cell. # The bottom border of the cell.
+                  "color": { # Represents a color in the RGBA color space. This representation is designed # The color of the border.
+                      # for simplicity of conversion to/from color representations in various
+                      # languages over compactness; for example, the fields of this representation
+                      # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                      # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                      # method in iOS; and, with just a little work, it can be easily formatted into
+                      # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                      #
+                      # Example (Java):
+                      #
+                      #      import com.google.type.Color;
+                      #
+                      #      // ...
+                      #      public static java.awt.Color fromProto(Color protocolor) {
+                      #        float alpha = protocolor.hasAlpha()
+                      #            ? protocolor.getAlpha().getValue()
+                      #            : 1.0;
+                      #
+                      #        return new java.awt.Color(
+                      #            protocolor.getRed(),
+                      #            protocolor.getGreen(),
+                      #            protocolor.getBlue(),
+                      #            alpha);
+                      #      }
+                      #
+                      #      public static Color toProto(java.awt.Color color) {
+                      #        float red = (float) color.getRed();
+                      #        float green = (float) color.getGreen();
+                      #        float blue = (float) color.getBlue();
+                      #        float denominator = 255.0;
+                      #        Color.Builder resultBuilder =
+                      #            Color
+                      #                .newBuilder()
+                      #                .setRed(red / denominator)
+                      #                .setGreen(green / denominator)
+                      #                .setBlue(blue / denominator);
+                      #        int alpha = color.getAlpha();
+                      #        if (alpha != 255) {
+                      #          result.setAlpha(
+                      #              FloatValue
+                      #                  .newBuilder()
+                      #                  .setValue(((float) alpha) / denominator)
+                      #                  .build());
+                      #        }
+                      #        return resultBuilder.build();
+                      #      }
+                      #      // ...
+                      #
+                      # Example (iOS / Obj-C):
+                      #
+                      #      // ...
+                      #      static UIColor* fromProto(Color* protocolor) {
+                      #         float red = [protocolor red];
+                      #         float green = [protocolor green];
+                      #         float blue = [protocolor blue];
+                      #         FloatValue* alpha_wrapper = [protocolor alpha];
+                      #         float alpha = 1.0;
+                      #         if (alpha_wrapper != nil) {
+                      #           alpha = [alpha_wrapper value];
+                      #         }
+                      #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                      #      }
+                      #
+                      #      static Color* toProto(UIColor* color) {
+                      #          CGFloat red, green, blue, alpha;
+                      #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                      #            return nil;
+                      #          }
+                      #          Color* result = [Color alloc] init];
+                      #          [result setRed:red];
+                      #          [result setGreen:green];
+                      #          [result setBlue:blue];
+                      #          if (alpha <= 0.9999) {
+                      #            [result setAlpha:floatWrapperWithValue(alpha)];
+                      #          }
+                      #          [result autorelease];
+                      #          return result;
+                      #     }
+                      #     // ...
+                      #
+                      #  Example (JavaScript):
+                      #
+                      #     // ...
+                      #
+                      #     var protoToCssColor = function(rgb_color) {
+                      #        var redFrac = rgb_color.red || 0.0;
+                      #        var greenFrac = rgb_color.green || 0.0;
+                      #        var blueFrac = rgb_color.blue || 0.0;
+                      #        var red = Math.floor(redFrac * 255);
+                      #        var green = Math.floor(greenFrac * 255);
+                      #        var blue = Math.floor(blueFrac * 255);
+                      #
+                      #        if (!('alpha' in rgb_color)) {
+                      #           return rgbToCssColor_(red, green, blue);
+                      #        }
+                      #
+                      #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                      #        var rgbParams = [red, green, blue].join(',');
+                      #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                      #     };
+                      #
+                      #     var rgbToCssColor_ = function(red, green, blue) {
+                      #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                      #       var hexString = rgbNumber.toString(16);
+                      #       var missingZeros = 6 - hexString.length;
+                      #       var resultBuilder = ['#'];
+                      #       for (var i = 0; i < missingZeros; i++) {
+                      #          resultBuilder.push('0');
+                      #       }
+                      #       resultBuilder.push(hexString);
+                      #       return resultBuilder.join('');
+                      #     };
+                      #
+                      #     // ...
+                    "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                    "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                        # the final pixel color is defined by the equation:
+                        #
+                        #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                        #
+                        # This means that a value of 1.0 corresponds to a solid color, whereas
+                        # a value of 0.0 corresponds to a completely transparent color. This
+                        # uses a wrapper message rather than a simple float scalar so that it is
+                        # possible to distinguish between a default value and the value being unset.
+                        # If omitted, this color object is to be rendered as a solid color
+                        # (as if the alpha value had been explicitly given with a value of 1.0).
+                    "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                    "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                  },
+                  "width": 42, # The width of the border, in pixels.
+                      # Border widths must be between 0 and 3 pixels.
+                  "style": "A String", # The style of the border.
+                },
+                "left": { # A border along a cell. # The left border of the cell.
+                  "color": { # Represents a color in the RGBA color space. This representation is designed # The color of the border.
+                      # for simplicity of conversion to/from color representations in various
+                      # languages over compactness; for example, the fields of this representation
+                      # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                      # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                      # method in iOS; and, with just a little work, it can be easily formatted into
+                      # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                      #
+                      # Example (Java):
+                      #
+                      #      import com.google.type.Color;
+                      #
+                      #      // ...
+                      #      public static java.awt.Color fromProto(Color protocolor) {
+                      #        float alpha = protocolor.hasAlpha()
+                      #            ? protocolor.getAlpha().getValue()
+                      #            : 1.0;
+                      #
+                      #        return new java.awt.Color(
+                      #            protocolor.getRed(),
+                      #            protocolor.getGreen(),
+                      #            protocolor.getBlue(),
+                      #            alpha);
+                      #      }
+                      #
+                      #      public static Color toProto(java.awt.Color color) {
+                      #        float red = (float) color.getRed();
+                      #        float green = (float) color.getGreen();
+                      #        float blue = (float) color.getBlue();
+                      #        float denominator = 255.0;
+                      #        Color.Builder resultBuilder =
+                      #            Color
+                      #                .newBuilder()
+                      #                .setRed(red / denominator)
+                      #                .setGreen(green / denominator)
+                      #                .setBlue(blue / denominator);
+                      #        int alpha = color.getAlpha();
+                      #        if (alpha != 255) {
+                      #          result.setAlpha(
+                      #              FloatValue
+                      #                  .newBuilder()
+                      #                  .setValue(((float) alpha) / denominator)
+                      #                  .build());
+                      #        }
+                      #        return resultBuilder.build();
+                      #      }
+                      #      // ...
+                      #
+                      # Example (iOS / Obj-C):
+                      #
+                      #      // ...
+                      #      static UIColor* fromProto(Color* protocolor) {
+                      #         float red = [protocolor red];
+                      #         float green = [protocolor green];
+                      #         float blue = [protocolor blue];
+                      #         FloatValue* alpha_wrapper = [protocolor alpha];
+                      #         float alpha = 1.0;
+                      #         if (alpha_wrapper != nil) {
+                      #           alpha = [alpha_wrapper value];
+                      #         }
+                      #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                      #      }
+                      #
+                      #      static Color* toProto(UIColor* color) {
+                      #          CGFloat red, green, blue, alpha;
+                      #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                      #            return nil;
+                      #          }
+                      #          Color* result = [Color alloc] init];
+                      #          [result setRed:red];
+                      #          [result setGreen:green];
+                      #          [result setBlue:blue];
+                      #          if (alpha <= 0.9999) {
+                      #            [result setAlpha:floatWrapperWithValue(alpha)];
+                      #          }
+                      #          [result autorelease];
+                      #          return result;
+                      #     }
+                      #     // ...
+                      #
+                      #  Example (JavaScript):
+                      #
+                      #     // ...
+                      #
+                      #     var protoToCssColor = function(rgb_color) {
+                      #        var redFrac = rgb_color.red || 0.0;
+                      #        var greenFrac = rgb_color.green || 0.0;
+                      #        var blueFrac = rgb_color.blue || 0.0;
+                      #        var red = Math.floor(redFrac * 255);
+                      #        var green = Math.floor(greenFrac * 255);
+                      #        var blue = Math.floor(blueFrac * 255);
+                      #
+                      #        if (!('alpha' in rgb_color)) {
+                      #           return rgbToCssColor_(red, green, blue);
+                      #        }
+                      #
+                      #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                      #        var rgbParams = [red, green, blue].join(',');
+                      #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                      #     };
+                      #
+                      #     var rgbToCssColor_ = function(red, green, blue) {
+                      #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                      #       var hexString = rgbNumber.toString(16);
+                      #       var missingZeros = 6 - hexString.length;
+                      #       var resultBuilder = ['#'];
+                      #       for (var i = 0; i < missingZeros; i++) {
+                      #          resultBuilder.push('0');
+                      #       }
+                      #       resultBuilder.push(hexString);
+                      #       return resultBuilder.join('');
+                      #     };
+                      #
+                      #     // ...
+                    "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                    "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                        # the final pixel color is defined by the equation:
+                        #
+                        #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                        #
+                        # This means that a value of 1.0 corresponds to a solid color, whereas
+                        # a value of 0.0 corresponds to a completely transparent color. This
+                        # uses a wrapper message rather than a simple float scalar so that it is
+                        # possible to distinguish between a default value and the value being unset.
+                        # If omitted, this color object is to be rendered as a solid color
+                        # (as if the alpha value had been explicitly given with a value of 1.0).
+                    "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                    "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                  },
+                  "width": 42, # The width of the border, in pixels.
+                      # Border widths must be between 0 and 3 pixels.
+                  "style": "A String", # The style of the border.
+                },
+              },
+              "wrapStrategy": "A String", # The wrap strategy for the value in the cell.
+            },
+            "userEnteredFormat": { # The format of a cell. # The format the user entered for the cell.
+                #
+                # When writing, the new format will be merged with the existing format.
+              "numberFormat": { # The number format of a cell. # A format describing how number values should be represented to the user.
+                  # When updating, all fields must be set.
+                "pattern": "A String", # Pattern string used for formatting.
+                "type": "A String", # The type of the number format.
+              },
+              "textDirection": "A String", # The direction of the text in the cell.
+              "padding": { # The amount of padding around the cell, in pixels. # The padding of the cell.
+                  # When updating padding, every field must be specified.
+                "top": 42, # The top padding of the cell.
+                "right": 42, # The right padding of the cell.
+                "bottom": 42, # The bottom padding of the cell.
+                "left": 42, # The left padding of the cell.
+              },
+              "horizontalAlignment": "A String", # The horizontal alignment of the value in cell.
+              "backgroundColor": { # Represents a color in the RGBA color space. This representation is designed # The background color of the cell.
+                  # for simplicity of conversion to/from color representations in various
+                  # languages over compactness; for example, the fields of this representation
+                  # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                  # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                  # method in iOS; and, with just a little work, it can be easily formatted into
+                  # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                  #
+                  # Example (Java):
+                  #
+                  #      import com.google.type.Color;
+                  #
+                  #      // ...
+                  #      public static java.awt.Color fromProto(Color protocolor) {
+                  #        float alpha = protocolor.hasAlpha()
+                  #            ? protocolor.getAlpha().getValue()
+                  #            : 1.0;
+                  #
+                  #        return new java.awt.Color(
+                  #            protocolor.getRed(),
+                  #            protocolor.getGreen(),
+                  #            protocolor.getBlue(),
+                  #            alpha);
+                  #      }
+                  #
+                  #      public static Color toProto(java.awt.Color color) {
+                  #        float red = (float) color.getRed();
+                  #        float green = (float) color.getGreen();
+                  #        float blue = (float) color.getBlue();
+                  #        float denominator = 255.0;
+                  #        Color.Builder resultBuilder =
+                  #            Color
+                  #                .newBuilder()
+                  #                .setRed(red / denominator)
+                  #                .setGreen(green / denominator)
+                  #                .setBlue(blue / denominator);
+                  #        int alpha = color.getAlpha();
+                  #        if (alpha != 255) {
+                  #          result.setAlpha(
+                  #              FloatValue
+                  #                  .newBuilder()
+                  #                  .setValue(((float) alpha) / denominator)
+                  #                  .build());
+                  #        }
+                  #        return resultBuilder.build();
+                  #      }
+                  #      // ...
+                  #
+                  # Example (iOS / Obj-C):
+                  #
+                  #      // ...
+                  #      static UIColor* fromProto(Color* protocolor) {
+                  #         float red = [protocolor red];
+                  #         float green = [protocolor green];
+                  #         float blue = [protocolor blue];
+                  #         FloatValue* alpha_wrapper = [protocolor alpha];
+                  #         float alpha = 1.0;
+                  #         if (alpha_wrapper != nil) {
+                  #           alpha = [alpha_wrapper value];
+                  #         }
+                  #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                  #      }
+                  #
+                  #      static Color* toProto(UIColor* color) {
+                  #          CGFloat red, green, blue, alpha;
+                  #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                  #            return nil;
+                  #          }
+                  #          Color* result = [Color alloc] init];
+                  #          [result setRed:red];
+                  #          [result setGreen:green];
+                  #          [result setBlue:blue];
+                  #          if (alpha <= 0.9999) {
+                  #            [result setAlpha:floatWrapperWithValue(alpha)];
+                  #          }
+                  #          [result autorelease];
+                  #          return result;
+                  #     }
+                  #     // ...
+                  #
+                  #  Example (JavaScript):
+                  #
+                  #     // ...
+                  #
+                  #     var protoToCssColor = function(rgb_color) {
+                  #        var redFrac = rgb_color.red || 0.0;
+                  #        var greenFrac = rgb_color.green || 0.0;
+                  #        var blueFrac = rgb_color.blue || 0.0;
+                  #        var red = Math.floor(redFrac * 255);
+                  #        var green = Math.floor(greenFrac * 255);
+                  #        var blue = Math.floor(blueFrac * 255);
+                  #
+                  #        if (!('alpha' in rgb_color)) {
+                  #           return rgbToCssColor_(red, green, blue);
+                  #        }
+                  #
+                  #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                  #        var rgbParams = [red, green, blue].join(',');
+                  #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                  #     };
+                  #
+                  #     var rgbToCssColor_ = function(red, green, blue) {
+                  #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                  #       var hexString = rgbNumber.toString(16);
+                  #       var missingZeros = 6 - hexString.length;
+                  #       var resultBuilder = ['#'];
+                  #       for (var i = 0; i < missingZeros; i++) {
+                  #          resultBuilder.push('0');
+                  #       }
+                  #       resultBuilder.push(hexString);
+                  #       return resultBuilder.join('');
+                  #     };
+                  #
+                  #     // ...
+                "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                    # the final pixel color is defined by the equation:
+                    #
+                    #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                    #
+                    # This means that a value of 1.0 corresponds to a solid color, whereas
+                    # a value of 0.0 corresponds to a completely transparent color. This
+                    # uses a wrapper message rather than a simple float scalar so that it is
+                    # possible to distinguish between a default value and the value being unset.
+                    # If omitted, this color object is to be rendered as a solid color
+                    # (as if the alpha value had been explicitly given with a value of 1.0).
+                "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+              },
+              "verticalAlignment": "A String", # The vertical alignment of the value in cell.
+              "textFormat": { # The format of a run of text in a cell. # The format of the text in the cell (unless overridden by a format run).
+                  # Absent values indicate that the field isn't specified.
+                "foregroundColor": { # Represents a color in the RGBA color space. This representation is designed # The foreground color of the text.
+                    # for simplicity of conversion to/from color representations in various
+                    # languages over compactness; for example, the fields of this representation
+                    # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                    # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                    # method in iOS; and, with just a little work, it can be easily formatted into
+                    # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                    #
+                    # Example (Java):
+                    #
+                    #      import com.google.type.Color;
+                    #
+                    #      // ...
+                    #      public static java.awt.Color fromProto(Color protocolor) {
+                    #        float alpha = protocolor.hasAlpha()
+                    #            ? protocolor.getAlpha().getValue()
+                    #            : 1.0;
+                    #
+                    #        return new java.awt.Color(
+                    #            protocolor.getRed(),
+                    #            protocolor.getGreen(),
+                    #            protocolor.getBlue(),
+                    #            alpha);
+                    #      }
+                    #
+                    #      public static Color toProto(java.awt.Color color) {
+                    #        float red = (float) color.getRed();
+                    #        float green = (float) color.getGreen();
+                    #        float blue = (float) color.getBlue();
+                    #        float denominator = 255.0;
+                    #        Color.Builder resultBuilder =
+                    #            Color
+                    #                .newBuilder()
+                    #                .setRed(red / denominator)
+                    #                .setGreen(green / denominator)
+                    #                .setBlue(blue / denominator);
+                    #        int alpha = color.getAlpha();
+                    #        if (alpha != 255) {
+                    #          result.setAlpha(
+                    #              FloatValue
+                    #                  .newBuilder()
+                    #                  .setValue(((float) alpha) / denominator)
+                    #                  .build());
+                    #        }
+                    #        return resultBuilder.build();
+                    #      }
+                    #      // ...
+                    #
+                    # Example (iOS / Obj-C):
+                    #
+                    #      // ...
+                    #      static UIColor* fromProto(Color* protocolor) {
+                    #         float red = [protocolor red];
+                    #         float green = [protocolor green];
+                    #         float blue = [protocolor blue];
+                    #         FloatValue* alpha_wrapper = [protocolor alpha];
+                    #         float alpha = 1.0;
+                    #         if (alpha_wrapper != nil) {
+                    #           alpha = [alpha_wrapper value];
+                    #         }
+                    #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                    #      }
+                    #
+                    #      static Color* toProto(UIColor* color) {
+                    #          CGFloat red, green, blue, alpha;
+                    #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                    #            return nil;
+                    #          }
+                    #          Color* result = [Color alloc] init];
+                    #          [result setRed:red];
+                    #          [result setGreen:green];
+                    #          [result setBlue:blue];
+                    #          if (alpha <= 0.9999) {
+                    #            [result setAlpha:floatWrapperWithValue(alpha)];
+                    #          }
+                    #          [result autorelease];
+                    #          return result;
+                    #     }
+                    #     // ...
+                    #
+                    #  Example (JavaScript):
+                    #
+                    #     // ...
+                    #
+                    #     var protoToCssColor = function(rgb_color) {
+                    #        var redFrac = rgb_color.red || 0.0;
+                    #        var greenFrac = rgb_color.green || 0.0;
+                    #        var blueFrac = rgb_color.blue || 0.0;
+                    #        var red = Math.floor(redFrac * 255);
+                    #        var green = Math.floor(greenFrac * 255);
+                    #        var blue = Math.floor(blueFrac * 255);
+                    #
+                    #        if (!('alpha' in rgb_color)) {
+                    #           return rgbToCssColor_(red, green, blue);
+                    #        }
+                    #
+                    #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                    #        var rgbParams = [red, green, blue].join(',');
+                    #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                    #     };
+                    #
+                    #     var rgbToCssColor_ = function(red, green, blue) {
+                    #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                    #       var hexString = rgbNumber.toString(16);
+                    #       var missingZeros = 6 - hexString.length;
+                    #       var resultBuilder = ['#'];
+                    #       for (var i = 0; i < missingZeros; i++) {
+                    #          resultBuilder.push('0');
+                    #       }
+                    #       resultBuilder.push(hexString);
+                    #       return resultBuilder.join('');
+                    #     };
+                    #
+                    #     // ...
+                  "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                  "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                      # the final pixel color is defined by the equation:
+                      #
+                      #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                      #
+                      # This means that a value of 1.0 corresponds to a solid color, whereas
+                      # a value of 0.0 corresponds to a completely transparent color. This
+                      # uses a wrapper message rather than a simple float scalar so that it is
+                      # possible to distinguish between a default value and the value being unset.
+                      # If omitted, this color object is to be rendered as a solid color
+                      # (as if the alpha value had been explicitly given with a value of 1.0).
+                  "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                  "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                },
+                "bold": True or False, # True if the text is bold.
+                "strikethrough": True or False, # True if the text has a strikethrough.
+                "fontFamily": "A String", # The font family.
+                "fontSize": 42, # The size of the font.
+                "italic": True or False, # True if the text is italicized.
+                "underline": True or False, # True if the text is underlined.
+              },
+              "hyperlinkDisplayType": "A String", # How a hyperlink, if it exists, should be displayed in the cell.
+              "borders": { # The borders of the cell. # The borders of the cell.
+                "top": { # A border along a cell. # The top border of the cell.
+                  "color": { # Represents a color in the RGBA color space. This representation is designed # The color of the border.
+                      # for simplicity of conversion to/from color representations in various
+                      # languages over compactness; for example, the fields of this representation
+                      # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                      # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                      # method in iOS; and, with just a little work, it can be easily formatted into
+                      # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                      #
+                      # Example (Java):
+                      #
+                      #      import com.google.type.Color;
+                      #
+                      #      // ...
+                      #      public static java.awt.Color fromProto(Color protocolor) {
+                      #        float alpha = protocolor.hasAlpha()
+                      #            ? protocolor.getAlpha().getValue()
+                      #            : 1.0;
+                      #
+                      #        return new java.awt.Color(
+                      #            protocolor.getRed(),
+                      #            protocolor.getGreen(),
+                      #            protocolor.getBlue(),
+                      #            alpha);
+                      #      }
+                      #
+                      #      public static Color toProto(java.awt.Color color) {
+                      #        float red = (float) color.getRed();
+                      #        float green = (float) color.getGreen();
+                      #        float blue = (float) color.getBlue();
+                      #        float denominator = 255.0;
+                      #        Color.Builder resultBuilder =
+                      #            Color
+                      #                .newBuilder()
+                      #                .setRed(red / denominator)
+                      #                .setGreen(green / denominator)
+                      #                .setBlue(blue / denominator);
+                      #        int alpha = color.getAlpha();
+                      #        if (alpha != 255) {
+                      #          result.setAlpha(
+                      #              FloatValue
+                      #                  .newBuilder()
+                      #                  .setValue(((float) alpha) / denominator)
+                      #                  .build());
+                      #        }
+                      #        return resultBuilder.build();
+                      #      }
+                      #      // ...
+                      #
+                      # Example (iOS / Obj-C):
+                      #
+                      #      // ...
+                      #      static UIColor* fromProto(Color* protocolor) {
+                      #         float red = [protocolor red];
+                      #         float green = [protocolor green];
+                      #         float blue = [protocolor blue];
+                      #         FloatValue* alpha_wrapper = [protocolor alpha];
+                      #         float alpha = 1.0;
+                      #         if (alpha_wrapper != nil) {
+                      #           alpha = [alpha_wrapper value];
+                      #         }
+                      #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                      #      }
+                      #
+                      #      static Color* toProto(UIColor* color) {
+                      #          CGFloat red, green, blue, alpha;
+                      #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                      #            return nil;
+                      #          }
+                      #          Color* result = [Color alloc] init];
+                      #          [result setRed:red];
+                      #          [result setGreen:green];
+                      #          [result setBlue:blue];
+                      #          if (alpha <= 0.9999) {
+                      #            [result setAlpha:floatWrapperWithValue(alpha)];
+                      #          }
+                      #          [result autorelease];
+                      #          return result;
+                      #     }
+                      #     // ...
+                      #
+                      #  Example (JavaScript):
+                      #
+                      #     // ...
+                      #
+                      #     var protoToCssColor = function(rgb_color) {
+                      #        var redFrac = rgb_color.red || 0.0;
+                      #        var greenFrac = rgb_color.green || 0.0;
+                      #        var blueFrac = rgb_color.blue || 0.0;
+                      #        var red = Math.floor(redFrac * 255);
+                      #        var green = Math.floor(greenFrac * 255);
+                      #        var blue = Math.floor(blueFrac * 255);
+                      #
+                      #        if (!('alpha' in rgb_color)) {
+                      #           return rgbToCssColor_(red, green, blue);
+                      #        }
+                      #
+                      #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                      #        var rgbParams = [red, green, blue].join(',');
+                      #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                      #     };
+                      #
+                      #     var rgbToCssColor_ = function(red, green, blue) {
+                      #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                      #       var hexString = rgbNumber.toString(16);
+                      #       var missingZeros = 6 - hexString.length;
+                      #       var resultBuilder = ['#'];
+                      #       for (var i = 0; i < missingZeros; i++) {
+                      #          resultBuilder.push('0');
+                      #       }
+                      #       resultBuilder.push(hexString);
+                      #       return resultBuilder.join('');
+                      #     };
+                      #
+                      #     // ...
+                    "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                    "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                        # the final pixel color is defined by the equation:
+                        #
+                        #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                        #
+                        # This means that a value of 1.0 corresponds to a solid color, whereas
+                        # a value of 0.0 corresponds to a completely transparent color. This
+                        # uses a wrapper message rather than a simple float scalar so that it is
+                        # possible to distinguish between a default value and the value being unset.
+                        # If omitted, this color object is to be rendered as a solid color
+                        # (as if the alpha value had been explicitly given with a value of 1.0).
+                    "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                    "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                  },
+                  "width": 42, # The width of the border, in pixels.
+                      # Border widths must be between 0 and 3 pixels.
+                  "style": "A String", # The style of the border.
+                },
+                "right": { # A border along a cell. # The right border of the cell.
+                  "color": { # Represents a color in the RGBA color space. This representation is designed # The color of the border.
+                      # for simplicity of conversion to/from color representations in various
+                      # languages over compactness; for example, the fields of this representation
+                      # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                      # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                      # method in iOS; and, with just a little work, it can be easily formatted into
+                      # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                      #
+                      # Example (Java):
+                      #
+                      #      import com.google.type.Color;
+                      #
+                      #      // ...
+                      #      public static java.awt.Color fromProto(Color protocolor) {
+                      #        float alpha = protocolor.hasAlpha()
+                      #            ? protocolor.getAlpha().getValue()
+                      #            : 1.0;
+                      #
+                      #        return new java.awt.Color(
+                      #            protocolor.getRed(),
+                      #            protocolor.getGreen(),
+                      #            protocolor.getBlue(),
+                      #            alpha);
+                      #      }
+                      #
+                      #      public static Color toProto(java.awt.Color color) {
+                      #        float red = (float) color.getRed();
+                      #        float green = (float) color.getGreen();
+                      #        float blue = (float) color.getBlue();
+                      #        float denominator = 255.0;
+                      #        Color.Builder resultBuilder =
+                      #            Color
+                      #                .newBuilder()
+                      #                .setRed(red / denominator)
+                      #                .setGreen(green / denominator)
+                      #                .setBlue(blue / denominator);
+                      #        int alpha = color.getAlpha();
+                      #        if (alpha != 255) {
+                      #          result.setAlpha(
+                      #              FloatValue
+                      #                  .newBuilder()
+                      #                  .setValue(((float) alpha) / denominator)
+                      #                  .build());
+                      #        }
+                      #        return resultBuilder.build();
+                      #      }
+                      #      // ...
+                      #
+                      # Example (iOS / Obj-C):
+                      #
+                      #      // ...
+                      #      static UIColor* fromProto(Color* protocolor) {
+                      #         float red = [protocolor red];
+                      #         float green = [protocolor green];
+                      #         float blue = [protocolor blue];
+                      #         FloatValue* alpha_wrapper = [protocolor alpha];
+                      #         float alpha = 1.0;
+                      #         if (alpha_wrapper != nil) {
+                      #           alpha = [alpha_wrapper value];
+                      #         }
+                      #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                      #      }
+                      #
+                      #      static Color* toProto(UIColor* color) {
+                      #          CGFloat red, green, blue, alpha;
+                      #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                      #            return nil;
+                      #          }
+                      #          Color* result = [Color alloc] init];
+                      #          [result setRed:red];
+                      #          [result setGreen:green];
+                      #          [result setBlue:blue];
+                      #          if (alpha <= 0.9999) {
+                      #            [result setAlpha:floatWrapperWithValue(alpha)];
+                      #          }
+                      #          [result autorelease];
+                      #          return result;
+                      #     }
+                      #     // ...
+                      #
+                      #  Example (JavaScript):
+                      #
+                      #     // ...
+                      #
+                      #     var protoToCssColor = function(rgb_color) {
+                      #        var redFrac = rgb_color.red || 0.0;
+                      #        var greenFrac = rgb_color.green || 0.0;
+                      #        var blueFrac = rgb_color.blue || 0.0;
+                      #        var red = Math.floor(redFrac * 255);
+                      #        var green = Math.floor(greenFrac * 255);
+                      #        var blue = Math.floor(blueFrac * 255);
+                      #
+                      #        if (!('alpha' in rgb_color)) {
+                      #           return rgbToCssColor_(red, green, blue);
+                      #        }
+                      #
+                      #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                      #        var rgbParams = [red, green, blue].join(',');
+                      #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                      #     };
+                      #
+                      #     var rgbToCssColor_ = function(red, green, blue) {
+                      #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                      #       var hexString = rgbNumber.toString(16);
+                      #       var missingZeros = 6 - hexString.length;
+                      #       var resultBuilder = ['#'];
+                      #       for (var i = 0; i < missingZeros; i++) {
+                      #          resultBuilder.push('0');
+                      #       }
+                      #       resultBuilder.push(hexString);
+                      #       return resultBuilder.join('');
+                      #     };
+                      #
+                      #     // ...
+                    "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                    "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                        # the final pixel color is defined by the equation:
+                        #
+                        #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                        #
+                        # This means that a value of 1.0 corresponds to a solid color, whereas
+                        # a value of 0.0 corresponds to a completely transparent color. This
+                        # uses a wrapper message rather than a simple float scalar so that it is
+                        # possible to distinguish between a default value and the value being unset.
+                        # If omitted, this color object is to be rendered as a solid color
+                        # (as if the alpha value had been explicitly given with a value of 1.0).
+                    "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                    "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                  },
+                  "width": 42, # The width of the border, in pixels.
+                      # Border widths must be between 0 and 3 pixels.
+                  "style": "A String", # The style of the border.
+                },
+                "bottom": { # A border along a cell. # The bottom border of the cell.
+                  "color": { # Represents a color in the RGBA color space. This representation is designed # The color of the border.
+                      # for simplicity of conversion to/from color representations in various
+                      # languages over compactness; for example, the fields of this representation
+                      # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                      # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                      # method in iOS; and, with just a little work, it can be easily formatted into
+                      # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                      #
+                      # Example (Java):
+                      #
+                      #      import com.google.type.Color;
+                      #
+                      #      // ...
+                      #      public static java.awt.Color fromProto(Color protocolor) {
+                      #        float alpha = protocolor.hasAlpha()
+                      #            ? protocolor.getAlpha().getValue()
+                      #            : 1.0;
+                      #
+                      #        return new java.awt.Color(
+                      #            protocolor.getRed(),
+                      #            protocolor.getGreen(),
+                      #            protocolor.getBlue(),
+                      #            alpha);
+                      #      }
+                      #
+                      #      public static Color toProto(java.awt.Color color) {
+                      #        float red = (float) color.getRed();
+                      #        float green = (float) color.getGreen();
+                      #        float blue = (float) color.getBlue();
+                      #        float denominator = 255.0;
+                      #        Color.Builder resultBuilder =
+                      #            Color
+                      #                .newBuilder()
+                      #                .setRed(red / denominator)
+                      #                .setGreen(green / denominator)
+                      #                .setBlue(blue / denominator);
+                      #        int alpha = color.getAlpha();
+                      #        if (alpha != 255) {
+                      #          result.setAlpha(
+                      #              FloatValue
+                      #                  .newBuilder()
+                      #                  .setValue(((float) alpha) / denominator)
+                      #                  .build());
+                      #        }
+                      #        return resultBuilder.build();
+                      #      }
+                      #      // ...
+                      #
+                      # Example (iOS / Obj-C):
+                      #
+                      #      // ...
+                      #      static UIColor* fromProto(Color* protocolor) {
+                      #         float red = [protocolor red];
+                      #         float green = [protocolor green];
+                      #         float blue = [protocolor blue];
+                      #         FloatValue* alpha_wrapper = [protocolor alpha];
+                      #         float alpha = 1.0;
+                      #         if (alpha_wrapper != nil) {
+                      #           alpha = [alpha_wrapper value];
+                      #         }
+                      #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                      #      }
+                      #
+                      #      static Color* toProto(UIColor* color) {
+                      #          CGFloat red, green, blue, alpha;
+                      #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                      #            return nil;
+                      #          }
+                      #          Color* result = [Color alloc] init];
+                      #          [result setRed:red];
+                      #          [result setGreen:green];
+                      #          [result setBlue:blue];
+                      #          if (alpha <= 0.9999) {
+                      #            [result setAlpha:floatWrapperWithValue(alpha)];
+                      #          }
+                      #          [result autorelease];
+                      #          return result;
+                      #     }
+                      #     // ...
+                      #
+                      #  Example (JavaScript):
+                      #
+                      #     // ...
+                      #
+                      #     var protoToCssColor = function(rgb_color) {
+                      #        var redFrac = rgb_color.red || 0.0;
+                      #        var greenFrac = rgb_color.green || 0.0;
+                      #        var blueFrac = rgb_color.blue || 0.0;
+                      #        var red = Math.floor(redFrac * 255);
+                      #        var green = Math.floor(greenFrac * 255);
+                      #        var blue = Math.floor(blueFrac * 255);
+                      #
+                      #        if (!('alpha' in rgb_color)) {
+                      #           return rgbToCssColor_(red, green, blue);
+                      #        }
+                      #
+                      #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                      #        var rgbParams = [red, green, blue].join(',');
+                      #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                      #     };
+                      #
+                      #     var rgbToCssColor_ = function(red, green, blue) {
+                      #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                      #       var hexString = rgbNumber.toString(16);
+                      #       var missingZeros = 6 - hexString.length;
+                      #       var resultBuilder = ['#'];
+                      #       for (var i = 0; i < missingZeros; i++) {
+                      #          resultBuilder.push('0');
+                      #       }
+                      #       resultBuilder.push(hexString);
+                      #       return resultBuilder.join('');
+                      #     };
+                      #
+                      #     // ...
+                    "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                    "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                        # the final pixel color is defined by the equation:
+                        #
+                        #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                        #
+                        # This means that a value of 1.0 corresponds to a solid color, whereas
+                        # a value of 0.0 corresponds to a completely transparent color. This
+                        # uses a wrapper message rather than a simple float scalar so that it is
+                        # possible to distinguish between a default value and the value being unset.
+                        # If omitted, this color object is to be rendered as a solid color
+                        # (as if the alpha value had been explicitly given with a value of 1.0).
+                    "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                    "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                  },
+                  "width": 42, # The width of the border, in pixels.
+                      # Border widths must be between 0 and 3 pixels.
+                  "style": "A String", # The style of the border.
+                },
+                "left": { # A border along a cell. # The left border of the cell.
+                  "color": { # Represents a color in the RGBA color space. This representation is designed # The color of the border.
+                      # for simplicity of conversion to/from color representations in various
+                      # languages over compactness; for example, the fields of this representation
+                      # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                      # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                      # method in iOS; and, with just a little work, it can be easily formatted into
+                      # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                      #
+                      # Example (Java):
+                      #
+                      #      import com.google.type.Color;
+                      #
+                      #      // ...
+                      #      public static java.awt.Color fromProto(Color protocolor) {
+                      #        float alpha = protocolor.hasAlpha()
+                      #            ? protocolor.getAlpha().getValue()
+                      #            : 1.0;
+                      #
+                      #        return new java.awt.Color(
+                      #            protocolor.getRed(),
+                      #            protocolor.getGreen(),
+                      #            protocolor.getBlue(),
+                      #            alpha);
+                      #      }
+                      #
+                      #      public static Color toProto(java.awt.Color color) {
+                      #        float red = (float) color.getRed();
+                      #        float green = (float) color.getGreen();
+                      #        float blue = (float) color.getBlue();
+                      #        float denominator = 255.0;
+                      #        Color.Builder resultBuilder =
+                      #            Color
+                      #                .newBuilder()
+                      #                .setRed(red / denominator)
+                      #                .setGreen(green / denominator)
+                      #                .setBlue(blue / denominator);
+                      #        int alpha = color.getAlpha();
+                      #        if (alpha != 255) {
+                      #          result.setAlpha(
+                      #              FloatValue
+                      #                  .newBuilder()
+                      #                  .setValue(((float) alpha) / denominator)
+                      #                  .build());
+                      #        }
+                      #        return resultBuilder.build();
+                      #      }
+                      #      // ...
+                      #
+                      # Example (iOS / Obj-C):
+                      #
+                      #      // ...
+                      #      static UIColor* fromProto(Color* protocolor) {
+                      #         float red = [protocolor red];
+                      #         float green = [protocolor green];
+                      #         float blue = [protocolor blue];
+                      #         FloatValue* alpha_wrapper = [protocolor alpha];
+                      #         float alpha = 1.0;
+                      #         if (alpha_wrapper != nil) {
+                      #           alpha = [alpha_wrapper value];
+                      #         }
+                      #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                      #      }
+                      #
+                      #      static Color* toProto(UIColor* color) {
+                      #          CGFloat red, green, blue, alpha;
+                      #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                      #            return nil;
+                      #          }
+                      #          Color* result = [Color alloc] init];
+                      #          [result setRed:red];
+                      #          [result setGreen:green];
+                      #          [result setBlue:blue];
+                      #          if (alpha <= 0.9999) {
+                      #            [result setAlpha:floatWrapperWithValue(alpha)];
+                      #          }
+                      #          [result autorelease];
+                      #          return result;
+                      #     }
+                      #     // ...
+                      #
+                      #  Example (JavaScript):
+                      #
+                      #     // ...
+                      #
+                      #     var protoToCssColor = function(rgb_color) {
+                      #        var redFrac = rgb_color.red || 0.0;
+                      #        var greenFrac = rgb_color.green || 0.0;
+                      #        var blueFrac = rgb_color.blue || 0.0;
+                      #        var red = Math.floor(redFrac * 255);
+                      #        var green = Math.floor(greenFrac * 255);
+                      #        var blue = Math.floor(blueFrac * 255);
+                      #
+                      #        if (!('alpha' in rgb_color)) {
+                      #           return rgbToCssColor_(red, green, blue);
+                      #        }
+                      #
+                      #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                      #        var rgbParams = [red, green, blue].join(',');
+                      #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                      #     };
+                      #
+                      #     var rgbToCssColor_ = function(red, green, blue) {
+                      #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                      #       var hexString = rgbNumber.toString(16);
+                      #       var missingZeros = 6 - hexString.length;
+                      #       var resultBuilder = ['#'];
+                      #       for (var i = 0; i < missingZeros; i++) {
+                      #          resultBuilder.push('0');
+                      #       }
+                      #       resultBuilder.push(hexString);
+                      #       return resultBuilder.join('');
+                      #     };
+                      #
+                      #     // ...
+                    "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                    "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                        # the final pixel color is defined by the equation:
+                        #
+                        #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                        #
+                        # This means that a value of 1.0 corresponds to a solid color, whereas
+                        # a value of 0.0 corresponds to a completely transparent color. This
+                        # uses a wrapper message rather than a simple float scalar so that it is
+                        # possible to distinguish between a default value and the value being unset.
+                        # If omitted, this color object is to be rendered as a solid color
+                        # (as if the alpha value had been explicitly given with a value of 1.0).
+                    "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                    "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                  },
+                  "width": 42, # The width of the border, in pixels.
+                      # Border widths must be between 0 and 3 pixels.
+                  "style": "A String", # The style of the border.
+                },
+              },
+              "wrapStrategy": "A String", # The wrap strategy for the value in the cell.
+            },
+            "dataValidation": { # A data validation rule. # A data validation rule on the cell, if any.
+                #
+                # When writing, the new data validation rule will overwrite any prior rule.
+              "showCustomUi": True or False, # True if the UI should be customized based on the kind of condition.
+                  # If true, "List" conditions will show a dropdown.
+              "strict": True or False, # True if invalid data should be rejected.
+              "inputMessage": "A String", # A message to show the user when adding data to the cell.
+              "condition": { # A condition that can evaluate to true or false. # The condition that data in the cell must match.
+                  # BooleanConditions are used by conditional formatting,
+                  # data validation, and the criteria in filters.
+                "type": "A String", # The type of condition.
+                "values": [ # The values of the condition. The number of supported values depends
+                    # on the condition type.  Some support zero values,
+                    # others one or two values,
+                    # and ConditionType.ONE_OF_LIST supports an arbitrary number of values.
+                  { # The value of the condition.
+                    "relativeDate": "A String", # A relative date (based on the current date).
+                        # Valid only if the type is
+                        # DATE_BEFORE,
+                        # DATE_AFTER,
+                        # DATE_ON_OR_BEFORE or
+                        # DATE_ON_OR_AFTER.
+                        #
+                        # Relative dates are not supported in data validation.
+                        # They are supported only in conditional formatting and
+                        # conditional filters.
+                    "userEnteredValue": "A String", # A value the condition is based on.
+                        # The value will be parsed as if the user typed into a cell.
+                        # Formulas are supported (and must begin with an `=`).
+                  },
+                ],
+              },
+            },
+            "textFormatRuns": [ # Runs of rich text applied to subsections of the cell.
+                # Runs start at specific indexes in the text and continue until the next
+                # run. Properties of a run will continue unless explicitly changed
+                # in a subsequent run (and properties of the first run will continue
+                # the properties of the cell unless explicitly changed).
+                #
+                # When writing, the new runs will overwrite any prior runs.
+              { # A run of a text format. The format of this run continues until explicitly
+                  # overridden in the next run.
+                  # When updating, all fields must be set.
+                "startIndex": 42, # The character index where this run starts.
+                "format": { # The format of a run of text in a cell. # The format of this run.  Absent values inherit the cell's format.
+                    # Absent values indicate that the field isn't specified.
+                  "foregroundColor": { # Represents a color in the RGBA color space. This representation is designed # The foreground color of the text.
+                      # for simplicity of conversion to/from color representations in various
+                      # languages over compactness; for example, the fields of this representation
+                      # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                      # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                      # method in iOS; and, with just a little work, it can be easily formatted into
+                      # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                      #
+                      # Example (Java):
+                      #
+                      #      import com.google.type.Color;
+                      #
+                      #      // ...
+                      #      public static java.awt.Color fromProto(Color protocolor) {
+                      #        float alpha = protocolor.hasAlpha()
+                      #            ? protocolor.getAlpha().getValue()
+                      #            : 1.0;
+                      #
+                      #        return new java.awt.Color(
+                      #            protocolor.getRed(),
+                      #            protocolor.getGreen(),
+                      #            protocolor.getBlue(),
+                      #            alpha);
+                      #      }
+                      #
+                      #      public static Color toProto(java.awt.Color color) {
+                      #        float red = (float) color.getRed();
+                      #        float green = (float) color.getGreen();
+                      #        float blue = (float) color.getBlue();
+                      #        float denominator = 255.0;
+                      #        Color.Builder resultBuilder =
+                      #            Color
+                      #                .newBuilder()
+                      #                .setRed(red / denominator)
+                      #                .setGreen(green / denominator)
+                      #                .setBlue(blue / denominator);
+                      #        int alpha = color.getAlpha();
+                      #        if (alpha != 255) {
+                      #          result.setAlpha(
+                      #              FloatValue
+                      #                  .newBuilder()
+                      #                  .setValue(((float) alpha) / denominator)
+                      #                  .build());
+                      #        }
+                      #        return resultBuilder.build();
+                      #      }
+                      #      // ...
+                      #
+                      # Example (iOS / Obj-C):
+                      #
+                      #      // ...
+                      #      static UIColor* fromProto(Color* protocolor) {
+                      #         float red = [protocolor red];
+                      #         float green = [protocolor green];
+                      #         float blue = [protocolor blue];
+                      #         FloatValue* alpha_wrapper = [protocolor alpha];
+                      #         float alpha = 1.0;
+                      #         if (alpha_wrapper != nil) {
+                      #           alpha = [alpha_wrapper value];
+                      #         }
+                      #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                      #      }
+                      #
+                      #      static Color* toProto(UIColor* color) {
+                      #          CGFloat red, green, blue, alpha;
+                      #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                      #            return nil;
+                      #          }
+                      #          Color* result = [Color alloc] init];
+                      #          [result setRed:red];
+                      #          [result setGreen:green];
+                      #          [result setBlue:blue];
+                      #          if (alpha <= 0.9999) {
+                      #            [result setAlpha:floatWrapperWithValue(alpha)];
+                      #          }
+                      #          [result autorelease];
+                      #          return result;
+                      #     }
+                      #     // ...
+                      #
+                      #  Example (JavaScript):
+                      #
+                      #     // ...
+                      #
+                      #     var protoToCssColor = function(rgb_color) {
+                      #        var redFrac = rgb_color.red || 0.0;
+                      #        var greenFrac = rgb_color.green || 0.0;
+                      #        var blueFrac = rgb_color.blue || 0.0;
+                      #        var red = Math.floor(redFrac * 255);
+                      #        var green = Math.floor(greenFrac * 255);
+                      #        var blue = Math.floor(blueFrac * 255);
+                      #
+                      #        if (!('alpha' in rgb_color)) {
+                      #           return rgbToCssColor_(red, green, blue);
+                      #        }
+                      #
+                      #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                      #        var rgbParams = [red, green, blue].join(',');
+                      #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                      #     };
+                      #
+                      #     var rgbToCssColor_ = function(red, green, blue) {
+                      #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                      #       var hexString = rgbNumber.toString(16);
+                      #       var missingZeros = 6 - hexString.length;
+                      #       var resultBuilder = ['#'];
+                      #       for (var i = 0; i < missingZeros; i++) {
+                      #          resultBuilder.push('0');
+                      #       }
+                      #       resultBuilder.push(hexString);
+                      #       return resultBuilder.join('');
+                      #     };
+                      #
+                      #     // ...
+                    "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                    "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                        # the final pixel color is defined by the equation:
+                        #
+                        #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                        #
+                        # This means that a value of 1.0 corresponds to a solid color, whereas
+                        # a value of 0.0 corresponds to a completely transparent color. This
+                        # uses a wrapper message rather than a simple float scalar so that it is
+                        # possible to distinguish between a default value and the value being unset.
+                        # If omitted, this color object is to be rendered as a solid color
+                        # (as if the alpha value had been explicitly given with a value of 1.0).
+                    "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                    "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                  },
+                  "bold": True or False, # True if the text is bold.
+                  "strikethrough": True or False, # True if the text has a strikethrough.
+                  "fontFamily": "A String", # The font family.
+                  "fontSize": 42, # The size of the font.
+                  "italic": True or False, # True if the text is italicized.
+                  "underline": True or False, # True if the text is underlined.
+                },
+              },
+            ],
+          },
+          "fields": "A String", # The fields that should be updated.  At least one field must be specified.
+              # The root `cell` is implied and should not be specified.
+              # A single `"*"` can be used as short-hand for listing every field.
+          "range": { # A range on a sheet. # The range to repeat the cell in.
+              # 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 grid 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.
+            "startRowIndex": 42, # The start row (inclusive) 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.
+            "endColumnIndex": 42, # The end column (exclusive) of the range, or not set if unbounded.
+          },
+        },
+        "findReplace": { # Finds and replaces data in cells over a range, sheet, or all sheets. # Finds and replace occurrences of some text with other text.
+          "includeFormulas": True or False, # True if the search should include cells with formulas.
+              # False to skip cells with formulas.
+          "matchEntireCell": True or False, # True if the find value should match the entire cell.
+          "allSheets": True or False, # True to find/replace over all sheets.
+          "matchCase": True or False, # True if the search is case sensitive.
+          "sheetId": 42, # The sheet to find/replace over.
+          "range": { # A range on a sheet. # The range to find/replace over.
+              # 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 grid 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.
+            "startRowIndex": 42, # The start row (inclusive) 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.
+            "endColumnIndex": 42, # The end column (exclusive) of the range, or not set if unbounded.
+          },
+          "searchByRegex": True or False, # True if the find value is a regex.
+              # The regular expression and replacement should follow Java regex rules
+              # at https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html.
+              # The replacement string is allowed to refer to capturing groups.
+              # For example, if one cell has the contents "`Google Sheets`" and another
+              # has "`Google Docs`", then searching for `"o.* (.*)"` with a replacement of
+              # `"$1 Rocks`"` would change the contents of the cells to
+              # "`GSheets Rocks`" and "`GDocs Rocks`" respectively.
+          "find": "A String", # The value to search.
+          "replacement": "A String", # The value to use as the replacement.
+        },
+        "setBasicFilter": { # Sets the basic filter associated with a sheet. # Sets the basic filter on a sheet.
+          "filter": { # The default filter associated with a sheet. # The filter to set.
+            "range": { # A range on a sheet. # The range the filter covers.
+                # 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 grid 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.
+              "startRowIndex": 42, # The start row (inclusive) 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.
+              "endColumnIndex": 42, # The end column (exclusive) of the range, or not set if unbounded.
+            },
+            "sortSpecs": [ # The sort order per column. Later specifications are used when values
+                # are equal in the earlier specifications.
+              { # A sort order associated with a specific column or row.
+                "sortOrder": "A String", # The order data should be sorted.
+                "dimensionIndex": 42, # The dimension the sort should be applied to.
+              },
+            ],
+            "criteria": { # The criteria for showing/hiding values per column.
+                # The map's key is the column index, and the value is the criteria for
+                # that column.
+              "a_key": { # Criteria for showing/hiding rows in a filter, filter view.
+                "hiddenValues": [ # Values that should be hidden.
+                  "A String",
+                ],
+                "condition": { # A condition that can evaluate to true or false. # A condition that must be true for values to be shown.
+                    # (This does not override hiddenValues -- if a value is listed there,
+                    #  it will still be hidden.)
+                    # BooleanConditions are used by conditional formatting,
+                    # data validation, and the criteria in filters.
+                  "type": "A String", # The type of condition.
+                  "values": [ # The values of the condition. The number of supported values depends
+                      # on the condition type.  Some support zero values,
+                      # others one or two values,
+                      # and ConditionType.ONE_OF_LIST supports an arbitrary number of values.
+                    { # The value of the condition.
+                      "relativeDate": "A String", # A relative date (based on the current date).
+                          # Valid only if the type is
+                          # DATE_BEFORE,
+                          # DATE_AFTER,
+                          # DATE_ON_OR_BEFORE or
+                          # DATE_ON_OR_AFTER.
+                          #
+                          # Relative dates are not supported in data validation.
+                          # They are supported only in conditional formatting and
+                          # conditional filters.
+                      "userEnteredValue": "A String", # A value the condition is based on.
+                          # The value will be parsed as if the user typed into a cell.
+                          # Formulas are supported (and must begin with an `=`).
+                    },
+                  ],
+                },
+              },
+            },
+          },
+        },
+        "updateSpreadsheetProperties": { # Updates properties of a spreadsheet. # Updates the spreadsheet's properties.
+            # It is an error to specify read only fields in the field mask.
+          "fields": "A String", # The fields that should be updated.  At least one field must be specified.
+              # The root 'properties' is implied and should not be specified.
+              # A single `"*"` can be used as short-hand for listing every field.
+          "properties": { # Properties of a spreadsheet. # The properties to update.
+            "locale": "A String", # The locale of the spreadsheet in one of the following formats:
+                # * an ISO 639-1 language code such as `en`
+                # * an ISO 639-2 language code such as `fil`, if no 639-1 code exists
+                # * a combination of the ISO language code and country code, such as `en_US`
+                # Note: when updating this field, not all locales/languages are supported.
+            "timeZone": "A String", # The time zone of the spreadsheet, in CLDR format such as
+                # `America/New_York`. If the time zone isn't recognized, this may
+                # be a custom time zone such as `GMT-07:00`.
+            "autoRecalc": "A String", # The amount of time to wait before volatile functions are recalculated.
+            "defaultFormat": { # The format of a cell. # The default format of all cells in the spreadsheet.
+                # CellData.effectiveFormat will not be set if the cell's format is equal
+                # to this default format.
+                # This field is read-only.
+              "numberFormat": { # The number format of a cell. # A format describing how number values should be represented to the user.
+                  # When updating, all fields must be set.
+                "pattern": "A String", # Pattern string used for formatting.
+                "type": "A String", # The type of the number format.
+              },
+              "textDirection": "A String", # The direction of the text in the cell.
+              "padding": { # The amount of padding around the cell, in pixels. # The padding of the cell.
+                  # When updating padding, every field must be specified.
+                "top": 42, # The top padding of the cell.
+                "right": 42, # The right padding of the cell.
+                "bottom": 42, # The bottom padding of the cell.
+                "left": 42, # The left padding of the cell.
+              },
+              "horizontalAlignment": "A String", # The horizontal alignment of the value in cell.
+              "backgroundColor": { # Represents a color in the RGBA color space. This representation is designed # The background color of the cell.
+                  # for simplicity of conversion to/from color representations in various
+                  # languages over compactness; for example, the fields of this representation
+                  # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                  # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                  # method in iOS; and, with just a little work, it can be easily formatted into
+                  # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                  #
+                  # Example (Java):
+                  #
+                  #      import com.google.type.Color;
+                  #
+                  #      // ...
+                  #      public static java.awt.Color fromProto(Color protocolor) {
+                  #        float alpha = protocolor.hasAlpha()
+                  #            ? protocolor.getAlpha().getValue()
+                  #            : 1.0;
+                  #
+                  #        return new java.awt.Color(
+                  #            protocolor.getRed(),
+                  #            protocolor.getGreen(),
+                  #            protocolor.getBlue(),
+                  #            alpha);
+                  #      }
+                  #
+                  #      public static Color toProto(java.awt.Color color) {
+                  #        float red = (float) color.getRed();
+                  #        float green = (float) color.getGreen();
+                  #        float blue = (float) color.getBlue();
+                  #        float denominator = 255.0;
+                  #        Color.Builder resultBuilder =
+                  #            Color
+                  #                .newBuilder()
+                  #                .setRed(red / denominator)
+                  #                .setGreen(green / denominator)
+                  #                .setBlue(blue / denominator);
+                  #        int alpha = color.getAlpha();
+                  #        if (alpha != 255) {
+                  #          result.setAlpha(
+                  #              FloatValue
+                  #                  .newBuilder()
+                  #                  .setValue(((float) alpha) / denominator)
+                  #                  .build());
+                  #        }
+                  #        return resultBuilder.build();
+                  #      }
+                  #      // ...
+                  #
+                  # Example (iOS / Obj-C):
+                  #
+                  #      // ...
+                  #      static UIColor* fromProto(Color* protocolor) {
+                  #         float red = [protocolor red];
+                  #         float green = [protocolor green];
+                  #         float blue = [protocolor blue];
+                  #         FloatValue* alpha_wrapper = [protocolor alpha];
+                  #         float alpha = 1.0;
+                  #         if (alpha_wrapper != nil) {
+                  #           alpha = [alpha_wrapper value];
+                  #         }
+                  #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                  #      }
+                  #
+                  #      static Color* toProto(UIColor* color) {
+                  #          CGFloat red, green, blue, alpha;
+                  #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                  #            return nil;
+                  #          }
+                  #          Color* result = [Color alloc] init];
+                  #          [result setRed:red];
+                  #          [result setGreen:green];
+                  #          [result setBlue:blue];
+                  #          if (alpha <= 0.9999) {
+                  #            [result setAlpha:floatWrapperWithValue(alpha)];
+                  #          }
+                  #          [result autorelease];
+                  #          return result;
+                  #     }
+                  #     // ...
+                  #
+                  #  Example (JavaScript):
+                  #
+                  #     // ...
+                  #
+                  #     var protoToCssColor = function(rgb_color) {
+                  #        var redFrac = rgb_color.red || 0.0;
+                  #        var greenFrac = rgb_color.green || 0.0;
+                  #        var blueFrac = rgb_color.blue || 0.0;
+                  #        var red = Math.floor(redFrac * 255);
+                  #        var green = Math.floor(greenFrac * 255);
+                  #        var blue = Math.floor(blueFrac * 255);
+                  #
+                  #        if (!('alpha' in rgb_color)) {
+                  #           return rgbToCssColor_(red, green, blue);
+                  #        }
+                  #
+                  #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                  #        var rgbParams = [red, green, blue].join(',');
+                  #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                  #     };
+                  #
+                  #     var rgbToCssColor_ = function(red, green, blue) {
+                  #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                  #       var hexString = rgbNumber.toString(16);
+                  #       var missingZeros = 6 - hexString.length;
+                  #       var resultBuilder = ['#'];
+                  #       for (var i = 0; i < missingZeros; i++) {
+                  #          resultBuilder.push('0');
+                  #       }
+                  #       resultBuilder.push(hexString);
+                  #       return resultBuilder.join('');
+                  #     };
+                  #
+                  #     // ...
+                "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                    # the final pixel color is defined by the equation:
+                    #
+                    #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                    #
+                    # This means that a value of 1.0 corresponds to a solid color, whereas
+                    # a value of 0.0 corresponds to a completely transparent color. This
+                    # uses a wrapper message rather than a simple float scalar so that it is
+                    # possible to distinguish between a default value and the value being unset.
+                    # If omitted, this color object is to be rendered as a solid color
+                    # (as if the alpha value had been explicitly given with a value of 1.0).
+                "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+              },
+              "verticalAlignment": "A String", # The vertical alignment of the value in cell.
+              "textFormat": { # The format of a run of text in a cell. # The format of the text in the cell (unless overridden by a format run).
+                  # Absent values indicate that the field isn't specified.
+                "foregroundColor": { # Represents a color in the RGBA color space. This representation is designed # The foreground color of the text.
+                    # for simplicity of conversion to/from color representations in various
+                    # languages over compactness; for example, the fields of this representation
+                    # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                    # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                    # method in iOS; and, with just a little work, it can be easily formatted into
+                    # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                    #
+                    # Example (Java):
+                    #
+                    #      import com.google.type.Color;
+                    #
+                    #      // ...
+                    #      public static java.awt.Color fromProto(Color protocolor) {
+                    #        float alpha = protocolor.hasAlpha()
+                    #            ? protocolor.getAlpha().getValue()
+                    #            : 1.0;
+                    #
+                    #        return new java.awt.Color(
+                    #            protocolor.getRed(),
+                    #            protocolor.getGreen(),
+                    #            protocolor.getBlue(),
+                    #            alpha);
+                    #      }
+                    #
+                    #      public static Color toProto(java.awt.Color color) {
+                    #        float red = (float) color.getRed();
+                    #        float green = (float) color.getGreen();
+                    #        float blue = (float) color.getBlue();
+                    #        float denominator = 255.0;
+                    #        Color.Builder resultBuilder =
+                    #            Color
+                    #                .newBuilder()
+                    #                .setRed(red / denominator)
+                    #                .setGreen(green / denominator)
+                    #                .setBlue(blue / denominator);
+                    #        int alpha = color.getAlpha();
+                    #        if (alpha != 255) {
+                    #          result.setAlpha(
+                    #              FloatValue
+                    #                  .newBuilder()
+                    #                  .setValue(((float) alpha) / denominator)
+                    #                  .build());
+                    #        }
+                    #        return resultBuilder.build();
+                    #      }
+                    #      // ...
+                    #
+                    # Example (iOS / Obj-C):
+                    #
+                    #      // ...
+                    #      static UIColor* fromProto(Color* protocolor) {
+                    #         float red = [protocolor red];
+                    #         float green = [protocolor green];
+                    #         float blue = [protocolor blue];
+                    #         FloatValue* alpha_wrapper = [protocolor alpha];
+                    #         float alpha = 1.0;
+                    #         if (alpha_wrapper != nil) {
+                    #           alpha = [alpha_wrapper value];
+                    #         }
+                    #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                    #      }
+                    #
+                    #      static Color* toProto(UIColor* color) {
+                    #          CGFloat red, green, blue, alpha;
+                    #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                    #            return nil;
+                    #          }
+                    #          Color* result = [Color alloc] init];
+                    #          [result setRed:red];
+                    #          [result setGreen:green];
+                    #          [result setBlue:blue];
+                    #          if (alpha <= 0.9999) {
+                    #            [result setAlpha:floatWrapperWithValue(alpha)];
+                    #          }
+                    #          [result autorelease];
+                    #          return result;
+                    #     }
+                    #     // ...
+                    #
+                    #  Example (JavaScript):
+                    #
+                    #     // ...
+                    #
+                    #     var protoToCssColor = function(rgb_color) {
+                    #        var redFrac = rgb_color.red || 0.0;
+                    #        var greenFrac = rgb_color.green || 0.0;
+                    #        var blueFrac = rgb_color.blue || 0.0;
+                    #        var red = Math.floor(redFrac * 255);
+                    #        var green = Math.floor(greenFrac * 255);
+                    #        var blue = Math.floor(blueFrac * 255);
+                    #
+                    #        if (!('alpha' in rgb_color)) {
+                    #           return rgbToCssColor_(red, green, blue);
+                    #        }
+                    #
+                    #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                    #        var rgbParams = [red, green, blue].join(',');
+                    #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                    #     };
+                    #
+                    #     var rgbToCssColor_ = function(red, green, blue) {
+                    #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                    #       var hexString = rgbNumber.toString(16);
+                    #       var missingZeros = 6 - hexString.length;
+                    #       var resultBuilder = ['#'];
+                    #       for (var i = 0; i < missingZeros; i++) {
+                    #          resultBuilder.push('0');
+                    #       }
+                    #       resultBuilder.push(hexString);
+                    #       return resultBuilder.join('');
+                    #     };
+                    #
+                    #     // ...
+                  "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                  "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                      # the final pixel color is defined by the equation:
+                      #
+                      #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                      #
+                      # This means that a value of 1.0 corresponds to a solid color, whereas
+                      # a value of 0.0 corresponds to a completely transparent color. This
+                      # uses a wrapper message rather than a simple float scalar so that it is
+                      # possible to distinguish between a default value and the value being unset.
+                      # If omitted, this color object is to be rendered as a solid color
+                      # (as if the alpha value had been explicitly given with a value of 1.0).
+                  "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                  "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                },
+                "bold": True or False, # True if the text is bold.
+                "strikethrough": True or False, # True if the text has a strikethrough.
+                "fontFamily": "A String", # The font family.
+                "fontSize": 42, # The size of the font.
+                "italic": True or False, # True if the text is italicized.
+                "underline": True or False, # True if the text is underlined.
+              },
+              "hyperlinkDisplayType": "A String", # How a hyperlink, if it exists, should be displayed in the cell.
+              "borders": { # The borders of the cell. # The borders of the cell.
+                "top": { # A border along a cell. # The top border of the cell.
+                  "color": { # Represents a color in the RGBA color space. This representation is designed # The color of the border.
+                      # for simplicity of conversion to/from color representations in various
+                      # languages over compactness; for example, the fields of this representation
+                      # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                      # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                      # method in iOS; and, with just a little work, it can be easily formatted into
+                      # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                      #
+                      # Example (Java):
+                      #
+                      #      import com.google.type.Color;
+                      #
+                      #      // ...
+                      #      public static java.awt.Color fromProto(Color protocolor) {
+                      #        float alpha = protocolor.hasAlpha()
+                      #            ? protocolor.getAlpha().getValue()
+                      #            : 1.0;
+                      #
+                      #        return new java.awt.Color(
+                      #            protocolor.getRed(),
+                      #            protocolor.getGreen(),
+                      #            protocolor.getBlue(),
+                      #            alpha);
+                      #      }
+                      #
+                      #      public static Color toProto(java.awt.Color color) {
+                      #        float red = (float) color.getRed();
+                      #        float green = (float) color.getGreen();
+                      #        float blue = (float) color.getBlue();
+                      #        float denominator = 255.0;
+                      #        Color.Builder resultBuilder =
+                      #            Color
+                      #                .newBuilder()
+                      #                .setRed(red / denominator)
+                      #                .setGreen(green / denominator)
+                      #                .setBlue(blue / denominator);
+                      #        int alpha = color.getAlpha();
+                      #        if (alpha != 255) {
+                      #          result.setAlpha(
+                      #              FloatValue
+                      #                  .newBuilder()
+                      #                  .setValue(((float) alpha) / denominator)
+                      #                  .build());
+                      #        }
+                      #        return resultBuilder.build();
+                      #      }
+                      #      // ...
+                      #
+                      # Example (iOS / Obj-C):
+                      #
+                      #      // ...
+                      #      static UIColor* fromProto(Color* protocolor) {
+                      #         float red = [protocolor red];
+                      #         float green = [protocolor green];
+                      #         float blue = [protocolor blue];
+                      #         FloatValue* alpha_wrapper = [protocolor alpha];
+                      #         float alpha = 1.0;
+                      #         if (alpha_wrapper != nil) {
+                      #           alpha = [alpha_wrapper value];
+                      #         }
+                      #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                      #      }
+                      #
+                      #      static Color* toProto(UIColor* color) {
+                      #          CGFloat red, green, blue, alpha;
+                      #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                      #            return nil;
+                      #          }
+                      #          Color* result = [Color alloc] init];
+                      #          [result setRed:red];
+                      #          [result setGreen:green];
+                      #          [result setBlue:blue];
+                      #          if (alpha <= 0.9999) {
+                      #            [result setAlpha:floatWrapperWithValue(alpha)];
+                      #          }
+                      #          [result autorelease];
+                      #          return result;
+                      #     }
+                      #     // ...
+                      #
+                      #  Example (JavaScript):
+                      #
+                      #     // ...
+                      #
+                      #     var protoToCssColor = function(rgb_color) {
+                      #        var redFrac = rgb_color.red || 0.0;
+                      #        var greenFrac = rgb_color.green || 0.0;
+                      #        var blueFrac = rgb_color.blue || 0.0;
+                      #        var red = Math.floor(redFrac * 255);
+                      #        var green = Math.floor(greenFrac * 255);
+                      #        var blue = Math.floor(blueFrac * 255);
+                      #
+                      #        if (!('alpha' in rgb_color)) {
+                      #           return rgbToCssColor_(red, green, blue);
+                      #        }
+                      #
+                      #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                      #        var rgbParams = [red, green, blue].join(',');
+                      #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                      #     };
+                      #
+                      #     var rgbToCssColor_ = function(red, green, blue) {
+                      #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                      #       var hexString = rgbNumber.toString(16);
+                      #       var missingZeros = 6 - hexString.length;
+                      #       var resultBuilder = ['#'];
+                      #       for (var i = 0; i < missingZeros; i++) {
+                      #          resultBuilder.push('0');
+                      #       }
+                      #       resultBuilder.push(hexString);
+                      #       return resultBuilder.join('');
+                      #     };
+                      #
+                      #     // ...
+                    "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                    "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                        # the final pixel color is defined by the equation:
+                        #
+                        #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                        #
+                        # This means that a value of 1.0 corresponds to a solid color, whereas
+                        # a value of 0.0 corresponds to a completely transparent color. This
+                        # uses a wrapper message rather than a simple float scalar so that it is
+                        # possible to distinguish between a default value and the value being unset.
+                        # If omitted, this color object is to be rendered as a solid color
+                        # (as if the alpha value had been explicitly given with a value of 1.0).
+                    "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                    "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                  },
+                  "width": 42, # The width of the border, in pixels.
+                      # Border widths must be between 0 and 3 pixels.
+                  "style": "A String", # The style of the border.
+                },
+                "right": { # A border along a cell. # The right border of the cell.
+                  "color": { # Represents a color in the RGBA color space. This representation is designed # The color of the border.
+                      # for simplicity of conversion to/from color representations in various
+                      # languages over compactness; for example, the fields of this representation
+                      # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                      # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                      # method in iOS; and, with just a little work, it can be easily formatted into
+                      # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                      #
+                      # Example (Java):
+                      #
+                      #      import com.google.type.Color;
+                      #
+                      #      // ...
+                      #      public static java.awt.Color fromProto(Color protocolor) {
+                      #        float alpha = protocolor.hasAlpha()
+                      #            ? protocolor.getAlpha().getValue()
+                      #            : 1.0;
+                      #
+                      #        return new java.awt.Color(
+                      #            protocolor.getRed(),
+                      #            protocolor.getGreen(),
+                      #            protocolor.getBlue(),
+                      #            alpha);
+                      #      }
+                      #
+                      #      public static Color toProto(java.awt.Color color) {
+                      #        float red = (float) color.getRed();
+                      #        float green = (float) color.getGreen();
+                      #        float blue = (float) color.getBlue();
+                      #        float denominator = 255.0;
+                      #        Color.Builder resultBuilder =
+                      #            Color
+                      #                .newBuilder()
+                      #                .setRed(red / denominator)
+                      #                .setGreen(green / denominator)
+                      #                .setBlue(blue / denominator);
+                      #        int alpha = color.getAlpha();
+                      #        if (alpha != 255) {
+                      #          result.setAlpha(
+                      #              FloatValue
+                      #                  .newBuilder()
+                      #                  .setValue(((float) alpha) / denominator)
+                      #                  .build());
+                      #        }
+                      #        return resultBuilder.build();
+                      #      }
+                      #      // ...
+                      #
+                      # Example (iOS / Obj-C):
+                      #
+                      #      // ...
+                      #      static UIColor* fromProto(Color* protocolor) {
+                      #         float red = [protocolor red];
+                      #         float green = [protocolor green];
+                      #         float blue = [protocolor blue];
+                      #         FloatValue* alpha_wrapper = [protocolor alpha];
+                      #         float alpha = 1.0;
+                      #         if (alpha_wrapper != nil) {
+                      #           alpha = [alpha_wrapper value];
+                      #         }
+                      #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                      #      }
+                      #
+                      #      static Color* toProto(UIColor* color) {
+                      #          CGFloat red, green, blue, alpha;
+                      #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                      #            return nil;
+                      #          }
+                      #          Color* result = [Color alloc] init];
+                      #          [result setRed:red];
+                      #          [result setGreen:green];
+                      #          [result setBlue:blue];
+                      #          if (alpha <= 0.9999) {
+                      #            [result setAlpha:floatWrapperWithValue(alpha)];
+                      #          }
+                      #          [result autorelease];
+                      #          return result;
+                      #     }
+                      #     // ...
+                      #
+                      #  Example (JavaScript):
+                      #
+                      #     // ...
+                      #
+                      #     var protoToCssColor = function(rgb_color) {
+                      #        var redFrac = rgb_color.red || 0.0;
+                      #        var greenFrac = rgb_color.green || 0.0;
+                      #        var blueFrac = rgb_color.blue || 0.0;
+                      #        var red = Math.floor(redFrac * 255);
+                      #        var green = Math.floor(greenFrac * 255);
+                      #        var blue = Math.floor(blueFrac * 255);
+                      #
+                      #        if (!('alpha' in rgb_color)) {
+                      #           return rgbToCssColor_(red, green, blue);
+                      #        }
+                      #
+                      #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                      #        var rgbParams = [red, green, blue].join(',');
+                      #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                      #     };
+                      #
+                      #     var rgbToCssColor_ = function(red, green, blue) {
+                      #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                      #       var hexString = rgbNumber.toString(16);
+                      #       var missingZeros = 6 - hexString.length;
+                      #       var resultBuilder = ['#'];
+                      #       for (var i = 0; i < missingZeros; i++) {
+                      #          resultBuilder.push('0');
+                      #       }
+                      #       resultBuilder.push(hexString);
+                      #       return resultBuilder.join('');
+                      #     };
+                      #
+                      #     // ...
+                    "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                    "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                        # the final pixel color is defined by the equation:
+                        #
+                        #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                        #
+                        # This means that a value of 1.0 corresponds to a solid color, whereas
+                        # a value of 0.0 corresponds to a completely transparent color. This
+                        # uses a wrapper message rather than a simple float scalar so that it is
+                        # possible to distinguish between a default value and the value being unset.
+                        # If omitted, this color object is to be rendered as a solid color
+                        # (as if the alpha value had been explicitly given with a value of 1.0).
+                    "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                    "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                  },
+                  "width": 42, # The width of the border, in pixels.
+                      # Border widths must be between 0 and 3 pixels.
+                  "style": "A String", # The style of the border.
+                },
+                "bottom": { # A border along a cell. # The bottom border of the cell.
+                  "color": { # Represents a color in the RGBA color space. This representation is designed # The color of the border.
+                      # for simplicity of conversion to/from color representations in various
+                      # languages over compactness; for example, the fields of this representation
+                      # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                      # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                      # method in iOS; and, with just a little work, it can be easily formatted into
+                      # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                      #
+                      # Example (Java):
+                      #
+                      #      import com.google.type.Color;
+                      #
+                      #      // ...
+                      #      public static java.awt.Color fromProto(Color protocolor) {
+                      #        float alpha = protocolor.hasAlpha()
+                      #            ? protocolor.getAlpha().getValue()
+                      #            : 1.0;
+                      #
+                      #        return new java.awt.Color(
+                      #            protocolor.getRed(),
+                      #            protocolor.getGreen(),
+                      #            protocolor.getBlue(),
+                      #            alpha);
+                      #      }
+                      #
+                      #      public static Color toProto(java.awt.Color color) {
+                      #        float red = (float) color.getRed();
+                      #        float green = (float) color.getGreen();
+                      #        float blue = (float) color.getBlue();
+                      #        float denominator = 255.0;
+                      #        Color.Builder resultBuilder =
+                      #            Color
+                      #                .newBuilder()
+                      #                .setRed(red / denominator)
+                      #                .setGreen(green / denominator)
+                      #                .setBlue(blue / denominator);
+                      #        int alpha = color.getAlpha();
+                      #        if (alpha != 255) {
+                      #          result.setAlpha(
+                      #              FloatValue
+                      #                  .newBuilder()
+                      #                  .setValue(((float) alpha) / denominator)
+                      #                  .build());
+                      #        }
+                      #        return resultBuilder.build();
+                      #      }
+                      #      // ...
+                      #
+                      # Example (iOS / Obj-C):
+                      #
+                      #      // ...
+                      #      static UIColor* fromProto(Color* protocolor) {
+                      #         float red = [protocolor red];
+                      #         float green = [protocolor green];
+                      #         float blue = [protocolor blue];
+                      #         FloatValue* alpha_wrapper = [protocolor alpha];
+                      #         float alpha = 1.0;
+                      #         if (alpha_wrapper != nil) {
+                      #           alpha = [alpha_wrapper value];
+                      #         }
+                      #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                      #      }
+                      #
+                      #      static Color* toProto(UIColor* color) {
+                      #          CGFloat red, green, blue, alpha;
+                      #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                      #            return nil;
+                      #          }
+                      #          Color* result = [Color alloc] init];
+                      #          [result setRed:red];
+                      #          [result setGreen:green];
+                      #          [result setBlue:blue];
+                      #          if (alpha <= 0.9999) {
+                      #            [result setAlpha:floatWrapperWithValue(alpha)];
+                      #          }
+                      #          [result autorelease];
+                      #          return result;
+                      #     }
+                      #     // ...
+                      #
+                      #  Example (JavaScript):
+                      #
+                      #     // ...
+                      #
+                      #     var protoToCssColor = function(rgb_color) {
+                      #        var redFrac = rgb_color.red || 0.0;
+                      #        var greenFrac = rgb_color.green || 0.0;
+                      #        var blueFrac = rgb_color.blue || 0.0;
+                      #        var red = Math.floor(redFrac * 255);
+                      #        var green = Math.floor(greenFrac * 255);
+                      #        var blue = Math.floor(blueFrac * 255);
+                      #
+                      #        if (!('alpha' in rgb_color)) {
+                      #           return rgbToCssColor_(red, green, blue);
+                      #        }
+                      #
+                      #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                      #        var rgbParams = [red, green, blue].join(',');
+                      #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                      #     };
+                      #
+                      #     var rgbToCssColor_ = function(red, green, blue) {
+                      #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                      #       var hexString = rgbNumber.toString(16);
+                      #       var missingZeros = 6 - hexString.length;
+                      #       var resultBuilder = ['#'];
+                      #       for (var i = 0; i < missingZeros; i++) {
+                      #          resultBuilder.push('0');
+                      #       }
+                      #       resultBuilder.push(hexString);
+                      #       return resultBuilder.join('');
+                      #     };
+                      #
+                      #     // ...
+                    "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                    "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                        # the final pixel color is defined by the equation:
+                        #
+                        #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                        #
+                        # This means that a value of 1.0 corresponds to a solid color, whereas
+                        # a value of 0.0 corresponds to a completely transparent color. This
+                        # uses a wrapper message rather than a simple float scalar so that it is
+                        # possible to distinguish between a default value and the value being unset.
+                        # If omitted, this color object is to be rendered as a solid color
+                        # (as if the alpha value had been explicitly given with a value of 1.0).
+                    "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                    "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                  },
+                  "width": 42, # The width of the border, in pixels.
+                      # Border widths must be between 0 and 3 pixels.
+                  "style": "A String", # The style of the border.
+                },
+                "left": { # A border along a cell. # The left border of the cell.
+                  "color": { # Represents a color in the RGBA color space. This representation is designed # The color of the border.
+                      # for simplicity of conversion to/from color representations in various
+                      # languages over compactness; for example, the fields of this representation
+                      # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                      # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                      # method in iOS; and, with just a little work, it can be easily formatted into
+                      # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                      #
+                      # Example (Java):
+                      #
+                      #      import com.google.type.Color;
+                      #
+                      #      // ...
+                      #      public static java.awt.Color fromProto(Color protocolor) {
+                      #        float alpha = protocolor.hasAlpha()
+                      #            ? protocolor.getAlpha().getValue()
+                      #            : 1.0;
+                      #
+                      #        return new java.awt.Color(
+                      #            protocolor.getRed(),
+                      #            protocolor.getGreen(),
+                      #            protocolor.getBlue(),
+                      #            alpha);
+                      #      }
+                      #
+                      #      public static Color toProto(java.awt.Color color) {
+                      #        float red = (float) color.getRed();
+                      #        float green = (float) color.getGreen();
+                      #        float blue = (float) color.getBlue();
+                      #        float denominator = 255.0;
+                      #        Color.Builder resultBuilder =
+                      #            Color
+                      #                .newBuilder()
+                      #                .setRed(red / denominator)
+                      #                .setGreen(green / denominator)
+                      #                .setBlue(blue / denominator);
+                      #        int alpha = color.getAlpha();
+                      #        if (alpha != 255) {
+                      #          result.setAlpha(
+                      #              FloatValue
+                      #                  .newBuilder()
+                      #                  .setValue(((float) alpha) / denominator)
+                      #                  .build());
+                      #        }
+                      #        return resultBuilder.build();
+                      #      }
+                      #      // ...
+                      #
+                      # Example (iOS / Obj-C):
+                      #
+                      #      // ...
+                      #      static UIColor* fromProto(Color* protocolor) {
+                      #         float red = [protocolor red];
+                      #         float green = [protocolor green];
+                      #         float blue = [protocolor blue];
+                      #         FloatValue* alpha_wrapper = [protocolor alpha];
+                      #         float alpha = 1.0;
+                      #         if (alpha_wrapper != nil) {
+                      #           alpha = [alpha_wrapper value];
+                      #         }
+                      #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                      #      }
+                      #
+                      #      static Color* toProto(UIColor* color) {
+                      #          CGFloat red, green, blue, alpha;
+                      #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                      #            return nil;
+                      #          }
+                      #          Color* result = [Color alloc] init];
+                      #          [result setRed:red];
+                      #          [result setGreen:green];
+                      #          [result setBlue:blue];
+                      #          if (alpha <= 0.9999) {
+                      #            [result setAlpha:floatWrapperWithValue(alpha)];
+                      #          }
+                      #          [result autorelease];
+                      #          return result;
+                      #     }
+                      #     // ...
+                      #
+                      #  Example (JavaScript):
+                      #
+                      #     // ...
+                      #
+                      #     var protoToCssColor = function(rgb_color) {
+                      #        var redFrac = rgb_color.red || 0.0;
+                      #        var greenFrac = rgb_color.green || 0.0;
+                      #        var blueFrac = rgb_color.blue || 0.0;
+                      #        var red = Math.floor(redFrac * 255);
+                      #        var green = Math.floor(greenFrac * 255);
+                      #        var blue = Math.floor(blueFrac * 255);
+                      #
+                      #        if (!('alpha' in rgb_color)) {
+                      #           return rgbToCssColor_(red, green, blue);
+                      #        }
+                      #
+                      #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                      #        var rgbParams = [red, green, blue].join(',');
+                      #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                      #     };
+                      #
+                      #     var rgbToCssColor_ = function(red, green, blue) {
+                      #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                      #       var hexString = rgbNumber.toString(16);
+                      #       var missingZeros = 6 - hexString.length;
+                      #       var resultBuilder = ['#'];
+                      #       for (var i = 0; i < missingZeros; i++) {
+                      #          resultBuilder.push('0');
+                      #       }
+                      #       resultBuilder.push(hexString);
+                      #       return resultBuilder.join('');
+                      #     };
+                      #
+                      #     // ...
+                    "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                    "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                        # the final pixel color is defined by the equation:
+                        #
+                        #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                        #
+                        # This means that a value of 1.0 corresponds to a solid color, whereas
+                        # a value of 0.0 corresponds to a completely transparent color. This
+                        # uses a wrapper message rather than a simple float scalar so that it is
+                        # possible to distinguish between a default value and the value being unset.
+                        # If omitted, this color object is to be rendered as a solid color
+                        # (as if the alpha value had been explicitly given with a value of 1.0).
+                    "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                    "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                  },
+                  "width": 42, # The width of the border, in pixels.
+                      # Border widths must be between 0 and 3 pixels.
+                  "style": "A String", # The style of the border.
+                },
+              },
+              "wrapStrategy": "A String", # The wrap strategy for the value in the cell.
+            },
+            "title": "A String", # The title of the spreadsheet.
+          },
+        },
+        "updateCells": { # Updates all cells in a range with new data. # Updates many cells at once.
+          "fields": "A String", # The fields of CellData that should be updated.
+              # At least one field must be specified.
+              # The root is the CellData; 'row.values.' should not be specified.
+              # A single `"*"` can be used as short-hand for listing every field.
+          "range": { # A range on a sheet. # The range to write data to.
+              #
+              # If the data in rows does not cover the entire requested range,
+              # the fields matching those set in fields will be cleared.
+              # 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 grid 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.
+            "startRowIndex": 42, # The start row (inclusive) 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.
+            "endColumnIndex": 42, # The end column (exclusive) of the range, or not set if unbounded.
+          },
+          "rows": [ # The data to write.
+            { # Data about each cell in a row.
+              "values": [ # The values in the row, one per column.
+                { # Data about a specific cell.
+                  "pivotTable": { # A pivot table. # A pivot table anchored at this cell. The size of pivot table itself
+                      # is computed dynamically based on its data, grouping, filters, values,
+                      # etc... Only the top-left cell of the pivot table contains the pivot table
+                      # definition. The other cells will contain the calculated values of the
+                      # results of the pivot in their effectiveValue fields.
+                    "valueLayout": "A String", # Whether values should be listed horizontally (as columns)
+                        # or vertically (as rows).
+                    "rows": [ # Each row grouping in the pivot table.
+                      { # A single grouping (either row or column) in a pivot table.
+                        "showTotals": True or False, # True if the pivot table should include the totals for this grouping.
+                        "valueMetadata": [ # Metadata about values in the grouping.
+                          { # Metadata about a value in a pivot grouping.
+                            "collapsed": True or False, # True if the data corresponding to the value is collapsed.
+                            "value": { # The kinds of value that a cell in a spreadsheet can have. # The calculated value the metadata corresponds to.
+                                # (Note that formulaValue is not valid,
+                                #  because the values will be calculated.)
+                              "numberValue": 3.14, # Represents a double value.
+                                  # Note: Dates, Times and DateTimes are represented as doubles in
+                                  # "serial number" format.
+                              "boolValue": True or False, # Represents a boolean value.
+                              "formulaValue": "A String", # Represents a formula.
+                              "stringValue": "A String", # Represents a string value.
+                                  # Leading single quotes are not included. For example, if the user typed
+                                  # `'123` into the UI, this would be represented as a `stringValue` of
+                                  # `"123"`.
+                              "errorValue": { # An error in a cell. # Represents an error.
+                                  # This field is read-only.
+                                "message": "A String", # A message with more information about the error
+                                    # (in the spreadsheet's locale).
+                                "type": "A String", # The type of error.
+                              },
+                            },
+                          },
+                        ],
+                        "valueBucket": { # Information about which values in a pivot group should be used for sorting. # The bucket of the opposite pivot group to sort by.
+                            # If not specified, sorting is alphabetical by this group's values.
+                          "buckets": [ # Determines the bucket from which values are chosen to sort.
+                              #
+                              # For example, in a pivot table with one row group & two column groups,
+                              # the row group can list up to two values. The first value corresponds
+                              # to a value within the first column group, and the second value
+                              # corresponds to a value in the second column group.  If no values
+                              # are listed, this would indicate that the row should be sorted according
+                              # to the "Grand Total" over the column groups. If a single value is listed,
+                              # this would correspond to using the "Total" of that bucket.
+                            { # The kinds of value that a cell in a spreadsheet can have.
+                              "numberValue": 3.14, # Represents a double value.
+                                  # Note: Dates, Times and DateTimes are represented as doubles in
+                                  # "serial number" format.
+                              "boolValue": True or False, # Represents a boolean value.
+                              "formulaValue": "A String", # Represents a formula.
+                              "stringValue": "A String", # Represents a string value.
+                                  # Leading single quotes are not included. For example, if the user typed
+                                  # `'123` into the UI, this would be represented as a `stringValue` of
+                                  # `"123"`.
+                              "errorValue": { # An error in a cell. # Represents an error.
+                                  # This field is read-only.
+                                "message": "A String", # A message with more information about the error
+                                    # (in the spreadsheet's locale).
+                                "type": "A String", # The type of error.
+                              },
+                            },
+                          ],
+                          "valuesIndex": 42, # The offset in the [PivotTable.values] list which the values in this
+                              # grouping should be sorted by.
+                        },
+                        "sortOrder": "A String", # The order the values in this group should be sorted.
+                        "sourceColumnOffset": 42, # The column offset of the source range that this grouping is based on.
+                            #
+                            # For example, if the source was `C10:E15', a `sourceColumnOffset` of `0`
+                            # means this group refers to column `C`, whereas the offset `1` would refer
+                            # to column `D`.
+                      },
+                    ],
+                    "source": { # A range on a sheet. # The range the pivot table is reading data from.
+                        # 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 grid 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.
+                      "startRowIndex": 42, # The start row (inclusive) 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.
+                      "endColumnIndex": 42, # The end column (exclusive) of the range, or not set if unbounded.
+                    },
+                    "values": [ # A list of values to include in the pivot table.
+                      { # The definition of how a value in a pivot table should be calculated.
+                        "formula": "A String", # A custom formula to calculate the value.  The formula must start
+                            # with an `=` character.
+                        "summarizeFunction": "A String", # A function to summarize the value.
+                            # If formula is set, the only supported values are
+                            # SUM and
+                            # CUSTOM.
+                            # If sourceColumnOffset is set, then `CUSTOM`
+                            # is not supported.
+                        "sourceColumnOffset": 42, # The column offset of the source range that this value reads from.
+                            #
+                            # For example, if the source was `C10:E15', a `sourceColumnOffset` of `0`
+                            # means this value refers to column `C`, whereas the offset `1` would
+                            # refer to column `D`.
+                        "name": "A String", # A name to use for the value. This is only used if formula was set.
+                            # Otherwise, the column name is used.
+                      },
+                    ],
+                    "criteria": { # An optional mapping of filters per source column offset.
+                        #
+                        # The filters will be applied before aggregating data into the pivot table.
+                        # The map's key is the column offset of the source range that you want to
+                        # filter, and the value is the criteria for that column.
+                        #
+                        # For example, if the source was `C10:E15', a key of `0` will have the filter
+                        # for column `C`, whereas the key `1` is for column `D`.
+                      "a_key": { # Criteria for showing/hiding rows in a pivot table.
+                        "visibleValues": [ # Values that should be included.  Values not listed here are excluded.
+                          "A String",
+                        ],
+                      },
+                    },
+                    "columns": [ # Each column grouping in the pivot table.
+                      { # A single grouping (either row or column) in a pivot table.
+                        "showTotals": True or False, # True if the pivot table should include the totals for this grouping.
+                        "valueMetadata": [ # Metadata about values in the grouping.
+                          { # Metadata about a value in a pivot grouping.
+                            "collapsed": True or False, # True if the data corresponding to the value is collapsed.
+                            "value": { # The kinds of value that a cell in a spreadsheet can have. # The calculated value the metadata corresponds to.
+                                # (Note that formulaValue is not valid,
+                                #  because the values will be calculated.)
+                              "numberValue": 3.14, # Represents a double value.
+                                  # Note: Dates, Times and DateTimes are represented as doubles in
+                                  # "serial number" format.
+                              "boolValue": True or False, # Represents a boolean value.
+                              "formulaValue": "A String", # Represents a formula.
+                              "stringValue": "A String", # Represents a string value.
+                                  # Leading single quotes are not included. For example, if the user typed
+                                  # `'123` into the UI, this would be represented as a `stringValue` of
+                                  # `"123"`.
+                              "errorValue": { # An error in a cell. # Represents an error.
+                                  # This field is read-only.
+                                "message": "A String", # A message with more information about the error
+                                    # (in the spreadsheet's locale).
+                                "type": "A String", # The type of error.
+                              },
+                            },
+                          },
+                        ],
+                        "valueBucket": { # Information about which values in a pivot group should be used for sorting. # The bucket of the opposite pivot group to sort by.
+                            # If not specified, sorting is alphabetical by this group's values.
+                          "buckets": [ # Determines the bucket from which values are chosen to sort.
+                              #
+                              # For example, in a pivot table with one row group & two column groups,
+                              # the row group can list up to two values. The first value corresponds
+                              # to a value within the first column group, and the second value
+                              # corresponds to a value in the second column group.  If no values
+                              # are listed, this would indicate that the row should be sorted according
+                              # to the "Grand Total" over the column groups. If a single value is listed,
+                              # this would correspond to using the "Total" of that bucket.
+                            { # The kinds of value that a cell in a spreadsheet can have.
+                              "numberValue": 3.14, # Represents a double value.
+                                  # Note: Dates, Times and DateTimes are represented as doubles in
+                                  # "serial number" format.
+                              "boolValue": True or False, # Represents a boolean value.
+                              "formulaValue": "A String", # Represents a formula.
+                              "stringValue": "A String", # Represents a string value.
+                                  # Leading single quotes are not included. For example, if the user typed
+                                  # `'123` into the UI, this would be represented as a `stringValue` of
+                                  # `"123"`.
+                              "errorValue": { # An error in a cell. # Represents an error.
+                                  # This field is read-only.
+                                "message": "A String", # A message with more information about the error
+                                    # (in the spreadsheet's locale).
+                                "type": "A String", # The type of error.
+                              },
+                            },
+                          ],
+                          "valuesIndex": 42, # The offset in the [PivotTable.values] list which the values in this
+                              # grouping should be sorted by.
+                        },
+                        "sortOrder": "A String", # The order the values in this group should be sorted.
+                        "sourceColumnOffset": 42, # The column offset of the source range that this grouping is based on.
+                            #
+                            # For example, if the source was `C10:E15', a `sourceColumnOffset` of `0`
+                            # means this group refers to column `C`, whereas the offset `1` would refer
+                            # to column `D`.
+                      },
+                    ],
+                  },
+                  "hyperlink": "A String", # A hyperlink this cell points to, if any.
+                      # This field is read-only.  (To set it, use a `=HYPERLINK` formula.)
+                  "effectiveValue": { # The kinds of value that a cell in a spreadsheet can have. # The effective value of the cell. For cells with formulas, this will be
+                      # the calculated value.  For cells with literals, this will be
+                      # the same as the user_entered_value.
+                      # This field is read-only.
+                    "numberValue": 3.14, # Represents a double value.
+                        # Note: Dates, Times and DateTimes are represented as doubles in
+                        # "serial number" format.
+                    "boolValue": True or False, # Represents a boolean value.
+                    "formulaValue": "A String", # Represents a formula.
+                    "stringValue": "A String", # Represents a string value.
+                        # Leading single quotes are not included. For example, if the user typed
+                        # `'123` into the UI, this would be represented as a `stringValue` of
+                        # `"123"`.
+                    "errorValue": { # An error in a cell. # Represents an error.
+                        # This field is read-only.
+                      "message": "A String", # A message with more information about the error
+                          # (in the spreadsheet's locale).
+                      "type": "A String", # The type of error.
+                    },
+                  },
+                  "formattedValue": "A String", # The formatted value of the cell.
+                      # This is the value as it's shown to the user.
+                      # This field is read-only.
+                  "userEnteredValue": { # The kinds of value that a cell in a spreadsheet can have. # The value the user entered in the cell. e.g, `1234`, `'Hello'`, or `=NOW()`
+                      # Note: Dates, Times and DateTimes are represented as doubles in
+                      # serial number format.
+                    "numberValue": 3.14, # Represents a double value.
+                        # Note: Dates, Times and DateTimes are represented as doubles in
+                        # "serial number" format.
+                    "boolValue": True or False, # Represents a boolean value.
+                    "formulaValue": "A String", # Represents a formula.
+                    "stringValue": "A String", # Represents a string value.
+                        # Leading single quotes are not included. For example, if the user typed
+                        # `'123` into the UI, this would be represented as a `stringValue` of
+                        # `"123"`.
+                    "errorValue": { # An error in a cell. # Represents an error.
+                        # This field is read-only.
+                      "message": "A String", # A message with more information about the error
+                          # (in the spreadsheet's locale).
+                      "type": "A String", # The type of error.
+                    },
+                  },
+                  "note": "A String", # Any note on the cell.
+                  "effectiveFormat": { # The format of a cell. # The effective format being used by the cell.
+                      # This includes the results of applying any conditional formatting and,
+                      # if the cell contains a formula, the computed number format.
+                      # If the effective format is the default format, effective format will
+                      # not be written.
+                      # This field is read-only.
+                    "numberFormat": { # The number format of a cell. # A format describing how number values should be represented to the user.
+                        # When updating, all fields must be set.
+                      "pattern": "A String", # Pattern string used for formatting.
+                      "type": "A String", # The type of the number format.
+                    },
+                    "textDirection": "A String", # The direction of the text in the cell.
+                    "padding": { # The amount of padding around the cell, in pixels. # The padding of the cell.
+                        # When updating padding, every field must be specified.
+                      "top": 42, # The top padding of the cell.
+                      "right": 42, # The right padding of the cell.
+                      "bottom": 42, # The bottom padding of the cell.
+                      "left": 42, # The left padding of the cell.
+                    },
+                    "horizontalAlignment": "A String", # The horizontal alignment of the value in cell.
+                    "backgroundColor": { # Represents a color in the RGBA color space. This representation is designed # The background color of the cell.
+                        # for simplicity of conversion to/from color representations in various
+                        # languages over compactness; for example, the fields of this representation
+                        # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                        # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                        # method in iOS; and, with just a little work, it can be easily formatted into
+                        # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                        #
+                        # Example (Java):
+                        #
+                        #      import com.google.type.Color;
+                        #
+                        #      // ...
+                        #      public static java.awt.Color fromProto(Color protocolor) {
+                        #        float alpha = protocolor.hasAlpha()
+                        #            ? protocolor.getAlpha().getValue()
+                        #            : 1.0;
+                        #
+                        #        return new java.awt.Color(
+                        #            protocolor.getRed(),
+                        #            protocolor.getGreen(),
+                        #            protocolor.getBlue(),
+                        #            alpha);
+                        #      }
+                        #
+                        #      public static Color toProto(java.awt.Color color) {
+                        #        float red = (float) color.getRed();
+                        #        float green = (float) color.getGreen();
+                        #        float blue = (float) color.getBlue();
+                        #        float denominator = 255.0;
+                        #        Color.Builder resultBuilder =
+                        #            Color
+                        #                .newBuilder()
+                        #                .setRed(red / denominator)
+                        #                .setGreen(green / denominator)
+                        #                .setBlue(blue / denominator);
+                        #        int alpha = color.getAlpha();
+                        #        if (alpha != 255) {
+                        #          result.setAlpha(
+                        #              FloatValue
+                        #                  .newBuilder()
+                        #                  .setValue(((float) alpha) / denominator)
+                        #                  .build());
+                        #        }
+                        #        return resultBuilder.build();
+                        #      }
+                        #      // ...
+                        #
+                        # Example (iOS / Obj-C):
+                        #
+                        #      // ...
+                        #      static UIColor* fromProto(Color* protocolor) {
+                        #         float red = [protocolor red];
+                        #         float green = [protocolor green];
+                        #         float blue = [protocolor blue];
+                        #         FloatValue* alpha_wrapper = [protocolor alpha];
+                        #         float alpha = 1.0;
+                        #         if (alpha_wrapper != nil) {
+                        #           alpha = [alpha_wrapper value];
+                        #         }
+                        #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                        #      }
+                        #
+                        #      static Color* toProto(UIColor* color) {
+                        #          CGFloat red, green, blue, alpha;
+                        #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                        #            return nil;
+                        #          }
+                        #          Color* result = [Color alloc] init];
+                        #          [result setRed:red];
+                        #          [result setGreen:green];
+                        #          [result setBlue:blue];
+                        #          if (alpha <= 0.9999) {
+                        #            [result setAlpha:floatWrapperWithValue(alpha)];
+                        #          }
+                        #          [result autorelease];
+                        #          return result;
+                        #     }
+                        #     // ...
+                        #
+                        #  Example (JavaScript):
+                        #
+                        #     // ...
+                        #
+                        #     var protoToCssColor = function(rgb_color) {
+                        #        var redFrac = rgb_color.red || 0.0;
+                        #        var greenFrac = rgb_color.green || 0.0;
+                        #        var blueFrac = rgb_color.blue || 0.0;
+                        #        var red = Math.floor(redFrac * 255);
+                        #        var green = Math.floor(greenFrac * 255);
+                        #        var blue = Math.floor(blueFrac * 255);
+                        #
+                        #        if (!('alpha' in rgb_color)) {
+                        #           return rgbToCssColor_(red, green, blue);
+                        #        }
+                        #
+                        #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                        #        var rgbParams = [red, green, blue].join(',');
+                        #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                        #     };
+                        #
+                        #     var rgbToCssColor_ = function(red, green, blue) {
+                        #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                        #       var hexString = rgbNumber.toString(16);
+                        #       var missingZeros = 6 - hexString.length;
+                        #       var resultBuilder = ['#'];
+                        #       for (var i = 0; i < missingZeros; i++) {
+                        #          resultBuilder.push('0');
+                        #       }
+                        #       resultBuilder.push(hexString);
+                        #       return resultBuilder.join('');
+                        #     };
+                        #
+                        #     // ...
+                      "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                      "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                          # the final pixel color is defined by the equation:
+                          #
+                          #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                          #
+                          # This means that a value of 1.0 corresponds to a solid color, whereas
+                          # a value of 0.0 corresponds to a completely transparent color. This
+                          # uses a wrapper message rather than a simple float scalar so that it is
+                          # possible to distinguish between a default value and the value being unset.
+                          # If omitted, this color object is to be rendered as a solid color
+                          # (as if the alpha value had been explicitly given with a value of 1.0).
+                      "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                      "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                    },
+                    "verticalAlignment": "A String", # The vertical alignment of the value in cell.
+                    "textFormat": { # The format of a run of text in a cell. # The format of the text in the cell (unless overridden by a format run).
+                        # Absent values indicate that the field isn't specified.
+                      "foregroundColor": { # Represents a color in the RGBA color space. This representation is designed # The foreground color of the text.
+                          # for simplicity of conversion to/from color representations in various
+                          # languages over compactness; for example, the fields of this representation
+                          # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                          # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                          # method in iOS; and, with just a little work, it can be easily formatted into
+                          # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                          #
+                          # Example (Java):
+                          #
+                          #      import com.google.type.Color;
+                          #
+                          #      // ...
+                          #      public static java.awt.Color fromProto(Color protocolor) {
+                          #        float alpha = protocolor.hasAlpha()
+                          #            ? protocolor.getAlpha().getValue()
+                          #            : 1.0;
+                          #
+                          #        return new java.awt.Color(
+                          #            protocolor.getRed(),
+                          #            protocolor.getGreen(),
+                          #            protocolor.getBlue(),
+                          #            alpha);
+                          #      }
+                          #
+                          #      public static Color toProto(java.awt.Color color) {
+                          #        float red = (float) color.getRed();
+                          #        float green = (float) color.getGreen();
+                          #        float blue = (float) color.getBlue();
+                          #        float denominator = 255.0;
+                          #        Color.Builder resultBuilder =
+                          #            Color
+                          #                .newBuilder()
+                          #                .setRed(red / denominator)
+                          #                .setGreen(green / denominator)
+                          #                .setBlue(blue / denominator);
+                          #        int alpha = color.getAlpha();
+                          #        if (alpha != 255) {
+                          #          result.setAlpha(
+                          #              FloatValue
+                          #                  .newBuilder()
+                          #                  .setValue(((float) alpha) / denominator)
+                          #                  .build());
+                          #        }
+                          #        return resultBuilder.build();
+                          #      }
+                          #      // ...
+                          #
+                          # Example (iOS / Obj-C):
+                          #
+                          #      // ...
+                          #      static UIColor* fromProto(Color* protocolor) {
+                          #         float red = [protocolor red];
+                          #         float green = [protocolor green];
+                          #         float blue = [protocolor blue];
+                          #         FloatValue* alpha_wrapper = [protocolor alpha];
+                          #         float alpha = 1.0;
+                          #         if (alpha_wrapper != nil) {
+                          #           alpha = [alpha_wrapper value];
+                          #         }
+                          #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                          #      }
+                          #
+                          #      static Color* toProto(UIColor* color) {
+                          #          CGFloat red, green, blue, alpha;
+                          #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                          #            return nil;
+                          #          }
+                          #          Color* result = [Color alloc] init];
+                          #          [result setRed:red];
+                          #          [result setGreen:green];
+                          #          [result setBlue:blue];
+                          #          if (alpha <= 0.9999) {
+                          #            [result setAlpha:floatWrapperWithValue(alpha)];
+                          #          }
+                          #          [result autorelease];
+                          #          return result;
+                          #     }
+                          #     // ...
+                          #
+                          #  Example (JavaScript):
+                          #
+                          #     // ...
+                          #
+                          #     var protoToCssColor = function(rgb_color) {
+                          #        var redFrac = rgb_color.red || 0.0;
+                          #        var greenFrac = rgb_color.green || 0.0;
+                          #        var blueFrac = rgb_color.blue || 0.0;
+                          #        var red = Math.floor(redFrac * 255);
+                          #        var green = Math.floor(greenFrac * 255);
+                          #        var blue = Math.floor(blueFrac * 255);
+                          #
+                          #        if (!('alpha' in rgb_color)) {
+                          #           return rgbToCssColor_(red, green, blue);
+                          #        }
+                          #
+                          #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                          #        var rgbParams = [red, green, blue].join(',');
+                          #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                          #     };
+                          #
+                          #     var rgbToCssColor_ = function(red, green, blue) {
+                          #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                          #       var hexString = rgbNumber.toString(16);
+                          #       var missingZeros = 6 - hexString.length;
+                          #       var resultBuilder = ['#'];
+                          #       for (var i = 0; i < missingZeros; i++) {
+                          #          resultBuilder.push('0');
+                          #       }
+                          #       resultBuilder.push(hexString);
+                          #       return resultBuilder.join('');
+                          #     };
+                          #
+                          #     // ...
+                        "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                        "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                            # the final pixel color is defined by the equation:
+                            #
+                            #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                            #
+                            # This means that a value of 1.0 corresponds to a solid color, whereas
+                            # a value of 0.0 corresponds to a completely transparent color. This
+                            # uses a wrapper message rather than a simple float scalar so that it is
+                            # possible to distinguish between a default value and the value being unset.
+                            # If omitted, this color object is to be rendered as a solid color
+                            # (as if the alpha value had been explicitly given with a value of 1.0).
+                        "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                        "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                      },
+                      "bold": True or False, # True if the text is bold.
+                      "strikethrough": True or False, # True if the text has a strikethrough.
+                      "fontFamily": "A String", # The font family.
+                      "fontSize": 42, # The size of the font.
+                      "italic": True or False, # True if the text is italicized.
+                      "underline": True or False, # True if the text is underlined.
+                    },
+                    "hyperlinkDisplayType": "A String", # How a hyperlink, if it exists, should be displayed in the cell.
+                    "borders": { # The borders of the cell. # The borders of the cell.
+                      "top": { # A border along a cell. # The top border of the cell.
+                        "color": { # Represents a color in the RGBA color space. This representation is designed # The color of the border.
+                            # for simplicity of conversion to/from color representations in various
+                            # languages over compactness; for example, the fields of this representation
+                            # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                            # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                            # method in iOS; and, with just a little work, it can be easily formatted into
+                            # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                            #
+                            # Example (Java):
+                            #
+                            #      import com.google.type.Color;
+                            #
+                            #      // ...
+                            #      public static java.awt.Color fromProto(Color protocolor) {
+                            #        float alpha = protocolor.hasAlpha()
+                            #            ? protocolor.getAlpha().getValue()
+                            #            : 1.0;
+                            #
+                            #        return new java.awt.Color(
+                            #            protocolor.getRed(),
+                            #            protocolor.getGreen(),
+                            #            protocolor.getBlue(),
+                            #            alpha);
+                            #      }
+                            #
+                            #      public static Color toProto(java.awt.Color color) {
+                            #        float red = (float) color.getRed();
+                            #        float green = (float) color.getGreen();
+                            #        float blue = (float) color.getBlue();
+                            #        float denominator = 255.0;
+                            #        Color.Builder resultBuilder =
+                            #            Color
+                            #                .newBuilder()
+                            #                .setRed(red / denominator)
+                            #                .setGreen(green / denominator)
+                            #                .setBlue(blue / denominator);
+                            #        int alpha = color.getAlpha();
+                            #        if (alpha != 255) {
+                            #          result.setAlpha(
+                            #              FloatValue
+                            #                  .newBuilder()
+                            #                  .setValue(((float) alpha) / denominator)
+                            #                  .build());
+                            #        }
+                            #        return resultBuilder.build();
+                            #      }
+                            #      // ...
+                            #
+                            # Example (iOS / Obj-C):
+                            #
+                            #      // ...
+                            #      static UIColor* fromProto(Color* protocolor) {
+                            #         float red = [protocolor red];
+                            #         float green = [protocolor green];
+                            #         float blue = [protocolor blue];
+                            #         FloatValue* alpha_wrapper = [protocolor alpha];
+                            #         float alpha = 1.0;
+                            #         if (alpha_wrapper != nil) {
+                            #           alpha = [alpha_wrapper value];
+                            #         }
+                            #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                            #      }
+                            #
+                            #      static Color* toProto(UIColor* color) {
+                            #          CGFloat red, green, blue, alpha;
+                            #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                            #            return nil;
+                            #          }
+                            #          Color* result = [Color alloc] init];
+                            #          [result setRed:red];
+                            #          [result setGreen:green];
+                            #          [result setBlue:blue];
+                            #          if (alpha <= 0.9999) {
+                            #            [result setAlpha:floatWrapperWithValue(alpha)];
+                            #          }
+                            #          [result autorelease];
+                            #          return result;
+                            #     }
+                            #     // ...
+                            #
+                            #  Example (JavaScript):
+                            #
+                            #     // ...
+                            #
+                            #     var protoToCssColor = function(rgb_color) {
+                            #        var redFrac = rgb_color.red || 0.0;
+                            #        var greenFrac = rgb_color.green || 0.0;
+                            #        var blueFrac = rgb_color.blue || 0.0;
+                            #        var red = Math.floor(redFrac * 255);
+                            #        var green = Math.floor(greenFrac * 255);
+                            #        var blue = Math.floor(blueFrac * 255);
+                            #
+                            #        if (!('alpha' in rgb_color)) {
+                            #           return rgbToCssColor_(red, green, blue);
+                            #        }
+                            #
+                            #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                            #        var rgbParams = [red, green, blue].join(',');
+                            #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                            #     };
+                            #
+                            #     var rgbToCssColor_ = function(red, green, blue) {
+                            #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                            #       var hexString = rgbNumber.toString(16);
+                            #       var missingZeros = 6 - hexString.length;
+                            #       var resultBuilder = ['#'];
+                            #       for (var i = 0; i < missingZeros; i++) {
+                            #          resultBuilder.push('0');
+                            #       }
+                            #       resultBuilder.push(hexString);
+                            #       return resultBuilder.join('');
+                            #     };
+                            #
+                            #     // ...
+                          "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                          "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                              # the final pixel color is defined by the equation:
+                              #
+                              #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                              #
+                              # This means that a value of 1.0 corresponds to a solid color, whereas
+                              # a value of 0.0 corresponds to a completely transparent color. This
+                              # uses a wrapper message rather than a simple float scalar so that it is
+                              # possible to distinguish between a default value and the value being unset.
+                              # If omitted, this color object is to be rendered as a solid color
+                              # (as if the alpha value had been explicitly given with a value of 1.0).
+                          "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                          "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                        },
+                        "width": 42, # The width of the border, in pixels.
+                            # Border widths must be between 0 and 3 pixels.
+                        "style": "A String", # The style of the border.
+                      },
+                      "right": { # A border along a cell. # The right border of the cell.
+                        "color": { # Represents a color in the RGBA color space. This representation is designed # The color of the border.
+                            # for simplicity of conversion to/from color representations in various
+                            # languages over compactness; for example, the fields of this representation
+                            # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                            # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                            # method in iOS; and, with just a little work, it can be easily formatted into
+                            # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                            #
+                            # Example (Java):
+                            #
+                            #      import com.google.type.Color;
+                            #
+                            #      // ...
+                            #      public static java.awt.Color fromProto(Color protocolor) {
+                            #        float alpha = protocolor.hasAlpha()
+                            #            ? protocolor.getAlpha().getValue()
+                            #            : 1.0;
+                            #
+                            #        return new java.awt.Color(
+                            #            protocolor.getRed(),
+                            #            protocolor.getGreen(),
+                            #            protocolor.getBlue(),
+                            #            alpha);
+                            #      }
+                            #
+                            #      public static Color toProto(java.awt.Color color) {
+                            #        float red = (float) color.getRed();
+                            #        float green = (float) color.getGreen();
+                            #        float blue = (float) color.getBlue();
+                            #        float denominator = 255.0;
+                            #        Color.Builder resultBuilder =
+                            #            Color
+                            #                .newBuilder()
+                            #                .setRed(red / denominator)
+                            #                .setGreen(green / denominator)
+                            #                .setBlue(blue / denominator);
+                            #        int alpha = color.getAlpha();
+                            #        if (alpha != 255) {
+                            #          result.setAlpha(
+                            #              FloatValue
+                            #                  .newBuilder()
+                            #                  .setValue(((float) alpha) / denominator)
+                            #                  .build());
+                            #        }
+                            #        return resultBuilder.build();
+                            #      }
+                            #      // ...
+                            #
+                            # Example (iOS / Obj-C):
+                            #
+                            #      // ...
+                            #      static UIColor* fromProto(Color* protocolor) {
+                            #         float red = [protocolor red];
+                            #         float green = [protocolor green];
+                            #         float blue = [protocolor blue];
+                            #         FloatValue* alpha_wrapper = [protocolor alpha];
+                            #         float alpha = 1.0;
+                            #         if (alpha_wrapper != nil) {
+                            #           alpha = [alpha_wrapper value];
+                            #         }
+                            #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                            #      }
+                            #
+                            #      static Color* toProto(UIColor* color) {
+                            #          CGFloat red, green, blue, alpha;
+                            #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                            #            return nil;
+                            #          }
+                            #          Color* result = [Color alloc] init];
+                            #          [result setRed:red];
+                            #          [result setGreen:green];
+                            #          [result setBlue:blue];
+                            #          if (alpha <= 0.9999) {
+                            #            [result setAlpha:floatWrapperWithValue(alpha)];
+                            #          }
+                            #          [result autorelease];
+                            #          return result;
+                            #     }
+                            #     // ...
+                            #
+                            #  Example (JavaScript):
+                            #
+                            #     // ...
+                            #
+                            #     var protoToCssColor = function(rgb_color) {
+                            #        var redFrac = rgb_color.red || 0.0;
+                            #        var greenFrac = rgb_color.green || 0.0;
+                            #        var blueFrac = rgb_color.blue || 0.0;
+                            #        var red = Math.floor(redFrac * 255);
+                            #        var green = Math.floor(greenFrac * 255);
+                            #        var blue = Math.floor(blueFrac * 255);
+                            #
+                            #        if (!('alpha' in rgb_color)) {
+                            #           return rgbToCssColor_(red, green, blue);
+                            #        }
+                            #
+                            #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                            #        var rgbParams = [red, green, blue].join(',');
+                            #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                            #     };
+                            #
+                            #     var rgbToCssColor_ = function(red, green, blue) {
+                            #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                            #       var hexString = rgbNumber.toString(16);
+                            #       var missingZeros = 6 - hexString.length;
+                            #       var resultBuilder = ['#'];
+                            #       for (var i = 0; i < missingZeros; i++) {
+                            #          resultBuilder.push('0');
+                            #       }
+                            #       resultBuilder.push(hexString);
+                            #       return resultBuilder.join('');
+                            #     };
+                            #
+                            #     // ...
+                          "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                          "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                              # the final pixel color is defined by the equation:
+                              #
+                              #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                              #
+                              # This means that a value of 1.0 corresponds to a solid color, whereas
+                              # a value of 0.0 corresponds to a completely transparent color. This
+                              # uses a wrapper message rather than a simple float scalar so that it is
+                              # possible to distinguish between a default value and the value being unset.
+                              # If omitted, this color object is to be rendered as a solid color
+                              # (as if the alpha value had been explicitly given with a value of 1.0).
+                          "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                          "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                        },
+                        "width": 42, # The width of the border, in pixels.
+                            # Border widths must be between 0 and 3 pixels.
+                        "style": "A String", # The style of the border.
+                      },
+                      "bottom": { # A border along a cell. # The bottom border of the cell.
+                        "color": { # Represents a color in the RGBA color space. This representation is designed # The color of the border.
+                            # for simplicity of conversion to/from color representations in various
+                            # languages over compactness; for example, the fields of this representation
+                            # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                            # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                            # method in iOS; and, with just a little work, it can be easily formatted into
+                            # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                            #
+                            # Example (Java):
+                            #
+                            #      import com.google.type.Color;
+                            #
+                            #      // ...
+                            #      public static java.awt.Color fromProto(Color protocolor) {
+                            #        float alpha = protocolor.hasAlpha()
+                            #            ? protocolor.getAlpha().getValue()
+                            #            : 1.0;
+                            #
+                            #        return new java.awt.Color(
+                            #            protocolor.getRed(),
+                            #            protocolor.getGreen(),
+                            #            protocolor.getBlue(),
+                            #            alpha);
+                            #      }
+                            #
+                            #      public static Color toProto(java.awt.Color color) {
+                            #        float red = (float) color.getRed();
+                            #        float green = (float) color.getGreen();
+                            #        float blue = (float) color.getBlue();
+                            #        float denominator = 255.0;
+                            #        Color.Builder resultBuilder =
+                            #            Color
+                            #                .newBuilder()
+                            #                .setRed(red / denominator)
+                            #                .setGreen(green / denominator)
+                            #                .setBlue(blue / denominator);
+                            #        int alpha = color.getAlpha();
+                            #        if (alpha != 255) {
+                            #          result.setAlpha(
+                            #              FloatValue
+                            #                  .newBuilder()
+                            #                  .setValue(((float) alpha) / denominator)
+                            #                  .build());
+                            #        }
+                            #        return resultBuilder.build();
+                            #      }
+                            #      // ...
+                            #
+                            # Example (iOS / Obj-C):
+                            #
+                            #      // ...
+                            #      static UIColor* fromProto(Color* protocolor) {
+                            #         float red = [protocolor red];
+                            #         float green = [protocolor green];
+                            #         float blue = [protocolor blue];
+                            #         FloatValue* alpha_wrapper = [protocolor alpha];
+                            #         float alpha = 1.0;
+                            #         if (alpha_wrapper != nil) {
+                            #           alpha = [alpha_wrapper value];
+                            #         }
+                            #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                            #      }
+                            #
+                            #      static Color* toProto(UIColor* color) {
+                            #          CGFloat red, green, blue, alpha;
+                            #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                            #            return nil;
+                            #          }
+                            #          Color* result = [Color alloc] init];
+                            #          [result setRed:red];
+                            #          [result setGreen:green];
+                            #          [result setBlue:blue];
+                            #          if (alpha <= 0.9999) {
+                            #            [result setAlpha:floatWrapperWithValue(alpha)];
+                            #          }
+                            #          [result autorelease];
+                            #          return result;
+                            #     }
+                            #     // ...
+                            #
+                            #  Example (JavaScript):
+                            #
+                            #     // ...
+                            #
+                            #     var protoToCssColor = function(rgb_color) {
+                            #        var redFrac = rgb_color.red || 0.0;
+                            #        var greenFrac = rgb_color.green || 0.0;
+                            #        var blueFrac = rgb_color.blue || 0.0;
+                            #        var red = Math.floor(redFrac * 255);
+                            #        var green = Math.floor(greenFrac * 255);
+                            #        var blue = Math.floor(blueFrac * 255);
+                            #
+                            #        if (!('alpha' in rgb_color)) {
+                            #           return rgbToCssColor_(red, green, blue);
+                            #        }
+                            #
+                            #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                            #        var rgbParams = [red, green, blue].join(',');
+                            #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                            #     };
+                            #
+                            #     var rgbToCssColor_ = function(red, green, blue) {
+                            #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                            #       var hexString = rgbNumber.toString(16);
+                            #       var missingZeros = 6 - hexString.length;
+                            #       var resultBuilder = ['#'];
+                            #       for (var i = 0; i < missingZeros; i++) {
+                            #          resultBuilder.push('0');
+                            #       }
+                            #       resultBuilder.push(hexString);
+                            #       return resultBuilder.join('');
+                            #     };
+                            #
+                            #     // ...
+                          "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                          "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                              # the final pixel color is defined by the equation:
+                              #
+                              #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                              #
+                              # This means that a value of 1.0 corresponds to a solid color, whereas
+                              # a value of 0.0 corresponds to a completely transparent color. This
+                              # uses a wrapper message rather than a simple float scalar so that it is
+                              # possible to distinguish between a default value and the value being unset.
+                              # If omitted, this color object is to be rendered as a solid color
+                              # (as if the alpha value had been explicitly given with a value of 1.0).
+                          "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                          "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                        },
+                        "width": 42, # The width of the border, in pixels.
+                            # Border widths must be between 0 and 3 pixels.
+                        "style": "A String", # The style of the border.
+                      },
+                      "left": { # A border along a cell. # The left border of the cell.
+                        "color": { # Represents a color in the RGBA color space. This representation is designed # The color of the border.
+                            # for simplicity of conversion to/from color representations in various
+                            # languages over compactness; for example, the fields of this representation
+                            # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                            # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                            # method in iOS; and, with just a little work, it can be easily formatted into
+                            # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                            #
+                            # Example (Java):
+                            #
+                            #      import com.google.type.Color;
+                            #
+                            #      // ...
+                            #      public static java.awt.Color fromProto(Color protocolor) {
+                            #        float alpha = protocolor.hasAlpha()
+                            #            ? protocolor.getAlpha().getValue()
+                            #            : 1.0;
+                            #
+                            #        return new java.awt.Color(
+                            #            protocolor.getRed(),
+                            #            protocolor.getGreen(),
+                            #            protocolor.getBlue(),
+                            #            alpha);
+                            #      }
+                            #
+                            #      public static Color toProto(java.awt.Color color) {
+                            #        float red = (float) color.getRed();
+                            #        float green = (float) color.getGreen();
+                            #        float blue = (float) color.getBlue();
+                            #        float denominator = 255.0;
+                            #        Color.Builder resultBuilder =
+                            #            Color
+                            #                .newBuilder()
+                            #                .setRed(red / denominator)
+                            #                .setGreen(green / denominator)
+                            #                .setBlue(blue / denominator);
+                            #        int alpha = color.getAlpha();
+                            #        if (alpha != 255) {
+                            #          result.setAlpha(
+                            #              FloatValue
+                            #                  .newBuilder()
+                            #                  .setValue(((float) alpha) / denominator)
+                            #                  .build());
+                            #        }
+                            #        return resultBuilder.build();
+                            #      }
+                            #      // ...
+                            #
+                            # Example (iOS / Obj-C):
+                            #
+                            #      // ...
+                            #      static UIColor* fromProto(Color* protocolor) {
+                            #         float red = [protocolor red];
+                            #         float green = [protocolor green];
+                            #         float blue = [protocolor blue];
+                            #         FloatValue* alpha_wrapper = [protocolor alpha];
+                            #         float alpha = 1.0;
+                            #         if (alpha_wrapper != nil) {
+                            #           alpha = [alpha_wrapper value];
+                            #         }
+                            #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                            #      }
+                            #
+                            #      static Color* toProto(UIColor* color) {
+                            #          CGFloat red, green, blue, alpha;
+                            #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                            #            return nil;
+                            #          }
+                            #          Color* result = [Color alloc] init];
+                            #          [result setRed:red];
+                            #          [result setGreen:green];
+                            #          [result setBlue:blue];
+                            #          if (alpha <= 0.9999) {
+                            #            [result setAlpha:floatWrapperWithValue(alpha)];
+                            #          }
+                            #          [result autorelease];
+                            #          return result;
+                            #     }
+                            #     // ...
+                            #
+                            #  Example (JavaScript):
+                            #
+                            #     // ...
+                            #
+                            #     var protoToCssColor = function(rgb_color) {
+                            #        var redFrac = rgb_color.red || 0.0;
+                            #        var greenFrac = rgb_color.green || 0.0;
+                            #        var blueFrac = rgb_color.blue || 0.0;
+                            #        var red = Math.floor(redFrac * 255);
+                            #        var green = Math.floor(greenFrac * 255);
+                            #        var blue = Math.floor(blueFrac * 255);
+                            #
+                            #        if (!('alpha' in rgb_color)) {
+                            #           return rgbToCssColor_(red, green, blue);
+                            #        }
+                            #
+                            #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                            #        var rgbParams = [red, green, blue].join(',');
+                            #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                            #     };
+                            #
+                            #     var rgbToCssColor_ = function(red, green, blue) {
+                            #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                            #       var hexString = rgbNumber.toString(16);
+                            #       var missingZeros = 6 - hexString.length;
+                            #       var resultBuilder = ['#'];
+                            #       for (var i = 0; i < missingZeros; i++) {
+                            #          resultBuilder.push('0');
+                            #       }
+                            #       resultBuilder.push(hexString);
+                            #       return resultBuilder.join('');
+                            #     };
+                            #
+                            #     // ...
+                          "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                          "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                              # the final pixel color is defined by the equation:
+                              #
+                              #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                              #
+                              # This means that a value of 1.0 corresponds to a solid color, whereas
+                              # a value of 0.0 corresponds to a completely transparent color. This
+                              # uses a wrapper message rather than a simple float scalar so that it is
+                              # possible to distinguish between a default value and the value being unset.
+                              # If omitted, this color object is to be rendered as a solid color
+                              # (as if the alpha value had been explicitly given with a value of 1.0).
+                          "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                          "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                        },
+                        "width": 42, # The width of the border, in pixels.
+                            # Border widths must be between 0 and 3 pixels.
+                        "style": "A String", # The style of the border.
+                      },
+                    },
+                    "wrapStrategy": "A String", # The wrap strategy for the value in the cell.
+                  },
+                  "userEnteredFormat": { # The format of a cell. # The format the user entered for the cell.
+                      #
+                      # When writing, the new format will be merged with the existing format.
+                    "numberFormat": { # The number format of a cell. # A format describing how number values should be represented to the user.
+                        # When updating, all fields must be set.
+                      "pattern": "A String", # Pattern string used for formatting.
+                      "type": "A String", # The type of the number format.
+                    },
+                    "textDirection": "A String", # The direction of the text in the cell.
+                    "padding": { # The amount of padding around the cell, in pixels. # The padding of the cell.
+                        # When updating padding, every field must be specified.
+                      "top": 42, # The top padding of the cell.
+                      "right": 42, # The right padding of the cell.
+                      "bottom": 42, # The bottom padding of the cell.
+                      "left": 42, # The left padding of the cell.
+                    },
+                    "horizontalAlignment": "A String", # The horizontal alignment of the value in cell.
+                    "backgroundColor": { # Represents a color in the RGBA color space. This representation is designed # The background color of the cell.
+                        # for simplicity of conversion to/from color representations in various
+                        # languages over compactness; for example, the fields of this representation
+                        # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                        # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                        # method in iOS; and, with just a little work, it can be easily formatted into
+                        # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                        #
+                        # Example (Java):
+                        #
+                        #      import com.google.type.Color;
+                        #
+                        #      // ...
+                        #      public static java.awt.Color fromProto(Color protocolor) {
+                        #        float alpha = protocolor.hasAlpha()
+                        #            ? protocolor.getAlpha().getValue()
+                        #            : 1.0;
+                        #
+                        #        return new java.awt.Color(
+                        #            protocolor.getRed(),
+                        #            protocolor.getGreen(),
+                        #            protocolor.getBlue(),
+                        #            alpha);
+                        #      }
+                        #
+                        #      public static Color toProto(java.awt.Color color) {
+                        #        float red = (float) color.getRed();
+                        #        float green = (float) color.getGreen();
+                        #        float blue = (float) color.getBlue();
+                        #        float denominator = 255.0;
+                        #        Color.Builder resultBuilder =
+                        #            Color
+                        #                .newBuilder()
+                        #                .setRed(red / denominator)
+                        #                .setGreen(green / denominator)
+                        #                .setBlue(blue / denominator);
+                        #        int alpha = color.getAlpha();
+                        #        if (alpha != 255) {
+                        #          result.setAlpha(
+                        #              FloatValue
+                        #                  .newBuilder()
+                        #                  .setValue(((float) alpha) / denominator)
+                        #                  .build());
+                        #        }
+                        #        return resultBuilder.build();
+                        #      }
+                        #      // ...
+                        #
+                        # Example (iOS / Obj-C):
+                        #
+                        #      // ...
+                        #      static UIColor* fromProto(Color* protocolor) {
+                        #         float red = [protocolor red];
+                        #         float green = [protocolor green];
+                        #         float blue = [protocolor blue];
+                        #         FloatValue* alpha_wrapper = [protocolor alpha];
+                        #         float alpha = 1.0;
+                        #         if (alpha_wrapper != nil) {
+                        #           alpha = [alpha_wrapper value];
+                        #         }
+                        #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                        #      }
+                        #
+                        #      static Color* toProto(UIColor* color) {
+                        #          CGFloat red, green, blue, alpha;
+                        #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                        #            return nil;
+                        #          }
+                        #          Color* result = [Color alloc] init];
+                        #          [result setRed:red];
+                        #          [result setGreen:green];
+                        #          [result setBlue:blue];
+                        #          if (alpha <= 0.9999) {
+                        #            [result setAlpha:floatWrapperWithValue(alpha)];
+                        #          }
+                        #          [result autorelease];
+                        #          return result;
+                        #     }
+                        #     // ...
+                        #
+                        #  Example (JavaScript):
+                        #
+                        #     // ...
+                        #
+                        #     var protoToCssColor = function(rgb_color) {
+                        #        var redFrac = rgb_color.red || 0.0;
+                        #        var greenFrac = rgb_color.green || 0.0;
+                        #        var blueFrac = rgb_color.blue || 0.0;
+                        #        var red = Math.floor(redFrac * 255);
+                        #        var green = Math.floor(greenFrac * 255);
+                        #        var blue = Math.floor(blueFrac * 255);
+                        #
+                        #        if (!('alpha' in rgb_color)) {
+                        #           return rgbToCssColor_(red, green, blue);
+                        #        }
+                        #
+                        #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                        #        var rgbParams = [red, green, blue].join(',');
+                        #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                        #     };
+                        #
+                        #     var rgbToCssColor_ = function(red, green, blue) {
+                        #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                        #       var hexString = rgbNumber.toString(16);
+                        #       var missingZeros = 6 - hexString.length;
+                        #       var resultBuilder = ['#'];
+                        #       for (var i = 0; i < missingZeros; i++) {
+                        #          resultBuilder.push('0');
+                        #       }
+                        #       resultBuilder.push(hexString);
+                        #       return resultBuilder.join('');
+                        #     };
+                        #
+                        #     // ...
+                      "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                      "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                          # the final pixel color is defined by the equation:
+                          #
+                          #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                          #
+                          # This means that a value of 1.0 corresponds to a solid color, whereas
+                          # a value of 0.0 corresponds to a completely transparent color. This
+                          # uses a wrapper message rather than a simple float scalar so that it is
+                          # possible to distinguish between a default value and the value being unset.
+                          # If omitted, this color object is to be rendered as a solid color
+                          # (as if the alpha value had been explicitly given with a value of 1.0).
+                      "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                      "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                    },
+                    "verticalAlignment": "A String", # The vertical alignment of the value in cell.
+                    "textFormat": { # The format of a run of text in a cell. # The format of the text in the cell (unless overridden by a format run).
+                        # Absent values indicate that the field isn't specified.
+                      "foregroundColor": { # Represents a color in the RGBA color space. This representation is designed # The foreground color of the text.
+                          # for simplicity of conversion to/from color representations in various
+                          # languages over compactness; for example, the fields of this representation
+                          # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                          # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                          # method in iOS; and, with just a little work, it can be easily formatted into
+                          # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                          #
+                          # Example (Java):
+                          #
+                          #      import com.google.type.Color;
+                          #
+                          #      // ...
+                          #      public static java.awt.Color fromProto(Color protocolor) {
+                          #        float alpha = protocolor.hasAlpha()
+                          #            ? protocolor.getAlpha().getValue()
+                          #            : 1.0;
+                          #
+                          #        return new java.awt.Color(
+                          #            protocolor.getRed(),
+                          #            protocolor.getGreen(),
+                          #            protocolor.getBlue(),
+                          #            alpha);
+                          #      }
+                          #
+                          #      public static Color toProto(java.awt.Color color) {
+                          #        float red = (float) color.getRed();
+                          #        float green = (float) color.getGreen();
+                          #        float blue = (float) color.getBlue();
+                          #        float denominator = 255.0;
+                          #        Color.Builder resultBuilder =
+                          #            Color
+                          #                .newBuilder()
+                          #                .setRed(red / denominator)
+                          #                .setGreen(green / denominator)
+                          #                .setBlue(blue / denominator);
+                          #        int alpha = color.getAlpha();
+                          #        if (alpha != 255) {
+                          #          result.setAlpha(
+                          #              FloatValue
+                          #                  .newBuilder()
+                          #                  .setValue(((float) alpha) / denominator)
+                          #                  .build());
+                          #        }
+                          #        return resultBuilder.build();
+                          #      }
+                          #      // ...
+                          #
+                          # Example (iOS / Obj-C):
+                          #
+                          #      // ...
+                          #      static UIColor* fromProto(Color* protocolor) {
+                          #         float red = [protocolor red];
+                          #         float green = [protocolor green];
+                          #         float blue = [protocolor blue];
+                          #         FloatValue* alpha_wrapper = [protocolor alpha];
+                          #         float alpha = 1.0;
+                          #         if (alpha_wrapper != nil) {
+                          #           alpha = [alpha_wrapper value];
+                          #         }
+                          #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                          #      }
+                          #
+                          #      static Color* toProto(UIColor* color) {
+                          #          CGFloat red, green, blue, alpha;
+                          #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                          #            return nil;
+                          #          }
+                          #          Color* result = [Color alloc] init];
+                          #          [result setRed:red];
+                          #          [result setGreen:green];
+                          #          [result setBlue:blue];
+                          #          if (alpha <= 0.9999) {
+                          #            [result setAlpha:floatWrapperWithValue(alpha)];
+                          #          }
+                          #          [result autorelease];
+                          #          return result;
+                          #     }
+                          #     // ...
+                          #
+                          #  Example (JavaScript):
+                          #
+                          #     // ...
+                          #
+                          #     var protoToCssColor = function(rgb_color) {
+                          #        var redFrac = rgb_color.red || 0.0;
+                          #        var greenFrac = rgb_color.green || 0.0;
+                          #        var blueFrac = rgb_color.blue || 0.0;
+                          #        var red = Math.floor(redFrac * 255);
+                          #        var green = Math.floor(greenFrac * 255);
+                          #        var blue = Math.floor(blueFrac * 255);
+                          #
+                          #        if (!('alpha' in rgb_color)) {
+                          #           return rgbToCssColor_(red, green, blue);
+                          #        }
+                          #
+                          #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                          #        var rgbParams = [red, green, blue].join(',');
+                          #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                          #     };
+                          #
+                          #     var rgbToCssColor_ = function(red, green, blue) {
+                          #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                          #       var hexString = rgbNumber.toString(16);
+                          #       var missingZeros = 6 - hexString.length;
+                          #       var resultBuilder = ['#'];
+                          #       for (var i = 0; i < missingZeros; i++) {
+                          #          resultBuilder.push('0');
+                          #       }
+                          #       resultBuilder.push(hexString);
+                          #       return resultBuilder.join('');
+                          #     };
+                          #
+                          #     // ...
+                        "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                        "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                            # the final pixel color is defined by the equation:
+                            #
+                            #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                            #
+                            # This means that a value of 1.0 corresponds to a solid color, whereas
+                            # a value of 0.0 corresponds to a completely transparent color. This
+                            # uses a wrapper message rather than a simple float scalar so that it is
+                            # possible to distinguish between a default value and the value being unset.
+                            # If omitted, this color object is to be rendered as a solid color
+                            # (as if the alpha value had been explicitly given with a value of 1.0).
+                        "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                        "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                      },
+                      "bold": True or False, # True if the text is bold.
+                      "strikethrough": True or False, # True if the text has a strikethrough.
+                      "fontFamily": "A String", # The font family.
+                      "fontSize": 42, # The size of the font.
+                      "italic": True or False, # True if the text is italicized.
+                      "underline": True or False, # True if the text is underlined.
+                    },
+                    "hyperlinkDisplayType": "A String", # How a hyperlink, if it exists, should be displayed in the cell.
+                    "borders": { # The borders of the cell. # The borders of the cell.
+                      "top": { # A border along a cell. # The top border of the cell.
+                        "color": { # Represents a color in the RGBA color space. This representation is designed # The color of the border.
+                            # for simplicity of conversion to/from color representations in various
+                            # languages over compactness; for example, the fields of this representation
+                            # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                            # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                            # method in iOS; and, with just a little work, it can be easily formatted into
+                            # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                            #
+                            # Example (Java):
+                            #
+                            #      import com.google.type.Color;
+                            #
+                            #      // ...
+                            #      public static java.awt.Color fromProto(Color protocolor) {
+                            #        float alpha = protocolor.hasAlpha()
+                            #            ? protocolor.getAlpha().getValue()
+                            #            : 1.0;
+                            #
+                            #        return new java.awt.Color(
+                            #            protocolor.getRed(),
+                            #            protocolor.getGreen(),
+                            #            protocolor.getBlue(),
+                            #            alpha);
+                            #      }
+                            #
+                            #      public static Color toProto(java.awt.Color color) {
+                            #        float red = (float) color.getRed();
+                            #        float green = (float) color.getGreen();
+                            #        float blue = (float) color.getBlue();
+                            #        float denominator = 255.0;
+                            #        Color.Builder resultBuilder =
+                            #            Color
+                            #                .newBuilder()
+                            #                .setRed(red / denominator)
+                            #                .setGreen(green / denominator)
+                            #                .setBlue(blue / denominator);
+                            #        int alpha = color.getAlpha();
+                            #        if (alpha != 255) {
+                            #          result.setAlpha(
+                            #              FloatValue
+                            #                  .newBuilder()
+                            #                  .setValue(((float) alpha) / denominator)
+                            #                  .build());
+                            #        }
+                            #        return resultBuilder.build();
+                            #      }
+                            #      // ...
+                            #
+                            # Example (iOS / Obj-C):
+                            #
+                            #      // ...
+                            #      static UIColor* fromProto(Color* protocolor) {
+                            #         float red = [protocolor red];
+                            #         float green = [protocolor green];
+                            #         float blue = [protocolor blue];
+                            #         FloatValue* alpha_wrapper = [protocolor alpha];
+                            #         float alpha = 1.0;
+                            #         if (alpha_wrapper != nil) {
+                            #           alpha = [alpha_wrapper value];
+                            #         }
+                            #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                            #      }
+                            #
+                            #      static Color* toProto(UIColor* color) {
+                            #          CGFloat red, green, blue, alpha;
+                            #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                            #            return nil;
+                            #          }
+                            #          Color* result = [Color alloc] init];
+                            #          [result setRed:red];
+                            #          [result setGreen:green];
+                            #          [result setBlue:blue];
+                            #          if (alpha <= 0.9999) {
+                            #            [result setAlpha:floatWrapperWithValue(alpha)];
+                            #          }
+                            #          [result autorelease];
+                            #          return result;
+                            #     }
+                            #     // ...
+                            #
+                            #  Example (JavaScript):
+                            #
+                            #     // ...
+                            #
+                            #     var protoToCssColor = function(rgb_color) {
+                            #        var redFrac = rgb_color.red || 0.0;
+                            #        var greenFrac = rgb_color.green || 0.0;
+                            #        var blueFrac = rgb_color.blue || 0.0;
+                            #        var red = Math.floor(redFrac * 255);
+                            #        var green = Math.floor(greenFrac * 255);
+                            #        var blue = Math.floor(blueFrac * 255);
+                            #
+                            #        if (!('alpha' in rgb_color)) {
+                            #           return rgbToCssColor_(red, green, blue);
+                            #        }
+                            #
+                            #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                            #        var rgbParams = [red, green, blue].join(',');
+                            #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                            #     };
+                            #
+                            #     var rgbToCssColor_ = function(red, green, blue) {
+                            #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                            #       var hexString = rgbNumber.toString(16);
+                            #       var missingZeros = 6 - hexString.length;
+                            #       var resultBuilder = ['#'];
+                            #       for (var i = 0; i < missingZeros; i++) {
+                            #          resultBuilder.push('0');
+                            #       }
+                            #       resultBuilder.push(hexString);
+                            #       return resultBuilder.join('');
+                            #     };
+                            #
+                            #     // ...
+                          "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                          "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                              # the final pixel color is defined by the equation:
+                              #
+                              #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                              #
+                              # This means that a value of 1.0 corresponds to a solid color, whereas
+                              # a value of 0.0 corresponds to a completely transparent color. This
+                              # uses a wrapper message rather than a simple float scalar so that it is
+                              # possible to distinguish between a default value and the value being unset.
+                              # If omitted, this color object is to be rendered as a solid color
+                              # (as if the alpha value had been explicitly given with a value of 1.0).
+                          "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                          "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                        },
+                        "width": 42, # The width of the border, in pixels.
+                            # Border widths must be between 0 and 3 pixels.
+                        "style": "A String", # The style of the border.
+                      },
+                      "right": { # A border along a cell. # The right border of the cell.
+                        "color": { # Represents a color in the RGBA color space. This representation is designed # The color of the border.
+                            # for simplicity of conversion to/from color representations in various
+                            # languages over compactness; for example, the fields of this representation
+                            # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                            # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                            # method in iOS; and, with just a little work, it can be easily formatted into
+                            # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                            #
+                            # Example (Java):
+                            #
+                            #      import com.google.type.Color;
+                            #
+                            #      // ...
+                            #      public static java.awt.Color fromProto(Color protocolor) {
+                            #        float alpha = protocolor.hasAlpha()
+                            #            ? protocolor.getAlpha().getValue()
+                            #            : 1.0;
+                            #
+                            #        return new java.awt.Color(
+                            #            protocolor.getRed(),
+                            #            protocolor.getGreen(),
+                            #            protocolor.getBlue(),
+                            #            alpha);
+                            #      }
+                            #
+                            #      public static Color toProto(java.awt.Color color) {
+                            #        float red = (float) color.getRed();
+                            #        float green = (float) color.getGreen();
+                            #        float blue = (float) color.getBlue();
+                            #        float denominator = 255.0;
+                            #        Color.Builder resultBuilder =
+                            #            Color
+                            #                .newBuilder()
+                            #                .setRed(red / denominator)
+                            #                .setGreen(green / denominator)
+                            #                .setBlue(blue / denominator);
+                            #        int alpha = color.getAlpha();
+                            #        if (alpha != 255) {
+                            #          result.setAlpha(
+                            #              FloatValue
+                            #                  .newBuilder()
+                            #                  .setValue(((float) alpha) / denominator)
+                            #                  .build());
+                            #        }
+                            #        return resultBuilder.build();
+                            #      }
+                            #      // ...
+                            #
+                            # Example (iOS / Obj-C):
+                            #
+                            #      // ...
+                            #      static UIColor* fromProto(Color* protocolor) {
+                            #         float red = [protocolor red];
+                            #         float green = [protocolor green];
+                            #         float blue = [protocolor blue];
+                            #         FloatValue* alpha_wrapper = [protocolor alpha];
+                            #         float alpha = 1.0;
+                            #         if (alpha_wrapper != nil) {
+                            #           alpha = [alpha_wrapper value];
+                            #         }
+                            #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                            #      }
+                            #
+                            #      static Color* toProto(UIColor* color) {
+                            #          CGFloat red, green, blue, alpha;
+                            #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                            #            return nil;
+                            #          }
+                            #          Color* result = [Color alloc] init];
+                            #          [result setRed:red];
+                            #          [result setGreen:green];
+                            #          [result setBlue:blue];
+                            #          if (alpha <= 0.9999) {
+                            #            [result setAlpha:floatWrapperWithValue(alpha)];
+                            #          }
+                            #          [result autorelease];
+                            #          return result;
+                            #     }
+                            #     // ...
+                            #
+                            #  Example (JavaScript):
+                            #
+                            #     // ...
+                            #
+                            #     var protoToCssColor = function(rgb_color) {
+                            #        var redFrac = rgb_color.red || 0.0;
+                            #        var greenFrac = rgb_color.green || 0.0;
+                            #        var blueFrac = rgb_color.blue || 0.0;
+                            #        var red = Math.floor(redFrac * 255);
+                            #        var green = Math.floor(greenFrac * 255);
+                            #        var blue = Math.floor(blueFrac * 255);
+                            #
+                            #        if (!('alpha' in rgb_color)) {
+                            #           return rgbToCssColor_(red, green, blue);
+                            #        }
+                            #
+                            #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                            #        var rgbParams = [red, green, blue].join(',');
+                            #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                            #     };
+                            #
+                            #     var rgbToCssColor_ = function(red, green, blue) {
+                            #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                            #       var hexString = rgbNumber.toString(16);
+                            #       var missingZeros = 6 - hexString.length;
+                            #       var resultBuilder = ['#'];
+                            #       for (var i = 0; i < missingZeros; i++) {
+                            #          resultBuilder.push('0');
+                            #       }
+                            #       resultBuilder.push(hexString);
+                            #       return resultBuilder.join('');
+                            #     };
+                            #
+                            #     // ...
+                          "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                          "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                              # the final pixel color is defined by the equation:
+                              #
+                              #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                              #
+                              # This means that a value of 1.0 corresponds to a solid color, whereas
+                              # a value of 0.0 corresponds to a completely transparent color. This
+                              # uses a wrapper message rather than a simple float scalar so that it is
+                              # possible to distinguish between a default value and the value being unset.
+                              # If omitted, this color object is to be rendered as a solid color
+                              # (as if the alpha value had been explicitly given with a value of 1.0).
+                          "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                          "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                        },
+                        "width": 42, # The width of the border, in pixels.
+                            # Border widths must be between 0 and 3 pixels.
+                        "style": "A String", # The style of the border.
+                      },
+                      "bottom": { # A border along a cell. # The bottom border of the cell.
+                        "color": { # Represents a color in the RGBA color space. This representation is designed # The color of the border.
+                            # for simplicity of conversion to/from color representations in various
+                            # languages over compactness; for example, the fields of this representation
+                            # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                            # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                            # method in iOS; and, with just a little work, it can be easily formatted into
+                            # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                            #
+                            # Example (Java):
+                            #
+                            #      import com.google.type.Color;
+                            #
+                            #      // ...
+                            #      public static java.awt.Color fromProto(Color protocolor) {
+                            #        float alpha = protocolor.hasAlpha()
+                            #            ? protocolor.getAlpha().getValue()
+                            #            : 1.0;
+                            #
+                            #        return new java.awt.Color(
+                            #            protocolor.getRed(),
+                            #            protocolor.getGreen(),
+                            #            protocolor.getBlue(),
+                            #            alpha);
+                            #      }
+                            #
+                            #      public static Color toProto(java.awt.Color color) {
+                            #        float red = (float) color.getRed();
+                            #        float green = (float) color.getGreen();
+                            #        float blue = (float) color.getBlue();
+                            #        float denominator = 255.0;
+                            #        Color.Builder resultBuilder =
+                            #            Color
+                            #                .newBuilder()
+                            #                .setRed(red / denominator)
+                            #                .setGreen(green / denominator)
+                            #                .setBlue(blue / denominator);
+                            #        int alpha = color.getAlpha();
+                            #        if (alpha != 255) {
+                            #          result.setAlpha(
+                            #              FloatValue
+                            #                  .newBuilder()
+                            #                  .setValue(((float) alpha) / denominator)
+                            #                  .build());
+                            #        }
+                            #        return resultBuilder.build();
+                            #      }
+                            #      // ...
+                            #
+                            # Example (iOS / Obj-C):
+                            #
+                            #      // ...
+                            #      static UIColor* fromProto(Color* protocolor) {
+                            #         float red = [protocolor red];
+                            #         float green = [protocolor green];
+                            #         float blue = [protocolor blue];
+                            #         FloatValue* alpha_wrapper = [protocolor alpha];
+                            #         float alpha = 1.0;
+                            #         if (alpha_wrapper != nil) {
+                            #           alpha = [alpha_wrapper value];
+                            #         }
+                            #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                            #      }
+                            #
+                            #      static Color* toProto(UIColor* color) {
+                            #          CGFloat red, green, blue, alpha;
+                            #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                            #            return nil;
+                            #          }
+                            #          Color* result = [Color alloc] init];
+                            #          [result setRed:red];
+                            #          [result setGreen:green];
+                            #          [result setBlue:blue];
+                            #          if (alpha <= 0.9999) {
+                            #            [result setAlpha:floatWrapperWithValue(alpha)];
+                            #          }
+                            #          [result autorelease];
+                            #          return result;
+                            #     }
+                            #     // ...
+                            #
+                            #  Example (JavaScript):
+                            #
+                            #     // ...
+                            #
+                            #     var protoToCssColor = function(rgb_color) {
+                            #        var redFrac = rgb_color.red || 0.0;
+                            #        var greenFrac = rgb_color.green || 0.0;
+                            #        var blueFrac = rgb_color.blue || 0.0;
+                            #        var red = Math.floor(redFrac * 255);
+                            #        var green = Math.floor(greenFrac * 255);
+                            #        var blue = Math.floor(blueFrac * 255);
+                            #
+                            #        if (!('alpha' in rgb_color)) {
+                            #           return rgbToCssColor_(red, green, blue);
+                            #        }
+                            #
+                            #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                            #        var rgbParams = [red, green, blue].join(',');
+                            #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                            #     };
+                            #
+                            #     var rgbToCssColor_ = function(red, green, blue) {
+                            #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                            #       var hexString = rgbNumber.toString(16);
+                            #       var missingZeros = 6 - hexString.length;
+                            #       var resultBuilder = ['#'];
+                            #       for (var i = 0; i < missingZeros; i++) {
+                            #          resultBuilder.push('0');
+                            #       }
+                            #       resultBuilder.push(hexString);
+                            #       return resultBuilder.join('');
+                            #     };
+                            #
+                            #     // ...
+                          "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                          "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                              # the final pixel color is defined by the equation:
+                              #
+                              #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                              #
+                              # This means that a value of 1.0 corresponds to a solid color, whereas
+                              # a value of 0.0 corresponds to a completely transparent color. This
+                              # uses a wrapper message rather than a simple float scalar so that it is
+                              # possible to distinguish between a default value and the value being unset.
+                              # If omitted, this color object is to be rendered as a solid color
+                              # (as if the alpha value had been explicitly given with a value of 1.0).
+                          "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                          "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                        },
+                        "width": 42, # The width of the border, in pixels.
+                            # Border widths must be between 0 and 3 pixels.
+                        "style": "A String", # The style of the border.
+                      },
+                      "left": { # A border along a cell. # The left border of the cell.
+                        "color": { # Represents a color in the RGBA color space. This representation is designed # The color of the border.
+                            # for simplicity of conversion to/from color representations in various
+                            # languages over compactness; for example, the fields of this representation
+                            # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                            # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                            # method in iOS; and, with just a little work, it can be easily formatted into
+                            # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                            #
+                            # Example (Java):
+                            #
+                            #      import com.google.type.Color;
+                            #
+                            #      // ...
+                            #      public static java.awt.Color fromProto(Color protocolor) {
+                            #        float alpha = protocolor.hasAlpha()
+                            #            ? protocolor.getAlpha().getValue()
+                            #            : 1.0;
+                            #
+                            #        return new java.awt.Color(
+                            #            protocolor.getRed(),
+                            #            protocolor.getGreen(),
+                            #            protocolor.getBlue(),
+                            #            alpha);
+                            #      }
+                            #
+                            #      public static Color toProto(java.awt.Color color) {
+                            #        float red = (float) color.getRed();
+                            #        float green = (float) color.getGreen();
+                            #        float blue = (float) color.getBlue();
+                            #        float denominator = 255.0;
+                            #        Color.Builder resultBuilder =
+                            #            Color
+                            #                .newBuilder()
+                            #                .setRed(red / denominator)
+                            #                .setGreen(green / denominator)
+                            #                .setBlue(blue / denominator);
+                            #        int alpha = color.getAlpha();
+                            #        if (alpha != 255) {
+                            #          result.setAlpha(
+                            #              FloatValue
+                            #                  .newBuilder()
+                            #                  .setValue(((float) alpha) / denominator)
+                            #                  .build());
+                            #        }
+                            #        return resultBuilder.build();
+                            #      }
+                            #      // ...
+                            #
+                            # Example (iOS / Obj-C):
+                            #
+                            #      // ...
+                            #      static UIColor* fromProto(Color* protocolor) {
+                            #         float red = [protocolor red];
+                            #         float green = [protocolor green];
+                            #         float blue = [protocolor blue];
+                            #         FloatValue* alpha_wrapper = [protocolor alpha];
+                            #         float alpha = 1.0;
+                            #         if (alpha_wrapper != nil) {
+                            #           alpha = [alpha_wrapper value];
+                            #         }
+                            #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                            #      }
+                            #
+                            #      static Color* toProto(UIColor* color) {
+                            #          CGFloat red, green, blue, alpha;
+                            #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                            #            return nil;
+                            #          }
+                            #          Color* result = [Color alloc] init];
+                            #          [result setRed:red];
+                            #          [result setGreen:green];
+                            #          [result setBlue:blue];
+                            #          if (alpha <= 0.9999) {
+                            #            [result setAlpha:floatWrapperWithValue(alpha)];
+                            #          }
+                            #          [result autorelease];
+                            #          return result;
+                            #     }
+                            #     // ...
+                            #
+                            #  Example (JavaScript):
+                            #
+                            #     // ...
+                            #
+                            #     var protoToCssColor = function(rgb_color) {
+                            #        var redFrac = rgb_color.red || 0.0;
+                            #        var greenFrac = rgb_color.green || 0.0;
+                            #        var blueFrac = rgb_color.blue || 0.0;
+                            #        var red = Math.floor(redFrac * 255);
+                            #        var green = Math.floor(greenFrac * 255);
+                            #        var blue = Math.floor(blueFrac * 255);
+                            #
+                            #        if (!('alpha' in rgb_color)) {
+                            #           return rgbToCssColor_(red, green, blue);
+                            #        }
+                            #
+                            #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                            #        var rgbParams = [red, green, blue].join(',');
+                            #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                            #     };
+                            #
+                            #     var rgbToCssColor_ = function(red, green, blue) {
+                            #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                            #       var hexString = rgbNumber.toString(16);
+                            #       var missingZeros = 6 - hexString.length;
+                            #       var resultBuilder = ['#'];
+                            #       for (var i = 0; i < missingZeros; i++) {
+                            #          resultBuilder.push('0');
+                            #       }
+                            #       resultBuilder.push(hexString);
+                            #       return resultBuilder.join('');
+                            #     };
+                            #
+                            #     // ...
+                          "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                          "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                              # the final pixel color is defined by the equation:
+                              #
+                              #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                              #
+                              # This means that a value of 1.0 corresponds to a solid color, whereas
+                              # a value of 0.0 corresponds to a completely transparent color. This
+                              # uses a wrapper message rather than a simple float scalar so that it is
+                              # possible to distinguish between a default value and the value being unset.
+                              # If omitted, this color object is to be rendered as a solid color
+                              # (as if the alpha value had been explicitly given with a value of 1.0).
+                          "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                          "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                        },
+                        "width": 42, # The width of the border, in pixels.
+                            # Border widths must be between 0 and 3 pixels.
+                        "style": "A String", # The style of the border.
+                      },
+                    },
+                    "wrapStrategy": "A String", # The wrap strategy for the value in the cell.
+                  },
+                  "dataValidation": { # A data validation rule. # A data validation rule on the cell, if any.
+                      #
+                      # When writing, the new data validation rule will overwrite any prior rule.
+                    "showCustomUi": True or False, # True if the UI should be customized based on the kind of condition.
+                        # If true, "List" conditions will show a dropdown.
+                    "strict": True or False, # True if invalid data should be rejected.
+                    "inputMessage": "A String", # A message to show the user when adding data to the cell.
+                    "condition": { # A condition that can evaluate to true or false. # The condition that data in the cell must match.
+                        # BooleanConditions are used by conditional formatting,
+                        # data validation, and the criteria in filters.
+                      "type": "A String", # The type of condition.
+                      "values": [ # The values of the condition. The number of supported values depends
+                          # on the condition type.  Some support zero values,
+                          # others one or two values,
+                          # and ConditionType.ONE_OF_LIST supports an arbitrary number of values.
+                        { # The value of the condition.
+                          "relativeDate": "A String", # A relative date (based on the current date).
+                              # Valid only if the type is
+                              # DATE_BEFORE,
+                              # DATE_AFTER,
+                              # DATE_ON_OR_BEFORE or
+                              # DATE_ON_OR_AFTER.
+                              #
+                              # Relative dates are not supported in data validation.
+                              # They are supported only in conditional formatting and
+                              # conditional filters.
+                          "userEnteredValue": "A String", # A value the condition is based on.
+                              # The value will be parsed as if the user typed into a cell.
+                              # Formulas are supported (and must begin with an `=`).
+                        },
+                      ],
+                    },
+                  },
+                  "textFormatRuns": [ # Runs of rich text applied to subsections of the cell.
+                      # Runs start at specific indexes in the text and continue until the next
+                      # run. Properties of a run will continue unless explicitly changed
+                      # in a subsequent run (and properties of the first run will continue
+                      # the properties of the cell unless explicitly changed).
+                      #
+                      # When writing, the new runs will overwrite any prior runs.
+                    { # A run of a text format. The format of this run continues until explicitly
+                        # overridden in the next run.
+                        # When updating, all fields must be set.
+                      "startIndex": 42, # The character index where this run starts.
+                      "format": { # The format of a run of text in a cell. # The format of this run.  Absent values inherit the cell's format.
+                          # Absent values indicate that the field isn't specified.
+                        "foregroundColor": { # Represents a color in the RGBA color space. This representation is designed # The foreground color of the text.
+                            # for simplicity of conversion to/from color representations in various
+                            # languages over compactness; for example, the fields of this representation
+                            # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                            # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                            # method in iOS; and, with just a little work, it can be easily formatted into
+                            # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                            #
+                            # Example (Java):
+                            #
+                            #      import com.google.type.Color;
+                            #
+                            #      // ...
+                            #      public static java.awt.Color fromProto(Color protocolor) {
+                            #        float alpha = protocolor.hasAlpha()
+                            #            ? protocolor.getAlpha().getValue()
+                            #            : 1.0;
+                            #
+                            #        return new java.awt.Color(
+                            #            protocolor.getRed(),
+                            #            protocolor.getGreen(),
+                            #            protocolor.getBlue(),
+                            #            alpha);
+                            #      }
+                            #
+                            #      public static Color toProto(java.awt.Color color) {
+                            #        float red = (float) color.getRed();
+                            #        float green = (float) color.getGreen();
+                            #        float blue = (float) color.getBlue();
+                            #        float denominator = 255.0;
+                            #        Color.Builder resultBuilder =
+                            #            Color
+                            #                .newBuilder()
+                            #                .setRed(red / denominator)
+                            #                .setGreen(green / denominator)
+                            #                .setBlue(blue / denominator);
+                            #        int alpha = color.getAlpha();
+                            #        if (alpha != 255) {
+                            #          result.setAlpha(
+                            #              FloatValue
+                            #                  .newBuilder()
+                            #                  .setValue(((float) alpha) / denominator)
+                            #                  .build());
+                            #        }
+                            #        return resultBuilder.build();
+                            #      }
+                            #      // ...
+                            #
+                            # Example (iOS / Obj-C):
+                            #
+                            #      // ...
+                            #      static UIColor* fromProto(Color* protocolor) {
+                            #         float red = [protocolor red];
+                            #         float green = [protocolor green];
+                            #         float blue = [protocolor blue];
+                            #         FloatValue* alpha_wrapper = [protocolor alpha];
+                            #         float alpha = 1.0;
+                            #         if (alpha_wrapper != nil) {
+                            #           alpha = [alpha_wrapper value];
+                            #         }
+                            #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                            #      }
+                            #
+                            #      static Color* toProto(UIColor* color) {
+                            #          CGFloat red, green, blue, alpha;
+                            #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                            #            return nil;
+                            #          }
+                            #          Color* result = [Color alloc] init];
+                            #          [result setRed:red];
+                            #          [result setGreen:green];
+                            #          [result setBlue:blue];
+                            #          if (alpha <= 0.9999) {
+                            #            [result setAlpha:floatWrapperWithValue(alpha)];
+                            #          }
+                            #          [result autorelease];
+                            #          return result;
+                            #     }
+                            #     // ...
+                            #
+                            #  Example (JavaScript):
+                            #
+                            #     // ...
+                            #
+                            #     var protoToCssColor = function(rgb_color) {
+                            #        var redFrac = rgb_color.red || 0.0;
+                            #        var greenFrac = rgb_color.green || 0.0;
+                            #        var blueFrac = rgb_color.blue || 0.0;
+                            #        var red = Math.floor(redFrac * 255);
+                            #        var green = Math.floor(greenFrac * 255);
+                            #        var blue = Math.floor(blueFrac * 255);
+                            #
+                            #        if (!('alpha' in rgb_color)) {
+                            #           return rgbToCssColor_(red, green, blue);
+                            #        }
+                            #
+                            #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                            #        var rgbParams = [red, green, blue].join(',');
+                            #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                            #     };
+                            #
+                            #     var rgbToCssColor_ = function(red, green, blue) {
+                            #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                            #       var hexString = rgbNumber.toString(16);
+                            #       var missingZeros = 6 - hexString.length;
+                            #       var resultBuilder = ['#'];
+                            #       for (var i = 0; i < missingZeros; i++) {
+                            #          resultBuilder.push('0');
+                            #       }
+                            #       resultBuilder.push(hexString);
+                            #       return resultBuilder.join('');
+                            #     };
+                            #
+                            #     // ...
+                          "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                          "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                              # the final pixel color is defined by the equation:
+                              #
+                              #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                              #
+                              # This means that a value of 1.0 corresponds to a solid color, whereas
+                              # a value of 0.0 corresponds to a completely transparent color. This
+                              # uses a wrapper message rather than a simple float scalar so that it is
+                              # possible to distinguish between a default value and the value being unset.
+                              # If omitted, this color object is to be rendered as a solid color
+                              # (as if the alpha value had been explicitly given with a value of 1.0).
+                          "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                          "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                        },
+                        "bold": True or False, # True if the text is bold.
+                        "strikethrough": True or False, # True if the text has a strikethrough.
+                        "fontFamily": "A String", # The font family.
+                        "fontSize": 42, # The size of the font.
+                        "italic": True or False, # True if the text is italicized.
+                        "underline": True or False, # True if the text is underlined.
+                      },
+                    },
+                  ],
+                },
+              ],
+            },
+          ],
+          "start": { # A coordinate in a sheet. # The coordinate to start writing data at.
+              # Any number of rows and columns (including a different number of
+              # columns per row) may be written.
+              # All indexes are zero-based.
+            "rowIndex": 42, # The row index of the coordinate.
+            "columnIndex": 42, # The column index of the coordinate.
+            "sheetId": 42, # The sheet this coordinate is on.
+          },
+        },
+        "autoFill": { # Fills in more data based on existing data. # Automatically fills in more data based on existing data.
+          "useAlternateSeries": True or False, # True if we should generate data with the "alternate" series.
+              # This differs based on the type and amount of source data.
+          "range": { # A range on a sheet. # The range to autofill. This will examine the range and detect
+              # the location that has data and automatically fill that data
+              # in to the rest of the range.
+              # 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 grid 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.
+            "startRowIndex": 42, # The start row (inclusive) 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.
+            "endColumnIndex": 42, # The end column (exclusive) of the range, or not set if unbounded.
+          },
+          "sourceAndDestination": { # A combination of a source range and how to extend that source. # The source and destination areas to autofill.
+              # This explicitly lists the source of the autofill and where to
+              # extend that data.
+            "source": { # A range on a sheet. # The location of the data to use as the source of the autofill.
+                # 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 grid 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.
+              "startRowIndex": 42, # The start row (inclusive) 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.
+              "endColumnIndex": 42, # The end column (exclusive) of the range, or not set if unbounded.
+            },
+            "dimension": "A String", # The dimension that data should be filled into.
+            "fillLength": 42, # The number of rows or columns that data should be filled into.
+                # Positive numbers expand beyond the last row or last column
+                # of the source.  Negative numbers expand before the first row
+                # or first column of the source.
+          },
+        },
+        "appendDimension": { # Appends rows or columns to the end of a sheet. # Appends dimensions to the end of a sheet.
+          "length": 42, # The number of rows or columns to append.
+          "sheetId": 42, # The sheet to append rows or columns to.
+          "dimension": "A String", # Whether rows or columns should be appended.
+        },
+        "autoResizeDimensions": { # Automatically resizes one or more dimensions based on the contents # Automatically resizes one or more dimensions based on the contents
+            # of the cells in that dimension.
+            # of the cells in that dimension.
+          "dimensions": { # A range along a single dimension on a sheet. # The dimensions to automatically resize.
+              # Only COLUMNS are supported.
+              # 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.
+          },
+        },
+        "updateDimensionProperties": { # Updates properties of dimensions within the specified range. # Updates dimensions' properties.
+            # It is an error to specify read only fields in the field mask.
+          "fields": "A String", # The fields that should be updated.  At least one field must be specified.
+              # The root `properties` is implied and should not be specified.
+              # A single `"*"` can be used as short-hand for listing every field.
+          "range": { # A range along a single dimension on a sheet. # The rows or columns to update.
+              # 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.
+          },
+          "properties": { # Properties about a dimension. # Properties to update.
+            "pixelSize": 42, # The height (if a row) or width (if a column) of the dimension in pixels.
+            "hiddenByUser": True or False, # True if this dimension is explicitly hidden.
+            "hiddenByFilter": True or False, # True if this dimension is being filtered.
+                # This field is read-only.
+          },
+        },
+        "unmergeCells": { # Unmerges cells in the given range. # Unmerges merged cells.
+          "range": { # A range on a sheet. # The range within which all cells should be unmerged.
+              # If the range spans multiple merges, all will be unmerged.
+              # The range must not partially span any merge.
+              # 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 grid 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.
+            "startRowIndex": 42, # The start row (inclusive) 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.
+            "endColumnIndex": 42, # The end column (exclusive) of the range, or not set if unbounded.
+          },
+        },
+        "setDataValidation": { # Sets a data validation rule to every cell in the range. # Sets data validation for one or more cells.
+            # To clear validation in a range, call this with no rule specified.
+          "range": { # A range on a sheet. # The range the data validation rule should apply to.
+              # 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 grid 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.
+            "startRowIndex": 42, # The start row (inclusive) 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.
+            "endColumnIndex": 42, # The end column (exclusive) of the range, or not set if unbounded.
+          },
+          "rule": { # A data validation rule. # The data validation rule to set on each cell in the range,
+              # or empty to clear the data validation in the range.
+            "showCustomUi": True or False, # True if the UI should be customized based on the kind of condition.
+                # If true, "List" conditions will show a dropdown.
+            "strict": True or False, # True if invalid data should be rejected.
+            "inputMessage": "A String", # A message to show the user when adding data to the cell.
+            "condition": { # A condition that can evaluate to true or false. # The condition that data in the cell must match.
+                # BooleanConditions are used by conditional formatting,
+                # data validation, and the criteria in filters.
+              "type": "A String", # The type of condition.
+              "values": [ # The values of the condition. The number of supported values depends
+                  # on the condition type.  Some support zero values,
+                  # others one or two values,
+                  # and ConditionType.ONE_OF_LIST supports an arbitrary number of values.
+                { # The value of the condition.
+                  "relativeDate": "A String", # A relative date (based on the current date).
+                      # Valid only if the type is
+                      # DATE_BEFORE,
+                      # DATE_AFTER,
+                      # DATE_ON_OR_BEFORE or
+                      # DATE_ON_OR_AFTER.
+                      #
+                      # Relative dates are not supported in data validation.
+                      # They are supported only in conditional formatting and
+                      # conditional filters.
+                  "userEnteredValue": "A String", # A value the condition is based on.
+                      # The value will be parsed as if the user typed into a cell.
+                      # Formulas are supported (and must begin with an `=`).
+                },
+              ],
+            },
+          },
+        },
+        "clearBasicFilter": { # Clears the basic filter, if any exists on the sheet. # Clears the basic filter on a sheet.
+          "sheetId": 42, # The sheet ID on which the basic filter should be cleared.
+        },
+        "addNamedRange": { # Adds a named range to the spreadsheet. # Adds a named range.
+          "namedRange": { # A named range. # The named range to add. If a non-empty
+              # namedRangeId is specified, the named range
+              # will use that ID. (It is an error to specify the ID of a named
+              # range that already exists.)
+            "namedRangeId": "A String", # The ID of the named range.
+            "range": { # A range on a sheet. # The range this represents.
+                # 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 grid 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.
+              "startRowIndex": 42, # The start row (inclusive) 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.
+              "endColumnIndex": 42, # The end column (exclusive) of the range, or not set if unbounded.
+            },
+            "name": "A String", # The name of the named range.
+          },
+        },
+        "updateChartSpec": { # Updates a chart's specifications. # Updates a chart's specifications.
+            # (This does not move or resize a chart. To move or resize a chart, use
+            #  UpdateEmbeddedObjectPositionRequest.)
+          "chartId": 42, # The ID of the chart to update.
+          "spec": { # The specifications of a chart. # The specification to apply to the chart.
+            "hiddenDimensionStrategy": "A String", # Determines how the charts will use hidden rows or columns.
+                # This value is only meaningful if the
+                # ChartData.sourceRange
+                # is used for a domain or series.
+            "pieChart": { # A <a href="/chart/interactive/docs/gallery/piechart">pie chart</a>. # A pie chart specification.
+              "series": { # The data included in a domain or series. # The data that covers the one and only series of the pie chart.
+                "sourceRange": { # Source ranges for a chart. # The source ranges of the data.
+                  "sources": [ # The ranges of data for a series or domain.
+                      # Exactly one dimension must have a length of 1,
+                      # and all sources in the list must have the same dimension
+                      # with length 1.
+                      # The domain (if it exists) & all series must have the same number
+                      # of source ranges. If using more than one source range, then the source
+                      # range at a given offset must be contiguous across the domain and series.
+                      #
+                      # For example, these are valid configurations:
+                      #
+                      #     domain sources: A1:A5
+                      #     series1 sources: B1:B5
+                      #     series2 sources: D6:D10
+                      #
+                      #     domain sources: A1:A5, C10:C12
+                      #     series1 sources: B1:B5, D10:D12
+                      #     series2 sources: C1:C5, E10:E12
+                    { # A range on a sheet.
+                        # 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 grid 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.
+                      "startRowIndex": 42, # The start row (inclusive) 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.
+                      "endColumnIndex": 42, # The end column (exclusive) of the range, or not set if unbounded.
+                    },
+                  ],
+                },
+              },
+              "domain": { # The data included in a domain or series. # The data that covers the domain of the pie chart.
+                "sourceRange": { # Source ranges for a chart. # The source ranges of the data.
+                  "sources": [ # The ranges of data for a series or domain.
+                      # Exactly one dimension must have a length of 1,
+                      # and all sources in the list must have the same dimension
+                      # with length 1.
+                      # The domain (if it exists) & all series must have the same number
+                      # of source ranges. If using more than one source range, then the source
+                      # range at a given offset must be contiguous across the domain and series.
+                      #
+                      # For example, these are valid configurations:
+                      #
+                      #     domain sources: A1:A5
+                      #     series1 sources: B1:B5
+                      #     series2 sources: D6:D10
+                      #
+                      #     domain sources: A1:A5, C10:C12
+                      #     series1 sources: B1:B5, D10:D12
+                      #     series2 sources: C1:C5, E10:E12
+                    { # A range on a sheet.
+                        # 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 grid 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.
+                      "startRowIndex": 42, # The start row (inclusive) 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.
+                      "endColumnIndex": 42, # The end column (exclusive) of the range, or not set if unbounded.
+                    },
+                  ],
+                },
+              },
+              "threeDimensional": True or False, # True if the pie is three dimensional.
+              "legendPosition": "A String", # Where the legend of the pie chart should be drawn.
+              "pieHole": 3.14, # The size of the hole in the pie chart.
+            },
+            "basicChart": { # The specification for a basic chart.  See BasicChartType for the list # A basic chart specification, can be one of many kinds of charts.
+                # See BasicChartType for the list of all charts this supports.
+                # of charts this supports.
+              "headerCount": 42, # The number of rows or columns in the data that are "headers".
+                  # If not set, Google Sheets will guess how many rows are headers based
+                  # on the data.
+                  #
+                  # (Note that BasicChartAxis.title may override the axis title
+                  #  inferred from the header values.)
+              "series": [ # The data this chart is visualizing.
+                { # A single series of data in a chart.
+                    # For example, if charting stock prices over time, multiple series may exist,
+                    # one for the "Open Price", "High Price", "Low Price" and "Close Price".
+                  "series": { # The data included in a domain or series. # The data being visualized in this chart series.
+                    "sourceRange": { # Source ranges for a chart. # The source ranges of the data.
+                      "sources": [ # The ranges of data for a series or domain.
+                          # Exactly one dimension must have a length of 1,
+                          # and all sources in the list must have the same dimension
+                          # with length 1.
+                          # The domain (if it exists) & all series must have the same number
+                          # of source ranges. If using more than one source range, then the source
+                          # range at a given offset must be contiguous across the domain and series.
+                          #
+                          # For example, these are valid configurations:
+                          #
+                          #     domain sources: A1:A5
+                          #     series1 sources: B1:B5
+                          #     series2 sources: D6:D10
+                          #
+                          #     domain sources: A1:A5, C10:C12
+                          #     series1 sources: B1:B5, D10:D12
+                          #     series2 sources: C1:C5, E10:E12
+                        { # A range on a sheet.
+                            # 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 grid 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.
+                          "startRowIndex": 42, # The start row (inclusive) 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.
+                          "endColumnIndex": 42, # The end column (exclusive) of the range, or not set if unbounded.
+                        },
+                      ],
+                    },
+                  },
+                  "targetAxis": "A String", # The minor axis that will specify the range of values for this series.
+                      # For example, if charting stocks over time, the "Volume" series
+                      # may want to be pinned to the right with the prices pinned to the left,
+                      # because the scale of trading volume is different than the scale of
+                      # prices.
+                      # It is an error to specify an axis that isn't a valid minor axis
+                      # for the chart's type.
+                  "type": "A String", # The type of this series. Valid only if the
+                      # chartType is
+                      # COMBO.
+                      # Different types will change the way the series is visualized.
+                      # Only LINE, AREA,
+                      # and COLUMN are supported.
+                },
+              ],
+              "legendPosition": "A String", # The position of the chart legend.
+              "domains": [ # The domain of data this is charting.
+                  # Only a single domain is currently supported.
+                { # The domain of a chart.
+                    # For example, if charting stock prices over time, this would be the date.
+                  "domain": { # The data included in a domain or series. # The data of the domain. For example, if charting stock prices over time,
+                      # this be the data representing the dates.
+                    "sourceRange": { # Source ranges for a chart. # The source ranges of the data.
+                      "sources": [ # The ranges of data for a series or domain.
+                          # Exactly one dimension must have a length of 1,
+                          # and all sources in the list must have the same dimension
+                          # with length 1.
+                          # The domain (if it exists) & all series must have the same number
+                          # of source ranges. If using more than one source range, then the source
+                          # range at a given offset must be contiguous across the domain and series.
+                          #
+                          # For example, these are valid configurations:
+                          #
+                          #     domain sources: A1:A5
+                          #     series1 sources: B1:B5
+                          #     series2 sources: D6:D10
+                          #
+                          #     domain sources: A1:A5, C10:C12
+                          #     series1 sources: B1:B5, D10:D12
+                          #     series2 sources: C1:C5, E10:E12
+                        { # A range on a sheet.
+                            # 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 grid 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.
+                          "startRowIndex": 42, # The start row (inclusive) 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.
+                          "endColumnIndex": 42, # The end column (exclusive) of the range, or not set if unbounded.
+                        },
+                      ],
+                    },
+                  },
+                },
+              ],
+              "chartType": "A String", # The type of the chart.
+              "axis": [ # The axis on the chart.
+                { # An axis of the chart.
+                    # A chart may not have more than one axis per
+                    # axis position.
+                  "position": "A String", # The position of this axis.
+                  "format": { # The format of a run of text in a cell. # The format of the title.
+                      # Only valid if the axis is not associated with the domain.
+                      # Absent values indicate that the field isn't specified.
+                    "foregroundColor": { # Represents a color in the RGBA color space. This representation is designed # The foreground color of the text.
+                        # for simplicity of conversion to/from color representations in various
+                        # languages over compactness; for example, the fields of this representation
+                        # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                        # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                        # method in iOS; and, with just a little work, it can be easily formatted into
+                        # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                        #
+                        # Example (Java):
+                        #
+                        #      import com.google.type.Color;
+                        #
+                        #      // ...
+                        #      public static java.awt.Color fromProto(Color protocolor) {
+                        #        float alpha = protocolor.hasAlpha()
+                        #            ? protocolor.getAlpha().getValue()
+                        #            : 1.0;
+                        #
+                        #        return new java.awt.Color(
+                        #            protocolor.getRed(),
+                        #            protocolor.getGreen(),
+                        #            protocolor.getBlue(),
+                        #            alpha);
+                        #      }
+                        #
+                        #      public static Color toProto(java.awt.Color color) {
+                        #        float red = (float) color.getRed();
+                        #        float green = (float) color.getGreen();
+                        #        float blue = (float) color.getBlue();
+                        #        float denominator = 255.0;
+                        #        Color.Builder resultBuilder =
+                        #            Color
+                        #                .newBuilder()
+                        #                .setRed(red / denominator)
+                        #                .setGreen(green / denominator)
+                        #                .setBlue(blue / denominator);
+                        #        int alpha = color.getAlpha();
+                        #        if (alpha != 255) {
+                        #          result.setAlpha(
+                        #              FloatValue
+                        #                  .newBuilder()
+                        #                  .setValue(((float) alpha) / denominator)
+                        #                  .build());
+                        #        }
+                        #        return resultBuilder.build();
+                        #      }
+                        #      // ...
+                        #
+                        # Example (iOS / Obj-C):
+                        #
+                        #      // ...
+                        #      static UIColor* fromProto(Color* protocolor) {
+                        #         float red = [protocolor red];
+                        #         float green = [protocolor green];
+                        #         float blue = [protocolor blue];
+                        #         FloatValue* alpha_wrapper = [protocolor alpha];
+                        #         float alpha = 1.0;
+                        #         if (alpha_wrapper != nil) {
+                        #           alpha = [alpha_wrapper value];
+                        #         }
+                        #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                        #      }
+                        #
+                        #      static Color* toProto(UIColor* color) {
+                        #          CGFloat red, green, blue, alpha;
+                        #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                        #            return nil;
+                        #          }
+                        #          Color* result = [Color alloc] init];
+                        #          [result setRed:red];
+                        #          [result setGreen:green];
+                        #          [result setBlue:blue];
+                        #          if (alpha <= 0.9999) {
+                        #            [result setAlpha:floatWrapperWithValue(alpha)];
+                        #          }
+                        #          [result autorelease];
+                        #          return result;
+                        #     }
+                        #     // ...
+                        #
+                        #  Example (JavaScript):
+                        #
+                        #     // ...
+                        #
+                        #     var protoToCssColor = function(rgb_color) {
+                        #        var redFrac = rgb_color.red || 0.0;
+                        #        var greenFrac = rgb_color.green || 0.0;
+                        #        var blueFrac = rgb_color.blue || 0.0;
+                        #        var red = Math.floor(redFrac * 255);
+                        #        var green = Math.floor(greenFrac * 255);
+                        #        var blue = Math.floor(blueFrac * 255);
+                        #
+                        #        if (!('alpha' in rgb_color)) {
+                        #           return rgbToCssColor_(red, green, blue);
+                        #        }
+                        #
+                        #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                        #        var rgbParams = [red, green, blue].join(',');
+                        #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                        #     };
+                        #
+                        #     var rgbToCssColor_ = function(red, green, blue) {
+                        #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                        #       var hexString = rgbNumber.toString(16);
+                        #       var missingZeros = 6 - hexString.length;
+                        #       var resultBuilder = ['#'];
+                        #       for (var i = 0; i < missingZeros; i++) {
+                        #          resultBuilder.push('0');
+                        #       }
+                        #       resultBuilder.push(hexString);
+                        #       return resultBuilder.join('');
+                        #     };
+                        #
+                        #     // ...
+                      "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                      "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                          # the final pixel color is defined by the equation:
+                          #
+                          #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                          #
+                          # This means that a value of 1.0 corresponds to a solid color, whereas
+                          # a value of 0.0 corresponds to a completely transparent color. This
+                          # uses a wrapper message rather than a simple float scalar so that it is
+                          # possible to distinguish between a default value and the value being unset.
+                          # If omitted, this color object is to be rendered as a solid color
+                          # (as if the alpha value had been explicitly given with a value of 1.0).
+                      "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                      "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                    },
+                    "bold": True or False, # True if the text is bold.
+                    "strikethrough": True or False, # True if the text has a strikethrough.
+                    "fontFamily": "A String", # The font family.
+                    "fontSize": 42, # The size of the font.
+                    "italic": True or False, # True if the text is italicized.
+                    "underline": True or False, # True if the text is underlined.
+                  },
+                  "title": "A String", # The title of this axis. If set, this overrides any title inferred
+                      # from headers of the data.
+                },
+              ],
+            },
+            "title": "A String", # The title of the chart.
+          },
+        },
+        "moveDimension": { # Moves one or more rows or columns. # Moves rows or columns to another location in a sheet.
+          "source": { # A range along a single dimension on a sheet. # The source dimensions to move.
+              # 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.
+          },
+          "destinationIndex": 42, # The zero-based start index of where to move the source data to,
+              # based on the coordinates *before* the source data is removed
+              # from the grid.  Existing data will be shifted down or right
+              # (depending on the dimension) to make room for the moved dimensions.
+              # The source dimensions are removed from the grid, so the
+              # the data may end up in a different index than specified.
+              #
+              # For example, given `A1..A5` of `0, 1, 2, 3, 4` and wanting to move
+              # "`1`" and "`2`" to between "`3`" and "`4`", the source would be
+              # `ROWS [1..3)`,and the destination index would be "`4`"
+              # (the zero-based index of row 5).
+              # The end result would be `A1..A5` of `0, 3, 1, 2, 4`.
+        },
+        "textToColumns": { # Splits a column of text into multiple columns, # Converts a column of text into many columns of text.
+            # based on a delimiter in each cell.
+          "source": { # A range on a sheet. # The source data range.  This must span exactly one column.
+              # 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 grid 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.
+            "startRowIndex": 42, # The start row (inclusive) 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.
+            "endColumnIndex": 42, # The end column (exclusive) of the range, or not set if unbounded.
+          },
+          "delimiter": "A String", # The delimiter to use. Used only if delimiterType is
+              # CUSTOM.
+          "delimiterType": "A String", # The delimiter type to use.
+        },
+        "deleteFilterView": { # Deletes a particular filter view. # Deletes a filter view from a sheet.
+          "filterId": 42, # The ID of the filter to delete.
+        },
+        "mergeCells": { # Merges all cells in the range. # Merges cells together.
+          "range": { # A range on a sheet. # The range of cells to merge.
+              # 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 grid 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.
+            "startRowIndex": 42, # The start row (inclusive) 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.
+            "endColumnIndex": 42, # The end column (exclusive) of the range, or not set if unbounded.
+          },
+          "mergeType": "A String", # How the cells should be merged.
+        },
+        "deleteProtectedRange": { # Deletes the protected range with the given id. # Deletes a protected range.
+          "protectedRangeId": 42, # The ID of the protected range to delete.
+        },
+        "addFilterView": { # Adds a filter view. # Adds a filter view.
+          "filter": { # A filter view. # The filter to add.
+            "title": "A String", # The name of the filter view.
+            "namedRangeId": "A String", # The named range this filter view is backed by, if any.
+                #
+                # When writing, only one of range or namedRangeId
+                # may be set.
+            "filterViewId": 42, # The ID of the filter view.
+            "range": { # A range on a sheet. # The range this filter view covers.
+                #
+                # When writing, only one of range or namedRangeId
+                # may be set.
+                # 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 grid 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.
+              "startRowIndex": 42, # The start row (inclusive) 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.
+              "endColumnIndex": 42, # The end column (exclusive) of the range, or not set if unbounded.
+            },
+            "sortSpecs": [ # The sort order per column. Later specifications are used when values
+                # are equal in the earlier specifications.
+              { # A sort order associated with a specific column or row.
+                "sortOrder": "A String", # The order data should be sorted.
+                "dimensionIndex": 42, # The dimension the sort should be applied to.
+              },
+            ],
+            "criteria": { # The criteria for showing/hiding values per column.
+                # The map's key is the column index, and the value is the criteria for
+                # that column.
+              "a_key": { # Criteria for showing/hiding rows in a filter, filter view.
+                "hiddenValues": [ # Values that should be hidden.
+                  "A String",
+                ],
+                "condition": { # A condition that can evaluate to true or false. # A condition that must be true for values to be shown.
+                    # (This does not override hiddenValues -- if a value is listed there,
+                    #  it will still be hidden.)
+                    # BooleanConditions are used by conditional formatting,
+                    # data validation, and the criteria in filters.
+                  "type": "A String", # The type of condition.
+                  "values": [ # The values of the condition. The number of supported values depends
+                      # on the condition type.  Some support zero values,
+                      # others one or two values,
+                      # and ConditionType.ONE_OF_LIST supports an arbitrary number of values.
+                    { # The value of the condition.
+                      "relativeDate": "A String", # A relative date (based on the current date).
+                          # Valid only if the type is
+                          # DATE_BEFORE,
+                          # DATE_AFTER,
+                          # DATE_ON_OR_BEFORE or
+                          # DATE_ON_OR_AFTER.
+                          #
+                          # Relative dates are not supported in data validation.
+                          # They are supported only in conditional formatting and
+                          # conditional filters.
+                      "userEnteredValue": "A String", # A value the condition is based on.
+                          # The value will be parsed as if the user typed into a cell.
+                          # Formulas are supported (and must begin with an `=`).
+                    },
+                  ],
+                },
+              },
+            },
+          },
+        },
+        "deleteSheet": { # Deletes the requested sheet. # Deletes a sheet.
+          "sheetId": 42, # The ID of the sheet to delete.
+        },
+        "updateBorders": { # Updates the borders of a range. # Updates the borders in a range of cells.
+            # If a field is not set in the request, that means the border remains as-is.
+            # For example, with two subsequent UpdateBordersRequest:
+            #
+            #  1. range: A1:A5 `{ top: RED, bottom: WHITE }`
+            #  2. range: A1:A5 `{ left: BLUE }`
+            #
+            # That would result in A1:A5 having a borders of
+            # `{ top: RED, bottom: WHITE, left: BLUE }`.
+            # If you want to clear a border, explicitly set the style to
+            # NONE.
+          "right": { # A border along a cell. # The border to put at the right of the range.
+            "color": { # Represents a color in the RGBA color space. This representation is designed # The color of the border.
+                # for simplicity of conversion to/from color representations in various
+                # languages over compactness; for example, the fields of this representation
+                # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                # method in iOS; and, with just a little work, it can be easily formatted into
+                # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                #
+                # Example (Java):
+                #
+                #      import com.google.type.Color;
+                #
+                #      // ...
+                #      public static java.awt.Color fromProto(Color protocolor) {
+                #        float alpha = protocolor.hasAlpha()
+                #            ? protocolor.getAlpha().getValue()
+                #            : 1.0;
+                #
+                #        return new java.awt.Color(
+                #            protocolor.getRed(),
+                #            protocolor.getGreen(),
+                #            protocolor.getBlue(),
+                #            alpha);
+                #      }
+                #
+                #      public static Color toProto(java.awt.Color color) {
+                #        float red = (float) color.getRed();
+                #        float green = (float) color.getGreen();
+                #        float blue = (float) color.getBlue();
+                #        float denominator = 255.0;
+                #        Color.Builder resultBuilder =
+                #            Color
+                #                .newBuilder()
+                #                .setRed(red / denominator)
+                #                .setGreen(green / denominator)
+                #                .setBlue(blue / denominator);
+                #        int alpha = color.getAlpha();
+                #        if (alpha != 255) {
+                #          result.setAlpha(
+                #              FloatValue
+                #                  .newBuilder()
+                #                  .setValue(((float) alpha) / denominator)
+                #                  .build());
+                #        }
+                #        return resultBuilder.build();
+                #      }
+                #      // ...
+                #
+                # Example (iOS / Obj-C):
+                #
+                #      // ...
+                #      static UIColor* fromProto(Color* protocolor) {
+                #         float red = [protocolor red];
+                #         float green = [protocolor green];
+                #         float blue = [protocolor blue];
+                #         FloatValue* alpha_wrapper = [protocolor alpha];
+                #         float alpha = 1.0;
+                #         if (alpha_wrapper != nil) {
+                #           alpha = [alpha_wrapper value];
+                #         }
+                #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                #      }
+                #
+                #      static Color* toProto(UIColor* color) {
+                #          CGFloat red, green, blue, alpha;
+                #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                #            return nil;
+                #          }
+                #          Color* result = [Color alloc] init];
+                #          [result setRed:red];
+                #          [result setGreen:green];
+                #          [result setBlue:blue];
+                #          if (alpha <= 0.9999) {
+                #            [result setAlpha:floatWrapperWithValue(alpha)];
+                #          }
+                #          [result autorelease];
+                #          return result;
+                #     }
+                #     // ...
+                #
+                #  Example (JavaScript):
+                #
+                #     // ...
+                #
+                #     var protoToCssColor = function(rgb_color) {
+                #        var redFrac = rgb_color.red || 0.0;
+                #        var greenFrac = rgb_color.green || 0.0;
+                #        var blueFrac = rgb_color.blue || 0.0;
+                #        var red = Math.floor(redFrac * 255);
+                #        var green = Math.floor(greenFrac * 255);
+                #        var blue = Math.floor(blueFrac * 255);
+                #
+                #        if (!('alpha' in rgb_color)) {
+                #           return rgbToCssColor_(red, green, blue);
+                #        }
+                #
+                #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                #        var rgbParams = [red, green, blue].join(',');
+                #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                #     };
+                #
+                #     var rgbToCssColor_ = function(red, green, blue) {
+                #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                #       var hexString = rgbNumber.toString(16);
+                #       var missingZeros = 6 - hexString.length;
+                #       var resultBuilder = ['#'];
+                #       for (var i = 0; i < missingZeros; i++) {
+                #          resultBuilder.push('0');
+                #       }
+                #       resultBuilder.push(hexString);
+                #       return resultBuilder.join('');
+                #     };
+                #
+                #     // ...
+              "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+              "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                  # the final pixel color is defined by the equation:
+                  #
+                  #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                  #
+                  # This means that a value of 1.0 corresponds to a solid color, whereas
+                  # a value of 0.0 corresponds to a completely transparent color. This
+                  # uses a wrapper message rather than a simple float scalar so that it is
+                  # possible to distinguish between a default value and the value being unset.
+                  # If omitted, this color object is to be rendered as a solid color
+                  # (as if the alpha value had been explicitly given with a value of 1.0).
+              "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+              "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+            },
+            "width": 42, # The width of the border, in pixels.
+                # Border widths must be between 0 and 3 pixels.
+            "style": "A String", # The style of the border.
+          },
+          "bottom": { # A border along a cell. # The border to put at the bottom of the range.
+            "color": { # Represents a color in the RGBA color space. This representation is designed # The color of the border.
+                # for simplicity of conversion to/from color representations in various
+                # languages over compactness; for example, the fields of this representation
+                # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                # method in iOS; and, with just a little work, it can be easily formatted into
+                # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                #
+                # Example (Java):
+                #
+                #      import com.google.type.Color;
+                #
+                #      // ...
+                #      public static java.awt.Color fromProto(Color protocolor) {
+                #        float alpha = protocolor.hasAlpha()
+                #            ? protocolor.getAlpha().getValue()
+                #            : 1.0;
+                #
+                #        return new java.awt.Color(
+                #            protocolor.getRed(),
+                #            protocolor.getGreen(),
+                #            protocolor.getBlue(),
+                #            alpha);
+                #      }
+                #
+                #      public static Color toProto(java.awt.Color color) {
+                #        float red = (float) color.getRed();
+                #        float green = (float) color.getGreen();
+                #        float blue = (float) color.getBlue();
+                #        float denominator = 255.0;
+                #        Color.Builder resultBuilder =
+                #            Color
+                #                .newBuilder()
+                #                .setRed(red / denominator)
+                #                .setGreen(green / denominator)
+                #                .setBlue(blue / denominator);
+                #        int alpha = color.getAlpha();
+                #        if (alpha != 255) {
+                #          result.setAlpha(
+                #              FloatValue
+                #                  .newBuilder()
+                #                  .setValue(((float) alpha) / denominator)
+                #                  .build());
+                #        }
+                #        return resultBuilder.build();
+                #      }
+                #      // ...
+                #
+                # Example (iOS / Obj-C):
+                #
+                #      // ...
+                #      static UIColor* fromProto(Color* protocolor) {
+                #         float red = [protocolor red];
+                #         float green = [protocolor green];
+                #         float blue = [protocolor blue];
+                #         FloatValue* alpha_wrapper = [protocolor alpha];
+                #         float alpha = 1.0;
+                #         if (alpha_wrapper != nil) {
+                #           alpha = [alpha_wrapper value];
+                #         }
+                #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                #      }
+                #
+                #      static Color* toProto(UIColor* color) {
+                #          CGFloat red, green, blue, alpha;
+                #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                #            return nil;
+                #          }
+                #          Color* result = [Color alloc] init];
+                #          [result setRed:red];
+                #          [result setGreen:green];
+                #          [result setBlue:blue];
+                #          if (alpha <= 0.9999) {
+                #            [result setAlpha:floatWrapperWithValue(alpha)];
+                #          }
+                #          [result autorelease];
+                #          return result;
+                #     }
+                #     // ...
+                #
+                #  Example (JavaScript):
+                #
+                #     // ...
+                #
+                #     var protoToCssColor = function(rgb_color) {
+                #        var redFrac = rgb_color.red || 0.0;
+                #        var greenFrac = rgb_color.green || 0.0;
+                #        var blueFrac = rgb_color.blue || 0.0;
+                #        var red = Math.floor(redFrac * 255);
+                #        var green = Math.floor(greenFrac * 255);
+                #        var blue = Math.floor(blueFrac * 255);
+                #
+                #        if (!('alpha' in rgb_color)) {
+                #           return rgbToCssColor_(red, green, blue);
+                #        }
+                #
+                #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                #        var rgbParams = [red, green, blue].join(',');
+                #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                #     };
+                #
+                #     var rgbToCssColor_ = function(red, green, blue) {
+                #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                #       var hexString = rgbNumber.toString(16);
+                #       var missingZeros = 6 - hexString.length;
+                #       var resultBuilder = ['#'];
+                #       for (var i = 0; i < missingZeros; i++) {
+                #          resultBuilder.push('0');
+                #       }
+                #       resultBuilder.push(hexString);
+                #       return resultBuilder.join('');
+                #     };
+                #
+                #     // ...
+              "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+              "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                  # the final pixel color is defined by the equation:
+                  #
+                  #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                  #
+                  # This means that a value of 1.0 corresponds to a solid color, whereas
+                  # a value of 0.0 corresponds to a completely transparent color. This
+                  # uses a wrapper message rather than a simple float scalar so that it is
+                  # possible to distinguish between a default value and the value being unset.
+                  # If omitted, this color object is to be rendered as a solid color
+                  # (as if the alpha value had been explicitly given with a value of 1.0).
+              "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+              "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+            },
+            "width": 42, # The width of the border, in pixels.
+                # Border widths must be between 0 and 3 pixels.
+            "style": "A String", # The style of the border.
+          },
+          "top": { # A border along a cell. # The border to put at the top of the range.
+            "color": { # Represents a color in the RGBA color space. This representation is designed # The color of the border.
+                # for simplicity of conversion to/from color representations in various
+                # languages over compactness; for example, the fields of this representation
+                # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                # method in iOS; and, with just a little work, it can be easily formatted into
+                # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                #
+                # Example (Java):
+                #
+                #      import com.google.type.Color;
+                #
+                #      // ...
+                #      public static java.awt.Color fromProto(Color protocolor) {
+                #        float alpha = protocolor.hasAlpha()
+                #            ? protocolor.getAlpha().getValue()
+                #            : 1.0;
+                #
+                #        return new java.awt.Color(
+                #            protocolor.getRed(),
+                #            protocolor.getGreen(),
+                #            protocolor.getBlue(),
+                #            alpha);
+                #      }
+                #
+                #      public static Color toProto(java.awt.Color color) {
+                #        float red = (float) color.getRed();
+                #        float green = (float) color.getGreen();
+                #        float blue = (float) color.getBlue();
+                #        float denominator = 255.0;
+                #        Color.Builder resultBuilder =
+                #            Color
+                #                .newBuilder()
+                #                .setRed(red / denominator)
+                #                .setGreen(green / denominator)
+                #                .setBlue(blue / denominator);
+                #        int alpha = color.getAlpha();
+                #        if (alpha != 255) {
+                #          result.setAlpha(
+                #              FloatValue
+                #                  .newBuilder()
+                #                  .setValue(((float) alpha) / denominator)
+                #                  .build());
+                #        }
+                #        return resultBuilder.build();
+                #      }
+                #      // ...
+                #
+                # Example (iOS / Obj-C):
+                #
+                #      // ...
+                #      static UIColor* fromProto(Color* protocolor) {
+                #         float red = [protocolor red];
+                #         float green = [protocolor green];
+                #         float blue = [protocolor blue];
+                #         FloatValue* alpha_wrapper = [protocolor alpha];
+                #         float alpha = 1.0;
+                #         if (alpha_wrapper != nil) {
+                #           alpha = [alpha_wrapper value];
+                #         }
+                #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                #      }
+                #
+                #      static Color* toProto(UIColor* color) {
+                #          CGFloat red, green, blue, alpha;
+                #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                #            return nil;
+                #          }
+                #          Color* result = [Color alloc] init];
+                #          [result setRed:red];
+                #          [result setGreen:green];
+                #          [result setBlue:blue];
+                #          if (alpha <= 0.9999) {
+                #            [result setAlpha:floatWrapperWithValue(alpha)];
+                #          }
+                #          [result autorelease];
+                #          return result;
+                #     }
+                #     // ...
+                #
+                #  Example (JavaScript):
+                #
+                #     // ...
+                #
+                #     var protoToCssColor = function(rgb_color) {
+                #        var redFrac = rgb_color.red || 0.0;
+                #        var greenFrac = rgb_color.green || 0.0;
+                #        var blueFrac = rgb_color.blue || 0.0;
+                #        var red = Math.floor(redFrac * 255);
+                #        var green = Math.floor(greenFrac * 255);
+                #        var blue = Math.floor(blueFrac * 255);
+                #
+                #        if (!('alpha' in rgb_color)) {
+                #           return rgbToCssColor_(red, green, blue);
+                #        }
+                #
+                #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                #        var rgbParams = [red, green, blue].join(',');
+                #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                #     };
+                #
+                #     var rgbToCssColor_ = function(red, green, blue) {
+                #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                #       var hexString = rgbNumber.toString(16);
+                #       var missingZeros = 6 - hexString.length;
+                #       var resultBuilder = ['#'];
+                #       for (var i = 0; i < missingZeros; i++) {
+                #          resultBuilder.push('0');
+                #       }
+                #       resultBuilder.push(hexString);
+                #       return resultBuilder.join('');
+                #     };
+                #
+                #     // ...
+              "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+              "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                  # the final pixel color is defined by the equation:
+                  #
+                  #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                  #
+                  # This means that a value of 1.0 corresponds to a solid color, whereas
+                  # a value of 0.0 corresponds to a completely transparent color. This
+                  # uses a wrapper message rather than a simple float scalar so that it is
+                  # possible to distinguish between a default value and the value being unset.
+                  # If omitted, this color object is to be rendered as a solid color
+                  # (as if the alpha value had been explicitly given with a value of 1.0).
+              "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+              "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+            },
+            "width": 42, # The width of the border, in pixels.
+                # Border widths must be between 0 and 3 pixels.
+            "style": "A String", # The style of the border.
+          },
+          "innerHorizontal": { # A border along a cell. # The horizontal border to put within the range.
+            "color": { # Represents a color in the RGBA color space. This representation is designed # The color of the border.
+                # for simplicity of conversion to/from color representations in various
+                # languages over compactness; for example, the fields of this representation
+                # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                # method in iOS; and, with just a little work, it can be easily formatted into
+                # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                #
+                # Example (Java):
+                #
+                #      import com.google.type.Color;
+                #
+                #      // ...
+                #      public static java.awt.Color fromProto(Color protocolor) {
+                #        float alpha = protocolor.hasAlpha()
+                #            ? protocolor.getAlpha().getValue()
+                #            : 1.0;
+                #
+                #        return new java.awt.Color(
+                #            protocolor.getRed(),
+                #            protocolor.getGreen(),
+                #            protocolor.getBlue(),
+                #            alpha);
+                #      }
+                #
+                #      public static Color toProto(java.awt.Color color) {
+                #        float red = (float) color.getRed();
+                #        float green = (float) color.getGreen();
+                #        float blue = (float) color.getBlue();
+                #        float denominator = 255.0;
+                #        Color.Builder resultBuilder =
+                #            Color
+                #                .newBuilder()
+                #                .setRed(red / denominator)
+                #                .setGreen(green / denominator)
+                #                .setBlue(blue / denominator);
+                #        int alpha = color.getAlpha();
+                #        if (alpha != 255) {
+                #          result.setAlpha(
+                #              FloatValue
+                #                  .newBuilder()
+                #                  .setValue(((float) alpha) / denominator)
+                #                  .build());
+                #        }
+                #        return resultBuilder.build();
+                #      }
+                #      // ...
+                #
+                # Example (iOS / Obj-C):
+                #
+                #      // ...
+                #      static UIColor* fromProto(Color* protocolor) {
+                #         float red = [protocolor red];
+                #         float green = [protocolor green];
+                #         float blue = [protocolor blue];
+                #         FloatValue* alpha_wrapper = [protocolor alpha];
+                #         float alpha = 1.0;
+                #         if (alpha_wrapper != nil) {
+                #           alpha = [alpha_wrapper value];
+                #         }
+                #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                #      }
+                #
+                #      static Color* toProto(UIColor* color) {
+                #          CGFloat red, green, blue, alpha;
+                #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                #            return nil;
+                #          }
+                #          Color* result = [Color alloc] init];
+                #          [result setRed:red];
+                #          [result setGreen:green];
+                #          [result setBlue:blue];
+                #          if (alpha <= 0.9999) {
+                #            [result setAlpha:floatWrapperWithValue(alpha)];
+                #          }
+                #          [result autorelease];
+                #          return result;
+                #     }
+                #     // ...
+                #
+                #  Example (JavaScript):
+                #
+                #     // ...
+                #
+                #     var protoToCssColor = function(rgb_color) {
+                #        var redFrac = rgb_color.red || 0.0;
+                #        var greenFrac = rgb_color.green || 0.0;
+                #        var blueFrac = rgb_color.blue || 0.0;
+                #        var red = Math.floor(redFrac * 255);
+                #        var green = Math.floor(greenFrac * 255);
+                #        var blue = Math.floor(blueFrac * 255);
+                #
+                #        if (!('alpha' in rgb_color)) {
+                #           return rgbToCssColor_(red, green, blue);
+                #        }
+                #
+                #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                #        var rgbParams = [red, green, blue].join(',');
+                #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                #     };
+                #
+                #     var rgbToCssColor_ = function(red, green, blue) {
+                #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                #       var hexString = rgbNumber.toString(16);
+                #       var missingZeros = 6 - hexString.length;
+                #       var resultBuilder = ['#'];
+                #       for (var i = 0; i < missingZeros; i++) {
+                #          resultBuilder.push('0');
+                #       }
+                #       resultBuilder.push(hexString);
+                #       return resultBuilder.join('');
+                #     };
+                #
+                #     // ...
+              "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+              "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                  # the final pixel color is defined by the equation:
+                  #
+                  #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                  #
+                  # This means that a value of 1.0 corresponds to a solid color, whereas
+                  # a value of 0.0 corresponds to a completely transparent color. This
+                  # uses a wrapper message rather than a simple float scalar so that it is
+                  # possible to distinguish between a default value and the value being unset.
+                  # If omitted, this color object is to be rendered as a solid color
+                  # (as if the alpha value had been explicitly given with a value of 1.0).
+              "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+              "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+            },
+            "width": 42, # The width of the border, in pixels.
+                # Border widths must be between 0 and 3 pixels.
+            "style": "A String", # The style of the border.
+          },
+          "range": { # A range on a sheet. # The range whose borders should be updated.
+              # 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 grid 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.
+            "startRowIndex": 42, # The start row (inclusive) 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.
+            "endColumnIndex": 42, # The end column (exclusive) of the range, or not set if unbounded.
+          },
+          "innerVertical": { # A border along a cell. # The vertical border to put within the range.
+            "color": { # Represents a color in the RGBA color space. This representation is designed # The color of the border.
+                # for simplicity of conversion to/from color representations in various
+                # languages over compactness; for example, the fields of this representation
+                # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                # method in iOS; and, with just a little work, it can be easily formatted into
+                # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                #
+                # Example (Java):
+                #
+                #      import com.google.type.Color;
+                #
+                #      // ...
+                #      public static java.awt.Color fromProto(Color protocolor) {
+                #        float alpha = protocolor.hasAlpha()
+                #            ? protocolor.getAlpha().getValue()
+                #            : 1.0;
+                #
+                #        return new java.awt.Color(
+                #            protocolor.getRed(),
+                #            protocolor.getGreen(),
+                #            protocolor.getBlue(),
+                #            alpha);
+                #      }
+                #
+                #      public static Color toProto(java.awt.Color color) {
+                #        float red = (float) color.getRed();
+                #        float green = (float) color.getGreen();
+                #        float blue = (float) color.getBlue();
+                #        float denominator = 255.0;
+                #        Color.Builder resultBuilder =
+                #            Color
+                #                .newBuilder()
+                #                .setRed(red / denominator)
+                #                .setGreen(green / denominator)
+                #                .setBlue(blue / denominator);
+                #        int alpha = color.getAlpha();
+                #        if (alpha != 255) {
+                #          result.setAlpha(
+                #              FloatValue
+                #                  .newBuilder()
+                #                  .setValue(((float) alpha) / denominator)
+                #                  .build());
+                #        }
+                #        return resultBuilder.build();
+                #      }
+                #      // ...
+                #
+                # Example (iOS / Obj-C):
+                #
+                #      // ...
+                #      static UIColor* fromProto(Color* protocolor) {
+                #         float red = [protocolor red];
+                #         float green = [protocolor green];
+                #         float blue = [protocolor blue];
+                #         FloatValue* alpha_wrapper = [protocolor alpha];
+                #         float alpha = 1.0;
+                #         if (alpha_wrapper != nil) {
+                #           alpha = [alpha_wrapper value];
+                #         }
+                #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                #      }
+                #
+                #      static Color* toProto(UIColor* color) {
+                #          CGFloat red, green, blue, alpha;
+                #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                #            return nil;
+                #          }
+                #          Color* result = [Color alloc] init];
+                #          [result setRed:red];
+                #          [result setGreen:green];
+                #          [result setBlue:blue];
+                #          if (alpha <= 0.9999) {
+                #            [result setAlpha:floatWrapperWithValue(alpha)];
+                #          }
+                #          [result autorelease];
+                #          return result;
+                #     }
+                #     // ...
+                #
+                #  Example (JavaScript):
+                #
+                #     // ...
+                #
+                #     var protoToCssColor = function(rgb_color) {
+                #        var redFrac = rgb_color.red || 0.0;
+                #        var greenFrac = rgb_color.green || 0.0;
+                #        var blueFrac = rgb_color.blue || 0.0;
+                #        var red = Math.floor(redFrac * 255);
+                #        var green = Math.floor(greenFrac * 255);
+                #        var blue = Math.floor(blueFrac * 255);
+                #
+                #        if (!('alpha' in rgb_color)) {
+                #           return rgbToCssColor_(red, green, blue);
+                #        }
+                #
+                #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                #        var rgbParams = [red, green, blue].join(',');
+                #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                #     };
+                #
+                #     var rgbToCssColor_ = function(red, green, blue) {
+                #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                #       var hexString = rgbNumber.toString(16);
+                #       var missingZeros = 6 - hexString.length;
+                #       var resultBuilder = ['#'];
+                #       for (var i = 0; i < missingZeros; i++) {
+                #          resultBuilder.push('0');
+                #       }
+                #       resultBuilder.push(hexString);
+                #       return resultBuilder.join('');
+                #     };
+                #
+                #     // ...
+              "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+              "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                  # the final pixel color is defined by the equation:
+                  #
+                  #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                  #
+                  # This means that a value of 1.0 corresponds to a solid color, whereas
+                  # a value of 0.0 corresponds to a completely transparent color. This
+                  # uses a wrapper message rather than a simple float scalar so that it is
+                  # possible to distinguish between a default value and the value being unset.
+                  # If omitted, this color object is to be rendered as a solid color
+                  # (as if the alpha value had been explicitly given with a value of 1.0).
+              "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+              "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+            },
+            "width": 42, # The width of the border, in pixels.
+                # Border widths must be between 0 and 3 pixels.
+            "style": "A String", # The style of the border.
+          },
+          "left": { # A border along a cell. # The border to put at the left of the range.
+            "color": { # Represents a color in the RGBA color space. This representation is designed # The color of the border.
+                # for simplicity of conversion to/from color representations in various
+                # languages over compactness; for example, the fields of this representation
+                # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                # method in iOS; and, with just a little work, it can be easily formatted into
+                # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                #
+                # Example (Java):
+                #
+                #      import com.google.type.Color;
+                #
+                #      // ...
+                #      public static java.awt.Color fromProto(Color protocolor) {
+                #        float alpha = protocolor.hasAlpha()
+                #            ? protocolor.getAlpha().getValue()
+                #            : 1.0;
+                #
+                #        return new java.awt.Color(
+                #            protocolor.getRed(),
+                #            protocolor.getGreen(),
+                #            protocolor.getBlue(),
+                #            alpha);
+                #      }
+                #
+                #      public static Color toProto(java.awt.Color color) {
+                #        float red = (float) color.getRed();
+                #        float green = (float) color.getGreen();
+                #        float blue = (float) color.getBlue();
+                #        float denominator = 255.0;
+                #        Color.Builder resultBuilder =
+                #            Color
+                #                .newBuilder()
+                #                .setRed(red / denominator)
+                #                .setGreen(green / denominator)
+                #                .setBlue(blue / denominator);
+                #        int alpha = color.getAlpha();
+                #        if (alpha != 255) {
+                #          result.setAlpha(
+                #              FloatValue
+                #                  .newBuilder()
+                #                  .setValue(((float) alpha) / denominator)
+                #                  .build());
+                #        }
+                #        return resultBuilder.build();
+                #      }
+                #      // ...
+                #
+                # Example (iOS / Obj-C):
+                #
+                #      // ...
+                #      static UIColor* fromProto(Color* protocolor) {
+                #         float red = [protocolor red];
+                #         float green = [protocolor green];
+                #         float blue = [protocolor blue];
+                #         FloatValue* alpha_wrapper = [protocolor alpha];
+                #         float alpha = 1.0;
+                #         if (alpha_wrapper != nil) {
+                #           alpha = [alpha_wrapper value];
+                #         }
+                #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                #      }
+                #
+                #      static Color* toProto(UIColor* color) {
+                #          CGFloat red, green, blue, alpha;
+                #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                #            return nil;
+                #          }
+                #          Color* result = [Color alloc] init];
+                #          [result setRed:red];
+                #          [result setGreen:green];
+                #          [result setBlue:blue];
+                #          if (alpha <= 0.9999) {
+                #            [result setAlpha:floatWrapperWithValue(alpha)];
+                #          }
+                #          [result autorelease];
+                #          return result;
+                #     }
+                #     // ...
+                #
+                #  Example (JavaScript):
+                #
+                #     // ...
+                #
+                #     var protoToCssColor = function(rgb_color) {
+                #        var redFrac = rgb_color.red || 0.0;
+                #        var greenFrac = rgb_color.green || 0.0;
+                #        var blueFrac = rgb_color.blue || 0.0;
+                #        var red = Math.floor(redFrac * 255);
+                #        var green = Math.floor(greenFrac * 255);
+                #        var blue = Math.floor(blueFrac * 255);
+                #
+                #        if (!('alpha' in rgb_color)) {
+                #           return rgbToCssColor_(red, green, blue);
+                #        }
+                #
+                #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                #        var rgbParams = [red, green, blue].join(',');
+                #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                #     };
+                #
+                #     var rgbToCssColor_ = function(red, green, blue) {
+                #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                #       var hexString = rgbNumber.toString(16);
+                #       var missingZeros = 6 - hexString.length;
+                #       var resultBuilder = ['#'];
+                #       for (var i = 0; i < missingZeros; i++) {
+                #          resultBuilder.push('0');
+                #       }
+                #       resultBuilder.push(hexString);
+                #       return resultBuilder.join('');
+                #     };
+                #
+                #     // ...
+              "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+              "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                  # the final pixel color is defined by the equation:
+                  #
+                  #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                  #
+                  # This means that a value of 1.0 corresponds to a solid color, whereas
+                  # a value of 0.0 corresponds to a completely transparent color. This
+                  # uses a wrapper message rather than a simple float scalar so that it is
+                  # possible to distinguish between a default value and the value being unset.
+                  # If omitted, this color object is to be rendered as a solid color
+                  # (as if the alpha value had been explicitly given with a value of 1.0).
+              "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+              "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+            },
+            "width": 42, # The width of the border, in pixels.
+                # Border widths must be between 0 and 3 pixels.
+            "style": "A String", # The style of the border.
+          },
+        },
+        "cutPaste": { # Moves data from the source to the destination. # Cuts data from one area and pastes it to another.
+          "pasteType": "A String", # What kind of data to paste.  All the source data will be cut, regardless
+              # of what is pasted.
+          "source": { # A range on a sheet. # The source data to cut.
+              # 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 grid 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.
+            "startRowIndex": 42, # The start row (inclusive) 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.
+            "endColumnIndex": 42, # The end column (exclusive) of the range, or not set if unbounded.
+          },
+          "destination": { # A coordinate in a sheet. # The top-left coordinate where the data should be pasted.
+              # All indexes are zero-based.
+            "rowIndex": 42, # The row index of the coordinate.
+            "columnIndex": 42, # The column index of the coordinate.
+            "sheetId": 42, # The sheet this coordinate is on.
+          },
+        },
+        "copyPaste": { # Copies data from the source to the destination. # Copies data from one area and pastes it to another.
+          "pasteType": "A String", # What kind of data to paste.
+          "source": { # A range on a sheet. # The source range to copy.
+              # 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 grid 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.
+            "startRowIndex": 42, # The start row (inclusive) 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.
+            "endColumnIndex": 42, # The end column (exclusive) of the range, or not set if unbounded.
+          },
+          "destination": { # A range on a sheet. # The location to paste to. If the range covers a span that's
+              # a multiple of the source's height or width, then the
+              # data will be repeated to fill in the destination range.
+              # If the range is smaller than the source range, the entire
+              # source data will still be copied (beyond the end of the destination range).
+              # 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 grid 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.
+            "startRowIndex": 42, # The start row (inclusive) 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.
+            "endColumnIndex": 42, # The end column (exclusive) of the range, or not set if unbounded.
+          },
+          "pasteOrientation": "A String", # How that data should be oriented when pasting.
+        },
+        "addSheet": { # Adds a new sheet. # Adds a sheet.
+            # When a sheet is added at a given index,
+            # all subsequent sheets' indexes are incremented.
+            # To add an object sheet, use AddChartRequest instead.
+          "properties": { # Properties of a sheet. # The properties the new sheet should have.
+              # All properties are optional.
+              # If a sheetId
+              # is specified, the sheet will use that ID.
+              # (It is an error to specify the ID of a sheet that already exists.)
+            "sheetType": "A String", # The type of sheet. Defaults to GRID.
+                # This field cannot be changed once set.
+            "index": 42, # The index of the sheet within the spreadsheet.
+                # When adding or updating sheet properties, if this field
+                # is excluded then the sheet will be added or moved to the end
+                # of the sheet list.
+            "title": "A String", # The name of the sheet.
+            "gridProperties": { # Properties of a grid. # Additional properties of the sheet if this sheet is a grid.
+                # (If the sheet is an object sheet, containing a chart or image, then
+                # this field will be absent.)
+                # When writing it is an error to set any grid properties on non-grid sheets.
+              "columnCount": 42, # The number of columns in the grid.
+              "rowCount": 42, # The number of rows in the grid.
+              "frozenColumnCount": 42, # The number of columns that are frozen in the grid.
+              "hideGridlines": True or False, # True if the grid isn't showing gridlines in the UI.
+              "frozenRowCount": 42, # The number of rows that are frozen in the grid.
+            },
+            "rightToLeft": True or False, # True if the sheet is an RTL sheet instead of an LTR sheet.
+            "tabColor": { # Represents a color in the RGBA color space. This representation is designed # The color of the tab in the UI.
+                # for simplicity of conversion to/from color representations in various
+                # languages over compactness; for example, the fields of this representation
+                # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                # method in iOS; and, with just a little work, it can be easily formatted into
+                # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                #
+                # Example (Java):
+                #
+                #      import com.google.type.Color;
+                #
+                #      // ...
+                #      public static java.awt.Color fromProto(Color protocolor) {
+                #        float alpha = protocolor.hasAlpha()
+                #            ? protocolor.getAlpha().getValue()
+                #            : 1.0;
+                #
+                #        return new java.awt.Color(
+                #            protocolor.getRed(),
+                #            protocolor.getGreen(),
+                #            protocolor.getBlue(),
+                #            alpha);
+                #      }
+                #
+                #      public static Color toProto(java.awt.Color color) {
+                #        float red = (float) color.getRed();
+                #        float green = (float) color.getGreen();
+                #        float blue = (float) color.getBlue();
+                #        float denominator = 255.0;
+                #        Color.Builder resultBuilder =
+                #            Color
+                #                .newBuilder()
+                #                .setRed(red / denominator)
+                #                .setGreen(green / denominator)
+                #                .setBlue(blue / denominator);
+                #        int alpha = color.getAlpha();
+                #        if (alpha != 255) {
+                #          result.setAlpha(
+                #              FloatValue
+                #                  .newBuilder()
+                #                  .setValue(((float) alpha) / denominator)
+                #                  .build());
+                #        }
+                #        return resultBuilder.build();
+                #      }
+                #      // ...
+                #
+                # Example (iOS / Obj-C):
+                #
+                #      // ...
+                #      static UIColor* fromProto(Color* protocolor) {
+                #         float red = [protocolor red];
+                #         float green = [protocolor green];
+                #         float blue = [protocolor blue];
+                #         FloatValue* alpha_wrapper = [protocolor alpha];
+                #         float alpha = 1.0;
+                #         if (alpha_wrapper != nil) {
+                #           alpha = [alpha_wrapper value];
+                #         }
+                #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                #      }
+                #
+                #      static Color* toProto(UIColor* color) {
+                #          CGFloat red, green, blue, alpha;
+                #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                #            return nil;
+                #          }
+                #          Color* result = [Color alloc] init];
+                #          [result setRed:red];
+                #          [result setGreen:green];
+                #          [result setBlue:blue];
+                #          if (alpha <= 0.9999) {
+                #            [result setAlpha:floatWrapperWithValue(alpha)];
+                #          }
+                #          [result autorelease];
+                #          return result;
+                #     }
+                #     // ...
+                #
+                #  Example (JavaScript):
+                #
+                #     // ...
+                #
+                #     var protoToCssColor = function(rgb_color) {
+                #        var redFrac = rgb_color.red || 0.0;
+                #        var greenFrac = rgb_color.green || 0.0;
+                #        var blueFrac = rgb_color.blue || 0.0;
+                #        var red = Math.floor(redFrac * 255);
+                #        var green = Math.floor(greenFrac * 255);
+                #        var blue = Math.floor(blueFrac * 255);
+                #
+                #        if (!('alpha' in rgb_color)) {
+                #           return rgbToCssColor_(red, green, blue);
+                #        }
+                #
+                #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                #        var rgbParams = [red, green, blue].join(',');
+                #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                #     };
+                #
+                #     var rgbToCssColor_ = function(red, green, blue) {
+                #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                #       var hexString = rgbNumber.toString(16);
+                #       var missingZeros = 6 - hexString.length;
+                #       var resultBuilder = ['#'];
+                #       for (var i = 0; i < missingZeros; i++) {
+                #          resultBuilder.push('0');
+                #       }
+                #       resultBuilder.push(hexString);
+                #       return resultBuilder.join('');
+                #     };
+                #
+                #     // ...
+              "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+              "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                  # the final pixel color is defined by the equation:
+                  #
+                  #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                  #
+                  # This means that a value of 1.0 corresponds to a solid color, whereas
+                  # a value of 0.0 corresponds to a completely transparent color. This
+                  # uses a wrapper message rather than a simple float scalar so that it is
+                  # possible to distinguish between a default value and the value being unset.
+                  # If omitted, this color object is to be rendered as a solid color
+                  # (as if the alpha value had been explicitly given with a value of 1.0).
+              "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+              "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+            },
+            "hidden": True or False, # True if the sheet is hidden in the UI, false if it's visible.
+            "sheetId": 42, # The ID of the sheet. Must be non-negative.
+                # This field cannot be changed once set.
+          },
+        },
+        "deleteNamedRange": { # Removes the named range with the given ID from the spreadsheet. # Deletes a named range.
+          "namedRangeId": "A String", # The ID of the named range to delete.
+        },
+        "updateNamedRange": { # Updates properties of the named range with the specified # Updates a named range.
+            # namedRangeId.
+            # It is an error to specify read only fields in the field mask.
+          "fields": "A String", # The fields that should be updated.  At least one field must be specified.
+              # The root `namedRange` is implied and should not be specified.
+              # A single `"*"` can be used as short-hand for listing every field.
+          "namedRange": { # A named range. # The named range to update with the new properties.
+            "namedRangeId": "A String", # The ID of the named range.
+            "range": { # A range on a sheet. # The range this represents.
+                # 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 grid 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.
+              "startRowIndex": 42, # The start row (inclusive) 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.
+              "endColumnIndex": 42, # The end column (exclusive) of the range, or not set if unbounded.
+            },
+            "name": "A String", # The name of the named range.
+          },
+        },
+        "insertDimension": { # Inserts rows or columns in a sheet at a particular index. # Inserts new rows or columns in a sheet.
+          "inheritFromBefore": True or False, # Whether dimension properties should be extended from the dimensions
+              # before or after the newly inserted dimensions.
+              # True to inherit from the dimensions before (in which case the start
+              # index must be greater than 0), and false to inherit from the dimensions
+              # after.
+              #
+              # For example, if row index 0 has red background and row index 1
+              # has a green background, then inserting 2 rows at index 1 can inherit
+              # either the green or red background.  If `inheritFromBefore` is true,
+              # the two new rows will be red (because the row before the insertion point
+              # was red), whereas if `inheritFromBefore` is false, the two new rows will
+              # be green (because the rows after the insertion point were green).
+          "range": { # A range along a single dimension on a sheet. # The dimensions to insert.  Both the start and end indexes must be bounded.
+              # 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.
+          },
+        },
+        "updateFilterView": { # Updates properties of the filter view. # Updates the properties of a filter view.
+          "filter": { # A filter view. # The new properties of the filter view.
+            "title": "A String", # The name of the filter view.
+            "namedRangeId": "A String", # The named range this filter view is backed by, if any.
+                #
+                # When writing, only one of range or namedRangeId
+                # may be set.
+            "filterViewId": 42, # The ID of the filter view.
+            "range": { # A range on a sheet. # The range this filter view covers.
+                #
+                # When writing, only one of range or namedRangeId
+                # may be set.
+                # 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 grid 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.
+              "startRowIndex": 42, # The start row (inclusive) 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.
+              "endColumnIndex": 42, # The end column (exclusive) of the range, or not set if unbounded.
+            },
+            "sortSpecs": [ # The sort order per column. Later specifications are used when values
+                # are equal in the earlier specifications.
+              { # A sort order associated with a specific column or row.
+                "sortOrder": "A String", # The order data should be sorted.
+                "dimensionIndex": 42, # The dimension the sort should be applied to.
+              },
+            ],
+            "criteria": { # The criteria for showing/hiding values per column.
+                # The map's key is the column index, and the value is the criteria for
+                # that column.
+              "a_key": { # Criteria for showing/hiding rows in a filter, filter view.
+                "hiddenValues": [ # Values that should be hidden.
+                  "A String",
+                ],
+                "condition": { # A condition that can evaluate to true or false. # A condition that must be true for values to be shown.
+                    # (This does not override hiddenValues -- if a value is listed there,
+                    #  it will still be hidden.)
+                    # BooleanConditions are used by conditional formatting,
+                    # data validation, and the criteria in filters.
+                  "type": "A String", # The type of condition.
+                  "values": [ # The values of the condition. The number of supported values depends
+                      # on the condition type.  Some support zero values,
+                      # others one or two values,
+                      # and ConditionType.ONE_OF_LIST supports an arbitrary number of values.
+                    { # The value of the condition.
+                      "relativeDate": "A String", # A relative date (based on the current date).
+                          # Valid only if the type is
+                          # DATE_BEFORE,
+                          # DATE_AFTER,
+                          # DATE_ON_OR_BEFORE or
+                          # DATE_ON_OR_AFTER.
+                          #
+                          # Relative dates are not supported in data validation.
+                          # They are supported only in conditional formatting and
+                          # conditional filters.
+                      "userEnteredValue": "A String", # A value the condition is based on.
+                          # The value will be parsed as if the user typed into a cell.
+                          # Formulas are supported (and must begin with an `=`).
+                    },
+                  ],
+                },
+              },
+            },
+          },
+          "fields": "A String", # The fields that should be updated.  At least one field must be specified.
+              # The root `filter` is implied and should not be specified.
+              # A single `"*"` can be used as short-hand for listing every field.
+        },
+        "deleteConditionalFormatRule": { # Deletes a conditional format rule at the given index. # Deletes an existing conditional format rule.
+            # All subsequent rules' indexes are decremented.
+          "index": 42, # The zero-based index of the rule to be deleted.
+          "sheetId": 42, # The sheet the rule is being deleted from.
+        },
+      },
+    ],
+  }
+
+  x__xgafv: string, V1 error format.
+    Allowed values
+      1 - v1 error format
+      2 - v2 error format
+
+Returns:
+  An object of the form:
+
+    { # The reply for batch updating a spreadsheet.
+    "spreadsheetId": "A String", # The spreadsheet the updates were applied to.
+    "replies": [ # The reply of the updates.  This maps 1:1 with the updates, although
+        # replies to some requests may be empty.
+      { # A single response from an update.
+        "duplicateFilterView": { # The result of a filter view being duplicated. # A reply from duplicating a filter view.
+          "filter": { # A filter view. # The newly created filter.
+            "title": "A String", # The name of the filter view.
+            "namedRangeId": "A String", # The named range this filter view is backed by, if any.
+                #
+                # When writing, only one of range or namedRangeId
+                # may be set.
+            "filterViewId": 42, # The ID of the filter view.
+            "range": { # A range on a sheet. # The range this filter view covers.
+                #
+                # When writing, only one of range or namedRangeId
+                # may be set.
+                # 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 grid 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.
+              "startRowIndex": 42, # The start row (inclusive) 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.
+              "endColumnIndex": 42, # The end column (exclusive) of the range, or not set if unbounded.
+            },
+            "sortSpecs": [ # The sort order per column. Later specifications are used when values
+                # are equal in the earlier specifications.
+              { # A sort order associated with a specific column or row.
+                "sortOrder": "A String", # The order data should be sorted.
+                "dimensionIndex": 42, # The dimension the sort should be applied to.
+              },
+            ],
+            "criteria": { # The criteria for showing/hiding values per column.
+                # The map's key is the column index, and the value is the criteria for
+                # that column.
+              "a_key": { # Criteria for showing/hiding rows in a filter, filter view.
+                "hiddenValues": [ # Values that should be hidden.
+                  "A String",
+                ],
+                "condition": { # A condition that can evaluate to true or false. # A condition that must be true for values to be shown.
+                    # (This does not override hiddenValues -- if a value is listed there,
+                    #  it will still be hidden.)
+                    # BooleanConditions are used by conditional formatting,
+                    # data validation, and the criteria in filters.
+                  "type": "A String", # The type of condition.
+                  "values": [ # The values of the condition. The number of supported values depends
+                      # on the condition type.  Some support zero values,
+                      # others one or two values,
+                      # and ConditionType.ONE_OF_LIST supports an arbitrary number of values.
+                    { # The value of the condition.
+                      "relativeDate": "A String", # A relative date (based on the current date).
+                          # Valid only if the type is
+                          # DATE_BEFORE,
+                          # DATE_AFTER,
+                          # DATE_ON_OR_BEFORE or
+                          # DATE_ON_OR_AFTER.
+                          #
+                          # Relative dates are not supported in data validation.
+                          # They are supported only in conditional formatting and
+                          # conditional filters.
+                      "userEnteredValue": "A String", # A value the condition is based on.
+                          # The value will be parsed as if the user typed into a cell.
+                          # Formulas are supported (and must begin with an `=`).
+                    },
+                  ],
+                },
+              },
+            },
+          },
+        },
+        "duplicateSheet": { # The result of duplicating a sheet. # A reply from duplicating a sheet.
+          "properties": { # Properties of a sheet. # The properties of the duplicate sheet.
+            "sheetType": "A String", # The type of sheet. Defaults to GRID.
+                # This field cannot be changed once set.
+            "index": 42, # The index of the sheet within the spreadsheet.
+                # When adding or updating sheet properties, if this field
+                # is excluded then the sheet will be added or moved to the end
+                # of the sheet list.
+            "title": "A String", # The name of the sheet.
+            "gridProperties": { # Properties of a grid. # Additional properties of the sheet if this sheet is a grid.
+                # (If the sheet is an object sheet, containing a chart or image, then
+                # this field will be absent.)
+                # When writing it is an error to set any grid properties on non-grid sheets.
+              "columnCount": 42, # The number of columns in the grid.
+              "rowCount": 42, # The number of rows in the grid.
+              "frozenColumnCount": 42, # The number of columns that are frozen in the grid.
+              "hideGridlines": True or False, # True if the grid isn't showing gridlines in the UI.
+              "frozenRowCount": 42, # The number of rows that are frozen in the grid.
+            },
+            "rightToLeft": True or False, # True if the sheet is an RTL sheet instead of an LTR sheet.
+            "tabColor": { # Represents a color in the RGBA color space. This representation is designed # The color of the tab in the UI.
+                # for simplicity of conversion to/from color representations in various
+                # languages over compactness; for example, the fields of this representation
+                # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                # method in iOS; and, with just a little work, it can be easily formatted into
+                # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                #
+                # Example (Java):
+                #
+                #      import com.google.type.Color;
+                #
+                #      // ...
+                #      public static java.awt.Color fromProto(Color protocolor) {
+                #        float alpha = protocolor.hasAlpha()
+                #            ? protocolor.getAlpha().getValue()
+                #            : 1.0;
+                #
+                #        return new java.awt.Color(
+                #            protocolor.getRed(),
+                #            protocolor.getGreen(),
+                #            protocolor.getBlue(),
+                #            alpha);
+                #      }
+                #
+                #      public static Color toProto(java.awt.Color color) {
+                #        float red = (float) color.getRed();
+                #        float green = (float) color.getGreen();
+                #        float blue = (float) color.getBlue();
+                #        float denominator = 255.0;
+                #        Color.Builder resultBuilder =
+                #            Color
+                #                .newBuilder()
+                #                .setRed(red / denominator)
+                #                .setGreen(green / denominator)
+                #                .setBlue(blue / denominator);
+                #        int alpha = color.getAlpha();
+                #        if (alpha != 255) {
+                #          result.setAlpha(
+                #              FloatValue
+                #                  .newBuilder()
+                #                  .setValue(((float) alpha) / denominator)
+                #                  .build());
+                #        }
+                #        return resultBuilder.build();
+                #      }
+                #      // ...
+                #
+                # Example (iOS / Obj-C):
+                #
+                #      // ...
+                #      static UIColor* fromProto(Color* protocolor) {
+                #         float red = [protocolor red];
+                #         float green = [protocolor green];
+                #         float blue = [protocolor blue];
+                #         FloatValue* alpha_wrapper = [protocolor alpha];
+                #         float alpha = 1.0;
+                #         if (alpha_wrapper != nil) {
+                #           alpha = [alpha_wrapper value];
+                #         }
+                #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                #      }
+                #
+                #      static Color* toProto(UIColor* color) {
+                #          CGFloat red, green, blue, alpha;
+                #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                #            return nil;
+                #          }
+                #          Color* result = [Color alloc] init];
+                #          [result setRed:red];
+                #          [result setGreen:green];
+                #          [result setBlue:blue];
+                #          if (alpha <= 0.9999) {
+                #            [result setAlpha:floatWrapperWithValue(alpha)];
+                #          }
+                #          [result autorelease];
+                #          return result;
+                #     }
+                #     // ...
+                #
+                #  Example (JavaScript):
+                #
+                #     // ...
+                #
+                #     var protoToCssColor = function(rgb_color) {
+                #        var redFrac = rgb_color.red || 0.0;
+                #        var greenFrac = rgb_color.green || 0.0;
+                #        var blueFrac = rgb_color.blue || 0.0;
+                #        var red = Math.floor(redFrac * 255);
+                #        var green = Math.floor(greenFrac * 255);
+                #        var blue = Math.floor(blueFrac * 255);
+                #
+                #        if (!('alpha' in rgb_color)) {
+                #           return rgbToCssColor_(red, green, blue);
+                #        }
+                #
+                #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                #        var rgbParams = [red, green, blue].join(',');
+                #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                #     };
+                #
+                #     var rgbToCssColor_ = function(red, green, blue) {
+                #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                #       var hexString = rgbNumber.toString(16);
+                #       var missingZeros = 6 - hexString.length;
+                #       var resultBuilder = ['#'];
+                #       for (var i = 0; i < missingZeros; i++) {
+                #          resultBuilder.push('0');
+                #       }
+                #       resultBuilder.push(hexString);
+                #       return resultBuilder.join('');
+                #     };
+                #
+                #     // ...
+              "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+              "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                  # the final pixel color is defined by the equation:
+                  #
+                  #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                  #
+                  # This means that a value of 1.0 corresponds to a solid color, whereas
+                  # a value of 0.0 corresponds to a completely transparent color. This
+                  # uses a wrapper message rather than a simple float scalar so that it is
+                  # possible to distinguish between a default value and the value being unset.
+                  # If omitted, this color object is to be rendered as a solid color
+                  # (as if the alpha value had been explicitly given with a value of 1.0).
+              "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+              "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+            },
+            "hidden": True or False, # True if the sheet is hidden in the UI, false if it's visible.
+            "sheetId": 42, # The ID of the sheet. Must be non-negative.
+                # This field cannot be changed once set.
+          },
+        },
+        "updateEmbeddedObjectPosition": { # The result of updating an embedded object's position. # A reply from updating an embedded object's position.
+          "position": { # The position of an embedded object such as a chart. # The new position of the embedded object.
+            "newSheet": True or False, # If true, the embedded object will be put on a new sheet whose ID
+                # is chosen for you. Used only when writing.
+            "sheetId": 42, # The sheet this is on. Set only if the embedded object
+                # is on its own sheet. Must be non-negative.
+            "overlayPosition": { # The location an object is overlaid on top of a grid. # The position the object is overlaid on top of a grid.
+              "anchorCell": { # A coordinate in a sheet. # The cell the object is anchored to.
+                  # All indexes are zero-based.
+                "rowIndex": 42, # The row index of the coordinate.
+                "columnIndex": 42, # The column index of the coordinate.
+                "sheetId": 42, # The sheet this coordinate is on.
+              },
+              "offsetYPixels": 42, # The vertical offset, in pixels, that the object is offset
+                  # from the anchor cell.
+              "widthPixels": 42, # The width of the object, in pixels. Defaults to 600.
+              "offsetXPixels": 42, # The horizontal offset, in pixels, that the object is offset
+                  # from the anchor cell.
+              "heightPixels": 42, # The height of the object, in pixels. Defaults to 371.
+            },
+          },
+        },
+        "addChart": { # The result of adding a chart to a spreadsheet. # A reply from adding a chart.
+          "chart": { # A chart embedded in a sheet. # The newly added chart.
+            "chartId": 42, # The ID of the chart.
+            "position": { # The position of an embedded object such as a chart. # The position of the chart.
+              "newSheet": True or False, # If true, the embedded object will be put on a new sheet whose ID
+                  # is chosen for you. Used only when writing.
+              "sheetId": 42, # The sheet this is on. Set only if the embedded object
+                  # is on its own sheet. Must be non-negative.
+              "overlayPosition": { # The location an object is overlaid on top of a grid. # The position the object is overlaid on top of a grid.
+                "anchorCell": { # A coordinate in a sheet. # The cell the object is anchored to.
+                    # All indexes are zero-based.
+                  "rowIndex": 42, # The row index of the coordinate.
+                  "columnIndex": 42, # The column index of the coordinate.
+                  "sheetId": 42, # The sheet this coordinate is on.
+                },
+                "offsetYPixels": 42, # The vertical offset, in pixels, that the object is offset
+                    # from the anchor cell.
+                "widthPixels": 42, # The width of the object, in pixels. Defaults to 600.
+                "offsetXPixels": 42, # The horizontal offset, in pixels, that the object is offset
+                    # from the anchor cell.
+                "heightPixels": 42, # The height of the object, in pixels. Defaults to 371.
+              },
+            },
+            "spec": { # The specifications of a chart. # The specification of the chart.
+              "hiddenDimensionStrategy": "A String", # Determines how the charts will use hidden rows or columns.
+                  # This value is only meaningful if the
+                  # ChartData.sourceRange
+                  # is used for a domain or series.
+              "pieChart": { # A <a href="/chart/interactive/docs/gallery/piechart">pie chart</a>. # A pie chart specification.
+                "series": { # The data included in a domain or series. # The data that covers the one and only series of the pie chart.
+                  "sourceRange": { # Source ranges for a chart. # The source ranges of the data.
+                    "sources": [ # The ranges of data for a series or domain.
+                        # Exactly one dimension must have a length of 1,
+                        # and all sources in the list must have the same dimension
+                        # with length 1.
+                        # The domain (if it exists) & all series must have the same number
+                        # of source ranges. If using more than one source range, then the source
+                        # range at a given offset must be contiguous across the domain and series.
+                        #
+                        # For example, these are valid configurations:
+                        #
+                        #     domain sources: A1:A5
+                        #     series1 sources: B1:B5
+                        #     series2 sources: D6:D10
+                        #
+                        #     domain sources: A1:A5, C10:C12
+                        #     series1 sources: B1:B5, D10:D12
+                        #     series2 sources: C1:C5, E10:E12
+                      { # A range on a sheet.
+                          # 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 grid 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.
+                        "startRowIndex": 42, # The start row (inclusive) 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.
+                        "endColumnIndex": 42, # The end column (exclusive) of the range, or not set if unbounded.
+                      },
+                    ],
+                  },
+                },
+                "domain": { # The data included in a domain or series. # The data that covers the domain of the pie chart.
+                  "sourceRange": { # Source ranges for a chart. # The source ranges of the data.
+                    "sources": [ # The ranges of data for a series or domain.
+                        # Exactly one dimension must have a length of 1,
+                        # and all sources in the list must have the same dimension
+                        # with length 1.
+                        # The domain (if it exists) & all series must have the same number
+                        # of source ranges. If using more than one source range, then the source
+                        # range at a given offset must be contiguous across the domain and series.
+                        #
+                        # For example, these are valid configurations:
+                        #
+                        #     domain sources: A1:A5
+                        #     series1 sources: B1:B5
+                        #     series2 sources: D6:D10
+                        #
+                        #     domain sources: A1:A5, C10:C12
+                        #     series1 sources: B1:B5, D10:D12
+                        #     series2 sources: C1:C5, E10:E12
+                      { # A range on a sheet.
+                          # 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 grid 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.
+                        "startRowIndex": 42, # The start row (inclusive) 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.
+                        "endColumnIndex": 42, # The end column (exclusive) of the range, or not set if unbounded.
+                      },
+                    ],
+                  },
+                },
+                "threeDimensional": True or False, # True if the pie is three dimensional.
+                "legendPosition": "A String", # Where the legend of the pie chart should be drawn.
+                "pieHole": 3.14, # The size of the hole in the pie chart.
+              },
+              "basicChart": { # The specification for a basic chart.  See BasicChartType for the list # A basic chart specification, can be one of many kinds of charts.
+                  # See BasicChartType for the list of all charts this supports.
+                  # of charts this supports.
+                "headerCount": 42, # The number of rows or columns in the data that are "headers".
+                    # If not set, Google Sheets will guess how many rows are headers based
+                    # on the data.
+                    #
+                    # (Note that BasicChartAxis.title may override the axis title
+                    #  inferred from the header values.)
+                "series": [ # The data this chart is visualizing.
+                  { # A single series of data in a chart.
+                      # For example, if charting stock prices over time, multiple series may exist,
+                      # one for the "Open Price", "High Price", "Low Price" and "Close Price".
+                    "series": { # The data included in a domain or series. # The data being visualized in this chart series.
+                      "sourceRange": { # Source ranges for a chart. # The source ranges of the data.
+                        "sources": [ # The ranges of data for a series or domain.
+                            # Exactly one dimension must have a length of 1,
+                            # and all sources in the list must have the same dimension
+                            # with length 1.
+                            # The domain (if it exists) & all series must have the same number
+                            # of source ranges. If using more than one source range, then the source
+                            # range at a given offset must be contiguous across the domain and series.
+                            #
+                            # For example, these are valid configurations:
+                            #
+                            #     domain sources: A1:A5
+                            #     series1 sources: B1:B5
+                            #     series2 sources: D6:D10
+                            #
+                            #     domain sources: A1:A5, C10:C12
+                            #     series1 sources: B1:B5, D10:D12
+                            #     series2 sources: C1:C5, E10:E12
+                          { # A range on a sheet.
+                              # 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 grid 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.
+                            "startRowIndex": 42, # The start row (inclusive) 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.
+                            "endColumnIndex": 42, # The end column (exclusive) of the range, or not set if unbounded.
+                          },
+                        ],
+                      },
+                    },
+                    "targetAxis": "A String", # The minor axis that will specify the range of values for this series.
+                        # For example, if charting stocks over time, the "Volume" series
+                        # may want to be pinned to the right with the prices pinned to the left,
+                        # because the scale of trading volume is different than the scale of
+                        # prices.
+                        # It is an error to specify an axis that isn't a valid minor axis
+                        # for the chart's type.
+                    "type": "A String", # The type of this series. Valid only if the
+                        # chartType is
+                        # COMBO.
+                        # Different types will change the way the series is visualized.
+                        # Only LINE, AREA,
+                        # and COLUMN are supported.
+                  },
+                ],
+                "legendPosition": "A String", # The position of the chart legend.
+                "domains": [ # The domain of data this is charting.
+                    # Only a single domain is currently supported.
+                  { # The domain of a chart.
+                      # For example, if charting stock prices over time, this would be the date.
+                    "domain": { # The data included in a domain or series. # The data of the domain. For example, if charting stock prices over time,
+                        # this be the data representing the dates.
+                      "sourceRange": { # Source ranges for a chart. # The source ranges of the data.
+                        "sources": [ # The ranges of data for a series or domain.
+                            # Exactly one dimension must have a length of 1,
+                            # and all sources in the list must have the same dimension
+                            # with length 1.
+                            # The domain (if it exists) & all series must have the same number
+                            # of source ranges. If using more than one source range, then the source
+                            # range at a given offset must be contiguous across the domain and series.
+                            #
+                            # For example, these are valid configurations:
+                            #
+                            #     domain sources: A1:A5
+                            #     series1 sources: B1:B5
+                            #     series2 sources: D6:D10
+                            #
+                            #     domain sources: A1:A5, C10:C12
+                            #     series1 sources: B1:B5, D10:D12
+                            #     series2 sources: C1:C5, E10:E12
+                          { # A range on a sheet.
+                              # 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 grid 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.
+                            "startRowIndex": 42, # The start row (inclusive) 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.
+                            "endColumnIndex": 42, # The end column (exclusive) of the range, or not set if unbounded.
+                          },
+                        ],
+                      },
+                    },
+                  },
+                ],
+                "chartType": "A String", # The type of the chart.
+                "axis": [ # The axis on the chart.
+                  { # An axis of the chart.
+                      # A chart may not have more than one axis per
+                      # axis position.
+                    "position": "A String", # The position of this axis.
+                    "format": { # The format of a run of text in a cell. # The format of the title.
+                        # Only valid if the axis is not associated with the domain.
+                        # Absent values indicate that the field isn't specified.
+                      "foregroundColor": { # Represents a color in the RGBA color space. This representation is designed # The foreground color of the text.
+                          # for simplicity of conversion to/from color representations in various
+                          # languages over compactness; for example, the fields of this representation
+                          # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                          # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                          # method in iOS; and, with just a little work, it can be easily formatted into
+                          # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                          #
+                          # Example (Java):
+                          #
+                          #      import com.google.type.Color;
+                          #
+                          #      // ...
+                          #      public static java.awt.Color fromProto(Color protocolor) {
+                          #        float alpha = protocolor.hasAlpha()
+                          #            ? protocolor.getAlpha().getValue()
+                          #            : 1.0;
+                          #
+                          #        return new java.awt.Color(
+                          #            protocolor.getRed(),
+                          #            protocolor.getGreen(),
+                          #            protocolor.getBlue(),
+                          #            alpha);
+                          #      }
+                          #
+                          #      public static Color toProto(java.awt.Color color) {
+                          #        float red = (float) color.getRed();
+                          #        float green = (float) color.getGreen();
+                          #        float blue = (float) color.getBlue();
+                          #        float denominator = 255.0;
+                          #        Color.Builder resultBuilder =
+                          #            Color
+                          #                .newBuilder()
+                          #                .setRed(red / denominator)
+                          #                .setGreen(green / denominator)
+                          #                .setBlue(blue / denominator);
+                          #        int alpha = color.getAlpha();
+                          #        if (alpha != 255) {
+                          #          result.setAlpha(
+                          #              FloatValue
+                          #                  .newBuilder()
+                          #                  .setValue(((float) alpha) / denominator)
+                          #                  .build());
+                          #        }
+                          #        return resultBuilder.build();
+                          #      }
+                          #      // ...
+                          #
+                          # Example (iOS / Obj-C):
+                          #
+                          #      // ...
+                          #      static UIColor* fromProto(Color* protocolor) {
+                          #         float red = [protocolor red];
+                          #         float green = [protocolor green];
+                          #         float blue = [protocolor blue];
+                          #         FloatValue* alpha_wrapper = [protocolor alpha];
+                          #         float alpha = 1.0;
+                          #         if (alpha_wrapper != nil) {
+                          #           alpha = [alpha_wrapper value];
+                          #         }
+                          #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                          #      }
+                          #
+                          #      static Color* toProto(UIColor* color) {
+                          #          CGFloat red, green, blue, alpha;
+                          #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                          #            return nil;
+                          #          }
+                          #          Color* result = [Color alloc] init];
+                          #          [result setRed:red];
+                          #          [result setGreen:green];
+                          #          [result setBlue:blue];
+                          #          if (alpha <= 0.9999) {
+                          #            [result setAlpha:floatWrapperWithValue(alpha)];
+                          #          }
+                          #          [result autorelease];
+                          #          return result;
+                          #     }
+                          #     // ...
+                          #
+                          #  Example (JavaScript):
+                          #
+                          #     // ...
+                          #
+                          #     var protoToCssColor = function(rgb_color) {
+                          #        var redFrac = rgb_color.red || 0.0;
+                          #        var greenFrac = rgb_color.green || 0.0;
+                          #        var blueFrac = rgb_color.blue || 0.0;
+                          #        var red = Math.floor(redFrac * 255);
+                          #        var green = Math.floor(greenFrac * 255);
+                          #        var blue = Math.floor(blueFrac * 255);
+                          #
+                          #        if (!('alpha' in rgb_color)) {
+                          #           return rgbToCssColor_(red, green, blue);
+                          #        }
+                          #
+                          #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                          #        var rgbParams = [red, green, blue].join(',');
+                          #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                          #     };
+                          #
+                          #     var rgbToCssColor_ = function(red, green, blue) {
+                          #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                          #       var hexString = rgbNumber.toString(16);
+                          #       var missingZeros = 6 - hexString.length;
+                          #       var resultBuilder = ['#'];
+                          #       for (var i = 0; i < missingZeros; i++) {
+                          #          resultBuilder.push('0');
+                          #       }
+                          #       resultBuilder.push(hexString);
+                          #       return resultBuilder.join('');
+                          #     };
+                          #
+                          #     // ...
+                        "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                        "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                            # the final pixel color is defined by the equation:
+                            #
+                            #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                            #
+                            # This means that a value of 1.0 corresponds to a solid color, whereas
+                            # a value of 0.0 corresponds to a completely transparent color. This
+                            # uses a wrapper message rather than a simple float scalar so that it is
+                            # possible to distinguish between a default value and the value being unset.
+                            # If omitted, this color object is to be rendered as a solid color
+                            # (as if the alpha value had been explicitly given with a value of 1.0).
+                        "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                        "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                      },
+                      "bold": True or False, # True if the text is bold.
+                      "strikethrough": True or False, # True if the text has a strikethrough.
+                      "fontFamily": "A String", # The font family.
+                      "fontSize": 42, # The size of the font.
+                      "italic": True or False, # True if the text is italicized.
+                      "underline": True or False, # True if the text is underlined.
+                    },
+                    "title": "A String", # The title of this axis. If set, this overrides any title inferred
+                        # from headers of the data.
+                  },
+                ],
+              },
+              "title": "A String", # The title of the chart.
+            },
+          },
+        },
+        "updateConditionalFormatRule": { # The result of updating a conditional format rule. # A reply from updating a conditional format rule.
+          "oldIndex": 42, # The old index of the rule. Not set if a rule was replaced
+              # (because it is the same as newIndex).
+          "newIndex": 42, # The index of the new rule.
+          "oldRule": { # A rule describing a conditional format. # The old (deleted) rule. Not set if a rule was moved
+              # (because it is the same as newRule).
+            "ranges": [ # The ranges that will be formatted if the condition is true.
+                # All the ranges must be on the same grid.
+              { # A range on a sheet.
+                  # 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 grid 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.
+                "startRowIndex": 42, # The start row (inclusive) 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.
+                "endColumnIndex": 42, # The end column (exclusive) of the range, or not set if unbounded.
+              },
+            ],
+            "booleanRule": { # A rule that may or may not match, depending on the condition. # The formatting is either "on" or "off" according to the rule.
+              "condition": { # A condition that can evaluate to true or false. # The condition of the rule. If the condition evaluates to true,
+                  # the format will be applied.
+                  # BooleanConditions are used by conditional formatting,
+                  # data validation, and the criteria in filters.
+                "type": "A String", # The type of condition.
+                "values": [ # The values of the condition. The number of supported values depends
+                    # on the condition type.  Some support zero values,
+                    # others one or two values,
+                    # and ConditionType.ONE_OF_LIST supports an arbitrary number of values.
+                  { # The value of the condition.
+                    "relativeDate": "A String", # A relative date (based on the current date).
+                        # Valid only if the type is
+                        # DATE_BEFORE,
+                        # DATE_AFTER,
+                        # DATE_ON_OR_BEFORE or
+                        # DATE_ON_OR_AFTER.
+                        #
+                        # Relative dates are not supported in data validation.
+                        # They are supported only in conditional formatting and
+                        # conditional filters.
+                    "userEnteredValue": "A String", # A value the condition is based on.
+                        # The value will be parsed as if the user typed into a cell.
+                        # Formulas are supported (and must begin with an `=`).
+                  },
+                ],
+              },
+              "format": { # The format of a cell. # The format to apply.
+                  # Conditional formatting can only apply a subset of formatting:
+                  # bold, italic,
+                  # strikethrough,
+                  # foreground color &
+                  # background color.
+                "numberFormat": { # The number format of a cell. # A format describing how number values should be represented to the user.
+                    # When updating, all fields must be set.
+                  "pattern": "A String", # Pattern string used for formatting.
+                  "type": "A String", # The type of the number format.
+                },
+                "textDirection": "A String", # The direction of the text in the cell.
+                "padding": { # The amount of padding around the cell, in pixels. # The padding of the cell.
+                    # When updating padding, every field must be specified.
+                  "top": 42, # The top padding of the cell.
+                  "right": 42, # The right padding of the cell.
+                  "bottom": 42, # The bottom padding of the cell.
+                  "left": 42, # The left padding of the cell.
+                },
+                "horizontalAlignment": "A String", # The horizontal alignment of the value in cell.
+                "backgroundColor": { # Represents a color in the RGBA color space. This representation is designed # The background color of the cell.
+                    # for simplicity of conversion to/from color representations in various
+                    # languages over compactness; for example, the fields of this representation
+                    # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                    # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                    # method in iOS; and, with just a little work, it can be easily formatted into
+                    # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                    #
+                    # Example (Java):
+                    #
+                    #      import com.google.type.Color;
+                    #
+                    #      // ...
+                    #      public static java.awt.Color fromProto(Color protocolor) {
+                    #        float alpha = protocolor.hasAlpha()
+                    #            ? protocolor.getAlpha().getValue()
+                    #            : 1.0;
+                    #
+                    #        return new java.awt.Color(
+                    #            protocolor.getRed(),
+                    #            protocolor.getGreen(),
+                    #            protocolor.getBlue(),
+                    #            alpha);
+                    #      }
+                    #
+                    #      public static Color toProto(java.awt.Color color) {
+                    #        float red = (float) color.getRed();
+                    #        float green = (float) color.getGreen();
+                    #        float blue = (float) color.getBlue();
+                    #        float denominator = 255.0;
+                    #        Color.Builder resultBuilder =
+                    #            Color
+                    #                .newBuilder()
+                    #                .setRed(red / denominator)
+                    #                .setGreen(green / denominator)
+                    #                .setBlue(blue / denominator);
+                    #        int alpha = color.getAlpha();
+                    #        if (alpha != 255) {
+                    #          result.setAlpha(
+                    #              FloatValue
+                    #                  .newBuilder()
+                    #                  .setValue(((float) alpha) / denominator)
+                    #                  .build());
+                    #        }
+                    #        return resultBuilder.build();
+                    #      }
+                    #      // ...
+                    #
+                    # Example (iOS / Obj-C):
+                    #
+                    #      // ...
+                    #      static UIColor* fromProto(Color* protocolor) {
+                    #         float red = [protocolor red];
+                    #         float green = [protocolor green];
+                    #         float blue = [protocolor blue];
+                    #         FloatValue* alpha_wrapper = [protocolor alpha];
+                    #         float alpha = 1.0;
+                    #         if (alpha_wrapper != nil) {
+                    #           alpha = [alpha_wrapper value];
+                    #         }
+                    #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                    #      }
+                    #
+                    #      static Color* toProto(UIColor* color) {
+                    #          CGFloat red, green, blue, alpha;
+                    #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                    #            return nil;
+                    #          }
+                    #          Color* result = [Color alloc] init];
+                    #          [result setRed:red];
+                    #          [result setGreen:green];
+                    #          [result setBlue:blue];
+                    #          if (alpha <= 0.9999) {
+                    #            [result setAlpha:floatWrapperWithValue(alpha)];
+                    #          }
+                    #          [result autorelease];
+                    #          return result;
+                    #     }
+                    #     // ...
+                    #
+                    #  Example (JavaScript):
+                    #
+                    #     // ...
+                    #
+                    #     var protoToCssColor = function(rgb_color) {
+                    #        var redFrac = rgb_color.red || 0.0;
+                    #        var greenFrac = rgb_color.green || 0.0;
+                    #        var blueFrac = rgb_color.blue || 0.0;
+                    #        var red = Math.floor(redFrac * 255);
+                    #        var green = Math.floor(greenFrac * 255);
+                    #        var blue = Math.floor(blueFrac * 255);
+                    #
+                    #        if (!('alpha' in rgb_color)) {
+                    #           return rgbToCssColor_(red, green, blue);
+                    #        }
+                    #
+                    #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                    #        var rgbParams = [red, green, blue].join(',');
+                    #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                    #     };
+                    #
+                    #     var rgbToCssColor_ = function(red, green, blue) {
+                    #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                    #       var hexString = rgbNumber.toString(16);
+                    #       var missingZeros = 6 - hexString.length;
+                    #       var resultBuilder = ['#'];
+                    #       for (var i = 0; i < missingZeros; i++) {
+                    #          resultBuilder.push('0');
+                    #       }
+                    #       resultBuilder.push(hexString);
+                    #       return resultBuilder.join('');
+                    #     };
+                    #
+                    #     // ...
+                  "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                  "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                      # the final pixel color is defined by the equation:
+                      #
+                      #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                      #
+                      # This means that a value of 1.0 corresponds to a solid color, whereas
+                      # a value of 0.0 corresponds to a completely transparent color. This
+                      # uses a wrapper message rather than a simple float scalar so that it is
+                      # possible to distinguish between a default value and the value being unset.
+                      # If omitted, this color object is to be rendered as a solid color
+                      # (as if the alpha value had been explicitly given with a value of 1.0).
+                  "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                  "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                },
+                "verticalAlignment": "A String", # The vertical alignment of the value in cell.
+                "textFormat": { # The format of a run of text in a cell. # The format of the text in the cell (unless overridden by a format run).
+                    # Absent values indicate that the field isn't specified.
+                  "foregroundColor": { # Represents a color in the RGBA color space. This representation is designed # The foreground color of the text.
+                      # for simplicity of conversion to/from color representations in various
+                      # languages over compactness; for example, the fields of this representation
+                      # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                      # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                      # method in iOS; and, with just a little work, it can be easily formatted into
+                      # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                      #
+                      # Example (Java):
+                      #
+                      #      import com.google.type.Color;
+                      #
+                      #      // ...
+                      #      public static java.awt.Color fromProto(Color protocolor) {
+                      #        float alpha = protocolor.hasAlpha()
+                      #            ? protocolor.getAlpha().getValue()
+                      #            : 1.0;
+                      #
+                      #        return new java.awt.Color(
+                      #            protocolor.getRed(),
+                      #            protocolor.getGreen(),
+                      #            protocolor.getBlue(),
+                      #            alpha);
+                      #      }
+                      #
+                      #      public static Color toProto(java.awt.Color color) {
+                      #        float red = (float) color.getRed();
+                      #        float green = (float) color.getGreen();
+                      #        float blue = (float) color.getBlue();
+                      #        float denominator = 255.0;
+                      #        Color.Builder resultBuilder =
+                      #            Color
+                      #                .newBuilder()
+                      #                .setRed(red / denominator)
+                      #                .setGreen(green / denominator)
+                      #                .setBlue(blue / denominator);
+                      #        int alpha = color.getAlpha();
+                      #        if (alpha != 255) {
+                      #          result.setAlpha(
+                      #              FloatValue
+                      #                  .newBuilder()
+                      #                  .setValue(((float) alpha) / denominator)
+                      #                  .build());
+                      #        }
+                      #        return resultBuilder.build();
+                      #      }
+                      #      // ...
+                      #
+                      # Example (iOS / Obj-C):
+                      #
+                      #      // ...
+                      #      static UIColor* fromProto(Color* protocolor) {
+                      #         float red = [protocolor red];
+                      #         float green = [protocolor green];
+                      #         float blue = [protocolor blue];
+                      #         FloatValue* alpha_wrapper = [protocolor alpha];
+                      #         float alpha = 1.0;
+                      #         if (alpha_wrapper != nil) {
+                      #           alpha = [alpha_wrapper value];
+                      #         }
+                      #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                      #      }
+                      #
+                      #      static Color* toProto(UIColor* color) {
+                      #          CGFloat red, green, blue, alpha;
+                      #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                      #            return nil;
+                      #          }
+                      #          Color* result = [Color alloc] init];
+                      #          [result setRed:red];
+                      #          [result setGreen:green];
+                      #          [result setBlue:blue];
+                      #          if (alpha <= 0.9999) {
+                      #            [result setAlpha:floatWrapperWithValue(alpha)];
+                      #          }
+                      #          [result autorelease];
+                      #          return result;
+                      #     }
+                      #     // ...
+                      #
+                      #  Example (JavaScript):
+                      #
+                      #     // ...
+                      #
+                      #     var protoToCssColor = function(rgb_color) {
+                      #        var redFrac = rgb_color.red || 0.0;
+                      #        var greenFrac = rgb_color.green || 0.0;
+                      #        var blueFrac = rgb_color.blue || 0.0;
+                      #        var red = Math.floor(redFrac * 255);
+                      #        var green = Math.floor(greenFrac * 255);
+                      #        var blue = Math.floor(blueFrac * 255);
+                      #
+                      #        if (!('alpha' in rgb_color)) {
+                      #           return rgbToCssColor_(red, green, blue);
+                      #        }
+                      #
+                      #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                      #        var rgbParams = [red, green, blue].join(',');
+                      #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                      #     };
+                      #
+                      #     var rgbToCssColor_ = function(red, green, blue) {
+                      #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                      #       var hexString = rgbNumber.toString(16);
+                      #       var missingZeros = 6 - hexString.length;
+                      #       var resultBuilder = ['#'];
+                      #       for (var i = 0; i < missingZeros; i++) {
+                      #          resultBuilder.push('0');
+                      #       }
+                      #       resultBuilder.push(hexString);
+                      #       return resultBuilder.join('');
+                      #     };
+                      #
+                      #     // ...
+                    "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                    "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                        # the final pixel color is defined by the equation:
+                        #
+                        #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                        #
+                        # This means that a value of 1.0 corresponds to a solid color, whereas
+                        # a value of 0.0 corresponds to a completely transparent color. This
+                        # uses a wrapper message rather than a simple float scalar so that it is
+                        # possible to distinguish between a default value and the value being unset.
+                        # If omitted, this color object is to be rendered as a solid color
+                        # (as if the alpha value had been explicitly given with a value of 1.0).
+                    "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                    "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                  },
+                  "bold": True or False, # True if the text is bold.
+                  "strikethrough": True or False, # True if the text has a strikethrough.
+                  "fontFamily": "A String", # The font family.
+                  "fontSize": 42, # The size of the font.
+                  "italic": True or False, # True if the text is italicized.
+                  "underline": True or False, # True if the text is underlined.
+                },
+                "hyperlinkDisplayType": "A String", # How a hyperlink, if it exists, should be displayed in the cell.
+                "borders": { # The borders of the cell. # The borders of the cell.
+                  "top": { # A border along a cell. # The top border of the cell.
+                    "color": { # Represents a color in the RGBA color space. This representation is designed # The color of the border.
+                        # for simplicity of conversion to/from color representations in various
+                        # languages over compactness; for example, the fields of this representation
+                        # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                        # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                        # method in iOS; and, with just a little work, it can be easily formatted into
+                        # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                        #
+                        # Example (Java):
+                        #
+                        #      import com.google.type.Color;
+                        #
+                        #      // ...
+                        #      public static java.awt.Color fromProto(Color protocolor) {
+                        #        float alpha = protocolor.hasAlpha()
+                        #            ? protocolor.getAlpha().getValue()
+                        #            : 1.0;
+                        #
+                        #        return new java.awt.Color(
+                        #            protocolor.getRed(),
+                        #            protocolor.getGreen(),
+                        #            protocolor.getBlue(),
+                        #            alpha);
+                        #      }
+                        #
+                        #      public static Color toProto(java.awt.Color color) {
+                        #        float red = (float) color.getRed();
+                        #        float green = (float) color.getGreen();
+                        #        float blue = (float) color.getBlue();
+                        #        float denominator = 255.0;
+                        #        Color.Builder resultBuilder =
+                        #            Color
+                        #                .newBuilder()
+                        #                .setRed(red / denominator)
+                        #                .setGreen(green / denominator)
+                        #                .setBlue(blue / denominator);
+                        #        int alpha = color.getAlpha();
+                        #        if (alpha != 255) {
+                        #          result.setAlpha(
+                        #              FloatValue
+                        #                  .newBuilder()
+                        #                  .setValue(((float) alpha) / denominator)
+                        #                  .build());
+                        #        }
+                        #        return resultBuilder.build();
+                        #      }
+                        #      // ...
+                        #
+                        # Example (iOS / Obj-C):
+                        #
+                        #      // ...
+                        #      static UIColor* fromProto(Color* protocolor) {
+                        #         float red = [protocolor red];
+                        #         float green = [protocolor green];
+                        #         float blue = [protocolor blue];
+                        #         FloatValue* alpha_wrapper = [protocolor alpha];
+                        #         float alpha = 1.0;
+                        #         if (alpha_wrapper != nil) {
+                        #           alpha = [alpha_wrapper value];
+                        #         }
+                        #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                        #      }
+                        #
+                        #      static Color* toProto(UIColor* color) {
+                        #          CGFloat red, green, blue, alpha;
+                        #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                        #            return nil;
+                        #          }
+                        #          Color* result = [Color alloc] init];
+                        #          [result setRed:red];
+                        #          [result setGreen:green];
+                        #          [result setBlue:blue];
+                        #          if (alpha <= 0.9999) {
+                        #            [result setAlpha:floatWrapperWithValue(alpha)];
+                        #          }
+                        #          [result autorelease];
+                        #          return result;
+                        #     }
+                        #     // ...
+                        #
+                        #  Example (JavaScript):
+                        #
+                        #     // ...
+                        #
+                        #     var protoToCssColor = function(rgb_color) {
+                        #        var redFrac = rgb_color.red || 0.0;
+                        #        var greenFrac = rgb_color.green || 0.0;
+                        #        var blueFrac = rgb_color.blue || 0.0;
+                        #        var red = Math.floor(redFrac * 255);
+                        #        var green = Math.floor(greenFrac * 255);
+                        #        var blue = Math.floor(blueFrac * 255);
+                        #
+                        #        if (!('alpha' in rgb_color)) {
+                        #           return rgbToCssColor_(red, green, blue);
+                        #        }
+                        #
+                        #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                        #        var rgbParams = [red, green, blue].join(',');
+                        #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                        #     };
+                        #
+                        #     var rgbToCssColor_ = function(red, green, blue) {
+                        #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                        #       var hexString = rgbNumber.toString(16);
+                        #       var missingZeros = 6 - hexString.length;
+                        #       var resultBuilder = ['#'];
+                        #       for (var i = 0; i < missingZeros; i++) {
+                        #          resultBuilder.push('0');
+                        #       }
+                        #       resultBuilder.push(hexString);
+                        #       return resultBuilder.join('');
+                        #     };
+                        #
+                        #     // ...
+                      "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                      "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                          # the final pixel color is defined by the equation:
+                          #
+                          #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                          #
+                          # This means that a value of 1.0 corresponds to a solid color, whereas
+                          # a value of 0.0 corresponds to a completely transparent color. This
+                          # uses a wrapper message rather than a simple float scalar so that it is
+                          # possible to distinguish between a default value and the value being unset.
+                          # If omitted, this color object is to be rendered as a solid color
+                          # (as if the alpha value had been explicitly given with a value of 1.0).
+                      "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                      "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                    },
+                    "width": 42, # The width of the border, in pixels.
+                        # Border widths must be between 0 and 3 pixels.
+                    "style": "A String", # The style of the border.
+                  },
+                  "right": { # A border along a cell. # The right border of the cell.
+                    "color": { # Represents a color in the RGBA color space. This representation is designed # The color of the border.
+                        # for simplicity of conversion to/from color representations in various
+                        # languages over compactness; for example, the fields of this representation
+                        # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                        # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                        # method in iOS; and, with just a little work, it can be easily formatted into
+                        # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                        #
+                        # Example (Java):
+                        #
+                        #      import com.google.type.Color;
+                        #
+                        #      // ...
+                        #      public static java.awt.Color fromProto(Color protocolor) {
+                        #        float alpha = protocolor.hasAlpha()
+                        #            ? protocolor.getAlpha().getValue()
+                        #            : 1.0;
+                        #
+                        #        return new java.awt.Color(
+                        #            protocolor.getRed(),
+                        #            protocolor.getGreen(),
+                        #            protocolor.getBlue(),
+                        #            alpha);
+                        #      }
+                        #
+                        #      public static Color toProto(java.awt.Color color) {
+                        #        float red = (float) color.getRed();
+                        #        float green = (float) color.getGreen();
+                        #        float blue = (float) color.getBlue();
+                        #        float denominator = 255.0;
+                        #        Color.Builder resultBuilder =
+                        #            Color
+                        #                .newBuilder()
+                        #                .setRed(red / denominator)
+                        #                .setGreen(green / denominator)
+                        #                .setBlue(blue / denominator);
+                        #        int alpha = color.getAlpha();
+                        #        if (alpha != 255) {
+                        #          result.setAlpha(
+                        #              FloatValue
+                        #                  .newBuilder()
+                        #                  .setValue(((float) alpha) / denominator)
+                        #                  .build());
+                        #        }
+                        #        return resultBuilder.build();
+                        #      }
+                        #      // ...
+                        #
+                        # Example (iOS / Obj-C):
+                        #
+                        #      // ...
+                        #      static UIColor* fromProto(Color* protocolor) {
+                        #         float red = [protocolor red];
+                        #         float green = [protocolor green];
+                        #         float blue = [protocolor blue];
+                        #         FloatValue* alpha_wrapper = [protocolor alpha];
+                        #         float alpha = 1.0;
+                        #         if (alpha_wrapper != nil) {
+                        #           alpha = [alpha_wrapper value];
+                        #         }
+                        #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                        #      }
+                        #
+                        #      static Color* toProto(UIColor* color) {
+                        #          CGFloat red, green, blue, alpha;
+                        #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                        #            return nil;
+                        #          }
+                        #          Color* result = [Color alloc] init];
+                        #          [result setRed:red];
+                        #          [result setGreen:green];
+                        #          [result setBlue:blue];
+                        #          if (alpha <= 0.9999) {
+                        #            [result setAlpha:floatWrapperWithValue(alpha)];
+                        #          }
+                        #          [result autorelease];
+                        #          return result;
+                        #     }
+                        #     // ...
+                        #
+                        #  Example (JavaScript):
+                        #
+                        #     // ...
+                        #
+                        #     var protoToCssColor = function(rgb_color) {
+                        #        var redFrac = rgb_color.red || 0.0;
+                        #        var greenFrac = rgb_color.green || 0.0;
+                        #        var blueFrac = rgb_color.blue || 0.0;
+                        #        var red = Math.floor(redFrac * 255);
+                        #        var green = Math.floor(greenFrac * 255);
+                        #        var blue = Math.floor(blueFrac * 255);
+                        #
+                        #        if (!('alpha' in rgb_color)) {
+                        #           return rgbToCssColor_(red, green, blue);
+                        #        }
+                        #
+                        #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                        #        var rgbParams = [red, green, blue].join(',');
+                        #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                        #     };
+                        #
+                        #     var rgbToCssColor_ = function(red, green, blue) {
+                        #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                        #       var hexString = rgbNumber.toString(16);
+                        #       var missingZeros = 6 - hexString.length;
+                        #       var resultBuilder = ['#'];
+                        #       for (var i = 0; i < missingZeros; i++) {
+                        #          resultBuilder.push('0');
+                        #       }
+                        #       resultBuilder.push(hexString);
+                        #       return resultBuilder.join('');
+                        #     };
+                        #
+                        #     // ...
+                      "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                      "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                          # the final pixel color is defined by the equation:
+                          #
+                          #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                          #
+                          # This means that a value of 1.0 corresponds to a solid color, whereas
+                          # a value of 0.0 corresponds to a completely transparent color. This
+                          # uses a wrapper message rather than a simple float scalar so that it is
+                          # possible to distinguish between a default value and the value being unset.
+                          # If omitted, this color object is to be rendered as a solid color
+                          # (as if the alpha value had been explicitly given with a value of 1.0).
+                      "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                      "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                    },
+                    "width": 42, # The width of the border, in pixels.
+                        # Border widths must be between 0 and 3 pixels.
+                    "style": "A String", # The style of the border.
+                  },
+                  "bottom": { # A border along a cell. # The bottom border of the cell.
+                    "color": { # Represents a color in the RGBA color space. This representation is designed # The color of the border.
+                        # for simplicity of conversion to/from color representations in various
+                        # languages over compactness; for example, the fields of this representation
+                        # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                        # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                        # method in iOS; and, with just a little work, it can be easily formatted into
+                        # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                        #
+                        # Example (Java):
+                        #
+                        #      import com.google.type.Color;
+                        #
+                        #      // ...
+                        #      public static java.awt.Color fromProto(Color protocolor) {
+                        #        float alpha = protocolor.hasAlpha()
+                        #            ? protocolor.getAlpha().getValue()
+                        #            : 1.0;
+                        #
+                        #        return new java.awt.Color(
+                        #            protocolor.getRed(),
+                        #            protocolor.getGreen(),
+                        #            protocolor.getBlue(),
+                        #            alpha);
+                        #      }
+                        #
+                        #      public static Color toProto(java.awt.Color color) {
+                        #        float red = (float) color.getRed();
+                        #        float green = (float) color.getGreen();
+                        #        float blue = (float) color.getBlue();
+                        #        float denominator = 255.0;
+                        #        Color.Builder resultBuilder =
+                        #            Color
+                        #                .newBuilder()
+                        #                .setRed(red / denominator)
+                        #                .setGreen(green / denominator)
+                        #                .setBlue(blue / denominator);
+                        #        int alpha = color.getAlpha();
+                        #        if (alpha != 255) {
+                        #          result.setAlpha(
+                        #              FloatValue
+                        #                  .newBuilder()
+                        #                  .setValue(((float) alpha) / denominator)
+                        #                  .build());
+                        #        }
+                        #        return resultBuilder.build();
+                        #      }
+                        #      // ...
+                        #
+                        # Example (iOS / Obj-C):
+                        #
+                        #      // ...
+                        #      static UIColor* fromProto(Color* protocolor) {
+                        #         float red = [protocolor red];
+                        #         float green = [protocolor green];
+                        #         float blue = [protocolor blue];
+                        #         FloatValue* alpha_wrapper = [protocolor alpha];
+                        #         float alpha = 1.0;
+                        #         if (alpha_wrapper != nil) {
+                        #           alpha = [alpha_wrapper value];
+                        #         }
+                        #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                        #      }
+                        #
+                        #      static Color* toProto(UIColor* color) {
+                        #          CGFloat red, green, blue, alpha;
+                        #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                        #            return nil;
+                        #          }
+                        #          Color* result = [Color alloc] init];
+                        #          [result setRed:red];
+                        #          [result setGreen:green];
+                        #          [result setBlue:blue];
+                        #          if (alpha <= 0.9999) {
+                        #            [result setAlpha:floatWrapperWithValue(alpha)];
+                        #          }
+                        #          [result autorelease];
+                        #          return result;
+                        #     }
+                        #     // ...
+                        #
+                        #  Example (JavaScript):
+                        #
+                        #     // ...
+                        #
+                        #     var protoToCssColor = function(rgb_color) {
+                        #        var redFrac = rgb_color.red || 0.0;
+                        #        var greenFrac = rgb_color.green || 0.0;
+                        #        var blueFrac = rgb_color.blue || 0.0;
+                        #        var red = Math.floor(redFrac * 255);
+                        #        var green = Math.floor(greenFrac * 255);
+                        #        var blue = Math.floor(blueFrac * 255);
+                        #
+                        #        if (!('alpha' in rgb_color)) {
+                        #           return rgbToCssColor_(red, green, blue);
+                        #        }
+                        #
+                        #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                        #        var rgbParams = [red, green, blue].join(',');
+                        #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                        #     };
+                        #
+                        #     var rgbToCssColor_ = function(red, green, blue) {
+                        #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                        #       var hexString = rgbNumber.toString(16);
+                        #       var missingZeros = 6 - hexString.length;
+                        #       var resultBuilder = ['#'];
+                        #       for (var i = 0; i < missingZeros; i++) {
+                        #          resultBuilder.push('0');
+                        #       }
+                        #       resultBuilder.push(hexString);
+                        #       return resultBuilder.join('');
+                        #     };
+                        #
+                        #     // ...
+                      "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                      "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                          # the final pixel color is defined by the equation:
+                          #
+                          #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                          #
+                          # This means that a value of 1.0 corresponds to a solid color, whereas
+                          # a value of 0.0 corresponds to a completely transparent color. This
+                          # uses a wrapper message rather than a simple float scalar so that it is
+                          # possible to distinguish between a default value and the value being unset.
+                          # If omitted, this color object is to be rendered as a solid color
+                          # (as if the alpha value had been explicitly given with a value of 1.0).
+                      "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                      "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                    },
+                    "width": 42, # The width of the border, in pixels.
+                        # Border widths must be between 0 and 3 pixels.
+                    "style": "A String", # The style of the border.
+                  },
+                  "left": { # A border along a cell. # The left border of the cell.
+                    "color": { # Represents a color in the RGBA color space. This representation is designed # The color of the border.
+                        # for simplicity of conversion to/from color representations in various
+                        # languages over compactness; for example, the fields of this representation
+                        # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                        # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                        # method in iOS; and, with just a little work, it can be easily formatted into
+                        # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                        #
+                        # Example (Java):
+                        #
+                        #      import com.google.type.Color;
+                        #
+                        #      // ...
+                        #      public static java.awt.Color fromProto(Color protocolor) {
+                        #        float alpha = protocolor.hasAlpha()
+                        #            ? protocolor.getAlpha().getValue()
+                        #            : 1.0;
+                        #
+                        #        return new java.awt.Color(
+                        #            protocolor.getRed(),
+                        #            protocolor.getGreen(),
+                        #            protocolor.getBlue(),
+                        #            alpha);
+                        #      }
+                        #
+                        #      public static Color toProto(java.awt.Color color) {
+                        #        float red = (float) color.getRed();
+                        #        float green = (float) color.getGreen();
+                        #        float blue = (float) color.getBlue();
+                        #        float denominator = 255.0;
+                        #        Color.Builder resultBuilder =
+                        #            Color
+                        #                .newBuilder()
+                        #                .setRed(red / denominator)
+                        #                .setGreen(green / denominator)
+                        #                .setBlue(blue / denominator);
+                        #        int alpha = color.getAlpha();
+                        #        if (alpha != 255) {
+                        #          result.setAlpha(
+                        #              FloatValue
+                        #                  .newBuilder()
+                        #                  .setValue(((float) alpha) / denominator)
+                        #                  .build());
+                        #        }
+                        #        return resultBuilder.build();
+                        #      }
+                        #      // ...
+                        #
+                        # Example (iOS / Obj-C):
+                        #
+                        #      // ...
+                        #      static UIColor* fromProto(Color* protocolor) {
+                        #         float red = [protocolor red];
+                        #         float green = [protocolor green];
+                        #         float blue = [protocolor blue];
+                        #         FloatValue* alpha_wrapper = [protocolor alpha];
+                        #         float alpha = 1.0;
+                        #         if (alpha_wrapper != nil) {
+                        #           alpha = [alpha_wrapper value];
+                        #         }
+                        #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                        #      }
+                        #
+                        #      static Color* toProto(UIColor* color) {
+                        #          CGFloat red, green, blue, alpha;
+                        #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                        #            return nil;
+                        #          }
+                        #          Color* result = [Color alloc] init];
+                        #          [result setRed:red];
+                        #          [result setGreen:green];
+                        #          [result setBlue:blue];
+                        #          if (alpha <= 0.9999) {
+                        #            [result setAlpha:floatWrapperWithValue(alpha)];
+                        #          }
+                        #          [result autorelease];
+                        #          return result;
+                        #     }
+                        #     // ...
+                        #
+                        #  Example (JavaScript):
+                        #
+                        #     // ...
+                        #
+                        #     var protoToCssColor = function(rgb_color) {
+                        #        var redFrac = rgb_color.red || 0.0;
+                        #        var greenFrac = rgb_color.green || 0.0;
+                        #        var blueFrac = rgb_color.blue || 0.0;
+                        #        var red = Math.floor(redFrac * 255);
+                        #        var green = Math.floor(greenFrac * 255);
+                        #        var blue = Math.floor(blueFrac * 255);
+                        #
+                        #        if (!('alpha' in rgb_color)) {
+                        #           return rgbToCssColor_(red, green, blue);
+                        #        }
+                        #
+                        #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                        #        var rgbParams = [red, green, blue].join(',');
+                        #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                        #     };
+                        #
+                        #     var rgbToCssColor_ = function(red, green, blue) {
+                        #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                        #       var hexString = rgbNumber.toString(16);
+                        #       var missingZeros = 6 - hexString.length;
+                        #       var resultBuilder = ['#'];
+                        #       for (var i = 0; i < missingZeros; i++) {
+                        #          resultBuilder.push('0');
+                        #       }
+                        #       resultBuilder.push(hexString);
+                        #       return resultBuilder.join('');
+                        #     };
+                        #
+                        #     // ...
+                      "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                      "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                          # the final pixel color is defined by the equation:
+                          #
+                          #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                          #
+                          # This means that a value of 1.0 corresponds to a solid color, whereas
+                          # a value of 0.0 corresponds to a completely transparent color. This
+                          # uses a wrapper message rather than a simple float scalar so that it is
+                          # possible to distinguish between a default value and the value being unset.
+                          # If omitted, this color object is to be rendered as a solid color
+                          # (as if the alpha value had been explicitly given with a value of 1.0).
+                      "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                      "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                    },
+                    "width": 42, # The width of the border, in pixels.
+                        # Border widths must be between 0 and 3 pixels.
+                    "style": "A String", # The style of the border.
+                  },
+                },
+                "wrapStrategy": "A String", # The wrap strategy for the value in the cell.
+              },
+            },
+            "gradientRule": { # A rule that applies a gradient color scale format, based on # The formatting will vary based on the gradients in the rule.
+                # the interpolation points listed. The format of a cell will vary
+                # based on its contents as compared to the values of the interpolation
+                # points.
+              "maxpoint": { # A single interpolation point a gradient conditional format. # The final interpolation point.
+                  # These pin the gradient color scale according to the color,
+                  # type and value chosen.
+                "color": { # Represents a color in the RGBA color space. This representation is designed # The color this interpolation point should use.
+                    # for simplicity of conversion to/from color representations in various
+                    # languages over compactness; for example, the fields of this representation
+                    # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                    # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                    # method in iOS; and, with just a little work, it can be easily formatted into
+                    # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                    #
+                    # Example (Java):
+                    #
+                    #      import com.google.type.Color;
+                    #
+                    #      // ...
+                    #      public static java.awt.Color fromProto(Color protocolor) {
+                    #        float alpha = protocolor.hasAlpha()
+                    #            ? protocolor.getAlpha().getValue()
+                    #            : 1.0;
+                    #
+                    #        return new java.awt.Color(
+                    #            protocolor.getRed(),
+                    #            protocolor.getGreen(),
+                    #            protocolor.getBlue(),
+                    #            alpha);
+                    #      }
+                    #
+                    #      public static Color toProto(java.awt.Color color) {
+                    #        float red = (float) color.getRed();
+                    #        float green = (float) color.getGreen();
+                    #        float blue = (float) color.getBlue();
+                    #        float denominator = 255.0;
+                    #        Color.Builder resultBuilder =
+                    #            Color
+                    #                .newBuilder()
+                    #                .setRed(red / denominator)
+                    #                .setGreen(green / denominator)
+                    #                .setBlue(blue / denominator);
+                    #        int alpha = color.getAlpha();
+                    #        if (alpha != 255) {
+                    #          result.setAlpha(
+                    #              FloatValue
+                    #                  .newBuilder()
+                    #                  .setValue(((float) alpha) / denominator)
+                    #                  .build());
+                    #        }
+                    #        return resultBuilder.build();
+                    #      }
+                    #      // ...
+                    #
+                    # Example (iOS / Obj-C):
+                    #
+                    #      // ...
+                    #      static UIColor* fromProto(Color* protocolor) {
+                    #         float red = [protocolor red];
+                    #         float green = [protocolor green];
+                    #         float blue = [protocolor blue];
+                    #         FloatValue* alpha_wrapper = [protocolor alpha];
+                    #         float alpha = 1.0;
+                    #         if (alpha_wrapper != nil) {
+                    #           alpha = [alpha_wrapper value];
+                    #         }
+                    #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                    #      }
+                    #
+                    #      static Color* toProto(UIColor* color) {
+                    #          CGFloat red, green, blue, alpha;
+                    #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                    #            return nil;
+                    #          }
+                    #          Color* result = [Color alloc] init];
+                    #          [result setRed:red];
+                    #          [result setGreen:green];
+                    #          [result setBlue:blue];
+                    #          if (alpha <= 0.9999) {
+                    #            [result setAlpha:floatWrapperWithValue(alpha)];
+                    #          }
+                    #          [result autorelease];
+                    #          return result;
+                    #     }
+                    #     // ...
+                    #
+                    #  Example (JavaScript):
+                    #
+                    #     // ...
+                    #
+                    #     var protoToCssColor = function(rgb_color) {
+                    #        var redFrac = rgb_color.red || 0.0;
+                    #        var greenFrac = rgb_color.green || 0.0;
+                    #        var blueFrac = rgb_color.blue || 0.0;
+                    #        var red = Math.floor(redFrac * 255);
+                    #        var green = Math.floor(greenFrac * 255);
+                    #        var blue = Math.floor(blueFrac * 255);
+                    #
+                    #        if (!('alpha' in rgb_color)) {
+                    #           return rgbToCssColor_(red, green, blue);
+                    #        }
+                    #
+                    #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                    #        var rgbParams = [red, green, blue].join(',');
+                    #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                    #     };
+                    #
+                    #     var rgbToCssColor_ = function(red, green, blue) {
+                    #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                    #       var hexString = rgbNumber.toString(16);
+                    #       var missingZeros = 6 - hexString.length;
+                    #       var resultBuilder = ['#'];
+                    #       for (var i = 0; i < missingZeros; i++) {
+                    #          resultBuilder.push('0');
+                    #       }
+                    #       resultBuilder.push(hexString);
+                    #       return resultBuilder.join('');
+                    #     };
+                    #
+                    #     // ...
+                  "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                  "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                      # the final pixel color is defined by the equation:
+                      #
+                      #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                      #
+                      # This means that a value of 1.0 corresponds to a solid color, whereas
+                      # a value of 0.0 corresponds to a completely transparent color. This
+                      # uses a wrapper message rather than a simple float scalar so that it is
+                      # possible to distinguish between a default value and the value being unset.
+                      # If omitted, this color object is to be rendered as a solid color
+                      # (as if the alpha value had been explicitly given with a value of 1.0).
+                  "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                  "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                },
+                "type": "A String", # How the value should be interpreted.
+                "value": "A String", # The value this interpolation point uses.  May be a formula.
+                    # Unused if type is MIN or
+                    # MAX.
+              },
+              "midpoint": { # A single interpolation point a gradient conditional format. # An optional midway interpolation point.
+                  # These pin the gradient color scale according to the color,
+                  # type and value chosen.
+                "color": { # Represents a color in the RGBA color space. This representation is designed # The color this interpolation point should use.
+                    # for simplicity of conversion to/from color representations in various
+                    # languages over compactness; for example, the fields of this representation
+                    # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                    # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                    # method in iOS; and, with just a little work, it can be easily formatted into
+                    # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                    #
+                    # Example (Java):
+                    #
+                    #      import com.google.type.Color;
+                    #
+                    #      // ...
+                    #      public static java.awt.Color fromProto(Color protocolor) {
+                    #        float alpha = protocolor.hasAlpha()
+                    #            ? protocolor.getAlpha().getValue()
+                    #            : 1.0;
+                    #
+                    #        return new java.awt.Color(
+                    #            protocolor.getRed(),
+                    #            protocolor.getGreen(),
+                    #            protocolor.getBlue(),
+                    #            alpha);
+                    #      }
+                    #
+                    #      public static Color toProto(java.awt.Color color) {
+                    #        float red = (float) color.getRed();
+                    #        float green = (float) color.getGreen();
+                    #        float blue = (float) color.getBlue();
+                    #        float denominator = 255.0;
+                    #        Color.Builder resultBuilder =
+                    #            Color
+                    #                .newBuilder()
+                    #                .setRed(red / denominator)
+                    #                .setGreen(green / denominator)
+                    #                .setBlue(blue / denominator);
+                    #        int alpha = color.getAlpha();
+                    #        if (alpha != 255) {
+                    #          result.setAlpha(
+                    #              FloatValue
+                    #                  .newBuilder()
+                    #                  .setValue(((float) alpha) / denominator)
+                    #                  .build());
+                    #        }
+                    #        return resultBuilder.build();
+                    #      }
+                    #      // ...
+                    #
+                    # Example (iOS / Obj-C):
+                    #
+                    #      // ...
+                    #      static UIColor* fromProto(Color* protocolor) {
+                    #         float red = [protocolor red];
+                    #         float green = [protocolor green];
+                    #         float blue = [protocolor blue];
+                    #         FloatValue* alpha_wrapper = [protocolor alpha];
+                    #         float alpha = 1.0;
+                    #         if (alpha_wrapper != nil) {
+                    #           alpha = [alpha_wrapper value];
+                    #         }
+                    #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                    #      }
+                    #
+                    #      static Color* toProto(UIColor* color) {
+                    #          CGFloat red, green, blue, alpha;
+                    #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                    #            return nil;
+                    #          }
+                    #          Color* result = [Color alloc] init];
+                    #          [result setRed:red];
+                    #          [result setGreen:green];
+                    #          [result setBlue:blue];
+                    #          if (alpha <= 0.9999) {
+                    #            [result setAlpha:floatWrapperWithValue(alpha)];
+                    #          }
+                    #          [result autorelease];
+                    #          return result;
+                    #     }
+                    #     // ...
+                    #
+                    #  Example (JavaScript):
+                    #
+                    #     // ...
+                    #
+                    #     var protoToCssColor = function(rgb_color) {
+                    #        var redFrac = rgb_color.red || 0.0;
+                    #        var greenFrac = rgb_color.green || 0.0;
+                    #        var blueFrac = rgb_color.blue || 0.0;
+                    #        var red = Math.floor(redFrac * 255);
+                    #        var green = Math.floor(greenFrac * 255);
+                    #        var blue = Math.floor(blueFrac * 255);
+                    #
+                    #        if (!('alpha' in rgb_color)) {
+                    #           return rgbToCssColor_(red, green, blue);
+                    #        }
+                    #
+                    #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                    #        var rgbParams = [red, green, blue].join(',');
+                    #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                    #     };
+                    #
+                    #     var rgbToCssColor_ = function(red, green, blue) {
+                    #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                    #       var hexString = rgbNumber.toString(16);
+                    #       var missingZeros = 6 - hexString.length;
+                    #       var resultBuilder = ['#'];
+                    #       for (var i = 0; i < missingZeros; i++) {
+                    #          resultBuilder.push('0');
+                    #       }
+                    #       resultBuilder.push(hexString);
+                    #       return resultBuilder.join('');
+                    #     };
+                    #
+                    #     // ...
+                  "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                  "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                      # the final pixel color is defined by the equation:
+                      #
+                      #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                      #
+                      # This means that a value of 1.0 corresponds to a solid color, whereas
+                      # a value of 0.0 corresponds to a completely transparent color. This
+                      # uses a wrapper message rather than a simple float scalar so that it is
+                      # possible to distinguish between a default value and the value being unset.
+                      # If omitted, this color object is to be rendered as a solid color
+                      # (as if the alpha value had been explicitly given with a value of 1.0).
+                  "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                  "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                },
+                "type": "A String", # How the value should be interpreted.
+                "value": "A String", # The value this interpolation point uses.  May be a formula.
+                    # Unused if type is MIN or
+                    # MAX.
+              },
+              "minpoint": { # A single interpolation point a gradient conditional format. # The starting interpolation point.
+                  # These pin the gradient color scale according to the color,
+                  # type and value chosen.
+                "color": { # Represents a color in the RGBA color space. This representation is designed # The color this interpolation point should use.
+                    # for simplicity of conversion to/from color representations in various
+                    # languages over compactness; for example, the fields of this representation
+                    # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                    # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                    # method in iOS; and, with just a little work, it can be easily formatted into
+                    # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                    #
+                    # Example (Java):
+                    #
+                    #      import com.google.type.Color;
+                    #
+                    #      // ...
+                    #      public static java.awt.Color fromProto(Color protocolor) {
+                    #        float alpha = protocolor.hasAlpha()
+                    #            ? protocolor.getAlpha().getValue()
+                    #            : 1.0;
+                    #
+                    #        return new java.awt.Color(
+                    #            protocolor.getRed(),
+                    #            protocolor.getGreen(),
+                    #            protocolor.getBlue(),
+                    #            alpha);
+                    #      }
+                    #
+                    #      public static Color toProto(java.awt.Color color) {
+                    #        float red = (float) color.getRed();
+                    #        float green = (float) color.getGreen();
+                    #        float blue = (float) color.getBlue();
+                    #        float denominator = 255.0;
+                    #        Color.Builder resultBuilder =
+                    #            Color
+                    #                .newBuilder()
+                    #                .setRed(red / denominator)
+                    #                .setGreen(green / denominator)
+                    #                .setBlue(blue / denominator);
+                    #        int alpha = color.getAlpha();
+                    #        if (alpha != 255) {
+                    #          result.setAlpha(
+                    #              FloatValue
+                    #                  .newBuilder()
+                    #                  .setValue(((float) alpha) / denominator)
+                    #                  .build());
+                    #        }
+                    #        return resultBuilder.build();
+                    #      }
+                    #      // ...
+                    #
+                    # Example (iOS / Obj-C):
+                    #
+                    #      // ...
+                    #      static UIColor* fromProto(Color* protocolor) {
+                    #         float red = [protocolor red];
+                    #         float green = [protocolor green];
+                    #         float blue = [protocolor blue];
+                    #         FloatValue* alpha_wrapper = [protocolor alpha];
+                    #         float alpha = 1.0;
+                    #         if (alpha_wrapper != nil) {
+                    #           alpha = [alpha_wrapper value];
+                    #         }
+                    #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                    #      }
+                    #
+                    #      static Color* toProto(UIColor* color) {
+                    #          CGFloat red, green, blue, alpha;
+                    #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                    #            return nil;
+                    #          }
+                    #          Color* result = [Color alloc] init];
+                    #          [result setRed:red];
+                    #          [result setGreen:green];
+                    #          [result setBlue:blue];
+                    #          if (alpha <= 0.9999) {
+                    #            [result setAlpha:floatWrapperWithValue(alpha)];
+                    #          }
+                    #          [result autorelease];
+                    #          return result;
+                    #     }
+                    #     // ...
+                    #
+                    #  Example (JavaScript):
+                    #
+                    #     // ...
+                    #
+                    #     var protoToCssColor = function(rgb_color) {
+                    #        var redFrac = rgb_color.red || 0.0;
+                    #        var greenFrac = rgb_color.green || 0.0;
+                    #        var blueFrac = rgb_color.blue || 0.0;
+                    #        var red = Math.floor(redFrac * 255);
+                    #        var green = Math.floor(greenFrac * 255);
+                    #        var blue = Math.floor(blueFrac * 255);
+                    #
+                    #        if (!('alpha' in rgb_color)) {
+                    #           return rgbToCssColor_(red, green, blue);
+                    #        }
+                    #
+                    #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                    #        var rgbParams = [red, green, blue].join(',');
+                    #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                    #     };
+                    #
+                    #     var rgbToCssColor_ = function(red, green, blue) {
+                    #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                    #       var hexString = rgbNumber.toString(16);
+                    #       var missingZeros = 6 - hexString.length;
+                    #       var resultBuilder = ['#'];
+                    #       for (var i = 0; i < missingZeros; i++) {
+                    #          resultBuilder.push('0');
+                    #       }
+                    #       resultBuilder.push(hexString);
+                    #       return resultBuilder.join('');
+                    #     };
+                    #
+                    #     // ...
+                  "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                  "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                      # the final pixel color is defined by the equation:
+                      #
+                      #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                      #
+                      # This means that a value of 1.0 corresponds to a solid color, whereas
+                      # a value of 0.0 corresponds to a completely transparent color. This
+                      # uses a wrapper message rather than a simple float scalar so that it is
+                      # possible to distinguish between a default value and the value being unset.
+                      # If omitted, this color object is to be rendered as a solid color
+                      # (as if the alpha value had been explicitly given with a value of 1.0).
+                  "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                  "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                },
+                "type": "A String", # How the value should be interpreted.
+                "value": "A String", # The value this interpolation point uses.  May be a formula.
+                    # Unused if type is MIN or
+                    # MAX.
+              },
+            },
+          },
+          "newRule": { # A rule describing a conditional format. # The new rule that replaced the old rule (if replacing),
+              # or the rule that was moved (if moved)
+            "ranges": [ # The ranges that will be formatted if the condition is true.
+                # All the ranges must be on the same grid.
+              { # A range on a sheet.
+                  # 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 grid 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.
+                "startRowIndex": 42, # The start row (inclusive) 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.
+                "endColumnIndex": 42, # The end column (exclusive) of the range, or not set if unbounded.
+              },
+            ],
+            "booleanRule": { # A rule that may or may not match, depending on the condition. # The formatting is either "on" or "off" according to the rule.
+              "condition": { # A condition that can evaluate to true or false. # The condition of the rule. If the condition evaluates to true,
+                  # the format will be applied.
+                  # BooleanConditions are used by conditional formatting,
+                  # data validation, and the criteria in filters.
+                "type": "A String", # The type of condition.
+                "values": [ # The values of the condition. The number of supported values depends
+                    # on the condition type.  Some support zero values,
+                    # others one or two values,
+                    # and ConditionType.ONE_OF_LIST supports an arbitrary number of values.
+                  { # The value of the condition.
+                    "relativeDate": "A String", # A relative date (based on the current date).
+                        # Valid only if the type is
+                        # DATE_BEFORE,
+                        # DATE_AFTER,
+                        # DATE_ON_OR_BEFORE or
+                        # DATE_ON_OR_AFTER.
+                        #
+                        # Relative dates are not supported in data validation.
+                        # They are supported only in conditional formatting and
+                        # conditional filters.
+                    "userEnteredValue": "A String", # A value the condition is based on.
+                        # The value will be parsed as if the user typed into a cell.
+                        # Formulas are supported (and must begin with an `=`).
+                  },
+                ],
+              },
+              "format": { # The format of a cell. # The format to apply.
+                  # Conditional formatting can only apply a subset of formatting:
+                  # bold, italic,
+                  # strikethrough,
+                  # foreground color &
+                  # background color.
+                "numberFormat": { # The number format of a cell. # A format describing how number values should be represented to the user.
+                    # When updating, all fields must be set.
+                  "pattern": "A String", # Pattern string used for formatting.
+                  "type": "A String", # The type of the number format.
+                },
+                "textDirection": "A String", # The direction of the text in the cell.
+                "padding": { # The amount of padding around the cell, in pixels. # The padding of the cell.
+                    # When updating padding, every field must be specified.
+                  "top": 42, # The top padding of the cell.
+                  "right": 42, # The right padding of the cell.
+                  "bottom": 42, # The bottom padding of the cell.
+                  "left": 42, # The left padding of the cell.
+                },
+                "horizontalAlignment": "A String", # The horizontal alignment of the value in cell.
+                "backgroundColor": { # Represents a color in the RGBA color space. This representation is designed # The background color of the cell.
+                    # for simplicity of conversion to/from color representations in various
+                    # languages over compactness; for example, the fields of this representation
+                    # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                    # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                    # method in iOS; and, with just a little work, it can be easily formatted into
+                    # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                    #
+                    # Example (Java):
+                    #
+                    #      import com.google.type.Color;
+                    #
+                    #      // ...
+                    #      public static java.awt.Color fromProto(Color protocolor) {
+                    #        float alpha = protocolor.hasAlpha()
+                    #            ? protocolor.getAlpha().getValue()
+                    #            : 1.0;
+                    #
+                    #        return new java.awt.Color(
+                    #            protocolor.getRed(),
+                    #            protocolor.getGreen(),
+                    #            protocolor.getBlue(),
+                    #            alpha);
+                    #      }
+                    #
+                    #      public static Color toProto(java.awt.Color color) {
+                    #        float red = (float) color.getRed();
+                    #        float green = (float) color.getGreen();
+                    #        float blue = (float) color.getBlue();
+                    #        float denominator = 255.0;
+                    #        Color.Builder resultBuilder =
+                    #            Color
+                    #                .newBuilder()
+                    #                .setRed(red / denominator)
+                    #                .setGreen(green / denominator)
+                    #                .setBlue(blue / denominator);
+                    #        int alpha = color.getAlpha();
+                    #        if (alpha != 255) {
+                    #          result.setAlpha(
+                    #              FloatValue
+                    #                  .newBuilder()
+                    #                  .setValue(((float) alpha) / denominator)
+                    #                  .build());
+                    #        }
+                    #        return resultBuilder.build();
+                    #      }
+                    #      // ...
+                    #
+                    # Example (iOS / Obj-C):
+                    #
+                    #      // ...
+                    #      static UIColor* fromProto(Color* protocolor) {
+                    #         float red = [protocolor red];
+                    #         float green = [protocolor green];
+                    #         float blue = [protocolor blue];
+                    #         FloatValue* alpha_wrapper = [protocolor alpha];
+                    #         float alpha = 1.0;
+                    #         if (alpha_wrapper != nil) {
+                    #           alpha = [alpha_wrapper value];
+                    #         }
+                    #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                    #      }
+                    #
+                    #      static Color* toProto(UIColor* color) {
+                    #          CGFloat red, green, blue, alpha;
+                    #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                    #            return nil;
+                    #          }
+                    #          Color* result = [Color alloc] init];
+                    #          [result setRed:red];
+                    #          [result setGreen:green];
+                    #          [result setBlue:blue];
+                    #          if (alpha <= 0.9999) {
+                    #            [result setAlpha:floatWrapperWithValue(alpha)];
+                    #          }
+                    #          [result autorelease];
+                    #          return result;
+                    #     }
+                    #     // ...
+                    #
+                    #  Example (JavaScript):
+                    #
+                    #     // ...
+                    #
+                    #     var protoToCssColor = function(rgb_color) {
+                    #        var redFrac = rgb_color.red || 0.0;
+                    #        var greenFrac = rgb_color.green || 0.0;
+                    #        var blueFrac = rgb_color.blue || 0.0;
+                    #        var red = Math.floor(redFrac * 255);
+                    #        var green = Math.floor(greenFrac * 255);
+                    #        var blue = Math.floor(blueFrac * 255);
+                    #
+                    #        if (!('alpha' in rgb_color)) {
+                    #           return rgbToCssColor_(red, green, blue);
+                    #        }
+                    #
+                    #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                    #        var rgbParams = [red, green, blue].join(',');
+                    #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                    #     };
+                    #
+                    #     var rgbToCssColor_ = function(red, green, blue) {
+                    #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                    #       var hexString = rgbNumber.toString(16);
+                    #       var missingZeros = 6 - hexString.length;
+                    #       var resultBuilder = ['#'];
+                    #       for (var i = 0; i < missingZeros; i++) {
+                    #          resultBuilder.push('0');
+                    #       }
+                    #       resultBuilder.push(hexString);
+                    #       return resultBuilder.join('');
+                    #     };
+                    #
+                    #     // ...
+                  "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                  "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                      # the final pixel color is defined by the equation:
+                      #
+                      #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                      #
+                      # This means that a value of 1.0 corresponds to a solid color, whereas
+                      # a value of 0.0 corresponds to a completely transparent color. This
+                      # uses a wrapper message rather than a simple float scalar so that it is
+                      # possible to distinguish between a default value and the value being unset.
+                      # If omitted, this color object is to be rendered as a solid color
+                      # (as if the alpha value had been explicitly given with a value of 1.0).
+                  "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                  "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                },
+                "verticalAlignment": "A String", # The vertical alignment of the value in cell.
+                "textFormat": { # The format of a run of text in a cell. # The format of the text in the cell (unless overridden by a format run).
+                    # Absent values indicate that the field isn't specified.
+                  "foregroundColor": { # Represents a color in the RGBA color space. This representation is designed # The foreground color of the text.
+                      # for simplicity of conversion to/from color representations in various
+                      # languages over compactness; for example, the fields of this representation
+                      # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                      # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                      # method in iOS; and, with just a little work, it can be easily formatted into
+                      # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                      #
+                      # Example (Java):
+                      #
+                      #      import com.google.type.Color;
+                      #
+                      #      // ...
+                      #      public static java.awt.Color fromProto(Color protocolor) {
+                      #        float alpha = protocolor.hasAlpha()
+                      #            ? protocolor.getAlpha().getValue()
+                      #            : 1.0;
+                      #
+                      #        return new java.awt.Color(
+                      #            protocolor.getRed(),
+                      #            protocolor.getGreen(),
+                      #            protocolor.getBlue(),
+                      #            alpha);
+                      #      }
+                      #
+                      #      public static Color toProto(java.awt.Color color) {
+                      #        float red = (float) color.getRed();
+                      #        float green = (float) color.getGreen();
+                      #        float blue = (float) color.getBlue();
+                      #        float denominator = 255.0;
+                      #        Color.Builder resultBuilder =
+                      #            Color
+                      #                .newBuilder()
+                      #                .setRed(red / denominator)
+                      #                .setGreen(green / denominator)
+                      #                .setBlue(blue / denominator);
+                      #        int alpha = color.getAlpha();
+                      #        if (alpha != 255) {
+                      #          result.setAlpha(
+                      #              FloatValue
+                      #                  .newBuilder()
+                      #                  .setValue(((float) alpha) / denominator)
+                      #                  .build());
+                      #        }
+                      #        return resultBuilder.build();
+                      #      }
+                      #      // ...
+                      #
+                      # Example (iOS / Obj-C):
+                      #
+                      #      // ...
+                      #      static UIColor* fromProto(Color* protocolor) {
+                      #         float red = [protocolor red];
+                      #         float green = [protocolor green];
+                      #         float blue = [protocolor blue];
+                      #         FloatValue* alpha_wrapper = [protocolor alpha];
+                      #         float alpha = 1.0;
+                      #         if (alpha_wrapper != nil) {
+                      #           alpha = [alpha_wrapper value];
+                      #         }
+                      #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                      #      }
+                      #
+                      #      static Color* toProto(UIColor* color) {
+                      #          CGFloat red, green, blue, alpha;
+                      #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                      #            return nil;
+                      #          }
+                      #          Color* result = [Color alloc] init];
+                      #          [result setRed:red];
+                      #          [result setGreen:green];
+                      #          [result setBlue:blue];
+                      #          if (alpha <= 0.9999) {
+                      #            [result setAlpha:floatWrapperWithValue(alpha)];
+                      #          }
+                      #          [result autorelease];
+                      #          return result;
+                      #     }
+                      #     // ...
+                      #
+                      #  Example (JavaScript):
+                      #
+                      #     // ...
+                      #
+                      #     var protoToCssColor = function(rgb_color) {
+                      #        var redFrac = rgb_color.red || 0.0;
+                      #        var greenFrac = rgb_color.green || 0.0;
+                      #        var blueFrac = rgb_color.blue || 0.0;
+                      #        var red = Math.floor(redFrac * 255);
+                      #        var green = Math.floor(greenFrac * 255);
+                      #        var blue = Math.floor(blueFrac * 255);
+                      #
+                      #        if (!('alpha' in rgb_color)) {
+                      #           return rgbToCssColor_(red, green, blue);
+                      #        }
+                      #
+                      #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                      #        var rgbParams = [red, green, blue].join(',');
+                      #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                      #     };
+                      #
+                      #     var rgbToCssColor_ = function(red, green, blue) {
+                      #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                      #       var hexString = rgbNumber.toString(16);
+                      #       var missingZeros = 6 - hexString.length;
+                      #       var resultBuilder = ['#'];
+                      #       for (var i = 0; i < missingZeros; i++) {
+                      #          resultBuilder.push('0');
+                      #       }
+                      #       resultBuilder.push(hexString);
+                      #       return resultBuilder.join('');
+                      #     };
+                      #
+                      #     // ...
+                    "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                    "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                        # the final pixel color is defined by the equation:
+                        #
+                        #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                        #
+                        # This means that a value of 1.0 corresponds to a solid color, whereas
+                        # a value of 0.0 corresponds to a completely transparent color. This
+                        # uses a wrapper message rather than a simple float scalar so that it is
+                        # possible to distinguish between a default value and the value being unset.
+                        # If omitted, this color object is to be rendered as a solid color
+                        # (as if the alpha value had been explicitly given with a value of 1.0).
+                    "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                    "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                  },
+                  "bold": True or False, # True if the text is bold.
+                  "strikethrough": True or False, # True if the text has a strikethrough.
+                  "fontFamily": "A String", # The font family.
+                  "fontSize": 42, # The size of the font.
+                  "italic": True or False, # True if the text is italicized.
+                  "underline": True or False, # True if the text is underlined.
+                },
+                "hyperlinkDisplayType": "A String", # How a hyperlink, if it exists, should be displayed in the cell.
+                "borders": { # The borders of the cell. # The borders of the cell.
+                  "top": { # A border along a cell. # The top border of the cell.
+                    "color": { # Represents a color in the RGBA color space. This representation is designed # The color of the border.
+                        # for simplicity of conversion to/from color representations in various
+                        # languages over compactness; for example, the fields of this representation
+                        # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                        # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                        # method in iOS; and, with just a little work, it can be easily formatted into
+                        # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                        #
+                        # Example (Java):
+                        #
+                        #      import com.google.type.Color;
+                        #
+                        #      // ...
+                        #      public static java.awt.Color fromProto(Color protocolor) {
+                        #        float alpha = protocolor.hasAlpha()
+                        #            ? protocolor.getAlpha().getValue()
+                        #            : 1.0;
+                        #
+                        #        return new java.awt.Color(
+                        #            protocolor.getRed(),
+                        #            protocolor.getGreen(),
+                        #            protocolor.getBlue(),
+                        #            alpha);
+                        #      }
+                        #
+                        #      public static Color toProto(java.awt.Color color) {
+                        #        float red = (float) color.getRed();
+                        #        float green = (float) color.getGreen();
+                        #        float blue = (float) color.getBlue();
+                        #        float denominator = 255.0;
+                        #        Color.Builder resultBuilder =
+                        #            Color
+                        #                .newBuilder()
+                        #                .setRed(red / denominator)
+                        #                .setGreen(green / denominator)
+                        #                .setBlue(blue / denominator);
+                        #        int alpha = color.getAlpha();
+                        #        if (alpha != 255) {
+                        #          result.setAlpha(
+                        #              FloatValue
+                        #                  .newBuilder()
+                        #                  .setValue(((float) alpha) / denominator)
+                        #                  .build());
+                        #        }
+                        #        return resultBuilder.build();
+                        #      }
+                        #      // ...
+                        #
+                        # Example (iOS / Obj-C):
+                        #
+                        #      // ...
+                        #      static UIColor* fromProto(Color* protocolor) {
+                        #         float red = [protocolor red];
+                        #         float green = [protocolor green];
+                        #         float blue = [protocolor blue];
+                        #         FloatValue* alpha_wrapper = [protocolor alpha];
+                        #         float alpha = 1.0;
+                        #         if (alpha_wrapper != nil) {
+                        #           alpha = [alpha_wrapper value];
+                        #         }
+                        #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                        #      }
+                        #
+                        #      static Color* toProto(UIColor* color) {
+                        #          CGFloat red, green, blue, alpha;
+                        #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                        #            return nil;
+                        #          }
+                        #          Color* result = [Color alloc] init];
+                        #          [result setRed:red];
+                        #          [result setGreen:green];
+                        #          [result setBlue:blue];
+                        #          if (alpha <= 0.9999) {
+                        #            [result setAlpha:floatWrapperWithValue(alpha)];
+                        #          }
+                        #          [result autorelease];
+                        #          return result;
+                        #     }
+                        #     // ...
+                        #
+                        #  Example (JavaScript):
+                        #
+                        #     // ...
+                        #
+                        #     var protoToCssColor = function(rgb_color) {
+                        #        var redFrac = rgb_color.red || 0.0;
+                        #        var greenFrac = rgb_color.green || 0.0;
+                        #        var blueFrac = rgb_color.blue || 0.0;
+                        #        var red = Math.floor(redFrac * 255);
+                        #        var green = Math.floor(greenFrac * 255);
+                        #        var blue = Math.floor(blueFrac * 255);
+                        #
+                        #        if (!('alpha' in rgb_color)) {
+                        #           return rgbToCssColor_(red, green, blue);
+                        #        }
+                        #
+                        #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                        #        var rgbParams = [red, green, blue].join(',');
+                        #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                        #     };
+                        #
+                        #     var rgbToCssColor_ = function(red, green, blue) {
+                        #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                        #       var hexString = rgbNumber.toString(16);
+                        #       var missingZeros = 6 - hexString.length;
+                        #       var resultBuilder = ['#'];
+                        #       for (var i = 0; i < missingZeros; i++) {
+                        #          resultBuilder.push('0');
+                        #       }
+                        #       resultBuilder.push(hexString);
+                        #       return resultBuilder.join('');
+                        #     };
+                        #
+                        #     // ...
+                      "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                      "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                          # the final pixel color is defined by the equation:
+                          #
+                          #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                          #
+                          # This means that a value of 1.0 corresponds to a solid color, whereas
+                          # a value of 0.0 corresponds to a completely transparent color. This
+                          # uses a wrapper message rather than a simple float scalar so that it is
+                          # possible to distinguish between a default value and the value being unset.
+                          # If omitted, this color object is to be rendered as a solid color
+                          # (as if the alpha value had been explicitly given with a value of 1.0).
+                      "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                      "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                    },
+                    "width": 42, # The width of the border, in pixels.
+                        # Border widths must be between 0 and 3 pixels.
+                    "style": "A String", # The style of the border.
+                  },
+                  "right": { # A border along a cell. # The right border of the cell.
+                    "color": { # Represents a color in the RGBA color space. This representation is designed # The color of the border.
+                        # for simplicity of conversion to/from color representations in various
+                        # languages over compactness; for example, the fields of this representation
+                        # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                        # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                        # method in iOS; and, with just a little work, it can be easily formatted into
+                        # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                        #
+                        # Example (Java):
+                        #
+                        #      import com.google.type.Color;
+                        #
+                        #      // ...
+                        #      public static java.awt.Color fromProto(Color protocolor) {
+                        #        float alpha = protocolor.hasAlpha()
+                        #            ? protocolor.getAlpha().getValue()
+                        #            : 1.0;
+                        #
+                        #        return new java.awt.Color(
+                        #            protocolor.getRed(),
+                        #            protocolor.getGreen(),
+                        #            protocolor.getBlue(),
+                        #            alpha);
+                        #      }
+                        #
+                        #      public static Color toProto(java.awt.Color color) {
+                        #        float red = (float) color.getRed();
+                        #        float green = (float) color.getGreen();
+                        #        float blue = (float) color.getBlue();
+                        #        float denominator = 255.0;
+                        #        Color.Builder resultBuilder =
+                        #            Color
+                        #                .newBuilder()
+                        #                .setRed(red / denominator)
+                        #                .setGreen(green / denominator)
+                        #                .setBlue(blue / denominator);
+                        #        int alpha = color.getAlpha();
+                        #        if (alpha != 255) {
+                        #          result.setAlpha(
+                        #              FloatValue
+                        #                  .newBuilder()
+                        #                  .setValue(((float) alpha) / denominator)
+                        #                  .build());
+                        #        }
+                        #        return resultBuilder.build();
+                        #      }
+                        #      // ...
+                        #
+                        # Example (iOS / Obj-C):
+                        #
+                        #      // ...
+                        #      static UIColor* fromProto(Color* protocolor) {
+                        #         float red = [protocolor red];
+                        #         float green = [protocolor green];
+                        #         float blue = [protocolor blue];
+                        #         FloatValue* alpha_wrapper = [protocolor alpha];
+                        #         float alpha = 1.0;
+                        #         if (alpha_wrapper != nil) {
+                        #           alpha = [alpha_wrapper value];
+                        #         }
+                        #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                        #      }
+                        #
+                        #      static Color* toProto(UIColor* color) {
+                        #          CGFloat red, green, blue, alpha;
+                        #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                        #            return nil;
+                        #          }
+                        #          Color* result = [Color alloc] init];
+                        #          [result setRed:red];
+                        #          [result setGreen:green];
+                        #          [result setBlue:blue];
+                        #          if (alpha <= 0.9999) {
+                        #            [result setAlpha:floatWrapperWithValue(alpha)];
+                        #          }
+                        #          [result autorelease];
+                        #          return result;
+                        #     }
+                        #     // ...
+                        #
+                        #  Example (JavaScript):
+                        #
+                        #     // ...
+                        #
+                        #     var protoToCssColor = function(rgb_color) {
+                        #        var redFrac = rgb_color.red || 0.0;
+                        #        var greenFrac = rgb_color.green || 0.0;
+                        #        var blueFrac = rgb_color.blue || 0.0;
+                        #        var red = Math.floor(redFrac * 255);
+                        #        var green = Math.floor(greenFrac * 255);
+                        #        var blue = Math.floor(blueFrac * 255);
+                        #
+                        #        if (!('alpha' in rgb_color)) {
+                        #           return rgbToCssColor_(red, green, blue);
+                        #        }
+                        #
+                        #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                        #        var rgbParams = [red, green, blue].join(',');
+                        #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                        #     };
+                        #
+                        #     var rgbToCssColor_ = function(red, green, blue) {
+                        #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                        #       var hexString = rgbNumber.toString(16);
+                        #       var missingZeros = 6 - hexString.length;
+                        #       var resultBuilder = ['#'];
+                        #       for (var i = 0; i < missingZeros; i++) {
+                        #          resultBuilder.push('0');
+                        #       }
+                        #       resultBuilder.push(hexString);
+                        #       return resultBuilder.join('');
+                        #     };
+                        #
+                        #     // ...
+                      "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                      "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                          # the final pixel color is defined by the equation:
+                          #
+                          #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                          #
+                          # This means that a value of 1.0 corresponds to a solid color, whereas
+                          # a value of 0.0 corresponds to a completely transparent color. This
+                          # uses a wrapper message rather than a simple float scalar so that it is
+                          # possible to distinguish between a default value and the value being unset.
+                          # If omitted, this color object is to be rendered as a solid color
+                          # (as if the alpha value had been explicitly given with a value of 1.0).
+                      "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                      "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                    },
+                    "width": 42, # The width of the border, in pixels.
+                        # Border widths must be between 0 and 3 pixels.
+                    "style": "A String", # The style of the border.
+                  },
+                  "bottom": { # A border along a cell. # The bottom border of the cell.
+                    "color": { # Represents a color in the RGBA color space. This representation is designed # The color of the border.
+                        # for simplicity of conversion to/from color representations in various
+                        # languages over compactness; for example, the fields of this representation
+                        # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                        # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                        # method in iOS; and, with just a little work, it can be easily formatted into
+                        # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                        #
+                        # Example (Java):
+                        #
+                        #      import com.google.type.Color;
+                        #
+                        #      // ...
+                        #      public static java.awt.Color fromProto(Color protocolor) {
+                        #        float alpha = protocolor.hasAlpha()
+                        #            ? protocolor.getAlpha().getValue()
+                        #            : 1.0;
+                        #
+                        #        return new java.awt.Color(
+                        #            protocolor.getRed(),
+                        #            protocolor.getGreen(),
+                        #            protocolor.getBlue(),
+                        #            alpha);
+                        #      }
+                        #
+                        #      public static Color toProto(java.awt.Color color) {
+                        #        float red = (float) color.getRed();
+                        #        float green = (float) color.getGreen();
+                        #        float blue = (float) color.getBlue();
+                        #        float denominator = 255.0;
+                        #        Color.Builder resultBuilder =
+                        #            Color
+                        #                .newBuilder()
+                        #                .setRed(red / denominator)
+                        #                .setGreen(green / denominator)
+                        #                .setBlue(blue / denominator);
+                        #        int alpha = color.getAlpha();
+                        #        if (alpha != 255) {
+                        #          result.setAlpha(
+                        #              FloatValue
+                        #                  .newBuilder()
+                        #                  .setValue(((float) alpha) / denominator)
+                        #                  .build());
+                        #        }
+                        #        return resultBuilder.build();
+                        #      }
+                        #      // ...
+                        #
+                        # Example (iOS / Obj-C):
+                        #
+                        #      // ...
+                        #      static UIColor* fromProto(Color* protocolor) {
+                        #         float red = [protocolor red];
+                        #         float green = [protocolor green];
+                        #         float blue = [protocolor blue];
+                        #         FloatValue* alpha_wrapper = [protocolor alpha];
+                        #         float alpha = 1.0;
+                        #         if (alpha_wrapper != nil) {
+                        #           alpha = [alpha_wrapper value];
+                        #         }
+                        #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                        #      }
+                        #
+                        #      static Color* toProto(UIColor* color) {
+                        #          CGFloat red, green, blue, alpha;
+                        #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                        #            return nil;
+                        #          }
+                        #          Color* result = [Color alloc] init];
+                        #          [result setRed:red];
+                        #          [result setGreen:green];
+                        #          [result setBlue:blue];
+                        #          if (alpha <= 0.9999) {
+                        #            [result setAlpha:floatWrapperWithValue(alpha)];
+                        #          }
+                        #          [result autorelease];
+                        #          return result;
+                        #     }
+                        #     // ...
+                        #
+                        #  Example (JavaScript):
+                        #
+                        #     // ...
+                        #
+                        #     var protoToCssColor = function(rgb_color) {
+                        #        var redFrac = rgb_color.red || 0.0;
+                        #        var greenFrac = rgb_color.green || 0.0;
+                        #        var blueFrac = rgb_color.blue || 0.0;
+                        #        var red = Math.floor(redFrac * 255);
+                        #        var green = Math.floor(greenFrac * 255);
+                        #        var blue = Math.floor(blueFrac * 255);
+                        #
+                        #        if (!('alpha' in rgb_color)) {
+                        #           return rgbToCssColor_(red, green, blue);
+                        #        }
+                        #
+                        #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                        #        var rgbParams = [red, green, blue].join(',');
+                        #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                        #     };
+                        #
+                        #     var rgbToCssColor_ = function(red, green, blue) {
+                        #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                        #       var hexString = rgbNumber.toString(16);
+                        #       var missingZeros = 6 - hexString.length;
+                        #       var resultBuilder = ['#'];
+                        #       for (var i = 0; i < missingZeros; i++) {
+                        #          resultBuilder.push('0');
+                        #       }
+                        #       resultBuilder.push(hexString);
+                        #       return resultBuilder.join('');
+                        #     };
+                        #
+                        #     // ...
+                      "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                      "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                          # the final pixel color is defined by the equation:
+                          #
+                          #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                          #
+                          # This means that a value of 1.0 corresponds to a solid color, whereas
+                          # a value of 0.0 corresponds to a completely transparent color. This
+                          # uses a wrapper message rather than a simple float scalar so that it is
+                          # possible to distinguish between a default value and the value being unset.
+                          # If omitted, this color object is to be rendered as a solid color
+                          # (as if the alpha value had been explicitly given with a value of 1.0).
+                      "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                      "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                    },
+                    "width": 42, # The width of the border, in pixels.
+                        # Border widths must be between 0 and 3 pixels.
+                    "style": "A String", # The style of the border.
+                  },
+                  "left": { # A border along a cell. # The left border of the cell.
+                    "color": { # Represents a color in the RGBA color space. This representation is designed # The color of the border.
+                        # for simplicity of conversion to/from color representations in various
+                        # languages over compactness; for example, the fields of this representation
+                        # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                        # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                        # method in iOS; and, with just a little work, it can be easily formatted into
+                        # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                        #
+                        # Example (Java):
+                        #
+                        #      import com.google.type.Color;
+                        #
+                        #      // ...
+                        #      public static java.awt.Color fromProto(Color protocolor) {
+                        #        float alpha = protocolor.hasAlpha()
+                        #            ? protocolor.getAlpha().getValue()
+                        #            : 1.0;
+                        #
+                        #        return new java.awt.Color(
+                        #            protocolor.getRed(),
+                        #            protocolor.getGreen(),
+                        #            protocolor.getBlue(),
+                        #            alpha);
+                        #      }
+                        #
+                        #      public static Color toProto(java.awt.Color color) {
+                        #        float red = (float) color.getRed();
+                        #        float green = (float) color.getGreen();
+                        #        float blue = (float) color.getBlue();
+                        #        float denominator = 255.0;
+                        #        Color.Builder resultBuilder =
+                        #            Color
+                        #                .newBuilder()
+                        #                .setRed(red / denominator)
+                        #                .setGreen(green / denominator)
+                        #                .setBlue(blue / denominator);
+                        #        int alpha = color.getAlpha();
+                        #        if (alpha != 255) {
+                        #          result.setAlpha(
+                        #              FloatValue
+                        #                  .newBuilder()
+                        #                  .setValue(((float) alpha) / denominator)
+                        #                  .build());
+                        #        }
+                        #        return resultBuilder.build();
+                        #      }
+                        #      // ...
+                        #
+                        # Example (iOS / Obj-C):
+                        #
+                        #      // ...
+                        #      static UIColor* fromProto(Color* protocolor) {
+                        #         float red = [protocolor red];
+                        #         float green = [protocolor green];
+                        #         float blue = [protocolor blue];
+                        #         FloatValue* alpha_wrapper = [protocolor alpha];
+                        #         float alpha = 1.0;
+                        #         if (alpha_wrapper != nil) {
+                        #           alpha = [alpha_wrapper value];
+                        #         }
+                        #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                        #      }
+                        #
+                        #      static Color* toProto(UIColor* color) {
+                        #          CGFloat red, green, blue, alpha;
+                        #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                        #            return nil;
+                        #          }
+                        #          Color* result = [Color alloc] init];
+                        #          [result setRed:red];
+                        #          [result setGreen:green];
+                        #          [result setBlue:blue];
+                        #          if (alpha <= 0.9999) {
+                        #            [result setAlpha:floatWrapperWithValue(alpha)];
+                        #          }
+                        #          [result autorelease];
+                        #          return result;
+                        #     }
+                        #     // ...
+                        #
+                        #  Example (JavaScript):
+                        #
+                        #     // ...
+                        #
+                        #     var protoToCssColor = function(rgb_color) {
+                        #        var redFrac = rgb_color.red || 0.0;
+                        #        var greenFrac = rgb_color.green || 0.0;
+                        #        var blueFrac = rgb_color.blue || 0.0;
+                        #        var red = Math.floor(redFrac * 255);
+                        #        var green = Math.floor(greenFrac * 255);
+                        #        var blue = Math.floor(blueFrac * 255);
+                        #
+                        #        if (!('alpha' in rgb_color)) {
+                        #           return rgbToCssColor_(red, green, blue);
+                        #        }
+                        #
+                        #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                        #        var rgbParams = [red, green, blue].join(',');
+                        #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                        #     };
+                        #
+                        #     var rgbToCssColor_ = function(red, green, blue) {
+                        #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                        #       var hexString = rgbNumber.toString(16);
+                        #       var missingZeros = 6 - hexString.length;
+                        #       var resultBuilder = ['#'];
+                        #       for (var i = 0; i < missingZeros; i++) {
+                        #          resultBuilder.push('0');
+                        #       }
+                        #       resultBuilder.push(hexString);
+                        #       return resultBuilder.join('');
+                        #     };
+                        #
+                        #     // ...
+                      "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                      "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                          # the final pixel color is defined by the equation:
+                          #
+                          #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                          #
+                          # This means that a value of 1.0 corresponds to a solid color, whereas
+                          # a value of 0.0 corresponds to a completely transparent color. This
+                          # uses a wrapper message rather than a simple float scalar so that it is
+                          # possible to distinguish between a default value and the value being unset.
+                          # If omitted, this color object is to be rendered as a solid color
+                          # (as if the alpha value had been explicitly given with a value of 1.0).
+                      "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                      "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                    },
+                    "width": 42, # The width of the border, in pixels.
+                        # Border widths must be between 0 and 3 pixels.
+                    "style": "A String", # The style of the border.
+                  },
+                },
+                "wrapStrategy": "A String", # The wrap strategy for the value in the cell.
+              },
+            },
+            "gradientRule": { # A rule that applies a gradient color scale format, based on # The formatting will vary based on the gradients in the rule.
+                # the interpolation points listed. The format of a cell will vary
+                # based on its contents as compared to the values of the interpolation
+                # points.
+              "maxpoint": { # A single interpolation point a gradient conditional format. # The final interpolation point.
+                  # These pin the gradient color scale according to the color,
+                  # type and value chosen.
+                "color": { # Represents a color in the RGBA color space. This representation is designed # The color this interpolation point should use.
+                    # for simplicity of conversion to/from color representations in various
+                    # languages over compactness; for example, the fields of this representation
+                    # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                    # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                    # method in iOS; and, with just a little work, it can be easily formatted into
+                    # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                    #
+                    # Example (Java):
+                    #
+                    #      import com.google.type.Color;
+                    #
+                    #      // ...
+                    #      public static java.awt.Color fromProto(Color protocolor) {
+                    #        float alpha = protocolor.hasAlpha()
+                    #            ? protocolor.getAlpha().getValue()
+                    #            : 1.0;
+                    #
+                    #        return new java.awt.Color(
+                    #            protocolor.getRed(),
+                    #            protocolor.getGreen(),
+                    #            protocolor.getBlue(),
+                    #            alpha);
+                    #      }
+                    #
+                    #      public static Color toProto(java.awt.Color color) {
+                    #        float red = (float) color.getRed();
+                    #        float green = (float) color.getGreen();
+                    #        float blue = (float) color.getBlue();
+                    #        float denominator = 255.0;
+                    #        Color.Builder resultBuilder =
+                    #            Color
+                    #                .newBuilder()
+                    #                .setRed(red / denominator)
+                    #                .setGreen(green / denominator)
+                    #                .setBlue(blue / denominator);
+                    #        int alpha = color.getAlpha();
+                    #        if (alpha != 255) {
+                    #          result.setAlpha(
+                    #              FloatValue
+                    #                  .newBuilder()
+                    #                  .setValue(((float) alpha) / denominator)
+                    #                  .build());
+                    #        }
+                    #        return resultBuilder.build();
+                    #      }
+                    #      // ...
+                    #
+                    # Example (iOS / Obj-C):
+                    #
+                    #      // ...
+                    #      static UIColor* fromProto(Color* protocolor) {
+                    #         float red = [protocolor red];
+                    #         float green = [protocolor green];
+                    #         float blue = [protocolor blue];
+                    #         FloatValue* alpha_wrapper = [protocolor alpha];
+                    #         float alpha = 1.0;
+                    #         if (alpha_wrapper != nil) {
+                    #           alpha = [alpha_wrapper value];
+                    #         }
+                    #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                    #      }
+                    #
+                    #      static Color* toProto(UIColor* color) {
+                    #          CGFloat red, green, blue, alpha;
+                    #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                    #            return nil;
+                    #          }
+                    #          Color* result = [Color alloc] init];
+                    #          [result setRed:red];
+                    #          [result setGreen:green];
+                    #          [result setBlue:blue];
+                    #          if (alpha <= 0.9999) {
+                    #            [result setAlpha:floatWrapperWithValue(alpha)];
+                    #          }
+                    #          [result autorelease];
+                    #          return result;
+                    #     }
+                    #     // ...
+                    #
+                    #  Example (JavaScript):
+                    #
+                    #     // ...
+                    #
+                    #     var protoToCssColor = function(rgb_color) {
+                    #        var redFrac = rgb_color.red || 0.0;
+                    #        var greenFrac = rgb_color.green || 0.0;
+                    #        var blueFrac = rgb_color.blue || 0.0;
+                    #        var red = Math.floor(redFrac * 255);
+                    #        var green = Math.floor(greenFrac * 255);
+                    #        var blue = Math.floor(blueFrac * 255);
+                    #
+                    #        if (!('alpha' in rgb_color)) {
+                    #           return rgbToCssColor_(red, green, blue);
+                    #        }
+                    #
+                    #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                    #        var rgbParams = [red, green, blue].join(',');
+                    #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                    #     };
+                    #
+                    #     var rgbToCssColor_ = function(red, green, blue) {
+                    #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                    #       var hexString = rgbNumber.toString(16);
+                    #       var missingZeros = 6 - hexString.length;
+                    #       var resultBuilder = ['#'];
+                    #       for (var i = 0; i < missingZeros; i++) {
+                    #          resultBuilder.push('0');
+                    #       }
+                    #       resultBuilder.push(hexString);
+                    #       return resultBuilder.join('');
+                    #     };
+                    #
+                    #     // ...
+                  "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                  "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                      # the final pixel color is defined by the equation:
+                      #
+                      #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                      #
+                      # This means that a value of 1.0 corresponds to a solid color, whereas
+                      # a value of 0.0 corresponds to a completely transparent color. This
+                      # uses a wrapper message rather than a simple float scalar so that it is
+                      # possible to distinguish between a default value and the value being unset.
+                      # If omitted, this color object is to be rendered as a solid color
+                      # (as if the alpha value had been explicitly given with a value of 1.0).
+                  "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                  "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                },
+                "type": "A String", # How the value should be interpreted.
+                "value": "A String", # The value this interpolation point uses.  May be a formula.
+                    # Unused if type is MIN or
+                    # MAX.
+              },
+              "midpoint": { # A single interpolation point a gradient conditional format. # An optional midway interpolation point.
+                  # These pin the gradient color scale according to the color,
+                  # type and value chosen.
+                "color": { # Represents a color in the RGBA color space. This representation is designed # The color this interpolation point should use.
+                    # for simplicity of conversion to/from color representations in various
+                    # languages over compactness; for example, the fields of this representation
+                    # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                    # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                    # method in iOS; and, with just a little work, it can be easily formatted into
+                    # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                    #
+                    # Example (Java):
+                    #
+                    #      import com.google.type.Color;
+                    #
+                    #      // ...
+                    #      public static java.awt.Color fromProto(Color protocolor) {
+                    #        float alpha = protocolor.hasAlpha()
+                    #            ? protocolor.getAlpha().getValue()
+                    #            : 1.0;
+                    #
+                    #        return new java.awt.Color(
+                    #            protocolor.getRed(),
+                    #            protocolor.getGreen(),
+                    #            protocolor.getBlue(),
+                    #            alpha);
+                    #      }
+                    #
+                    #      public static Color toProto(java.awt.Color color) {
+                    #        float red = (float) color.getRed();
+                    #        float green = (float) color.getGreen();
+                    #        float blue = (float) color.getBlue();
+                    #        float denominator = 255.0;
+                    #        Color.Builder resultBuilder =
+                    #            Color
+                    #                .newBuilder()
+                    #                .setRed(red / denominator)
+                    #                .setGreen(green / denominator)
+                    #                .setBlue(blue / denominator);
+                    #        int alpha = color.getAlpha();
+                    #        if (alpha != 255) {
+                    #          result.setAlpha(
+                    #              FloatValue
+                    #                  .newBuilder()
+                    #                  .setValue(((float) alpha) / denominator)
+                    #                  .build());
+                    #        }
+                    #        return resultBuilder.build();
+                    #      }
+                    #      // ...
+                    #
+                    # Example (iOS / Obj-C):
+                    #
+                    #      // ...
+                    #      static UIColor* fromProto(Color* protocolor) {
+                    #         float red = [protocolor red];
+                    #         float green = [protocolor green];
+                    #         float blue = [protocolor blue];
+                    #         FloatValue* alpha_wrapper = [protocolor alpha];
+                    #         float alpha = 1.0;
+                    #         if (alpha_wrapper != nil) {
+                    #           alpha = [alpha_wrapper value];
+                    #         }
+                    #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                    #      }
+                    #
+                    #      static Color* toProto(UIColor* color) {
+                    #          CGFloat red, green, blue, alpha;
+                    #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                    #            return nil;
+                    #          }
+                    #          Color* result = [Color alloc] init];
+                    #          [result setRed:red];
+                    #          [result setGreen:green];
+                    #          [result setBlue:blue];
+                    #          if (alpha <= 0.9999) {
+                    #            [result setAlpha:floatWrapperWithValue(alpha)];
+                    #          }
+                    #          [result autorelease];
+                    #          return result;
+                    #     }
+                    #     // ...
+                    #
+                    #  Example (JavaScript):
+                    #
+                    #     // ...
+                    #
+                    #     var protoToCssColor = function(rgb_color) {
+                    #        var redFrac = rgb_color.red || 0.0;
+                    #        var greenFrac = rgb_color.green || 0.0;
+                    #        var blueFrac = rgb_color.blue || 0.0;
+                    #        var red = Math.floor(redFrac * 255);
+                    #        var green = Math.floor(greenFrac * 255);
+                    #        var blue = Math.floor(blueFrac * 255);
+                    #
+                    #        if (!('alpha' in rgb_color)) {
+                    #           return rgbToCssColor_(red, green, blue);
+                    #        }
+                    #
+                    #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                    #        var rgbParams = [red, green, blue].join(',');
+                    #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                    #     };
+                    #
+                    #     var rgbToCssColor_ = function(red, green, blue) {
+                    #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                    #       var hexString = rgbNumber.toString(16);
+                    #       var missingZeros = 6 - hexString.length;
+                    #       var resultBuilder = ['#'];
+                    #       for (var i = 0; i < missingZeros; i++) {
+                    #          resultBuilder.push('0');
+                    #       }
+                    #       resultBuilder.push(hexString);
+                    #       return resultBuilder.join('');
+                    #     };
+                    #
+                    #     // ...
+                  "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                  "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                      # the final pixel color is defined by the equation:
+                      #
+                      #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                      #
+                      # This means that a value of 1.0 corresponds to a solid color, whereas
+                      # a value of 0.0 corresponds to a completely transparent color. This
+                      # uses a wrapper message rather than a simple float scalar so that it is
+                      # possible to distinguish between a default value and the value being unset.
+                      # If omitted, this color object is to be rendered as a solid color
+                      # (as if the alpha value had been explicitly given with a value of 1.0).
+                  "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                  "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                },
+                "type": "A String", # How the value should be interpreted.
+                "value": "A String", # The value this interpolation point uses.  May be a formula.
+                    # Unused if type is MIN or
+                    # MAX.
+              },
+              "minpoint": { # A single interpolation point a gradient conditional format. # The starting interpolation point.
+                  # These pin the gradient color scale according to the color,
+                  # type and value chosen.
+                "color": { # Represents a color in the RGBA color space. This representation is designed # The color this interpolation point should use.
+                    # for simplicity of conversion to/from color representations in various
+                    # languages over compactness; for example, the fields of this representation
+                    # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                    # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                    # method in iOS; and, with just a little work, it can be easily formatted into
+                    # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                    #
+                    # Example (Java):
+                    #
+                    #      import com.google.type.Color;
+                    #
+                    #      // ...
+                    #      public static java.awt.Color fromProto(Color protocolor) {
+                    #        float alpha = protocolor.hasAlpha()
+                    #            ? protocolor.getAlpha().getValue()
+                    #            : 1.0;
+                    #
+                    #        return new java.awt.Color(
+                    #            protocolor.getRed(),
+                    #            protocolor.getGreen(),
+                    #            protocolor.getBlue(),
+                    #            alpha);
+                    #      }
+                    #
+                    #      public static Color toProto(java.awt.Color color) {
+                    #        float red = (float) color.getRed();
+                    #        float green = (float) color.getGreen();
+                    #        float blue = (float) color.getBlue();
+                    #        float denominator = 255.0;
+                    #        Color.Builder resultBuilder =
+                    #            Color
+                    #                .newBuilder()
+                    #                .setRed(red / denominator)
+                    #                .setGreen(green / denominator)
+                    #                .setBlue(blue / denominator);
+                    #        int alpha = color.getAlpha();
+                    #        if (alpha != 255) {
+                    #          result.setAlpha(
+                    #              FloatValue
+                    #                  .newBuilder()
+                    #                  .setValue(((float) alpha) / denominator)
+                    #                  .build());
+                    #        }
+                    #        return resultBuilder.build();
+                    #      }
+                    #      // ...
+                    #
+                    # Example (iOS / Obj-C):
+                    #
+                    #      // ...
+                    #      static UIColor* fromProto(Color* protocolor) {
+                    #         float red = [protocolor red];
+                    #         float green = [protocolor green];
+                    #         float blue = [protocolor blue];
+                    #         FloatValue* alpha_wrapper = [protocolor alpha];
+                    #         float alpha = 1.0;
+                    #         if (alpha_wrapper != nil) {
+                    #           alpha = [alpha_wrapper value];
+                    #         }
+                    #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                    #      }
+                    #
+                    #      static Color* toProto(UIColor* color) {
+                    #          CGFloat red, green, blue, alpha;
+                    #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                    #            return nil;
+                    #          }
+                    #          Color* result = [Color alloc] init];
+                    #          [result setRed:red];
+                    #          [result setGreen:green];
+                    #          [result setBlue:blue];
+                    #          if (alpha <= 0.9999) {
+                    #            [result setAlpha:floatWrapperWithValue(alpha)];
+                    #          }
+                    #          [result autorelease];
+                    #          return result;
+                    #     }
+                    #     // ...
+                    #
+                    #  Example (JavaScript):
+                    #
+                    #     // ...
+                    #
+                    #     var protoToCssColor = function(rgb_color) {
+                    #        var redFrac = rgb_color.red || 0.0;
+                    #        var greenFrac = rgb_color.green || 0.0;
+                    #        var blueFrac = rgb_color.blue || 0.0;
+                    #        var red = Math.floor(redFrac * 255);
+                    #        var green = Math.floor(greenFrac * 255);
+                    #        var blue = Math.floor(blueFrac * 255);
+                    #
+                    #        if (!('alpha' in rgb_color)) {
+                    #           return rgbToCssColor_(red, green, blue);
+                    #        }
+                    #
+                    #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                    #        var rgbParams = [red, green, blue].join(',');
+                    #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                    #     };
+                    #
+                    #     var rgbToCssColor_ = function(red, green, blue) {
+                    #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                    #       var hexString = rgbNumber.toString(16);
+                    #       var missingZeros = 6 - hexString.length;
+                    #       var resultBuilder = ['#'];
+                    #       for (var i = 0; i < missingZeros; i++) {
+                    #          resultBuilder.push('0');
+                    #       }
+                    #       resultBuilder.push(hexString);
+                    #       return resultBuilder.join('');
+                    #     };
+                    #
+                    #     // ...
+                  "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                  "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                      # the final pixel color is defined by the equation:
+                      #
+                      #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                      #
+                      # This means that a value of 1.0 corresponds to a solid color, whereas
+                      # a value of 0.0 corresponds to a completely transparent color. This
+                      # uses a wrapper message rather than a simple float scalar so that it is
+                      # possible to distinguish between a default value and the value being unset.
+                      # If omitted, this color object is to be rendered as a solid color
+                      # (as if the alpha value had been explicitly given with a value of 1.0).
+                  "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                  "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                },
+                "type": "A String", # How the value should be interpreted.
+                "value": "A String", # The value this interpolation point uses.  May be a formula.
+                    # Unused if type is MIN or
+                    # MAX.
+              },
+            },
+          },
+        },
+        "addSheet": { # The result of adding a sheet. # A reply from adding a sheet.
+          "properties": { # Properties of a sheet. # The properties of the newly added sheet.
+            "sheetType": "A String", # The type of sheet. Defaults to GRID.
+                # This field cannot be changed once set.
+            "index": 42, # The index of the sheet within the spreadsheet.
+                # When adding or updating sheet properties, if this field
+                # is excluded then the sheet will be added or moved to the end
+                # of the sheet list.
+            "title": "A String", # The name of the sheet.
+            "gridProperties": { # Properties of a grid. # Additional properties of the sheet if this sheet is a grid.
+                # (If the sheet is an object sheet, containing a chart or image, then
+                # this field will be absent.)
+                # When writing it is an error to set any grid properties on non-grid sheets.
+              "columnCount": 42, # The number of columns in the grid.
+              "rowCount": 42, # The number of rows in the grid.
+              "frozenColumnCount": 42, # The number of columns that are frozen in the grid.
+              "hideGridlines": True or False, # True if the grid isn't showing gridlines in the UI.
+              "frozenRowCount": 42, # The number of rows that are frozen in the grid.
+            },
+            "rightToLeft": True or False, # True if the sheet is an RTL sheet instead of an LTR sheet.
+            "tabColor": { # Represents a color in the RGBA color space. This representation is designed # The color of the tab in the UI.
+                # for simplicity of conversion to/from color representations in various
+                # languages over compactness; for example, the fields of this representation
+                # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                # method in iOS; and, with just a little work, it can be easily formatted into
+                # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                #
+                # Example (Java):
+                #
+                #      import com.google.type.Color;
+                #
+                #      // ...
+                #      public static java.awt.Color fromProto(Color protocolor) {
+                #        float alpha = protocolor.hasAlpha()
+                #            ? protocolor.getAlpha().getValue()
+                #            : 1.0;
+                #
+                #        return new java.awt.Color(
+                #            protocolor.getRed(),
+                #            protocolor.getGreen(),
+                #            protocolor.getBlue(),
+                #            alpha);
+                #      }
+                #
+                #      public static Color toProto(java.awt.Color color) {
+                #        float red = (float) color.getRed();
+                #        float green = (float) color.getGreen();
+                #        float blue = (float) color.getBlue();
+                #        float denominator = 255.0;
+                #        Color.Builder resultBuilder =
+                #            Color
+                #                .newBuilder()
+                #                .setRed(red / denominator)
+                #                .setGreen(green / denominator)
+                #                .setBlue(blue / denominator);
+                #        int alpha = color.getAlpha();
+                #        if (alpha != 255) {
+                #          result.setAlpha(
+                #              FloatValue
+                #                  .newBuilder()
+                #                  .setValue(((float) alpha) / denominator)
+                #                  .build());
+                #        }
+                #        return resultBuilder.build();
+                #      }
+                #      // ...
+                #
+                # Example (iOS / Obj-C):
+                #
+                #      // ...
+                #      static UIColor* fromProto(Color* protocolor) {
+                #         float red = [protocolor red];
+                #         float green = [protocolor green];
+                #         float blue = [protocolor blue];
+                #         FloatValue* alpha_wrapper = [protocolor alpha];
+                #         float alpha = 1.0;
+                #         if (alpha_wrapper != nil) {
+                #           alpha = [alpha_wrapper value];
+                #         }
+                #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                #      }
+                #
+                #      static Color* toProto(UIColor* color) {
+                #          CGFloat red, green, blue, alpha;
+                #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                #            return nil;
+                #          }
+                #          Color* result = [Color alloc] init];
+                #          [result setRed:red];
+                #          [result setGreen:green];
+                #          [result setBlue:blue];
+                #          if (alpha <= 0.9999) {
+                #            [result setAlpha:floatWrapperWithValue(alpha)];
+                #          }
+                #          [result autorelease];
+                #          return result;
+                #     }
+                #     // ...
+                #
+                #  Example (JavaScript):
+                #
+                #     // ...
+                #
+                #     var protoToCssColor = function(rgb_color) {
+                #        var redFrac = rgb_color.red || 0.0;
+                #        var greenFrac = rgb_color.green || 0.0;
+                #        var blueFrac = rgb_color.blue || 0.0;
+                #        var red = Math.floor(redFrac * 255);
+                #        var green = Math.floor(greenFrac * 255);
+                #        var blue = Math.floor(blueFrac * 255);
+                #
+                #        if (!('alpha' in rgb_color)) {
+                #           return rgbToCssColor_(red, green, blue);
+                #        }
+                #
+                #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                #        var rgbParams = [red, green, blue].join(',');
+                #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                #     };
+                #
+                #     var rgbToCssColor_ = function(red, green, blue) {
+                #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                #       var hexString = rgbNumber.toString(16);
+                #       var missingZeros = 6 - hexString.length;
+                #       var resultBuilder = ['#'];
+                #       for (var i = 0; i < missingZeros; i++) {
+                #          resultBuilder.push('0');
+                #       }
+                #       resultBuilder.push(hexString);
+                #       return resultBuilder.join('');
+                #     };
+                #
+                #     // ...
+              "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+              "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                  # the final pixel color is defined by the equation:
+                  #
+                  #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                  #
+                  # This means that a value of 1.0 corresponds to a solid color, whereas
+                  # a value of 0.0 corresponds to a completely transparent color. This
+                  # uses a wrapper message rather than a simple float scalar so that it is
+                  # possible to distinguish between a default value and the value being unset.
+                  # If omitted, this color object is to be rendered as a solid color
+                  # (as if the alpha value had been explicitly given with a value of 1.0).
+              "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+              "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+            },
+            "hidden": True or False, # True if the sheet is hidden in the UI, false if it's visible.
+            "sheetId": 42, # The ID of the sheet. Must be non-negative.
+                # This field cannot be changed once set.
+          },
+        },
+        "findReplace": { # The result of the find/replace. # A reply from doing a find/replace.
+          "occurrencesChanged": 42, # The number of occurrences (possibly multiple within a cell) changed.
+              # For example, if replacing "`e`" with "`o`" in "`Google Sheets`", this would
+              # be "`3`" because "`Google Sheets`" -> "`Googlo Shoots`".
+          "sheetsChanged": 42, # The number of sheets changed.
+          "rowsChanged": 42, # The number of rows changed.
+          "valuesChanged": 42, # The number of non-formula cells changed.
+          "formulasChanged": 42, # The number of formula cells changed.
+        },
+        "addNamedRange": { # The result of adding a named range. # A reply from adding a named range.
+          "namedRange": { # A named range. # The named range to add.
+            "namedRangeId": "A String", # The ID of the named range.
+            "range": { # A range on a sheet. # The range this represents.
+                # 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 grid 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.
+              "startRowIndex": 42, # The start row (inclusive) 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.
+              "endColumnIndex": 42, # The end column (exclusive) of the range, or not set if unbounded.
+            },
+            "name": "A String", # The name of the named range.
+          },
+        },
+        "addProtectedRange": { # The result of adding a new protected range. # A reply from adding a protected range.
+          "protectedRange": { # A protected range. # The newly added protected range.
+            "unprotectedRanges": [ # The list of unprotected ranges within a protected sheet.
+                # Unprotected ranges are only supported on protected sheets.
+              { # A range on a sheet.
+                  # 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 grid 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.
+                "startRowIndex": 42, # The start row (inclusive) 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.
+                "endColumnIndex": 42, # The end column (exclusive) of the range, or not set if unbounded.
+              },
+            ],
+            "requestingUserCanEdit": True or False, # True if the user who requested this protected range can edit the
+                # protected area.
+                # This field is read-only.
+            "description": "A String", # The description of this protected range.
+            "namedRangeId": "A String", # The named range this protected range is backed by, if any.
+                #
+                # When writing, only one of range or namedRangeId
+                # may be set.
+            "editors": { # The editors of a protected range. # The users and groups with edit access to the protected range.
+                # This field is only visible to users with edit access to the protected
+                # range and the document.
+                # Editors are not supported with warningOnly protection.
+              "domainUsersCanEdit": True or False, # True if anyone in the document's domain has edit access to the protected
+                  # range.  Domain protection is only supported on documents within a domain.
+              "users": [ # The email addresses of users with edit access to the protected range.
+                "A String",
+              ],
+              "groups": [ # The email addresses of groups with edit access to the protected range.
+                "A String",
+              ],
+            },
+            "protectedRangeId": 42, # The ID of the protected range.
+                # This field is read-only.
+            "warningOnly": True or False, # True if this this protected range will show a warning when editing.
+                # Warning-based protection means that every user can edit data in the
+                # protected range, except editing will prompt a warning asking the user
+                # to confirm the edit.
+                #
+                # When warning: if this field is true, then editors is ignored.
+                # Additionally, if this field is changed from true to false and the
+                # `editors` field is not set (nor included in the field mask), then
+                # the editors will be set to all the editors in the document.
+            "range": { # A range on a sheet. # The range that is being protected.
+                # The range may be fully unbounded, in which case this is considered
+                # a protected sheet.
+                #
+                # When writing, only one of range or namedRangeId
+                # may be set.
+                # 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 grid 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.
+              "startRowIndex": 42, # The start row (inclusive) 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.
+              "endColumnIndex": 42, # The end column (exclusive) of the range, or not set if unbounded.
+            },
+          },
+        },
+        "deleteConditionalFormatRule": { # The result of deleting a conditional format rule. # A reply from deleting a conditional format rule.
+          "rule": { # A rule describing a conditional format. # The rule that was deleted.
+            "ranges": [ # The ranges that will be formatted if the condition is true.
+                # All the ranges must be on the same grid.
+              { # A range on a sheet.
+                  # 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 grid 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.
+                "startRowIndex": 42, # The start row (inclusive) 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.
+                "endColumnIndex": 42, # The end column (exclusive) of the range, or not set if unbounded.
+              },
+            ],
+            "booleanRule": { # A rule that may or may not match, depending on the condition. # The formatting is either "on" or "off" according to the rule.
+              "condition": { # A condition that can evaluate to true or false. # The condition of the rule. If the condition evaluates to true,
+                  # the format will be applied.
+                  # BooleanConditions are used by conditional formatting,
+                  # data validation, and the criteria in filters.
+                "type": "A String", # The type of condition.
+                "values": [ # The values of the condition. The number of supported values depends
+                    # on the condition type.  Some support zero values,
+                    # others one or two values,
+                    # and ConditionType.ONE_OF_LIST supports an arbitrary number of values.
+                  { # The value of the condition.
+                    "relativeDate": "A String", # A relative date (based on the current date).
+                        # Valid only if the type is
+                        # DATE_BEFORE,
+                        # DATE_AFTER,
+                        # DATE_ON_OR_BEFORE or
+                        # DATE_ON_OR_AFTER.
+                        #
+                        # Relative dates are not supported in data validation.
+                        # They are supported only in conditional formatting and
+                        # conditional filters.
+                    "userEnteredValue": "A String", # A value the condition is based on.
+                        # The value will be parsed as if the user typed into a cell.
+                        # Formulas are supported (and must begin with an `=`).
+                  },
+                ],
+              },
+              "format": { # The format of a cell. # The format to apply.
+                  # Conditional formatting can only apply a subset of formatting:
+                  # bold, italic,
+                  # strikethrough,
+                  # foreground color &
+                  # background color.
+                "numberFormat": { # The number format of a cell. # A format describing how number values should be represented to the user.
+                    # When updating, all fields must be set.
+                  "pattern": "A String", # Pattern string used for formatting.
+                  "type": "A String", # The type of the number format.
+                },
+                "textDirection": "A String", # The direction of the text in the cell.
+                "padding": { # The amount of padding around the cell, in pixels. # The padding of the cell.
+                    # When updating padding, every field must be specified.
+                  "top": 42, # The top padding of the cell.
+                  "right": 42, # The right padding of the cell.
+                  "bottom": 42, # The bottom padding of the cell.
+                  "left": 42, # The left padding of the cell.
+                },
+                "horizontalAlignment": "A String", # The horizontal alignment of the value in cell.
+                "backgroundColor": { # Represents a color in the RGBA color space. This representation is designed # The background color of the cell.
+                    # for simplicity of conversion to/from color representations in various
+                    # languages over compactness; for example, the fields of this representation
+                    # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                    # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                    # method in iOS; and, with just a little work, it can be easily formatted into
+                    # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                    #
+                    # Example (Java):
+                    #
+                    #      import com.google.type.Color;
+                    #
+                    #      // ...
+                    #      public static java.awt.Color fromProto(Color protocolor) {
+                    #        float alpha = protocolor.hasAlpha()
+                    #            ? protocolor.getAlpha().getValue()
+                    #            : 1.0;
+                    #
+                    #        return new java.awt.Color(
+                    #            protocolor.getRed(),
+                    #            protocolor.getGreen(),
+                    #            protocolor.getBlue(),
+                    #            alpha);
+                    #      }
+                    #
+                    #      public static Color toProto(java.awt.Color color) {
+                    #        float red = (float) color.getRed();
+                    #        float green = (float) color.getGreen();
+                    #        float blue = (float) color.getBlue();
+                    #        float denominator = 255.0;
+                    #        Color.Builder resultBuilder =
+                    #            Color
+                    #                .newBuilder()
+                    #                .setRed(red / denominator)
+                    #                .setGreen(green / denominator)
+                    #                .setBlue(blue / denominator);
+                    #        int alpha = color.getAlpha();
+                    #        if (alpha != 255) {
+                    #          result.setAlpha(
+                    #              FloatValue
+                    #                  .newBuilder()
+                    #                  .setValue(((float) alpha) / denominator)
+                    #                  .build());
+                    #        }
+                    #        return resultBuilder.build();
+                    #      }
+                    #      // ...
+                    #
+                    # Example (iOS / Obj-C):
+                    #
+                    #      // ...
+                    #      static UIColor* fromProto(Color* protocolor) {
+                    #         float red = [protocolor red];
+                    #         float green = [protocolor green];
+                    #         float blue = [protocolor blue];
+                    #         FloatValue* alpha_wrapper = [protocolor alpha];
+                    #         float alpha = 1.0;
+                    #         if (alpha_wrapper != nil) {
+                    #           alpha = [alpha_wrapper value];
+                    #         }
+                    #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                    #      }
+                    #
+                    #      static Color* toProto(UIColor* color) {
+                    #          CGFloat red, green, blue, alpha;
+                    #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                    #            return nil;
+                    #          }
+                    #          Color* result = [Color alloc] init];
+                    #          [result setRed:red];
+                    #          [result setGreen:green];
+                    #          [result setBlue:blue];
+                    #          if (alpha <= 0.9999) {
+                    #            [result setAlpha:floatWrapperWithValue(alpha)];
+                    #          }
+                    #          [result autorelease];
+                    #          return result;
+                    #     }
+                    #     // ...
+                    #
+                    #  Example (JavaScript):
+                    #
+                    #     // ...
+                    #
+                    #     var protoToCssColor = function(rgb_color) {
+                    #        var redFrac = rgb_color.red || 0.0;
+                    #        var greenFrac = rgb_color.green || 0.0;
+                    #        var blueFrac = rgb_color.blue || 0.0;
+                    #        var red = Math.floor(redFrac * 255);
+                    #        var green = Math.floor(greenFrac * 255);
+                    #        var blue = Math.floor(blueFrac * 255);
+                    #
+                    #        if (!('alpha' in rgb_color)) {
+                    #           return rgbToCssColor_(red, green, blue);
+                    #        }
+                    #
+                    #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                    #        var rgbParams = [red, green, blue].join(',');
+                    #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                    #     };
+                    #
+                    #     var rgbToCssColor_ = function(red, green, blue) {
+                    #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                    #       var hexString = rgbNumber.toString(16);
+                    #       var missingZeros = 6 - hexString.length;
+                    #       var resultBuilder = ['#'];
+                    #       for (var i = 0; i < missingZeros; i++) {
+                    #          resultBuilder.push('0');
+                    #       }
+                    #       resultBuilder.push(hexString);
+                    #       return resultBuilder.join('');
+                    #     };
+                    #
+                    #     // ...
+                  "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                  "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                      # the final pixel color is defined by the equation:
+                      #
+                      #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                      #
+                      # This means that a value of 1.0 corresponds to a solid color, whereas
+                      # a value of 0.0 corresponds to a completely transparent color. This
+                      # uses a wrapper message rather than a simple float scalar so that it is
+                      # possible to distinguish between a default value and the value being unset.
+                      # If omitted, this color object is to be rendered as a solid color
+                      # (as if the alpha value had been explicitly given with a value of 1.0).
+                  "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                  "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                },
+                "verticalAlignment": "A String", # The vertical alignment of the value in cell.
+                "textFormat": { # The format of a run of text in a cell. # The format of the text in the cell (unless overridden by a format run).
+                    # Absent values indicate that the field isn't specified.
+                  "foregroundColor": { # Represents a color in the RGBA color space. This representation is designed # The foreground color of the text.
+                      # for simplicity of conversion to/from color representations in various
+                      # languages over compactness; for example, the fields of this representation
+                      # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                      # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                      # method in iOS; and, with just a little work, it can be easily formatted into
+                      # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                      #
+                      # Example (Java):
+                      #
+                      #      import com.google.type.Color;
+                      #
+                      #      // ...
+                      #      public static java.awt.Color fromProto(Color protocolor) {
+                      #        float alpha = protocolor.hasAlpha()
+                      #            ? protocolor.getAlpha().getValue()
+                      #            : 1.0;
+                      #
+                      #        return new java.awt.Color(
+                      #            protocolor.getRed(),
+                      #            protocolor.getGreen(),
+                      #            protocolor.getBlue(),
+                      #            alpha);
+                      #      }
+                      #
+                      #      public static Color toProto(java.awt.Color color) {
+                      #        float red = (float) color.getRed();
+                      #        float green = (float) color.getGreen();
+                      #        float blue = (float) color.getBlue();
+                      #        float denominator = 255.0;
+                      #        Color.Builder resultBuilder =
+                      #            Color
+                      #                .newBuilder()
+                      #                .setRed(red / denominator)
+                      #                .setGreen(green / denominator)
+                      #                .setBlue(blue / denominator);
+                      #        int alpha = color.getAlpha();
+                      #        if (alpha != 255) {
+                      #          result.setAlpha(
+                      #              FloatValue
+                      #                  .newBuilder()
+                      #                  .setValue(((float) alpha) / denominator)
+                      #                  .build());
+                      #        }
+                      #        return resultBuilder.build();
+                      #      }
+                      #      // ...
+                      #
+                      # Example (iOS / Obj-C):
+                      #
+                      #      // ...
+                      #      static UIColor* fromProto(Color* protocolor) {
+                      #         float red = [protocolor red];
+                      #         float green = [protocolor green];
+                      #         float blue = [protocolor blue];
+                      #         FloatValue* alpha_wrapper = [protocolor alpha];
+                      #         float alpha = 1.0;
+                      #         if (alpha_wrapper != nil) {
+                      #           alpha = [alpha_wrapper value];
+                      #         }
+                      #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                      #      }
+                      #
+                      #      static Color* toProto(UIColor* color) {
+                      #          CGFloat red, green, blue, alpha;
+                      #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                      #            return nil;
+                      #          }
+                      #          Color* result = [Color alloc] init];
+                      #          [result setRed:red];
+                      #          [result setGreen:green];
+                      #          [result setBlue:blue];
+                      #          if (alpha <= 0.9999) {
+                      #            [result setAlpha:floatWrapperWithValue(alpha)];
+                      #          }
+                      #          [result autorelease];
+                      #          return result;
+                      #     }
+                      #     // ...
+                      #
+                      #  Example (JavaScript):
+                      #
+                      #     // ...
+                      #
+                      #     var protoToCssColor = function(rgb_color) {
+                      #        var redFrac = rgb_color.red || 0.0;
+                      #        var greenFrac = rgb_color.green || 0.0;
+                      #        var blueFrac = rgb_color.blue || 0.0;
+                      #        var red = Math.floor(redFrac * 255);
+                      #        var green = Math.floor(greenFrac * 255);
+                      #        var blue = Math.floor(blueFrac * 255);
+                      #
+                      #        if (!('alpha' in rgb_color)) {
+                      #           return rgbToCssColor_(red, green, blue);
+                      #        }
+                      #
+                      #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                      #        var rgbParams = [red, green, blue].join(',');
+                      #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                      #     };
+                      #
+                      #     var rgbToCssColor_ = function(red, green, blue) {
+                      #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                      #       var hexString = rgbNumber.toString(16);
+                      #       var missingZeros = 6 - hexString.length;
+                      #       var resultBuilder = ['#'];
+                      #       for (var i = 0; i < missingZeros; i++) {
+                      #          resultBuilder.push('0');
+                      #       }
+                      #       resultBuilder.push(hexString);
+                      #       return resultBuilder.join('');
+                      #     };
+                      #
+                      #     // ...
+                    "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                    "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                        # the final pixel color is defined by the equation:
+                        #
+                        #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                        #
+                        # This means that a value of 1.0 corresponds to a solid color, whereas
+                        # a value of 0.0 corresponds to a completely transparent color. This
+                        # uses a wrapper message rather than a simple float scalar so that it is
+                        # possible to distinguish between a default value and the value being unset.
+                        # If omitted, this color object is to be rendered as a solid color
+                        # (as if the alpha value had been explicitly given with a value of 1.0).
+                    "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                    "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                  },
+                  "bold": True or False, # True if the text is bold.
+                  "strikethrough": True or False, # True if the text has a strikethrough.
+                  "fontFamily": "A String", # The font family.
+                  "fontSize": 42, # The size of the font.
+                  "italic": True or False, # True if the text is italicized.
+                  "underline": True or False, # True if the text is underlined.
+                },
+                "hyperlinkDisplayType": "A String", # How a hyperlink, if it exists, should be displayed in the cell.
+                "borders": { # The borders of the cell. # The borders of the cell.
+                  "top": { # A border along a cell. # The top border of the cell.
+                    "color": { # Represents a color in the RGBA color space. This representation is designed # The color of the border.
+                        # for simplicity of conversion to/from color representations in various
+                        # languages over compactness; for example, the fields of this representation
+                        # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                        # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                        # method in iOS; and, with just a little work, it can be easily formatted into
+                        # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                        #
+                        # Example (Java):
+                        #
+                        #      import com.google.type.Color;
+                        #
+                        #      // ...
+                        #      public static java.awt.Color fromProto(Color protocolor) {
+                        #        float alpha = protocolor.hasAlpha()
+                        #            ? protocolor.getAlpha().getValue()
+                        #            : 1.0;
+                        #
+                        #        return new java.awt.Color(
+                        #            protocolor.getRed(),
+                        #            protocolor.getGreen(),
+                        #            protocolor.getBlue(),
+                        #            alpha);
+                        #      }
+                        #
+                        #      public static Color toProto(java.awt.Color color) {
+                        #        float red = (float) color.getRed();
+                        #        float green = (float) color.getGreen();
+                        #        float blue = (float) color.getBlue();
+                        #        float denominator = 255.0;
+                        #        Color.Builder resultBuilder =
+                        #            Color
+                        #                .newBuilder()
+                        #                .setRed(red / denominator)
+                        #                .setGreen(green / denominator)
+                        #                .setBlue(blue / denominator);
+                        #        int alpha = color.getAlpha();
+                        #        if (alpha != 255) {
+                        #          result.setAlpha(
+                        #              FloatValue
+                        #                  .newBuilder()
+                        #                  .setValue(((float) alpha) / denominator)
+                        #                  .build());
+                        #        }
+                        #        return resultBuilder.build();
+                        #      }
+                        #      // ...
+                        #
+                        # Example (iOS / Obj-C):
+                        #
+                        #      // ...
+                        #      static UIColor* fromProto(Color* protocolor) {
+                        #         float red = [protocolor red];
+                        #         float green = [protocolor green];
+                        #         float blue = [protocolor blue];
+                        #         FloatValue* alpha_wrapper = [protocolor alpha];
+                        #         float alpha = 1.0;
+                        #         if (alpha_wrapper != nil) {
+                        #           alpha = [alpha_wrapper value];
+                        #         }
+                        #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                        #      }
+                        #
+                        #      static Color* toProto(UIColor* color) {
+                        #          CGFloat red, green, blue, alpha;
+                        #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                        #            return nil;
+                        #          }
+                        #          Color* result = [Color alloc] init];
+                        #          [result setRed:red];
+                        #          [result setGreen:green];
+                        #          [result setBlue:blue];
+                        #          if (alpha <= 0.9999) {
+                        #            [result setAlpha:floatWrapperWithValue(alpha)];
+                        #          }
+                        #          [result autorelease];
+                        #          return result;
+                        #     }
+                        #     // ...
+                        #
+                        #  Example (JavaScript):
+                        #
+                        #     // ...
+                        #
+                        #     var protoToCssColor = function(rgb_color) {
+                        #        var redFrac = rgb_color.red || 0.0;
+                        #        var greenFrac = rgb_color.green || 0.0;
+                        #        var blueFrac = rgb_color.blue || 0.0;
+                        #        var red = Math.floor(redFrac * 255);
+                        #        var green = Math.floor(greenFrac * 255);
+                        #        var blue = Math.floor(blueFrac * 255);
+                        #
+                        #        if (!('alpha' in rgb_color)) {
+                        #           return rgbToCssColor_(red, green, blue);
+                        #        }
+                        #
+                        #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                        #        var rgbParams = [red, green, blue].join(',');
+                        #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                        #     };
+                        #
+                        #     var rgbToCssColor_ = function(red, green, blue) {
+                        #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                        #       var hexString = rgbNumber.toString(16);
+                        #       var missingZeros = 6 - hexString.length;
+                        #       var resultBuilder = ['#'];
+                        #       for (var i = 0; i < missingZeros; i++) {
+                        #          resultBuilder.push('0');
+                        #       }
+                        #       resultBuilder.push(hexString);
+                        #       return resultBuilder.join('');
+                        #     };
+                        #
+                        #     // ...
+                      "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                      "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                          # the final pixel color is defined by the equation:
+                          #
+                          #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                          #
+                          # This means that a value of 1.0 corresponds to a solid color, whereas
+                          # a value of 0.0 corresponds to a completely transparent color. This
+                          # uses a wrapper message rather than a simple float scalar so that it is
+                          # possible to distinguish between a default value and the value being unset.
+                          # If omitted, this color object is to be rendered as a solid color
+                          # (as if the alpha value had been explicitly given with a value of 1.0).
+                      "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                      "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                    },
+                    "width": 42, # The width of the border, in pixels.
+                        # Border widths must be between 0 and 3 pixels.
+                    "style": "A String", # The style of the border.
+                  },
+                  "right": { # A border along a cell. # The right border of the cell.
+                    "color": { # Represents a color in the RGBA color space. This representation is designed # The color of the border.
+                        # for simplicity of conversion to/from color representations in various
+                        # languages over compactness; for example, the fields of this representation
+                        # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                        # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                        # method in iOS; and, with just a little work, it can be easily formatted into
+                        # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                        #
+                        # Example (Java):
+                        #
+                        #      import com.google.type.Color;
+                        #
+                        #      // ...
+                        #      public static java.awt.Color fromProto(Color protocolor) {
+                        #        float alpha = protocolor.hasAlpha()
+                        #            ? protocolor.getAlpha().getValue()
+                        #            : 1.0;
+                        #
+                        #        return new java.awt.Color(
+                        #            protocolor.getRed(),
+                        #            protocolor.getGreen(),
+                        #            protocolor.getBlue(),
+                        #            alpha);
+                        #      }
+                        #
+                        #      public static Color toProto(java.awt.Color color) {
+                        #        float red = (float) color.getRed();
+                        #        float green = (float) color.getGreen();
+                        #        float blue = (float) color.getBlue();
+                        #        float denominator = 255.0;
+                        #        Color.Builder resultBuilder =
+                        #            Color
+                        #                .newBuilder()
+                        #                .setRed(red / denominator)
+                        #                .setGreen(green / denominator)
+                        #                .setBlue(blue / denominator);
+                        #        int alpha = color.getAlpha();
+                        #        if (alpha != 255) {
+                        #          result.setAlpha(
+                        #              FloatValue
+                        #                  .newBuilder()
+                        #                  .setValue(((float) alpha) / denominator)
+                        #                  .build());
+                        #        }
+                        #        return resultBuilder.build();
+                        #      }
+                        #      // ...
+                        #
+                        # Example (iOS / Obj-C):
+                        #
+                        #      // ...
+                        #      static UIColor* fromProto(Color* protocolor) {
+                        #         float red = [protocolor red];
+                        #         float green = [protocolor green];
+                        #         float blue = [protocolor blue];
+                        #         FloatValue* alpha_wrapper = [protocolor alpha];
+                        #         float alpha = 1.0;
+                        #         if (alpha_wrapper != nil) {
+                        #           alpha = [alpha_wrapper value];
+                        #         }
+                        #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                        #      }
+                        #
+                        #      static Color* toProto(UIColor* color) {
+                        #          CGFloat red, green, blue, alpha;
+                        #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                        #            return nil;
+                        #          }
+                        #          Color* result = [Color alloc] init];
+                        #          [result setRed:red];
+                        #          [result setGreen:green];
+                        #          [result setBlue:blue];
+                        #          if (alpha <= 0.9999) {
+                        #            [result setAlpha:floatWrapperWithValue(alpha)];
+                        #          }
+                        #          [result autorelease];
+                        #          return result;
+                        #     }
+                        #     // ...
+                        #
+                        #  Example (JavaScript):
+                        #
+                        #     // ...
+                        #
+                        #     var protoToCssColor = function(rgb_color) {
+                        #        var redFrac = rgb_color.red || 0.0;
+                        #        var greenFrac = rgb_color.green || 0.0;
+                        #        var blueFrac = rgb_color.blue || 0.0;
+                        #        var red = Math.floor(redFrac * 255);
+                        #        var green = Math.floor(greenFrac * 255);
+                        #        var blue = Math.floor(blueFrac * 255);
+                        #
+                        #        if (!('alpha' in rgb_color)) {
+                        #           return rgbToCssColor_(red, green, blue);
+                        #        }
+                        #
+                        #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                        #        var rgbParams = [red, green, blue].join(',');
+                        #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                        #     };
+                        #
+                        #     var rgbToCssColor_ = function(red, green, blue) {
+                        #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                        #       var hexString = rgbNumber.toString(16);
+                        #       var missingZeros = 6 - hexString.length;
+                        #       var resultBuilder = ['#'];
+                        #       for (var i = 0; i < missingZeros; i++) {
+                        #          resultBuilder.push('0');
+                        #       }
+                        #       resultBuilder.push(hexString);
+                        #       return resultBuilder.join('');
+                        #     };
+                        #
+                        #     // ...
+                      "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                      "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                          # the final pixel color is defined by the equation:
+                          #
+                          #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                          #
+                          # This means that a value of 1.0 corresponds to a solid color, whereas
+                          # a value of 0.0 corresponds to a completely transparent color. This
+                          # uses a wrapper message rather than a simple float scalar so that it is
+                          # possible to distinguish between a default value and the value being unset.
+                          # If omitted, this color object is to be rendered as a solid color
+                          # (as if the alpha value had been explicitly given with a value of 1.0).
+                      "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                      "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                    },
+                    "width": 42, # The width of the border, in pixels.
+                        # Border widths must be between 0 and 3 pixels.
+                    "style": "A String", # The style of the border.
+                  },
+                  "bottom": { # A border along a cell. # The bottom border of the cell.
+                    "color": { # Represents a color in the RGBA color space. This representation is designed # The color of the border.
+                        # for simplicity of conversion to/from color representations in various
+                        # languages over compactness; for example, the fields of this representation
+                        # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                        # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                        # method in iOS; and, with just a little work, it can be easily formatted into
+                        # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                        #
+                        # Example (Java):
+                        #
+                        #      import com.google.type.Color;
+                        #
+                        #      // ...
+                        #      public static java.awt.Color fromProto(Color protocolor) {
+                        #        float alpha = protocolor.hasAlpha()
+                        #            ? protocolor.getAlpha().getValue()
+                        #            : 1.0;
+                        #
+                        #        return new java.awt.Color(
+                        #            protocolor.getRed(),
+                        #            protocolor.getGreen(),
+                        #            protocolor.getBlue(),
+                        #            alpha);
+                        #      }
+                        #
+                        #      public static Color toProto(java.awt.Color color) {
+                        #        float red = (float) color.getRed();
+                        #        float green = (float) color.getGreen();
+                        #        float blue = (float) color.getBlue();
+                        #        float denominator = 255.0;
+                        #        Color.Builder resultBuilder =
+                        #            Color
+                        #                .newBuilder()
+                        #                .setRed(red / denominator)
+                        #                .setGreen(green / denominator)
+                        #                .setBlue(blue / denominator);
+                        #        int alpha = color.getAlpha();
+                        #        if (alpha != 255) {
+                        #          result.setAlpha(
+                        #              FloatValue
+                        #                  .newBuilder()
+                        #                  .setValue(((float) alpha) / denominator)
+                        #                  .build());
+                        #        }
+                        #        return resultBuilder.build();
+                        #      }
+                        #      // ...
+                        #
+                        # Example (iOS / Obj-C):
+                        #
+                        #      // ...
+                        #      static UIColor* fromProto(Color* protocolor) {
+                        #         float red = [protocolor red];
+                        #         float green = [protocolor green];
+                        #         float blue = [protocolor blue];
+                        #         FloatValue* alpha_wrapper = [protocolor alpha];
+                        #         float alpha = 1.0;
+                        #         if (alpha_wrapper != nil) {
+                        #           alpha = [alpha_wrapper value];
+                        #         }
+                        #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                        #      }
+                        #
+                        #      static Color* toProto(UIColor* color) {
+                        #          CGFloat red, green, blue, alpha;
+                        #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                        #            return nil;
+                        #          }
+                        #          Color* result = [Color alloc] init];
+                        #          [result setRed:red];
+                        #          [result setGreen:green];
+                        #          [result setBlue:blue];
+                        #          if (alpha <= 0.9999) {
+                        #            [result setAlpha:floatWrapperWithValue(alpha)];
+                        #          }
+                        #          [result autorelease];
+                        #          return result;
+                        #     }
+                        #     // ...
+                        #
+                        #  Example (JavaScript):
+                        #
+                        #     // ...
+                        #
+                        #     var protoToCssColor = function(rgb_color) {
+                        #        var redFrac = rgb_color.red || 0.0;
+                        #        var greenFrac = rgb_color.green || 0.0;
+                        #        var blueFrac = rgb_color.blue || 0.0;
+                        #        var red = Math.floor(redFrac * 255);
+                        #        var green = Math.floor(greenFrac * 255);
+                        #        var blue = Math.floor(blueFrac * 255);
+                        #
+                        #        if (!('alpha' in rgb_color)) {
+                        #           return rgbToCssColor_(red, green, blue);
+                        #        }
+                        #
+                        #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                        #        var rgbParams = [red, green, blue].join(',');
+                        #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                        #     };
+                        #
+                        #     var rgbToCssColor_ = function(red, green, blue) {
+                        #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                        #       var hexString = rgbNumber.toString(16);
+                        #       var missingZeros = 6 - hexString.length;
+                        #       var resultBuilder = ['#'];
+                        #       for (var i = 0; i < missingZeros; i++) {
+                        #          resultBuilder.push('0');
+                        #       }
+                        #       resultBuilder.push(hexString);
+                        #       return resultBuilder.join('');
+                        #     };
+                        #
+                        #     // ...
+                      "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                      "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                          # the final pixel color is defined by the equation:
+                          #
+                          #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                          #
+                          # This means that a value of 1.0 corresponds to a solid color, whereas
+                          # a value of 0.0 corresponds to a completely transparent color. This
+                          # uses a wrapper message rather than a simple float scalar so that it is
+                          # possible to distinguish between a default value and the value being unset.
+                          # If omitted, this color object is to be rendered as a solid color
+                          # (as if the alpha value had been explicitly given with a value of 1.0).
+                      "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                      "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                    },
+                    "width": 42, # The width of the border, in pixels.
+                        # Border widths must be between 0 and 3 pixels.
+                    "style": "A String", # The style of the border.
+                  },
+                  "left": { # A border along a cell. # The left border of the cell.
+                    "color": { # Represents a color in the RGBA color space. This representation is designed # The color of the border.
+                        # for simplicity of conversion to/from color representations in various
+                        # languages over compactness; for example, the fields of this representation
+                        # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                        # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                        # method in iOS; and, with just a little work, it can be easily formatted into
+                        # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                        #
+                        # Example (Java):
+                        #
+                        #      import com.google.type.Color;
+                        #
+                        #      // ...
+                        #      public static java.awt.Color fromProto(Color protocolor) {
+                        #        float alpha = protocolor.hasAlpha()
+                        #            ? protocolor.getAlpha().getValue()
+                        #            : 1.0;
+                        #
+                        #        return new java.awt.Color(
+                        #            protocolor.getRed(),
+                        #            protocolor.getGreen(),
+                        #            protocolor.getBlue(),
+                        #            alpha);
+                        #      }
+                        #
+                        #      public static Color toProto(java.awt.Color color) {
+                        #        float red = (float) color.getRed();
+                        #        float green = (float) color.getGreen();
+                        #        float blue = (float) color.getBlue();
+                        #        float denominator = 255.0;
+                        #        Color.Builder resultBuilder =
+                        #            Color
+                        #                .newBuilder()
+                        #                .setRed(red / denominator)
+                        #                .setGreen(green / denominator)
+                        #                .setBlue(blue / denominator);
+                        #        int alpha = color.getAlpha();
+                        #        if (alpha != 255) {
+                        #          result.setAlpha(
+                        #              FloatValue
+                        #                  .newBuilder()
+                        #                  .setValue(((float) alpha) / denominator)
+                        #                  .build());
+                        #        }
+                        #        return resultBuilder.build();
+                        #      }
+                        #      // ...
+                        #
+                        # Example (iOS / Obj-C):
+                        #
+                        #      // ...
+                        #      static UIColor* fromProto(Color* protocolor) {
+                        #         float red = [protocolor red];
+                        #         float green = [protocolor green];
+                        #         float blue = [protocolor blue];
+                        #         FloatValue* alpha_wrapper = [protocolor alpha];
+                        #         float alpha = 1.0;
+                        #         if (alpha_wrapper != nil) {
+                        #           alpha = [alpha_wrapper value];
+                        #         }
+                        #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                        #      }
+                        #
+                        #      static Color* toProto(UIColor* color) {
+                        #          CGFloat red, green, blue, alpha;
+                        #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                        #            return nil;
+                        #          }
+                        #          Color* result = [Color alloc] init];
+                        #          [result setRed:red];
+                        #          [result setGreen:green];
+                        #          [result setBlue:blue];
+                        #          if (alpha <= 0.9999) {
+                        #            [result setAlpha:floatWrapperWithValue(alpha)];
+                        #          }
+                        #          [result autorelease];
+                        #          return result;
+                        #     }
+                        #     // ...
+                        #
+                        #  Example (JavaScript):
+                        #
+                        #     // ...
+                        #
+                        #     var protoToCssColor = function(rgb_color) {
+                        #        var redFrac = rgb_color.red || 0.0;
+                        #        var greenFrac = rgb_color.green || 0.0;
+                        #        var blueFrac = rgb_color.blue || 0.0;
+                        #        var red = Math.floor(redFrac * 255);
+                        #        var green = Math.floor(greenFrac * 255);
+                        #        var blue = Math.floor(blueFrac * 255);
+                        #
+                        #        if (!('alpha' in rgb_color)) {
+                        #           return rgbToCssColor_(red, green, blue);
+                        #        }
+                        #
+                        #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                        #        var rgbParams = [red, green, blue].join(',');
+                        #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                        #     };
+                        #
+                        #     var rgbToCssColor_ = function(red, green, blue) {
+                        #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                        #       var hexString = rgbNumber.toString(16);
+                        #       var missingZeros = 6 - hexString.length;
+                        #       var resultBuilder = ['#'];
+                        #       for (var i = 0; i < missingZeros; i++) {
+                        #          resultBuilder.push('0');
+                        #       }
+                        #       resultBuilder.push(hexString);
+                        #       return resultBuilder.join('');
+                        #     };
+                        #
+                        #     // ...
+                      "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                      "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                          # the final pixel color is defined by the equation:
+                          #
+                          #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                          #
+                          # This means that a value of 1.0 corresponds to a solid color, whereas
+                          # a value of 0.0 corresponds to a completely transparent color. This
+                          # uses a wrapper message rather than a simple float scalar so that it is
+                          # possible to distinguish between a default value and the value being unset.
+                          # If omitted, this color object is to be rendered as a solid color
+                          # (as if the alpha value had been explicitly given with a value of 1.0).
+                      "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                      "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                    },
+                    "width": 42, # The width of the border, in pixels.
+                        # Border widths must be between 0 and 3 pixels.
+                    "style": "A String", # The style of the border.
+                  },
+                },
+                "wrapStrategy": "A String", # The wrap strategy for the value in the cell.
+              },
+            },
+            "gradientRule": { # A rule that applies a gradient color scale format, based on # The formatting will vary based on the gradients in the rule.
+                # the interpolation points listed. The format of a cell will vary
+                # based on its contents as compared to the values of the interpolation
+                # points.
+              "maxpoint": { # A single interpolation point a gradient conditional format. # The final interpolation point.
+                  # These pin the gradient color scale according to the color,
+                  # type and value chosen.
+                "color": { # Represents a color in the RGBA color space. This representation is designed # The color this interpolation point should use.
+                    # for simplicity of conversion to/from color representations in various
+                    # languages over compactness; for example, the fields of this representation
+                    # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                    # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                    # method in iOS; and, with just a little work, it can be easily formatted into
+                    # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                    #
+                    # Example (Java):
+                    #
+                    #      import com.google.type.Color;
+                    #
+                    #      // ...
+                    #      public static java.awt.Color fromProto(Color protocolor) {
+                    #        float alpha = protocolor.hasAlpha()
+                    #            ? protocolor.getAlpha().getValue()
+                    #            : 1.0;
+                    #
+                    #        return new java.awt.Color(
+                    #            protocolor.getRed(),
+                    #            protocolor.getGreen(),
+                    #            protocolor.getBlue(),
+                    #            alpha);
+                    #      }
+                    #
+                    #      public static Color toProto(java.awt.Color color) {
+                    #        float red = (float) color.getRed();
+                    #        float green = (float) color.getGreen();
+                    #        float blue = (float) color.getBlue();
+                    #        float denominator = 255.0;
+                    #        Color.Builder resultBuilder =
+                    #            Color
+                    #                .newBuilder()
+                    #                .setRed(red / denominator)
+                    #                .setGreen(green / denominator)
+                    #                .setBlue(blue / denominator);
+                    #        int alpha = color.getAlpha();
+                    #        if (alpha != 255) {
+                    #          result.setAlpha(
+                    #              FloatValue
+                    #                  .newBuilder()
+                    #                  .setValue(((float) alpha) / denominator)
+                    #                  .build());
+                    #        }
+                    #        return resultBuilder.build();
+                    #      }
+                    #      // ...
+                    #
+                    # Example (iOS / Obj-C):
+                    #
+                    #      // ...
+                    #      static UIColor* fromProto(Color* protocolor) {
+                    #         float red = [protocolor red];
+                    #         float green = [protocolor green];
+                    #         float blue = [protocolor blue];
+                    #         FloatValue* alpha_wrapper = [protocolor alpha];
+                    #         float alpha = 1.0;
+                    #         if (alpha_wrapper != nil) {
+                    #           alpha = [alpha_wrapper value];
+                    #         }
+                    #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                    #      }
+                    #
+                    #      static Color* toProto(UIColor* color) {
+                    #          CGFloat red, green, blue, alpha;
+                    #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                    #            return nil;
+                    #          }
+                    #          Color* result = [Color alloc] init];
+                    #          [result setRed:red];
+                    #          [result setGreen:green];
+                    #          [result setBlue:blue];
+                    #          if (alpha <= 0.9999) {
+                    #            [result setAlpha:floatWrapperWithValue(alpha)];
+                    #          }
+                    #          [result autorelease];
+                    #          return result;
+                    #     }
+                    #     // ...
+                    #
+                    #  Example (JavaScript):
+                    #
+                    #     // ...
+                    #
+                    #     var protoToCssColor = function(rgb_color) {
+                    #        var redFrac = rgb_color.red || 0.0;
+                    #        var greenFrac = rgb_color.green || 0.0;
+                    #        var blueFrac = rgb_color.blue || 0.0;
+                    #        var red = Math.floor(redFrac * 255);
+                    #        var green = Math.floor(greenFrac * 255);
+                    #        var blue = Math.floor(blueFrac * 255);
+                    #
+                    #        if (!('alpha' in rgb_color)) {
+                    #           return rgbToCssColor_(red, green, blue);
+                    #        }
+                    #
+                    #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                    #        var rgbParams = [red, green, blue].join(',');
+                    #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                    #     };
+                    #
+                    #     var rgbToCssColor_ = function(red, green, blue) {
+                    #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                    #       var hexString = rgbNumber.toString(16);
+                    #       var missingZeros = 6 - hexString.length;
+                    #       var resultBuilder = ['#'];
+                    #       for (var i = 0; i < missingZeros; i++) {
+                    #          resultBuilder.push('0');
+                    #       }
+                    #       resultBuilder.push(hexString);
+                    #       return resultBuilder.join('');
+                    #     };
+                    #
+                    #     // ...
+                  "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                  "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                      # the final pixel color is defined by the equation:
+                      #
+                      #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                      #
+                      # This means that a value of 1.0 corresponds to a solid color, whereas
+                      # a value of 0.0 corresponds to a completely transparent color. This
+                      # uses a wrapper message rather than a simple float scalar so that it is
+                      # possible to distinguish between a default value and the value being unset.
+                      # If omitted, this color object is to be rendered as a solid color
+                      # (as if the alpha value had been explicitly given with a value of 1.0).
+                  "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                  "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                },
+                "type": "A String", # How the value should be interpreted.
+                "value": "A String", # The value this interpolation point uses.  May be a formula.
+                    # Unused if type is MIN or
+                    # MAX.
+              },
+              "midpoint": { # A single interpolation point a gradient conditional format. # An optional midway interpolation point.
+                  # These pin the gradient color scale according to the color,
+                  # type and value chosen.
+                "color": { # Represents a color in the RGBA color space. This representation is designed # The color this interpolation point should use.
+                    # for simplicity of conversion to/from color representations in various
+                    # languages over compactness; for example, the fields of this representation
+                    # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                    # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                    # method in iOS; and, with just a little work, it can be easily formatted into
+                    # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                    #
+                    # Example (Java):
+                    #
+                    #      import com.google.type.Color;
+                    #
+                    #      // ...
+                    #      public static java.awt.Color fromProto(Color protocolor) {
+                    #        float alpha = protocolor.hasAlpha()
+                    #            ? protocolor.getAlpha().getValue()
+                    #            : 1.0;
+                    #
+                    #        return new java.awt.Color(
+                    #            protocolor.getRed(),
+                    #            protocolor.getGreen(),
+                    #            protocolor.getBlue(),
+                    #            alpha);
+                    #      }
+                    #
+                    #      public static Color toProto(java.awt.Color color) {
+                    #        float red = (float) color.getRed();
+                    #        float green = (float) color.getGreen();
+                    #        float blue = (float) color.getBlue();
+                    #        float denominator = 255.0;
+                    #        Color.Builder resultBuilder =
+                    #            Color
+                    #                .newBuilder()
+                    #                .setRed(red / denominator)
+                    #                .setGreen(green / denominator)
+                    #                .setBlue(blue / denominator);
+                    #        int alpha = color.getAlpha();
+                    #        if (alpha != 255) {
+                    #          result.setAlpha(
+                    #              FloatValue
+                    #                  .newBuilder()
+                    #                  .setValue(((float) alpha) / denominator)
+                    #                  .build());
+                    #        }
+                    #        return resultBuilder.build();
+                    #      }
+                    #      // ...
+                    #
+                    # Example (iOS / Obj-C):
+                    #
+                    #      // ...
+                    #      static UIColor* fromProto(Color* protocolor) {
+                    #         float red = [protocolor red];
+                    #         float green = [protocolor green];
+                    #         float blue = [protocolor blue];
+                    #         FloatValue* alpha_wrapper = [protocolor alpha];
+                    #         float alpha = 1.0;
+                    #         if (alpha_wrapper != nil) {
+                    #           alpha = [alpha_wrapper value];
+                    #         }
+                    #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                    #      }
+                    #
+                    #      static Color* toProto(UIColor* color) {
+                    #          CGFloat red, green, blue, alpha;
+                    #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                    #            return nil;
+                    #          }
+                    #          Color* result = [Color alloc] init];
+                    #          [result setRed:red];
+                    #          [result setGreen:green];
+                    #          [result setBlue:blue];
+                    #          if (alpha <= 0.9999) {
+                    #            [result setAlpha:floatWrapperWithValue(alpha)];
+                    #          }
+                    #          [result autorelease];
+                    #          return result;
+                    #     }
+                    #     // ...
+                    #
+                    #  Example (JavaScript):
+                    #
+                    #     // ...
+                    #
+                    #     var protoToCssColor = function(rgb_color) {
+                    #        var redFrac = rgb_color.red || 0.0;
+                    #        var greenFrac = rgb_color.green || 0.0;
+                    #        var blueFrac = rgb_color.blue || 0.0;
+                    #        var red = Math.floor(redFrac * 255);
+                    #        var green = Math.floor(greenFrac * 255);
+                    #        var blue = Math.floor(blueFrac * 255);
+                    #
+                    #        if (!('alpha' in rgb_color)) {
+                    #           return rgbToCssColor_(red, green, blue);
+                    #        }
+                    #
+                    #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                    #        var rgbParams = [red, green, blue].join(',');
+                    #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                    #     };
+                    #
+                    #     var rgbToCssColor_ = function(red, green, blue) {
+                    #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                    #       var hexString = rgbNumber.toString(16);
+                    #       var missingZeros = 6 - hexString.length;
+                    #       var resultBuilder = ['#'];
+                    #       for (var i = 0; i < missingZeros; i++) {
+                    #          resultBuilder.push('0');
+                    #       }
+                    #       resultBuilder.push(hexString);
+                    #       return resultBuilder.join('');
+                    #     };
+                    #
+                    #     // ...
+                  "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                  "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                      # the final pixel color is defined by the equation:
+                      #
+                      #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                      #
+                      # This means that a value of 1.0 corresponds to a solid color, whereas
+                      # a value of 0.0 corresponds to a completely transparent color. This
+                      # uses a wrapper message rather than a simple float scalar so that it is
+                      # possible to distinguish between a default value and the value being unset.
+                      # If omitted, this color object is to be rendered as a solid color
+                      # (as if the alpha value had been explicitly given with a value of 1.0).
+                  "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                  "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                },
+                "type": "A String", # How the value should be interpreted.
+                "value": "A String", # The value this interpolation point uses.  May be a formula.
+                    # Unused if type is MIN or
+                    # MAX.
+              },
+              "minpoint": { # A single interpolation point a gradient conditional format. # The starting interpolation point.
+                  # These pin the gradient color scale according to the color,
+                  # type and value chosen.
+                "color": { # Represents a color in the RGBA color space. This representation is designed # The color this interpolation point should use.
+                    # for simplicity of conversion to/from color representations in various
+                    # languages over compactness; for example, the fields of this representation
+                    # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                    # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                    # method in iOS; and, with just a little work, it can be easily formatted into
+                    # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                    #
+                    # Example (Java):
+                    #
+                    #      import com.google.type.Color;
+                    #
+                    #      // ...
+                    #      public static java.awt.Color fromProto(Color protocolor) {
+                    #        float alpha = protocolor.hasAlpha()
+                    #            ? protocolor.getAlpha().getValue()
+                    #            : 1.0;
+                    #
+                    #        return new java.awt.Color(
+                    #            protocolor.getRed(),
+                    #            protocolor.getGreen(),
+                    #            protocolor.getBlue(),
+                    #            alpha);
+                    #      }
+                    #
+                    #      public static Color toProto(java.awt.Color color) {
+                    #        float red = (float) color.getRed();
+                    #        float green = (float) color.getGreen();
+                    #        float blue = (float) color.getBlue();
+                    #        float denominator = 255.0;
+                    #        Color.Builder resultBuilder =
+                    #            Color
+                    #                .newBuilder()
+                    #                .setRed(red / denominator)
+                    #                .setGreen(green / denominator)
+                    #                .setBlue(blue / denominator);
+                    #        int alpha = color.getAlpha();
+                    #        if (alpha != 255) {
+                    #          result.setAlpha(
+                    #              FloatValue
+                    #                  .newBuilder()
+                    #                  .setValue(((float) alpha) / denominator)
+                    #                  .build());
+                    #        }
+                    #        return resultBuilder.build();
+                    #      }
+                    #      // ...
+                    #
+                    # Example (iOS / Obj-C):
+                    #
+                    #      // ...
+                    #      static UIColor* fromProto(Color* protocolor) {
+                    #         float red = [protocolor red];
+                    #         float green = [protocolor green];
+                    #         float blue = [protocolor blue];
+                    #         FloatValue* alpha_wrapper = [protocolor alpha];
+                    #         float alpha = 1.0;
+                    #         if (alpha_wrapper != nil) {
+                    #           alpha = [alpha_wrapper value];
+                    #         }
+                    #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                    #      }
+                    #
+                    #      static Color* toProto(UIColor* color) {
+                    #          CGFloat red, green, blue, alpha;
+                    #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                    #            return nil;
+                    #          }
+                    #          Color* result = [Color alloc] init];
+                    #          [result setRed:red];
+                    #          [result setGreen:green];
+                    #          [result setBlue:blue];
+                    #          if (alpha <= 0.9999) {
+                    #            [result setAlpha:floatWrapperWithValue(alpha)];
+                    #          }
+                    #          [result autorelease];
+                    #          return result;
+                    #     }
+                    #     // ...
+                    #
+                    #  Example (JavaScript):
+                    #
+                    #     // ...
+                    #
+                    #     var protoToCssColor = function(rgb_color) {
+                    #        var redFrac = rgb_color.red || 0.0;
+                    #        var greenFrac = rgb_color.green || 0.0;
+                    #        var blueFrac = rgb_color.blue || 0.0;
+                    #        var red = Math.floor(redFrac * 255);
+                    #        var green = Math.floor(greenFrac * 255);
+                    #        var blue = Math.floor(blueFrac * 255);
+                    #
+                    #        if (!('alpha' in rgb_color)) {
+                    #           return rgbToCssColor_(red, green, blue);
+                    #        }
+                    #
+                    #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                    #        var rgbParams = [red, green, blue].join(',');
+                    #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                    #     };
+                    #
+                    #     var rgbToCssColor_ = function(red, green, blue) {
+                    #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                    #       var hexString = rgbNumber.toString(16);
+                    #       var missingZeros = 6 - hexString.length;
+                    #       var resultBuilder = ['#'];
+                    #       for (var i = 0; i < missingZeros; i++) {
+                    #          resultBuilder.push('0');
+                    #       }
+                    #       resultBuilder.push(hexString);
+                    #       return resultBuilder.join('');
+                    #     };
+                    #
+                    #     // ...
+                  "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                  "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                      # the final pixel color is defined by the equation:
+                      #
+                      #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                      #
+                      # This means that a value of 1.0 corresponds to a solid color, whereas
+                      # a value of 0.0 corresponds to a completely transparent color. This
+                      # uses a wrapper message rather than a simple float scalar so that it is
+                      # possible to distinguish between a default value and the value being unset.
+                      # If omitted, this color object is to be rendered as a solid color
+                      # (as if the alpha value had been explicitly given with a value of 1.0).
+                  "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                  "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                },
+                "type": "A String", # How the value should be interpreted.
+                "value": "A String", # The value this interpolation point uses.  May be a formula.
+                    # Unused if type is MIN or
+                    # MAX.
+              },
+            },
+          },
+        },
+        "addFilterView": { # The result of adding a filter view. # A reply from adding a filter view.
+          "filter": { # A filter view. # The newly added filter view.
+            "title": "A String", # The name of the filter view.
+            "namedRangeId": "A String", # The named range this filter view is backed by, if any.
+                #
+                # When writing, only one of range or namedRangeId
+                # may be set.
+            "filterViewId": 42, # The ID of the filter view.
+            "range": { # A range on a sheet. # The range this filter view covers.
+                #
+                # When writing, only one of range or namedRangeId
+                # may be set.
+                # 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 grid 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.
+              "startRowIndex": 42, # The start row (inclusive) 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.
+              "endColumnIndex": 42, # The end column (exclusive) of the range, or not set if unbounded.
+            },
+            "sortSpecs": [ # The sort order per column. Later specifications are used when values
+                # are equal in the earlier specifications.
+              { # A sort order associated with a specific column or row.
+                "sortOrder": "A String", # The order data should be sorted.
+                "dimensionIndex": 42, # The dimension the sort should be applied to.
+              },
+            ],
+            "criteria": { # The criteria for showing/hiding values per column.
+                # The map's key is the column index, and the value is the criteria for
+                # that column.
+              "a_key": { # Criteria for showing/hiding rows in a filter, filter view.
+                "hiddenValues": [ # Values that should be hidden.
+                  "A String",
+                ],
+                "condition": { # A condition that can evaluate to true or false. # A condition that must be true for values to be shown.
+                    # (This does not override hiddenValues -- if a value is listed there,
+                    #  it will still be hidden.)
+                    # BooleanConditions are used by conditional formatting,
+                    # data validation, and the criteria in filters.
+                  "type": "A String", # The type of condition.
+                  "values": [ # The values of the condition. The number of supported values depends
+                      # on the condition type.  Some support zero values,
+                      # others one or two values,
+                      # and ConditionType.ONE_OF_LIST supports an arbitrary number of values.
+                    { # The value of the condition.
+                      "relativeDate": "A String", # A relative date (based on the current date).
+                          # Valid only if the type is
+                          # DATE_BEFORE,
+                          # DATE_AFTER,
+                          # DATE_ON_OR_BEFORE or
+                          # DATE_ON_OR_AFTER.
+                          #
+                          # Relative dates are not supported in data validation.
+                          # They are supported only in conditional formatting and
+                          # conditional filters.
+                      "userEnteredValue": "A String", # A value the condition is based on.
+                          # The value will be parsed as if the user typed into a cell.
+                          # Formulas are supported (and must begin with an `=`).
+                    },
+                  ],
+                },
+              },
+            },
+          },
+        },
+      },
+    ],
+  }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="create">create(body, x__xgafv=None)</code>
+  <pre>Creates a spreadsheet, returning the newly created spreadsheet.
+
+Args:
+  body: object, The request body. (required)
+    The object takes the form of:
+
+{ # Resource that represents a spreadsheet.
+    "spreadsheetId": "A String", # The ID of the spreadsheet.
+        # This field is read-only.
+    "namedRanges": [ # The named ranges defined in a spreadsheet.
+      { # A named range.
+        "namedRangeId": "A String", # The ID of the named range.
+        "range": { # A range on a sheet. # The range this represents.
+            # 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 grid 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.
+          "startRowIndex": 42, # The start row (inclusive) 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.
+          "endColumnIndex": 42, # The end column (exclusive) of the range, or not set if unbounded.
+        },
+        "name": "A String", # The name of the named range.
+      },
+    ],
+    "properties": { # Properties of a spreadsheet. # Overall properties of a spreadsheet.
+      "locale": "A String", # The locale of the spreadsheet in one of the following formats:
+          # * an ISO 639-1 language code such as `en`
+          # * an ISO 639-2 language code such as `fil`, if no 639-1 code exists
+          # * a combination of the ISO language code and country code, such as `en_US`
+          # Note: when updating this field, not all locales/languages are supported.
+      "timeZone": "A String", # The time zone of the spreadsheet, in CLDR format such as
+          # `America/New_York`. If the time zone isn't recognized, this may
+          # be a custom time zone such as `GMT-07:00`.
+      "autoRecalc": "A String", # The amount of time to wait before volatile functions are recalculated.
+      "defaultFormat": { # The format of a cell. # The default format of all cells in the spreadsheet.
+          # CellData.effectiveFormat will not be set if the cell's format is equal
+          # to this default format.
+          # This field is read-only.
+        "numberFormat": { # The number format of a cell. # A format describing how number values should be represented to the user.
+            # When updating, all fields must be set.
+          "pattern": "A String", # Pattern string used for formatting.
+          "type": "A String", # The type of the number format.
+        },
+        "textDirection": "A String", # The direction of the text in the cell.
+        "padding": { # The amount of padding around the cell, in pixels. # The padding of the cell.
+            # When updating padding, every field must be specified.
+          "top": 42, # The top padding of the cell.
+          "right": 42, # The right padding of the cell.
+          "bottom": 42, # The bottom padding of the cell.
+          "left": 42, # The left padding of the cell.
+        },
+        "horizontalAlignment": "A String", # The horizontal alignment of the value in cell.
+        "backgroundColor": { # Represents a color in the RGBA color space. This representation is designed # The background color of the cell.
+            # for simplicity of conversion to/from color representations in various
+            # languages over compactness; for example, the fields of this representation
+            # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+            # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+            # method in iOS; and, with just a little work, it can be easily formatted into
+            # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+            #
+            # Example (Java):
+            #
+            #      import com.google.type.Color;
+            #
+            #      // ...
+            #      public static java.awt.Color fromProto(Color protocolor) {
+            #        float alpha = protocolor.hasAlpha()
+            #            ? protocolor.getAlpha().getValue()
+            #            : 1.0;
+            #
+            #        return new java.awt.Color(
+            #            protocolor.getRed(),
+            #            protocolor.getGreen(),
+            #            protocolor.getBlue(),
+            #            alpha);
+            #      }
+            #
+            #      public static Color toProto(java.awt.Color color) {
+            #        float red = (float) color.getRed();
+            #        float green = (float) color.getGreen();
+            #        float blue = (float) color.getBlue();
+            #        float denominator = 255.0;
+            #        Color.Builder resultBuilder =
+            #            Color
+            #                .newBuilder()
+            #                .setRed(red / denominator)
+            #                .setGreen(green / denominator)
+            #                .setBlue(blue / denominator);
+            #        int alpha = color.getAlpha();
+            #        if (alpha != 255) {
+            #          result.setAlpha(
+            #              FloatValue
+            #                  .newBuilder()
+            #                  .setValue(((float) alpha) / denominator)
+            #                  .build());
+            #        }
+            #        return resultBuilder.build();
+            #      }
+            #      // ...
+            #
+            # Example (iOS / Obj-C):
+            #
+            #      // ...
+            #      static UIColor* fromProto(Color* protocolor) {
+            #         float red = [protocolor red];
+            #         float green = [protocolor green];
+            #         float blue = [protocolor blue];
+            #         FloatValue* alpha_wrapper = [protocolor alpha];
+            #         float alpha = 1.0;
+            #         if (alpha_wrapper != nil) {
+            #           alpha = [alpha_wrapper value];
+            #         }
+            #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+            #      }
+            #
+            #      static Color* toProto(UIColor* color) {
+            #          CGFloat red, green, blue, alpha;
+            #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+            #            return nil;
+            #          }
+            #          Color* result = [Color alloc] init];
+            #          [result setRed:red];
+            #          [result setGreen:green];
+            #          [result setBlue:blue];
+            #          if (alpha <= 0.9999) {
+            #            [result setAlpha:floatWrapperWithValue(alpha)];
+            #          }
+            #          [result autorelease];
+            #          return result;
+            #     }
+            #     // ...
+            #
+            #  Example (JavaScript):
+            #
+            #     // ...
+            #
+            #     var protoToCssColor = function(rgb_color) {
+            #        var redFrac = rgb_color.red || 0.0;
+            #        var greenFrac = rgb_color.green || 0.0;
+            #        var blueFrac = rgb_color.blue || 0.0;
+            #        var red = Math.floor(redFrac * 255);
+            #        var green = Math.floor(greenFrac * 255);
+            #        var blue = Math.floor(blueFrac * 255);
+            #
+            #        if (!('alpha' in rgb_color)) {
+            #           return rgbToCssColor_(red, green, blue);
+            #        }
+            #
+            #        var alphaFrac = rgb_color.alpha.value || 0.0;
+            #        var rgbParams = [red, green, blue].join(',');
+            #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+            #     };
+            #
+            #     var rgbToCssColor_ = function(red, green, blue) {
+            #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+            #       var hexString = rgbNumber.toString(16);
+            #       var missingZeros = 6 - hexString.length;
+            #       var resultBuilder = ['#'];
+            #       for (var i = 0; i < missingZeros; i++) {
+            #          resultBuilder.push('0');
+            #       }
+            #       resultBuilder.push(hexString);
+            #       return resultBuilder.join('');
+            #     };
+            #
+            #     // ...
+          "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+          "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+              # the final pixel color is defined by the equation:
+              #
+              #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+              #
+              # This means that a value of 1.0 corresponds to a solid color, whereas
+              # a value of 0.0 corresponds to a completely transparent color. This
+              # uses a wrapper message rather than a simple float scalar so that it is
+              # possible to distinguish between a default value and the value being unset.
+              # If omitted, this color object is to be rendered as a solid color
+              # (as if the alpha value had been explicitly given with a value of 1.0).
+          "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+          "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+        },
+        "verticalAlignment": "A String", # The vertical alignment of the value in cell.
+        "textFormat": { # The format of a run of text in a cell. # The format of the text in the cell (unless overridden by a format run).
+            # Absent values indicate that the field isn't specified.
+          "foregroundColor": { # Represents a color in the RGBA color space. This representation is designed # The foreground color of the text.
+              # for simplicity of conversion to/from color representations in various
+              # languages over compactness; for example, the fields of this representation
+              # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+              # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+              # method in iOS; and, with just a little work, it can be easily formatted into
+              # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+              #
+              # Example (Java):
+              #
+              #      import com.google.type.Color;
+              #
+              #      // ...
+              #      public static java.awt.Color fromProto(Color protocolor) {
+              #        float alpha = protocolor.hasAlpha()
+              #            ? protocolor.getAlpha().getValue()
+              #            : 1.0;
+              #
+              #        return new java.awt.Color(
+              #            protocolor.getRed(),
+              #            protocolor.getGreen(),
+              #            protocolor.getBlue(),
+              #            alpha);
+              #      }
+              #
+              #      public static Color toProto(java.awt.Color color) {
+              #        float red = (float) color.getRed();
+              #        float green = (float) color.getGreen();
+              #        float blue = (float) color.getBlue();
+              #        float denominator = 255.0;
+              #        Color.Builder resultBuilder =
+              #            Color
+              #                .newBuilder()
+              #                .setRed(red / denominator)
+              #                .setGreen(green / denominator)
+              #                .setBlue(blue / denominator);
+              #        int alpha = color.getAlpha();
+              #        if (alpha != 255) {
+              #          result.setAlpha(
+              #              FloatValue
+              #                  .newBuilder()
+              #                  .setValue(((float) alpha) / denominator)
+              #                  .build());
+              #        }
+              #        return resultBuilder.build();
+              #      }
+              #      // ...
+              #
+              # Example (iOS / Obj-C):
+              #
+              #      // ...
+              #      static UIColor* fromProto(Color* protocolor) {
+              #         float red = [protocolor red];
+              #         float green = [protocolor green];
+              #         float blue = [protocolor blue];
+              #         FloatValue* alpha_wrapper = [protocolor alpha];
+              #         float alpha = 1.0;
+              #         if (alpha_wrapper != nil) {
+              #           alpha = [alpha_wrapper value];
+              #         }
+              #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+              #      }
+              #
+              #      static Color* toProto(UIColor* color) {
+              #          CGFloat red, green, blue, alpha;
+              #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+              #            return nil;
+              #          }
+              #          Color* result = [Color alloc] init];
+              #          [result setRed:red];
+              #          [result setGreen:green];
+              #          [result setBlue:blue];
+              #          if (alpha <= 0.9999) {
+              #            [result setAlpha:floatWrapperWithValue(alpha)];
+              #          }
+              #          [result autorelease];
+              #          return result;
+              #     }
+              #     // ...
+              #
+              #  Example (JavaScript):
+              #
+              #     // ...
+              #
+              #     var protoToCssColor = function(rgb_color) {
+              #        var redFrac = rgb_color.red || 0.0;
+              #        var greenFrac = rgb_color.green || 0.0;
+              #        var blueFrac = rgb_color.blue || 0.0;
+              #        var red = Math.floor(redFrac * 255);
+              #        var green = Math.floor(greenFrac * 255);
+              #        var blue = Math.floor(blueFrac * 255);
+              #
+              #        if (!('alpha' in rgb_color)) {
+              #           return rgbToCssColor_(red, green, blue);
+              #        }
+              #
+              #        var alphaFrac = rgb_color.alpha.value || 0.0;
+              #        var rgbParams = [red, green, blue].join(',');
+              #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+              #     };
+              #
+              #     var rgbToCssColor_ = function(red, green, blue) {
+              #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+              #       var hexString = rgbNumber.toString(16);
+              #       var missingZeros = 6 - hexString.length;
+              #       var resultBuilder = ['#'];
+              #       for (var i = 0; i < missingZeros; i++) {
+              #          resultBuilder.push('0');
+              #       }
+              #       resultBuilder.push(hexString);
+              #       return resultBuilder.join('');
+              #     };
+              #
+              #     // ...
+            "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+            "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                # the final pixel color is defined by the equation:
+                #
+                #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                #
+                # This means that a value of 1.0 corresponds to a solid color, whereas
+                # a value of 0.0 corresponds to a completely transparent color. This
+                # uses a wrapper message rather than a simple float scalar so that it is
+                # possible to distinguish between a default value and the value being unset.
+                # If omitted, this color object is to be rendered as a solid color
+                # (as if the alpha value had been explicitly given with a value of 1.0).
+            "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+            "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+          },
+          "bold": True or False, # True if the text is bold.
+          "strikethrough": True or False, # True if the text has a strikethrough.
+          "fontFamily": "A String", # The font family.
+          "fontSize": 42, # The size of the font.
+          "italic": True or False, # True if the text is italicized.
+          "underline": True or False, # True if the text is underlined.
+        },
+        "hyperlinkDisplayType": "A String", # How a hyperlink, if it exists, should be displayed in the cell.
+        "borders": { # The borders of the cell. # The borders of the cell.
+          "top": { # A border along a cell. # The top border of the cell.
+            "color": { # Represents a color in the RGBA color space. This representation is designed # The color of the border.
+                # for simplicity of conversion to/from color representations in various
+                # languages over compactness; for example, the fields of this representation
+                # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                # method in iOS; and, with just a little work, it can be easily formatted into
+                # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                #
+                # Example (Java):
+                #
+                #      import com.google.type.Color;
+                #
+                #      // ...
+                #      public static java.awt.Color fromProto(Color protocolor) {
+                #        float alpha = protocolor.hasAlpha()
+                #            ? protocolor.getAlpha().getValue()
+                #            : 1.0;
+                #
+                #        return new java.awt.Color(
+                #            protocolor.getRed(),
+                #            protocolor.getGreen(),
+                #            protocolor.getBlue(),
+                #            alpha);
+                #      }
+                #
+                #      public static Color toProto(java.awt.Color color) {
+                #        float red = (float) color.getRed();
+                #        float green = (float) color.getGreen();
+                #        float blue = (float) color.getBlue();
+                #        float denominator = 255.0;
+                #        Color.Builder resultBuilder =
+                #            Color
+                #                .newBuilder()
+                #                .setRed(red / denominator)
+                #                .setGreen(green / denominator)
+                #                .setBlue(blue / denominator);
+                #        int alpha = color.getAlpha();
+                #        if (alpha != 255) {
+                #          result.setAlpha(
+                #              FloatValue
+                #                  .newBuilder()
+                #                  .setValue(((float) alpha) / denominator)
+                #                  .build());
+                #        }
+                #        return resultBuilder.build();
+                #      }
+                #      // ...
+                #
+                # Example (iOS / Obj-C):
+                #
+                #      // ...
+                #      static UIColor* fromProto(Color* protocolor) {
+                #         float red = [protocolor red];
+                #         float green = [protocolor green];
+                #         float blue = [protocolor blue];
+                #         FloatValue* alpha_wrapper = [protocolor alpha];
+                #         float alpha = 1.0;
+                #         if (alpha_wrapper != nil) {
+                #           alpha = [alpha_wrapper value];
+                #         }
+                #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                #      }
+                #
+                #      static Color* toProto(UIColor* color) {
+                #          CGFloat red, green, blue, alpha;
+                #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                #            return nil;
+                #          }
+                #          Color* result = [Color alloc] init];
+                #          [result setRed:red];
+                #          [result setGreen:green];
+                #          [result setBlue:blue];
+                #          if (alpha <= 0.9999) {
+                #            [result setAlpha:floatWrapperWithValue(alpha)];
+                #          }
+                #          [result autorelease];
+                #          return result;
+                #     }
+                #     // ...
+                #
+                #  Example (JavaScript):
+                #
+                #     // ...
+                #
+                #     var protoToCssColor = function(rgb_color) {
+                #        var redFrac = rgb_color.red || 0.0;
+                #        var greenFrac = rgb_color.green || 0.0;
+                #        var blueFrac = rgb_color.blue || 0.0;
+                #        var red = Math.floor(redFrac * 255);
+                #        var green = Math.floor(greenFrac * 255);
+                #        var blue = Math.floor(blueFrac * 255);
+                #
+                #        if (!('alpha' in rgb_color)) {
+                #           return rgbToCssColor_(red, green, blue);
+                #        }
+                #
+                #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                #        var rgbParams = [red, green, blue].join(',');
+                #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                #     };
+                #
+                #     var rgbToCssColor_ = function(red, green, blue) {
+                #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                #       var hexString = rgbNumber.toString(16);
+                #       var missingZeros = 6 - hexString.length;
+                #       var resultBuilder = ['#'];
+                #       for (var i = 0; i < missingZeros; i++) {
+                #          resultBuilder.push('0');
+                #       }
+                #       resultBuilder.push(hexString);
+                #       return resultBuilder.join('');
+                #     };
+                #
+                #     // ...
+              "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+              "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                  # the final pixel color is defined by the equation:
+                  #
+                  #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                  #
+                  # This means that a value of 1.0 corresponds to a solid color, whereas
+                  # a value of 0.0 corresponds to a completely transparent color. This
+                  # uses a wrapper message rather than a simple float scalar so that it is
+                  # possible to distinguish between a default value and the value being unset.
+                  # If omitted, this color object is to be rendered as a solid color
+                  # (as if the alpha value had been explicitly given with a value of 1.0).
+              "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+              "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+            },
+            "width": 42, # The width of the border, in pixels.
+                # Border widths must be between 0 and 3 pixels.
+            "style": "A String", # The style of the border.
+          },
+          "right": { # A border along a cell. # The right border of the cell.
+            "color": { # Represents a color in the RGBA color space. This representation is designed # The color of the border.
+                # for simplicity of conversion to/from color representations in various
+                # languages over compactness; for example, the fields of this representation
+                # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                # method in iOS; and, with just a little work, it can be easily formatted into
+                # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                #
+                # Example (Java):
+                #
+                #      import com.google.type.Color;
+                #
+                #      // ...
+                #      public static java.awt.Color fromProto(Color protocolor) {
+                #        float alpha = protocolor.hasAlpha()
+                #            ? protocolor.getAlpha().getValue()
+                #            : 1.0;
+                #
+                #        return new java.awt.Color(
+                #            protocolor.getRed(),
+                #            protocolor.getGreen(),
+                #            protocolor.getBlue(),
+                #            alpha);
+                #      }
+                #
+                #      public static Color toProto(java.awt.Color color) {
+                #        float red = (float) color.getRed();
+                #        float green = (float) color.getGreen();
+                #        float blue = (float) color.getBlue();
+                #        float denominator = 255.0;
+                #        Color.Builder resultBuilder =
+                #            Color
+                #                .newBuilder()
+                #                .setRed(red / denominator)
+                #                .setGreen(green / denominator)
+                #                .setBlue(blue / denominator);
+                #        int alpha = color.getAlpha();
+                #        if (alpha != 255) {
+                #          result.setAlpha(
+                #              FloatValue
+                #                  .newBuilder()
+                #                  .setValue(((float) alpha) / denominator)
+                #                  .build());
+                #        }
+                #        return resultBuilder.build();
+                #      }
+                #      // ...
+                #
+                # Example (iOS / Obj-C):
+                #
+                #      // ...
+                #      static UIColor* fromProto(Color* protocolor) {
+                #         float red = [protocolor red];
+                #         float green = [protocolor green];
+                #         float blue = [protocolor blue];
+                #         FloatValue* alpha_wrapper = [protocolor alpha];
+                #         float alpha = 1.0;
+                #         if (alpha_wrapper != nil) {
+                #           alpha = [alpha_wrapper value];
+                #         }
+                #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                #      }
+                #
+                #      static Color* toProto(UIColor* color) {
+                #          CGFloat red, green, blue, alpha;
+                #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                #            return nil;
+                #          }
+                #          Color* result = [Color alloc] init];
+                #          [result setRed:red];
+                #          [result setGreen:green];
+                #          [result setBlue:blue];
+                #          if (alpha <= 0.9999) {
+                #            [result setAlpha:floatWrapperWithValue(alpha)];
+                #          }
+                #          [result autorelease];
+                #          return result;
+                #     }
+                #     // ...
+                #
+                #  Example (JavaScript):
+                #
+                #     // ...
+                #
+                #     var protoToCssColor = function(rgb_color) {
+                #        var redFrac = rgb_color.red || 0.0;
+                #        var greenFrac = rgb_color.green || 0.0;
+                #        var blueFrac = rgb_color.blue || 0.0;
+                #        var red = Math.floor(redFrac * 255);
+                #        var green = Math.floor(greenFrac * 255);
+                #        var blue = Math.floor(blueFrac * 255);
+                #
+                #        if (!('alpha' in rgb_color)) {
+                #           return rgbToCssColor_(red, green, blue);
+                #        }
+                #
+                #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                #        var rgbParams = [red, green, blue].join(',');
+                #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                #     };
+                #
+                #     var rgbToCssColor_ = function(red, green, blue) {
+                #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                #       var hexString = rgbNumber.toString(16);
+                #       var missingZeros = 6 - hexString.length;
+                #       var resultBuilder = ['#'];
+                #       for (var i = 0; i < missingZeros; i++) {
+                #          resultBuilder.push('0');
+                #       }
+                #       resultBuilder.push(hexString);
+                #       return resultBuilder.join('');
+                #     };
+                #
+                #     // ...
+              "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+              "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                  # the final pixel color is defined by the equation:
+                  #
+                  #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                  #
+                  # This means that a value of 1.0 corresponds to a solid color, whereas
+                  # a value of 0.0 corresponds to a completely transparent color. This
+                  # uses a wrapper message rather than a simple float scalar so that it is
+                  # possible to distinguish between a default value and the value being unset.
+                  # If omitted, this color object is to be rendered as a solid color
+                  # (as if the alpha value had been explicitly given with a value of 1.0).
+              "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+              "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+            },
+            "width": 42, # The width of the border, in pixels.
+                # Border widths must be between 0 and 3 pixels.
+            "style": "A String", # The style of the border.
+          },
+          "bottom": { # A border along a cell. # The bottom border of the cell.
+            "color": { # Represents a color in the RGBA color space. This representation is designed # The color of the border.
+                # for simplicity of conversion to/from color representations in various
+                # languages over compactness; for example, the fields of this representation
+                # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                # method in iOS; and, with just a little work, it can be easily formatted into
+                # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                #
+                # Example (Java):
+                #
+                #      import com.google.type.Color;
+                #
+                #      // ...
+                #      public static java.awt.Color fromProto(Color protocolor) {
+                #        float alpha = protocolor.hasAlpha()
+                #            ? protocolor.getAlpha().getValue()
+                #            : 1.0;
+                #
+                #        return new java.awt.Color(
+                #            protocolor.getRed(),
+                #            protocolor.getGreen(),
+                #            protocolor.getBlue(),
+                #            alpha);
+                #      }
+                #
+                #      public static Color toProto(java.awt.Color color) {
+                #        float red = (float) color.getRed();
+                #        float green = (float) color.getGreen();
+                #        float blue = (float) color.getBlue();
+                #        float denominator = 255.0;
+                #        Color.Builder resultBuilder =
+                #            Color
+                #                .newBuilder()
+                #                .setRed(red / denominator)
+                #                .setGreen(green / denominator)
+                #                .setBlue(blue / denominator);
+                #        int alpha = color.getAlpha();
+                #        if (alpha != 255) {
+                #          result.setAlpha(
+                #              FloatValue
+                #                  .newBuilder()
+                #                  .setValue(((float) alpha) / denominator)
+                #                  .build());
+                #        }
+                #        return resultBuilder.build();
+                #      }
+                #      // ...
+                #
+                # Example (iOS / Obj-C):
+                #
+                #      // ...
+                #      static UIColor* fromProto(Color* protocolor) {
+                #         float red = [protocolor red];
+                #         float green = [protocolor green];
+                #         float blue = [protocolor blue];
+                #         FloatValue* alpha_wrapper = [protocolor alpha];
+                #         float alpha = 1.0;
+                #         if (alpha_wrapper != nil) {
+                #           alpha = [alpha_wrapper value];
+                #         }
+                #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                #      }
+                #
+                #      static Color* toProto(UIColor* color) {
+                #          CGFloat red, green, blue, alpha;
+                #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                #            return nil;
+                #          }
+                #          Color* result = [Color alloc] init];
+                #          [result setRed:red];
+                #          [result setGreen:green];
+                #          [result setBlue:blue];
+                #          if (alpha <= 0.9999) {
+                #            [result setAlpha:floatWrapperWithValue(alpha)];
+                #          }
+                #          [result autorelease];
+                #          return result;
+                #     }
+                #     // ...
+                #
+                #  Example (JavaScript):
+                #
+                #     // ...
+                #
+                #     var protoToCssColor = function(rgb_color) {
+                #        var redFrac = rgb_color.red || 0.0;
+                #        var greenFrac = rgb_color.green || 0.0;
+                #        var blueFrac = rgb_color.blue || 0.0;
+                #        var red = Math.floor(redFrac * 255);
+                #        var green = Math.floor(greenFrac * 255);
+                #        var blue = Math.floor(blueFrac * 255);
+                #
+                #        if (!('alpha' in rgb_color)) {
+                #           return rgbToCssColor_(red, green, blue);
+                #        }
+                #
+                #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                #        var rgbParams = [red, green, blue].join(',');
+                #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                #     };
+                #
+                #     var rgbToCssColor_ = function(red, green, blue) {
+                #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                #       var hexString = rgbNumber.toString(16);
+                #       var missingZeros = 6 - hexString.length;
+                #       var resultBuilder = ['#'];
+                #       for (var i = 0; i < missingZeros; i++) {
+                #          resultBuilder.push('0');
+                #       }
+                #       resultBuilder.push(hexString);
+                #       return resultBuilder.join('');
+                #     };
+                #
+                #     // ...
+              "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+              "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                  # the final pixel color is defined by the equation:
+                  #
+                  #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                  #
+                  # This means that a value of 1.0 corresponds to a solid color, whereas
+                  # a value of 0.0 corresponds to a completely transparent color. This
+                  # uses a wrapper message rather than a simple float scalar so that it is
+                  # possible to distinguish between a default value and the value being unset.
+                  # If omitted, this color object is to be rendered as a solid color
+                  # (as if the alpha value had been explicitly given with a value of 1.0).
+              "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+              "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+            },
+            "width": 42, # The width of the border, in pixels.
+                # Border widths must be between 0 and 3 pixels.
+            "style": "A String", # The style of the border.
+          },
+          "left": { # A border along a cell. # The left border of the cell.
+            "color": { # Represents a color in the RGBA color space. This representation is designed # The color of the border.
+                # for simplicity of conversion to/from color representations in various
+                # languages over compactness; for example, the fields of this representation
+                # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                # method in iOS; and, with just a little work, it can be easily formatted into
+                # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                #
+                # Example (Java):
+                #
+                #      import com.google.type.Color;
+                #
+                #      // ...
+                #      public static java.awt.Color fromProto(Color protocolor) {
+                #        float alpha = protocolor.hasAlpha()
+                #            ? protocolor.getAlpha().getValue()
+                #            : 1.0;
+                #
+                #        return new java.awt.Color(
+                #            protocolor.getRed(),
+                #            protocolor.getGreen(),
+                #            protocolor.getBlue(),
+                #            alpha);
+                #      }
+                #
+                #      public static Color toProto(java.awt.Color color) {
+                #        float red = (float) color.getRed();
+                #        float green = (float) color.getGreen();
+                #        float blue = (float) color.getBlue();
+                #        float denominator = 255.0;
+                #        Color.Builder resultBuilder =
+                #            Color
+                #                .newBuilder()
+                #                .setRed(red / denominator)
+                #                .setGreen(green / denominator)
+                #                .setBlue(blue / denominator);
+                #        int alpha = color.getAlpha();
+                #        if (alpha != 255) {
+                #          result.setAlpha(
+                #              FloatValue
+                #                  .newBuilder()
+                #                  .setValue(((float) alpha) / denominator)
+                #                  .build());
+                #        }
+                #        return resultBuilder.build();
+                #      }
+                #      // ...
+                #
+                # Example (iOS / Obj-C):
+                #
+                #      // ...
+                #      static UIColor* fromProto(Color* protocolor) {
+                #         float red = [protocolor red];
+                #         float green = [protocolor green];
+                #         float blue = [protocolor blue];
+                #         FloatValue* alpha_wrapper = [protocolor alpha];
+                #         float alpha = 1.0;
+                #         if (alpha_wrapper != nil) {
+                #           alpha = [alpha_wrapper value];
+                #         }
+                #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                #      }
+                #
+                #      static Color* toProto(UIColor* color) {
+                #          CGFloat red, green, blue, alpha;
+                #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                #            return nil;
+                #          }
+                #          Color* result = [Color alloc] init];
+                #          [result setRed:red];
+                #          [result setGreen:green];
+                #          [result setBlue:blue];
+                #          if (alpha <= 0.9999) {
+                #            [result setAlpha:floatWrapperWithValue(alpha)];
+                #          }
+                #          [result autorelease];
+                #          return result;
+                #     }
+                #     // ...
+                #
+                #  Example (JavaScript):
+                #
+                #     // ...
+                #
+                #     var protoToCssColor = function(rgb_color) {
+                #        var redFrac = rgb_color.red || 0.0;
+                #        var greenFrac = rgb_color.green || 0.0;
+                #        var blueFrac = rgb_color.blue || 0.0;
+                #        var red = Math.floor(redFrac * 255);
+                #        var green = Math.floor(greenFrac * 255);
+                #        var blue = Math.floor(blueFrac * 255);
+                #
+                #        if (!('alpha' in rgb_color)) {
+                #           return rgbToCssColor_(red, green, blue);
+                #        }
+                #
+                #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                #        var rgbParams = [red, green, blue].join(',');
+                #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                #     };
+                #
+                #     var rgbToCssColor_ = function(red, green, blue) {
+                #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                #       var hexString = rgbNumber.toString(16);
+                #       var missingZeros = 6 - hexString.length;
+                #       var resultBuilder = ['#'];
+                #       for (var i = 0; i < missingZeros; i++) {
+                #          resultBuilder.push('0');
+                #       }
+                #       resultBuilder.push(hexString);
+                #       return resultBuilder.join('');
+                #     };
+                #
+                #     // ...
+              "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+              "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                  # the final pixel color is defined by the equation:
+                  #
+                  #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                  #
+                  # This means that a value of 1.0 corresponds to a solid color, whereas
+                  # a value of 0.0 corresponds to a completely transparent color. This
+                  # uses a wrapper message rather than a simple float scalar so that it is
+                  # possible to distinguish between a default value and the value being unset.
+                  # If omitted, this color object is to be rendered as a solid color
+                  # (as if the alpha value had been explicitly given with a value of 1.0).
+              "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+              "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+            },
+            "width": 42, # The width of the border, in pixels.
+                # Border widths must be between 0 and 3 pixels.
+            "style": "A String", # The style of the border.
+          },
+        },
+        "wrapStrategy": "A String", # The wrap strategy for the value in the cell.
+      },
+      "title": "A String", # The title of the spreadsheet.
+    },
+    "sheets": [ # The sheets that are part of a spreadsheet.
+      { # A sheet in a spreadsheet.
+        "conditionalFormats": [ # The conditional format rules in this sheet.
+          { # A rule describing a conditional format.
+            "ranges": [ # The ranges that will be formatted if the condition is true.
+                # All the ranges must be on the same grid.
+              { # A range on a sheet.
+                  # 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 grid 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.
+                "startRowIndex": 42, # The start row (inclusive) 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.
+                "endColumnIndex": 42, # The end column (exclusive) of the range, or not set if unbounded.
+              },
+            ],
+            "booleanRule": { # A rule that may or may not match, depending on the condition. # The formatting is either "on" or "off" according to the rule.
+              "condition": { # A condition that can evaluate to true or false. # The condition of the rule. If the condition evaluates to true,
+                  # the format will be applied.
+                  # BooleanConditions are used by conditional formatting,
+                  # data validation, and the criteria in filters.
+                "type": "A String", # The type of condition.
+                "values": [ # The values of the condition. The number of supported values depends
+                    # on the condition type.  Some support zero values,
+                    # others one or two values,
+                    # and ConditionType.ONE_OF_LIST supports an arbitrary number of values.
+                  { # The value of the condition.
+                    "relativeDate": "A String", # A relative date (based on the current date).
+                        # Valid only if the type is
+                        # DATE_BEFORE,
+                        # DATE_AFTER,
+                        # DATE_ON_OR_BEFORE or
+                        # DATE_ON_OR_AFTER.
+                        #
+                        # Relative dates are not supported in data validation.
+                        # They are supported only in conditional formatting and
+                        # conditional filters.
+                    "userEnteredValue": "A String", # A value the condition is based on.
+                        # The value will be parsed as if the user typed into a cell.
+                        # Formulas are supported (and must begin with an `=`).
+                  },
+                ],
+              },
+              "format": { # The format of a cell. # The format to apply.
+                  # Conditional formatting can only apply a subset of formatting:
+                  # bold, italic,
+                  # strikethrough,
+                  # foreground color &
+                  # background color.
+                "numberFormat": { # The number format of a cell. # A format describing how number values should be represented to the user.
+                    # When updating, all fields must be set.
+                  "pattern": "A String", # Pattern string used for formatting.
+                  "type": "A String", # The type of the number format.
+                },
+                "textDirection": "A String", # The direction of the text in the cell.
+                "padding": { # The amount of padding around the cell, in pixels. # The padding of the cell.
+                    # When updating padding, every field must be specified.
+                  "top": 42, # The top padding of the cell.
+                  "right": 42, # The right padding of the cell.
+                  "bottom": 42, # The bottom padding of the cell.
+                  "left": 42, # The left padding of the cell.
+                },
+                "horizontalAlignment": "A String", # The horizontal alignment of the value in cell.
+                "backgroundColor": { # Represents a color in the RGBA color space. This representation is designed # The background color of the cell.
+                    # for simplicity of conversion to/from color representations in various
+                    # languages over compactness; for example, the fields of this representation
+                    # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                    # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                    # method in iOS; and, with just a little work, it can be easily formatted into
+                    # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                    #
+                    # Example (Java):
+                    #
+                    #      import com.google.type.Color;
+                    #
+                    #      // ...
+                    #      public static java.awt.Color fromProto(Color protocolor) {
+                    #        float alpha = protocolor.hasAlpha()
+                    #            ? protocolor.getAlpha().getValue()
+                    #            : 1.0;
+                    #
+                    #        return new java.awt.Color(
+                    #            protocolor.getRed(),
+                    #            protocolor.getGreen(),
+                    #            protocolor.getBlue(),
+                    #            alpha);
+                    #      }
+                    #
+                    #      public static Color toProto(java.awt.Color color) {
+                    #        float red = (float) color.getRed();
+                    #        float green = (float) color.getGreen();
+                    #        float blue = (float) color.getBlue();
+                    #        float denominator = 255.0;
+                    #        Color.Builder resultBuilder =
+                    #            Color
+                    #                .newBuilder()
+                    #                .setRed(red / denominator)
+                    #                .setGreen(green / denominator)
+                    #                .setBlue(blue / denominator);
+                    #        int alpha = color.getAlpha();
+                    #        if (alpha != 255) {
+                    #          result.setAlpha(
+                    #              FloatValue
+                    #                  .newBuilder()
+                    #                  .setValue(((float) alpha) / denominator)
+                    #                  .build());
+                    #        }
+                    #        return resultBuilder.build();
+                    #      }
+                    #      // ...
+                    #
+                    # Example (iOS / Obj-C):
+                    #
+                    #      // ...
+                    #      static UIColor* fromProto(Color* protocolor) {
+                    #         float red = [protocolor red];
+                    #         float green = [protocolor green];
+                    #         float blue = [protocolor blue];
+                    #         FloatValue* alpha_wrapper = [protocolor alpha];
+                    #         float alpha = 1.0;
+                    #         if (alpha_wrapper != nil) {
+                    #           alpha = [alpha_wrapper value];
+                    #         }
+                    #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                    #      }
+                    #
+                    #      static Color* toProto(UIColor* color) {
+                    #          CGFloat red, green, blue, alpha;
+                    #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                    #            return nil;
+                    #          }
+                    #          Color* result = [Color alloc] init];
+                    #          [result setRed:red];
+                    #          [result setGreen:green];
+                    #          [result setBlue:blue];
+                    #          if (alpha <= 0.9999) {
+                    #            [result setAlpha:floatWrapperWithValue(alpha)];
+                    #          }
+                    #          [result autorelease];
+                    #          return result;
+                    #     }
+                    #     // ...
+                    #
+                    #  Example (JavaScript):
+                    #
+                    #     // ...
+                    #
+                    #     var protoToCssColor = function(rgb_color) {
+                    #        var redFrac = rgb_color.red || 0.0;
+                    #        var greenFrac = rgb_color.green || 0.0;
+                    #        var blueFrac = rgb_color.blue || 0.0;
+                    #        var red = Math.floor(redFrac * 255);
+                    #        var green = Math.floor(greenFrac * 255);
+                    #        var blue = Math.floor(blueFrac * 255);
+                    #
+                    #        if (!('alpha' in rgb_color)) {
+                    #           return rgbToCssColor_(red, green, blue);
+                    #        }
+                    #
+                    #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                    #        var rgbParams = [red, green, blue].join(',');
+                    #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                    #     };
+                    #
+                    #     var rgbToCssColor_ = function(red, green, blue) {
+                    #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                    #       var hexString = rgbNumber.toString(16);
+                    #       var missingZeros = 6 - hexString.length;
+                    #       var resultBuilder = ['#'];
+                    #       for (var i = 0; i < missingZeros; i++) {
+                    #          resultBuilder.push('0');
+                    #       }
+                    #       resultBuilder.push(hexString);
+                    #       return resultBuilder.join('');
+                    #     };
+                    #
+                    #     // ...
+                  "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                  "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                      # the final pixel color is defined by the equation:
+                      #
+                      #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                      #
+                      # This means that a value of 1.0 corresponds to a solid color, whereas
+                      # a value of 0.0 corresponds to a completely transparent color. This
+                      # uses a wrapper message rather than a simple float scalar so that it is
+                      # possible to distinguish between a default value and the value being unset.
+                      # If omitted, this color object is to be rendered as a solid color
+                      # (as if the alpha value had been explicitly given with a value of 1.0).
+                  "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                  "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                },
+                "verticalAlignment": "A String", # The vertical alignment of the value in cell.
+                "textFormat": { # The format of a run of text in a cell. # The format of the text in the cell (unless overridden by a format run).
+                    # Absent values indicate that the field isn't specified.
+                  "foregroundColor": { # Represents a color in the RGBA color space. This representation is designed # The foreground color of the text.
+                      # for simplicity of conversion to/from color representations in various
+                      # languages over compactness; for example, the fields of this representation
+                      # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                      # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                      # method in iOS; and, with just a little work, it can be easily formatted into
+                      # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                      #
+                      # Example (Java):
+                      #
+                      #      import com.google.type.Color;
+                      #
+                      #      // ...
+                      #      public static java.awt.Color fromProto(Color protocolor) {
+                      #        float alpha = protocolor.hasAlpha()
+                      #            ? protocolor.getAlpha().getValue()
+                      #            : 1.0;
+                      #
+                      #        return new java.awt.Color(
+                      #            protocolor.getRed(),
+                      #            protocolor.getGreen(),
+                      #            protocolor.getBlue(),
+                      #            alpha);
+                      #      }
+                      #
+                      #      public static Color toProto(java.awt.Color color) {
+                      #        float red = (float) color.getRed();
+                      #        float green = (float) color.getGreen();
+                      #        float blue = (float) color.getBlue();
+                      #        float denominator = 255.0;
+                      #        Color.Builder resultBuilder =
+                      #            Color
+                      #                .newBuilder()
+                      #                .setRed(red / denominator)
+                      #                .setGreen(green / denominator)
+                      #                .setBlue(blue / denominator);
+                      #        int alpha = color.getAlpha();
+                      #        if (alpha != 255) {
+                      #          result.setAlpha(
+                      #              FloatValue
+                      #                  .newBuilder()
+                      #                  .setValue(((float) alpha) / denominator)
+                      #                  .build());
+                      #        }
+                      #        return resultBuilder.build();
+                      #      }
+                      #      // ...
+                      #
+                      # Example (iOS / Obj-C):
+                      #
+                      #      // ...
+                      #      static UIColor* fromProto(Color* protocolor) {
+                      #         float red = [protocolor red];
+                      #         float green = [protocolor green];
+                      #         float blue = [protocolor blue];
+                      #         FloatValue* alpha_wrapper = [protocolor alpha];
+                      #         float alpha = 1.0;
+                      #         if (alpha_wrapper != nil) {
+                      #           alpha = [alpha_wrapper value];
+                      #         }
+                      #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                      #      }
+                      #
+                      #      static Color* toProto(UIColor* color) {
+                      #          CGFloat red, green, blue, alpha;
+                      #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                      #            return nil;
+                      #          }
+                      #          Color* result = [Color alloc] init];
+                      #          [result setRed:red];
+                      #          [result setGreen:green];
+                      #          [result setBlue:blue];
+                      #          if (alpha <= 0.9999) {
+                      #            [result setAlpha:floatWrapperWithValue(alpha)];
+                      #          }
+                      #          [result autorelease];
+                      #          return result;
+                      #     }
+                      #     // ...
+                      #
+                      #  Example (JavaScript):
+                      #
+                      #     // ...
+                      #
+                      #     var protoToCssColor = function(rgb_color) {
+                      #        var redFrac = rgb_color.red || 0.0;
+                      #        var greenFrac = rgb_color.green || 0.0;
+                      #        var blueFrac = rgb_color.blue || 0.0;
+                      #        var red = Math.floor(redFrac * 255);
+                      #        var green = Math.floor(greenFrac * 255);
+                      #        var blue = Math.floor(blueFrac * 255);
+                      #
+                      #        if (!('alpha' in rgb_color)) {
+                      #           return rgbToCssColor_(red, green, blue);
+                      #        }
+                      #
+                      #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                      #        var rgbParams = [red, green, blue].join(',');
+                      #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                      #     };
+                      #
+                      #     var rgbToCssColor_ = function(red, green, blue) {
+                      #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                      #       var hexString = rgbNumber.toString(16);
+                      #       var missingZeros = 6 - hexString.length;
+                      #       var resultBuilder = ['#'];
+                      #       for (var i = 0; i < missingZeros; i++) {
+                      #          resultBuilder.push('0');
+                      #       }
+                      #       resultBuilder.push(hexString);
+                      #       return resultBuilder.join('');
+                      #     };
+                      #
+                      #     // ...
+                    "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                    "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                        # the final pixel color is defined by the equation:
+                        #
+                        #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                        #
+                        # This means that a value of 1.0 corresponds to a solid color, whereas
+                        # a value of 0.0 corresponds to a completely transparent color. This
+                        # uses a wrapper message rather than a simple float scalar so that it is
+                        # possible to distinguish between a default value and the value being unset.
+                        # If omitted, this color object is to be rendered as a solid color
+                        # (as if the alpha value had been explicitly given with a value of 1.0).
+                    "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                    "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                  },
+                  "bold": True or False, # True if the text is bold.
+                  "strikethrough": True or False, # True if the text has a strikethrough.
+                  "fontFamily": "A String", # The font family.
+                  "fontSize": 42, # The size of the font.
+                  "italic": True or False, # True if the text is italicized.
+                  "underline": True or False, # True if the text is underlined.
+                },
+                "hyperlinkDisplayType": "A String", # How a hyperlink, if it exists, should be displayed in the cell.
+                "borders": { # The borders of the cell. # The borders of the cell.
+                  "top": { # A border along a cell. # The top border of the cell.
+                    "color": { # Represents a color in the RGBA color space. This representation is designed # The color of the border.
+                        # for simplicity of conversion to/from color representations in various
+                        # languages over compactness; for example, the fields of this representation
+                        # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                        # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                        # method in iOS; and, with just a little work, it can be easily formatted into
+                        # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                        #
+                        # Example (Java):
+                        #
+                        #      import com.google.type.Color;
+                        #
+                        #      // ...
+                        #      public static java.awt.Color fromProto(Color protocolor) {
+                        #        float alpha = protocolor.hasAlpha()
+                        #            ? protocolor.getAlpha().getValue()
+                        #            : 1.0;
+                        #
+                        #        return new java.awt.Color(
+                        #            protocolor.getRed(),
+                        #            protocolor.getGreen(),
+                        #            protocolor.getBlue(),
+                        #            alpha);
+                        #      }
+                        #
+                        #      public static Color toProto(java.awt.Color color) {
+                        #        float red = (float) color.getRed();
+                        #        float green = (float) color.getGreen();
+                        #        float blue = (float) color.getBlue();
+                        #        float denominator = 255.0;
+                        #        Color.Builder resultBuilder =
+                        #            Color
+                        #                .newBuilder()
+                        #                .setRed(red / denominator)
+                        #                .setGreen(green / denominator)
+                        #                .setBlue(blue / denominator);
+                        #        int alpha = color.getAlpha();
+                        #        if (alpha != 255) {
+                        #          result.setAlpha(
+                        #              FloatValue
+                        #                  .newBuilder()
+                        #                  .setValue(((float) alpha) / denominator)
+                        #                  .build());
+                        #        }
+                        #        return resultBuilder.build();
+                        #      }
+                        #      // ...
+                        #
+                        # Example (iOS / Obj-C):
+                        #
+                        #      // ...
+                        #      static UIColor* fromProto(Color* protocolor) {
+                        #         float red = [protocolor red];
+                        #         float green = [protocolor green];
+                        #         float blue = [protocolor blue];
+                        #         FloatValue* alpha_wrapper = [protocolor alpha];
+                        #         float alpha = 1.0;
+                        #         if (alpha_wrapper != nil) {
+                        #           alpha = [alpha_wrapper value];
+                        #         }
+                        #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                        #      }
+                        #
+                        #      static Color* toProto(UIColor* color) {
+                        #          CGFloat red, green, blue, alpha;
+                        #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                        #            return nil;
+                        #          }
+                        #          Color* result = [Color alloc] init];
+                        #          [result setRed:red];
+                        #          [result setGreen:green];
+                        #          [result setBlue:blue];
+                        #          if (alpha <= 0.9999) {
+                        #            [result setAlpha:floatWrapperWithValue(alpha)];
+                        #          }
+                        #          [result autorelease];
+                        #          return result;
+                        #     }
+                        #     // ...
+                        #
+                        #  Example (JavaScript):
+                        #
+                        #     // ...
+                        #
+                        #     var protoToCssColor = function(rgb_color) {
+                        #        var redFrac = rgb_color.red || 0.0;
+                        #        var greenFrac = rgb_color.green || 0.0;
+                        #        var blueFrac = rgb_color.blue || 0.0;
+                        #        var red = Math.floor(redFrac * 255);
+                        #        var green = Math.floor(greenFrac * 255);
+                        #        var blue = Math.floor(blueFrac * 255);
+                        #
+                        #        if (!('alpha' in rgb_color)) {
+                        #           return rgbToCssColor_(red, green, blue);
+                        #        }
+                        #
+                        #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                        #        var rgbParams = [red, green, blue].join(',');
+                        #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                        #     };
+                        #
+                        #     var rgbToCssColor_ = function(red, green, blue) {
+                        #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                        #       var hexString = rgbNumber.toString(16);
+                        #       var missingZeros = 6 - hexString.length;
+                        #       var resultBuilder = ['#'];
+                        #       for (var i = 0; i < missingZeros; i++) {
+                        #          resultBuilder.push('0');
+                        #       }
+                        #       resultBuilder.push(hexString);
+                        #       return resultBuilder.join('');
+                        #     };
+                        #
+                        #     // ...
+                      "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                      "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                          # the final pixel color is defined by the equation:
+                          #
+                          #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                          #
+                          # This means that a value of 1.0 corresponds to a solid color, whereas
+                          # a value of 0.0 corresponds to a completely transparent color. This
+                          # uses a wrapper message rather than a simple float scalar so that it is
+                          # possible to distinguish between a default value and the value being unset.
+                          # If omitted, this color object is to be rendered as a solid color
+                          # (as if the alpha value had been explicitly given with a value of 1.0).
+                      "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                      "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                    },
+                    "width": 42, # The width of the border, in pixels.
+                        # Border widths must be between 0 and 3 pixels.
+                    "style": "A String", # The style of the border.
+                  },
+                  "right": { # A border along a cell. # The right border of the cell.
+                    "color": { # Represents a color in the RGBA color space. This representation is designed # The color of the border.
+                        # for simplicity of conversion to/from color representations in various
+                        # languages over compactness; for example, the fields of this representation
+                        # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                        # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                        # method in iOS; and, with just a little work, it can be easily formatted into
+                        # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                        #
+                        # Example (Java):
+                        #
+                        #      import com.google.type.Color;
+                        #
+                        #      // ...
+                        #      public static java.awt.Color fromProto(Color protocolor) {
+                        #        float alpha = protocolor.hasAlpha()
+                        #            ? protocolor.getAlpha().getValue()
+                        #            : 1.0;
+                        #
+                        #        return new java.awt.Color(
+                        #            protocolor.getRed(),
+                        #            protocolor.getGreen(),
+                        #            protocolor.getBlue(),
+                        #            alpha);
+                        #      }
+                        #
+                        #      public static Color toProto(java.awt.Color color) {
+                        #        float red = (float) color.getRed();
+                        #        float green = (float) color.getGreen();
+                        #        float blue = (float) color.getBlue();
+                        #        float denominator = 255.0;
+                        #        Color.Builder resultBuilder =
+                        #            Color
+                        #                .newBuilder()
+                        #                .setRed(red / denominator)
+                        #                .setGreen(green / denominator)
+                        #                .setBlue(blue / denominator);
+                        #        int alpha = color.getAlpha();
+                        #        if (alpha != 255) {
+                        #          result.setAlpha(
+                        #              FloatValue
+                        #                  .newBuilder()
+                        #                  .setValue(((float) alpha) / denominator)
+                        #                  .build());
+                        #        }
+                        #        return resultBuilder.build();
+                        #      }
+                        #      // ...
+                        #
+                        # Example (iOS / Obj-C):
+                        #
+                        #      // ...
+                        #      static UIColor* fromProto(Color* protocolor) {
+                        #         float red = [protocolor red];
+                        #         float green = [protocolor green];
+                        #         float blue = [protocolor blue];
+                        #         FloatValue* alpha_wrapper = [protocolor alpha];
+                        #         float alpha = 1.0;
+                        #         if (alpha_wrapper != nil) {
+                        #           alpha = [alpha_wrapper value];
+                        #         }
+                        #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                        #      }
+                        #
+                        #      static Color* toProto(UIColor* color) {
+                        #          CGFloat red, green, blue, alpha;
+                        #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                        #            return nil;
+                        #          }
+                        #          Color* result = [Color alloc] init];
+                        #          [result setRed:red];
+                        #          [result setGreen:green];
+                        #          [result setBlue:blue];
+                        #          if (alpha <= 0.9999) {
+                        #            [result setAlpha:floatWrapperWithValue(alpha)];
+                        #          }
+                        #          [result autorelease];
+                        #          return result;
+                        #     }
+                        #     // ...
+                        #
+                        #  Example (JavaScript):
+                        #
+                        #     // ...
+                        #
+                        #     var protoToCssColor = function(rgb_color) {
+                        #        var redFrac = rgb_color.red || 0.0;
+                        #        var greenFrac = rgb_color.green || 0.0;
+                        #        var blueFrac = rgb_color.blue || 0.0;
+                        #        var red = Math.floor(redFrac * 255);
+                        #        var green = Math.floor(greenFrac * 255);
+                        #        var blue = Math.floor(blueFrac * 255);
+                        #
+                        #        if (!('alpha' in rgb_color)) {
+                        #           return rgbToCssColor_(red, green, blue);
+                        #        }
+                        #
+                        #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                        #        var rgbParams = [red, green, blue].join(',');
+                        #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                        #     };
+                        #
+                        #     var rgbToCssColor_ = function(red, green, blue) {
+                        #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                        #       var hexString = rgbNumber.toString(16);
+                        #       var missingZeros = 6 - hexString.length;
+                        #       var resultBuilder = ['#'];
+                        #       for (var i = 0; i < missingZeros; i++) {
+                        #          resultBuilder.push('0');
+                        #       }
+                        #       resultBuilder.push(hexString);
+                        #       return resultBuilder.join('');
+                        #     };
+                        #
+                        #     // ...
+                      "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                      "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                          # the final pixel color is defined by the equation:
+                          #
+                          #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                          #
+                          # This means that a value of 1.0 corresponds to a solid color, whereas
+                          # a value of 0.0 corresponds to a completely transparent color. This
+                          # uses a wrapper message rather than a simple float scalar so that it is
+                          # possible to distinguish between a default value and the value being unset.
+                          # If omitted, this color object is to be rendered as a solid color
+                          # (as if the alpha value had been explicitly given with a value of 1.0).
+                      "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                      "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                    },
+                    "width": 42, # The width of the border, in pixels.
+                        # Border widths must be between 0 and 3 pixels.
+                    "style": "A String", # The style of the border.
+                  },
+                  "bottom": { # A border along a cell. # The bottom border of the cell.
+                    "color": { # Represents a color in the RGBA color space. This representation is designed # The color of the border.
+                        # for simplicity of conversion to/from color representations in various
+                        # languages over compactness; for example, the fields of this representation
+                        # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                        # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                        # method in iOS; and, with just a little work, it can be easily formatted into
+                        # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                        #
+                        # Example (Java):
+                        #
+                        #      import com.google.type.Color;
+                        #
+                        #      // ...
+                        #      public static java.awt.Color fromProto(Color protocolor) {
+                        #        float alpha = protocolor.hasAlpha()
+                        #            ? protocolor.getAlpha().getValue()
+                        #            : 1.0;
+                        #
+                        #        return new java.awt.Color(
+                        #            protocolor.getRed(),
+                        #            protocolor.getGreen(),
+                        #            protocolor.getBlue(),
+                        #            alpha);
+                        #      }
+                        #
+                        #      public static Color toProto(java.awt.Color color) {
+                        #        float red = (float) color.getRed();
+                        #        float green = (float) color.getGreen();
+                        #        float blue = (float) color.getBlue();
+                        #        float denominator = 255.0;
+                        #        Color.Builder resultBuilder =
+                        #            Color
+                        #                .newBuilder()
+                        #                .setRed(red / denominator)
+                        #                .setGreen(green / denominator)
+                        #                .setBlue(blue / denominator);
+                        #        int alpha = color.getAlpha();
+                        #        if (alpha != 255) {
+                        #          result.setAlpha(
+                        #              FloatValue
+                        #                  .newBuilder()
+                        #                  .setValue(((float) alpha) / denominator)
+                        #                  .build());
+                        #        }
+                        #        return resultBuilder.build();
+                        #      }
+                        #      // ...
+                        #
+                        # Example (iOS / Obj-C):
+                        #
+                        #      // ...
+                        #      static UIColor* fromProto(Color* protocolor) {
+                        #         float red = [protocolor red];
+                        #         float green = [protocolor green];
+                        #         float blue = [protocolor blue];
+                        #         FloatValue* alpha_wrapper = [protocolor alpha];
+                        #         float alpha = 1.0;
+                        #         if (alpha_wrapper != nil) {
+                        #           alpha = [alpha_wrapper value];
+                        #         }
+                        #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                        #      }
+                        #
+                        #      static Color* toProto(UIColor* color) {
+                        #          CGFloat red, green, blue, alpha;
+                        #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                        #            return nil;
+                        #          }
+                        #          Color* result = [Color alloc] init];
+                        #          [result setRed:red];
+                        #          [result setGreen:green];
+                        #          [result setBlue:blue];
+                        #          if (alpha <= 0.9999) {
+                        #            [result setAlpha:floatWrapperWithValue(alpha)];
+                        #          }
+                        #          [result autorelease];
+                        #          return result;
+                        #     }
+                        #     // ...
+                        #
+                        #  Example (JavaScript):
+                        #
+                        #     // ...
+                        #
+                        #     var protoToCssColor = function(rgb_color) {
+                        #        var redFrac = rgb_color.red || 0.0;
+                        #        var greenFrac = rgb_color.green || 0.0;
+                        #        var blueFrac = rgb_color.blue || 0.0;
+                        #        var red = Math.floor(redFrac * 255);
+                        #        var green = Math.floor(greenFrac * 255);
+                        #        var blue = Math.floor(blueFrac * 255);
+                        #
+                        #        if (!('alpha' in rgb_color)) {
+                        #           return rgbToCssColor_(red, green, blue);
+                        #        }
+                        #
+                        #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                        #        var rgbParams = [red, green, blue].join(',');
+                        #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                        #     };
+                        #
+                        #     var rgbToCssColor_ = function(red, green, blue) {
+                        #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                        #       var hexString = rgbNumber.toString(16);
+                        #       var missingZeros = 6 - hexString.length;
+                        #       var resultBuilder = ['#'];
+                        #       for (var i = 0; i < missingZeros; i++) {
+                        #          resultBuilder.push('0');
+                        #       }
+                        #       resultBuilder.push(hexString);
+                        #       return resultBuilder.join('');
+                        #     };
+                        #
+                        #     // ...
+                      "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                      "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                          # the final pixel color is defined by the equation:
+                          #
+                          #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                          #
+                          # This means that a value of 1.0 corresponds to a solid color, whereas
+                          # a value of 0.0 corresponds to a completely transparent color. This
+                          # uses a wrapper message rather than a simple float scalar so that it is
+                          # possible to distinguish between a default value and the value being unset.
+                          # If omitted, this color object is to be rendered as a solid color
+                          # (as if the alpha value had been explicitly given with a value of 1.0).
+                      "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                      "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                    },
+                    "width": 42, # The width of the border, in pixels.
+                        # Border widths must be between 0 and 3 pixels.
+                    "style": "A String", # The style of the border.
+                  },
+                  "left": { # A border along a cell. # The left border of the cell.
+                    "color": { # Represents a color in the RGBA color space. This representation is designed # The color of the border.
+                        # for simplicity of conversion to/from color representations in various
+                        # languages over compactness; for example, the fields of this representation
+                        # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                        # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                        # method in iOS; and, with just a little work, it can be easily formatted into
+                        # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                        #
+                        # Example (Java):
+                        #
+                        #      import com.google.type.Color;
+                        #
+                        #      // ...
+                        #      public static java.awt.Color fromProto(Color protocolor) {
+                        #        float alpha = protocolor.hasAlpha()
+                        #            ? protocolor.getAlpha().getValue()
+                        #            : 1.0;
+                        #
+                        #        return new java.awt.Color(
+                        #            protocolor.getRed(),
+                        #            protocolor.getGreen(),
+                        #            protocolor.getBlue(),
+                        #            alpha);
+                        #      }
+                        #
+                        #      public static Color toProto(java.awt.Color color) {
+                        #        float red = (float) color.getRed();
+                        #        float green = (float) color.getGreen();
+                        #        float blue = (float) color.getBlue();
+                        #        float denominator = 255.0;
+                        #        Color.Builder resultBuilder =
+                        #            Color
+                        #                .newBuilder()
+                        #                .setRed(red / denominator)
+                        #                .setGreen(green / denominator)
+                        #                .setBlue(blue / denominator);
+                        #        int alpha = color.getAlpha();
+                        #        if (alpha != 255) {
+                        #          result.setAlpha(
+                        #              FloatValue
+                        #                  .newBuilder()
+                        #                  .setValue(((float) alpha) / denominator)
+                        #                  .build());
+                        #        }
+                        #        return resultBuilder.build();
+                        #      }
+                        #      // ...
+                        #
+                        # Example (iOS / Obj-C):
+                        #
+                        #      // ...
+                        #      static UIColor* fromProto(Color* protocolor) {
+                        #         float red = [protocolor red];
+                        #         float green = [protocolor green];
+                        #         float blue = [protocolor blue];
+                        #         FloatValue* alpha_wrapper = [protocolor alpha];
+                        #         float alpha = 1.0;
+                        #         if (alpha_wrapper != nil) {
+                        #           alpha = [alpha_wrapper value];
+                        #         }
+                        #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                        #      }
+                        #
+                        #      static Color* toProto(UIColor* color) {
+                        #          CGFloat red, green, blue, alpha;
+                        #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                        #            return nil;
+                        #          }
+                        #          Color* result = [Color alloc] init];
+                        #          [result setRed:red];
+                        #          [result setGreen:green];
+                        #          [result setBlue:blue];
+                        #          if (alpha <= 0.9999) {
+                        #            [result setAlpha:floatWrapperWithValue(alpha)];
+                        #          }
+                        #          [result autorelease];
+                        #          return result;
+                        #     }
+                        #     // ...
+                        #
+                        #  Example (JavaScript):
+                        #
+                        #     // ...
+                        #
+                        #     var protoToCssColor = function(rgb_color) {
+                        #        var redFrac = rgb_color.red || 0.0;
+                        #        var greenFrac = rgb_color.green || 0.0;
+                        #        var blueFrac = rgb_color.blue || 0.0;
+                        #        var red = Math.floor(redFrac * 255);
+                        #        var green = Math.floor(greenFrac * 255);
+                        #        var blue = Math.floor(blueFrac * 255);
+                        #
+                        #        if (!('alpha' in rgb_color)) {
+                        #           return rgbToCssColor_(red, green, blue);
+                        #        }
+                        #
+                        #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                        #        var rgbParams = [red, green, blue].join(',');
+                        #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                        #     };
+                        #
+                        #     var rgbToCssColor_ = function(red, green, blue) {
+                        #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                        #       var hexString = rgbNumber.toString(16);
+                        #       var missingZeros = 6 - hexString.length;
+                        #       var resultBuilder = ['#'];
+                        #       for (var i = 0; i < missingZeros; i++) {
+                        #          resultBuilder.push('0');
+                        #       }
+                        #       resultBuilder.push(hexString);
+                        #       return resultBuilder.join('');
+                        #     };
+                        #
+                        #     // ...
+                      "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                      "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                          # the final pixel color is defined by the equation:
+                          #
+                          #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                          #
+                          # This means that a value of 1.0 corresponds to a solid color, whereas
+                          # a value of 0.0 corresponds to a completely transparent color. This
+                          # uses a wrapper message rather than a simple float scalar so that it is
+                          # possible to distinguish between a default value and the value being unset.
+                          # If omitted, this color object is to be rendered as a solid color
+                          # (as if the alpha value had been explicitly given with a value of 1.0).
+                      "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                      "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                    },
+                    "width": 42, # The width of the border, in pixels.
+                        # Border widths must be between 0 and 3 pixels.
+                    "style": "A String", # The style of the border.
+                  },
+                },
+                "wrapStrategy": "A String", # The wrap strategy for the value in the cell.
+              },
+            },
+            "gradientRule": { # A rule that applies a gradient color scale format, based on # The formatting will vary based on the gradients in the rule.
+                # the interpolation points listed. The format of a cell will vary
+                # based on its contents as compared to the values of the interpolation
+                # points.
+              "maxpoint": { # A single interpolation point a gradient conditional format. # The final interpolation point.
+                  # These pin the gradient color scale according to the color,
+                  # type and value chosen.
+                "color": { # Represents a color in the RGBA color space. This representation is designed # The color this interpolation point should use.
+                    # for simplicity of conversion to/from color representations in various
+                    # languages over compactness; for example, the fields of this representation
+                    # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                    # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                    # method in iOS; and, with just a little work, it can be easily formatted into
+                    # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                    #
+                    # Example (Java):
+                    #
+                    #      import com.google.type.Color;
+                    #
+                    #      // ...
+                    #      public static java.awt.Color fromProto(Color protocolor) {
+                    #        float alpha = protocolor.hasAlpha()
+                    #            ? protocolor.getAlpha().getValue()
+                    #            : 1.0;
+                    #
+                    #        return new java.awt.Color(
+                    #            protocolor.getRed(),
+                    #            protocolor.getGreen(),
+                    #            protocolor.getBlue(),
+                    #            alpha);
+                    #      }
+                    #
+                    #      public static Color toProto(java.awt.Color color) {
+                    #        float red = (float) color.getRed();
+                    #        float green = (float) color.getGreen();
+                    #        float blue = (float) color.getBlue();
+                    #        float denominator = 255.0;
+                    #        Color.Builder resultBuilder =
+                    #            Color
+                    #                .newBuilder()
+                    #                .setRed(red / denominator)
+                    #                .setGreen(green / denominator)
+                    #                .setBlue(blue / denominator);
+                    #        int alpha = color.getAlpha();
+                    #        if (alpha != 255) {
+                    #          result.setAlpha(
+                    #              FloatValue
+                    #                  .newBuilder()
+                    #                  .setValue(((float) alpha) / denominator)
+                    #                  .build());
+                    #        }
+                    #        return resultBuilder.build();
+                    #      }
+                    #      // ...
+                    #
+                    # Example (iOS / Obj-C):
+                    #
+                    #      // ...
+                    #      static UIColor* fromProto(Color* protocolor) {
+                    #         float red = [protocolor red];
+                    #         float green = [protocolor green];
+                    #         float blue = [protocolor blue];
+                    #         FloatValue* alpha_wrapper = [protocolor alpha];
+                    #         float alpha = 1.0;
+                    #         if (alpha_wrapper != nil) {
+                    #           alpha = [alpha_wrapper value];
+                    #         }
+                    #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                    #      }
+                    #
+                    #      static Color* toProto(UIColor* color) {
+                    #          CGFloat red, green, blue, alpha;
+                    #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                    #            return nil;
+                    #          }
+                    #          Color* result = [Color alloc] init];
+                    #          [result setRed:red];
+                    #          [result setGreen:green];
+                    #          [result setBlue:blue];
+                    #          if (alpha <= 0.9999) {
+                    #            [result setAlpha:floatWrapperWithValue(alpha)];
+                    #          }
+                    #          [result autorelease];
+                    #          return result;
+                    #     }
+                    #     // ...
+                    #
+                    #  Example (JavaScript):
+                    #
+                    #     // ...
+                    #
+                    #     var protoToCssColor = function(rgb_color) {
+                    #        var redFrac = rgb_color.red || 0.0;
+                    #        var greenFrac = rgb_color.green || 0.0;
+                    #        var blueFrac = rgb_color.blue || 0.0;
+                    #        var red = Math.floor(redFrac * 255);
+                    #        var green = Math.floor(greenFrac * 255);
+                    #        var blue = Math.floor(blueFrac * 255);
+                    #
+                    #        if (!('alpha' in rgb_color)) {
+                    #           return rgbToCssColor_(red, green, blue);
+                    #        }
+                    #
+                    #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                    #        var rgbParams = [red, green, blue].join(',');
+                    #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                    #     };
+                    #
+                    #     var rgbToCssColor_ = function(red, green, blue) {
+                    #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                    #       var hexString = rgbNumber.toString(16);
+                    #       var missingZeros = 6 - hexString.length;
+                    #       var resultBuilder = ['#'];
+                    #       for (var i = 0; i < missingZeros; i++) {
+                    #          resultBuilder.push('0');
+                    #       }
+                    #       resultBuilder.push(hexString);
+                    #       return resultBuilder.join('');
+                    #     };
+                    #
+                    #     // ...
+                  "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                  "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                      # the final pixel color is defined by the equation:
+                      #
+                      #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                      #
+                      # This means that a value of 1.0 corresponds to a solid color, whereas
+                      # a value of 0.0 corresponds to a completely transparent color. This
+                      # uses a wrapper message rather than a simple float scalar so that it is
+                      # possible to distinguish between a default value and the value being unset.
+                      # If omitted, this color object is to be rendered as a solid color
+                      # (as if the alpha value had been explicitly given with a value of 1.0).
+                  "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                  "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                },
+                "type": "A String", # How the value should be interpreted.
+                "value": "A String", # The value this interpolation point uses.  May be a formula.
+                    # Unused if type is MIN or
+                    # MAX.
+              },
+              "midpoint": { # A single interpolation point a gradient conditional format. # An optional midway interpolation point.
+                  # These pin the gradient color scale according to the color,
+                  # type and value chosen.
+                "color": { # Represents a color in the RGBA color space. This representation is designed # The color this interpolation point should use.
+                    # for simplicity of conversion to/from color representations in various
+                    # languages over compactness; for example, the fields of this representation
+                    # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                    # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                    # method in iOS; and, with just a little work, it can be easily formatted into
+                    # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                    #
+                    # Example (Java):
+                    #
+                    #      import com.google.type.Color;
+                    #
+                    #      // ...
+                    #      public static java.awt.Color fromProto(Color protocolor) {
+                    #        float alpha = protocolor.hasAlpha()
+                    #            ? protocolor.getAlpha().getValue()
+                    #            : 1.0;
+                    #
+                    #        return new java.awt.Color(
+                    #            protocolor.getRed(),
+                    #            protocolor.getGreen(),
+                    #            protocolor.getBlue(),
+                    #            alpha);
+                    #      }
+                    #
+                    #      public static Color toProto(java.awt.Color color) {
+                    #        float red = (float) color.getRed();
+                    #        float green = (float) color.getGreen();
+                    #        float blue = (float) color.getBlue();
+                    #        float denominator = 255.0;
+                    #        Color.Builder resultBuilder =
+                    #            Color
+                    #                .newBuilder()
+                    #                .setRed(red / denominator)
+                    #                .setGreen(green / denominator)
+                    #                .setBlue(blue / denominator);
+                    #        int alpha = color.getAlpha();
+                    #        if (alpha != 255) {
+                    #          result.setAlpha(
+                    #              FloatValue
+                    #                  .newBuilder()
+                    #                  .setValue(((float) alpha) / denominator)
+                    #                  .build());
+                    #        }
+                    #        return resultBuilder.build();
+                    #      }
+                    #      // ...
+                    #
+                    # Example (iOS / Obj-C):
+                    #
+                    #      // ...
+                    #      static UIColor* fromProto(Color* protocolor) {
+                    #         float red = [protocolor red];
+                    #         float green = [protocolor green];
+                    #         float blue = [protocolor blue];
+                    #         FloatValue* alpha_wrapper = [protocolor alpha];
+                    #         float alpha = 1.0;
+                    #         if (alpha_wrapper != nil) {
+                    #           alpha = [alpha_wrapper value];
+                    #         }
+                    #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                    #      }
+                    #
+                    #      static Color* toProto(UIColor* color) {
+                    #          CGFloat red, green, blue, alpha;
+                    #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                    #            return nil;
+                    #          }
+                    #          Color* result = [Color alloc] init];
+                    #          [result setRed:red];
+                    #          [result setGreen:green];
+                    #          [result setBlue:blue];
+                    #          if (alpha <= 0.9999) {
+                    #            [result setAlpha:floatWrapperWithValue(alpha)];
+                    #          }
+                    #          [result autorelease];
+                    #          return result;
+                    #     }
+                    #     // ...
+                    #
+                    #  Example (JavaScript):
+                    #
+                    #     // ...
+                    #
+                    #     var protoToCssColor = function(rgb_color) {
+                    #        var redFrac = rgb_color.red || 0.0;
+                    #        var greenFrac = rgb_color.green || 0.0;
+                    #        var blueFrac = rgb_color.blue || 0.0;
+                    #        var red = Math.floor(redFrac * 255);
+                    #        var green = Math.floor(greenFrac * 255);
+                    #        var blue = Math.floor(blueFrac * 255);
+                    #
+                    #        if (!('alpha' in rgb_color)) {
+                    #           return rgbToCssColor_(red, green, blue);
+                    #        }
+                    #
+                    #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                    #        var rgbParams = [red, green, blue].join(',');
+                    #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                    #     };
+                    #
+                    #     var rgbToCssColor_ = function(red, green, blue) {
+                    #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                    #       var hexString = rgbNumber.toString(16);
+                    #       var missingZeros = 6 - hexString.length;
+                    #       var resultBuilder = ['#'];
+                    #       for (var i = 0; i < missingZeros; i++) {
+                    #          resultBuilder.push('0');
+                    #       }
+                    #       resultBuilder.push(hexString);
+                    #       return resultBuilder.join('');
+                    #     };
+                    #
+                    #     // ...
+                  "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                  "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                      # the final pixel color is defined by the equation:
+                      #
+                      #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                      #
+                      # This means that a value of 1.0 corresponds to a solid color, whereas
+                      # a value of 0.0 corresponds to a completely transparent color. This
+                      # uses a wrapper message rather than a simple float scalar so that it is
+                      # possible to distinguish between a default value and the value being unset.
+                      # If omitted, this color object is to be rendered as a solid color
+                      # (as if the alpha value had been explicitly given with a value of 1.0).
+                  "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                  "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                },
+                "type": "A String", # How the value should be interpreted.
+                "value": "A String", # The value this interpolation point uses.  May be a formula.
+                    # Unused if type is MIN or
+                    # MAX.
+              },
+              "minpoint": { # A single interpolation point a gradient conditional format. # The starting interpolation point.
+                  # These pin the gradient color scale according to the color,
+                  # type and value chosen.
+                "color": { # Represents a color in the RGBA color space. This representation is designed # The color this interpolation point should use.
+                    # for simplicity of conversion to/from color representations in various
+                    # languages over compactness; for example, the fields of this representation
+                    # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                    # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                    # method in iOS; and, with just a little work, it can be easily formatted into
+                    # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                    #
+                    # Example (Java):
+                    #
+                    #      import com.google.type.Color;
+                    #
+                    #      // ...
+                    #      public static java.awt.Color fromProto(Color protocolor) {
+                    #        float alpha = protocolor.hasAlpha()
+                    #            ? protocolor.getAlpha().getValue()
+                    #            : 1.0;
+                    #
+                    #        return new java.awt.Color(
+                    #            protocolor.getRed(),
+                    #            protocolor.getGreen(),
+                    #            protocolor.getBlue(),
+                    #            alpha);
+                    #      }
+                    #
+                    #      public static Color toProto(java.awt.Color color) {
+                    #        float red = (float) color.getRed();
+                    #        float green = (float) color.getGreen();
+                    #        float blue = (float) color.getBlue();
+                    #        float denominator = 255.0;
+                    #        Color.Builder resultBuilder =
+                    #            Color
+                    #                .newBuilder()
+                    #                .setRed(red / denominator)
+                    #                .setGreen(green / denominator)
+                    #                .setBlue(blue / denominator);
+                    #        int alpha = color.getAlpha();
+                    #        if (alpha != 255) {
+                    #          result.setAlpha(
+                    #              FloatValue
+                    #                  .newBuilder()
+                    #                  .setValue(((float) alpha) / denominator)
+                    #                  .build());
+                    #        }
+                    #        return resultBuilder.build();
+                    #      }
+                    #      // ...
+                    #
+                    # Example (iOS / Obj-C):
+                    #
+                    #      // ...
+                    #      static UIColor* fromProto(Color* protocolor) {
+                    #         float red = [protocolor red];
+                    #         float green = [protocolor green];
+                    #         float blue = [protocolor blue];
+                    #         FloatValue* alpha_wrapper = [protocolor alpha];
+                    #         float alpha = 1.0;
+                    #         if (alpha_wrapper != nil) {
+                    #           alpha = [alpha_wrapper value];
+                    #         }
+                    #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                    #      }
+                    #
+                    #      static Color* toProto(UIColor* color) {
+                    #          CGFloat red, green, blue, alpha;
+                    #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                    #            return nil;
+                    #          }
+                    #          Color* result = [Color alloc] init];
+                    #          [result setRed:red];
+                    #          [result setGreen:green];
+                    #          [result setBlue:blue];
+                    #          if (alpha <= 0.9999) {
+                    #            [result setAlpha:floatWrapperWithValue(alpha)];
+                    #          }
+                    #          [result autorelease];
+                    #          return result;
+                    #     }
+                    #     // ...
+                    #
+                    #  Example (JavaScript):
+                    #
+                    #     // ...
+                    #
+                    #     var protoToCssColor = function(rgb_color) {
+                    #        var redFrac = rgb_color.red || 0.0;
+                    #        var greenFrac = rgb_color.green || 0.0;
+                    #        var blueFrac = rgb_color.blue || 0.0;
+                    #        var red = Math.floor(redFrac * 255);
+                    #        var green = Math.floor(greenFrac * 255);
+                    #        var blue = Math.floor(blueFrac * 255);
+                    #
+                    #        if (!('alpha' in rgb_color)) {
+                    #           return rgbToCssColor_(red, green, blue);
+                    #        }
+                    #
+                    #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                    #        var rgbParams = [red, green, blue].join(',');
+                    #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                    #     };
+                    #
+                    #     var rgbToCssColor_ = function(red, green, blue) {
+                    #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                    #       var hexString = rgbNumber.toString(16);
+                    #       var missingZeros = 6 - hexString.length;
+                    #       var resultBuilder = ['#'];
+                    #       for (var i = 0; i < missingZeros; i++) {
+                    #          resultBuilder.push('0');
+                    #       }
+                    #       resultBuilder.push(hexString);
+                    #       return resultBuilder.join('');
+                    #     };
+                    #
+                    #     // ...
+                  "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                  "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                      # the final pixel color is defined by the equation:
+                      #
+                      #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                      #
+                      # This means that a value of 1.0 corresponds to a solid color, whereas
+                      # a value of 0.0 corresponds to a completely transparent color. This
+                      # uses a wrapper message rather than a simple float scalar so that it is
+                      # possible to distinguish between a default value and the value being unset.
+                      # If omitted, this color object is to be rendered as a solid color
+                      # (as if the alpha value had been explicitly given with a value of 1.0).
+                  "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                  "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                },
+                "type": "A String", # How the value should be interpreted.
+                "value": "A String", # The value this interpolation point uses.  May be a formula.
+                    # Unused if type is MIN or
+                    # MAX.
+              },
+            },
+          },
+        ],
+        "merges": [ # The ranges that are merged together.
+          { # A range on a sheet.
+              # 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 grid 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.
+            "startRowIndex": 42, # The start row (inclusive) 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.
+            "endColumnIndex": 42, # The end column (exclusive) of the range, or not set if unbounded.
+          },
+        ],
+        "basicFilter": { # The default filter associated with a sheet. # The filter on this sheet, if any.
+          "range": { # A range on a sheet. # The range the filter covers.
+              # 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 grid 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.
+            "startRowIndex": 42, # The start row (inclusive) 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.
+            "endColumnIndex": 42, # The end column (exclusive) of the range, or not set if unbounded.
+          },
+          "sortSpecs": [ # The sort order per column. Later specifications are used when values
+              # are equal in the earlier specifications.
+            { # A sort order associated with a specific column or row.
+              "sortOrder": "A String", # The order data should be sorted.
+              "dimensionIndex": 42, # The dimension the sort should be applied to.
+            },
+          ],
+          "criteria": { # The criteria for showing/hiding values per column.
+              # The map's key is the column index, and the value is the criteria for
+              # that column.
+            "a_key": { # Criteria for showing/hiding rows in a filter, filter view.
+              "hiddenValues": [ # Values that should be hidden.
+                "A String",
+              ],
+              "condition": { # A condition that can evaluate to true or false. # A condition that must be true for values to be shown.
+                  # (This does not override hiddenValues -- if a value is listed there,
+                  #  it will still be hidden.)
+                  # BooleanConditions are used by conditional formatting,
+                  # data validation, and the criteria in filters.
+                "type": "A String", # The type of condition.
+                "values": [ # The values of the condition. The number of supported values depends
+                    # on the condition type.  Some support zero values,
+                    # others one or two values,
+                    # and ConditionType.ONE_OF_LIST supports an arbitrary number of values.
+                  { # The value of the condition.
+                    "relativeDate": "A String", # A relative date (based on the current date).
+                        # Valid only if the type is
+                        # DATE_BEFORE,
+                        # DATE_AFTER,
+                        # DATE_ON_OR_BEFORE or
+                        # DATE_ON_OR_AFTER.
+                        #
+                        # Relative dates are not supported in data validation.
+                        # They are supported only in conditional formatting and
+                        # conditional filters.
+                    "userEnteredValue": "A String", # A value the condition is based on.
+                        # The value will be parsed as if the user typed into a cell.
+                        # Formulas are supported (and must begin with an `=`).
+                  },
+                ],
+              },
+            },
+          },
+        },
+        "charts": [ # The specifications of every chart on this sheet.
+          { # A chart embedded in a sheet.
+            "chartId": 42, # The ID of the chart.
+            "position": { # The position of an embedded object such as a chart. # The position of the chart.
+              "newSheet": True or False, # If true, the embedded object will be put on a new sheet whose ID
+                  # is chosen for you. Used only when writing.
+              "sheetId": 42, # The sheet this is on. Set only if the embedded object
+                  # is on its own sheet. Must be non-negative.
+              "overlayPosition": { # The location an object is overlaid on top of a grid. # The position the object is overlaid on top of a grid.
+                "anchorCell": { # A coordinate in a sheet. # The cell the object is anchored to.
+                    # All indexes are zero-based.
+                  "rowIndex": 42, # The row index of the coordinate.
+                  "columnIndex": 42, # The column index of the coordinate.
+                  "sheetId": 42, # The sheet this coordinate is on.
+                },
+                "offsetYPixels": 42, # The vertical offset, in pixels, that the object is offset
+                    # from the anchor cell.
+                "widthPixels": 42, # The width of the object, in pixels. Defaults to 600.
+                "offsetXPixels": 42, # The horizontal offset, in pixels, that the object is offset
+                    # from the anchor cell.
+                "heightPixels": 42, # The height of the object, in pixels. Defaults to 371.
+              },
+            },
+            "spec": { # The specifications of a chart. # The specification of the chart.
+              "hiddenDimensionStrategy": "A String", # Determines how the charts will use hidden rows or columns.
+                  # This value is only meaningful if the
+                  # ChartData.sourceRange
+                  # is used for a domain or series.
+              "pieChart": { # A <a href="/chart/interactive/docs/gallery/piechart">pie chart</a>. # A pie chart specification.
+                "series": { # The data included in a domain or series. # The data that covers the one and only series of the pie chart.
+                  "sourceRange": { # Source ranges for a chart. # The source ranges of the data.
+                    "sources": [ # The ranges of data for a series or domain.
+                        # Exactly one dimension must have a length of 1,
+                        # and all sources in the list must have the same dimension
+                        # with length 1.
+                        # The domain (if it exists) & all series must have the same number
+                        # of source ranges. If using more than one source range, then the source
+                        # range at a given offset must be contiguous across the domain and series.
+                        #
+                        # For example, these are valid configurations:
+                        #
+                        #     domain sources: A1:A5
+                        #     series1 sources: B1:B5
+                        #     series2 sources: D6:D10
+                        #
+                        #     domain sources: A1:A5, C10:C12
+                        #     series1 sources: B1:B5, D10:D12
+                        #     series2 sources: C1:C5, E10:E12
+                      { # A range on a sheet.
+                          # 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 grid 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.
+                        "startRowIndex": 42, # The start row (inclusive) 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.
+                        "endColumnIndex": 42, # The end column (exclusive) of the range, or not set if unbounded.
+                      },
+                    ],
+                  },
+                },
+                "domain": { # The data included in a domain or series. # The data that covers the domain of the pie chart.
+                  "sourceRange": { # Source ranges for a chart. # The source ranges of the data.
+                    "sources": [ # The ranges of data for a series or domain.
+                        # Exactly one dimension must have a length of 1,
+                        # and all sources in the list must have the same dimension
+                        # with length 1.
+                        # The domain (if it exists) & all series must have the same number
+                        # of source ranges. If using more than one source range, then the source
+                        # range at a given offset must be contiguous across the domain and series.
+                        #
+                        # For example, these are valid configurations:
+                        #
+                        #     domain sources: A1:A5
+                        #     series1 sources: B1:B5
+                        #     series2 sources: D6:D10
+                        #
+                        #     domain sources: A1:A5, C10:C12
+                        #     series1 sources: B1:B5, D10:D12
+                        #     series2 sources: C1:C5, E10:E12
+                      { # A range on a sheet.
+                          # 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 grid 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.
+                        "startRowIndex": 42, # The start row (inclusive) 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.
+                        "endColumnIndex": 42, # The end column (exclusive) of the range, or not set if unbounded.
+                      },
+                    ],
+                  },
+                },
+                "threeDimensional": True or False, # True if the pie is three dimensional.
+                "legendPosition": "A String", # Where the legend of the pie chart should be drawn.
+                "pieHole": 3.14, # The size of the hole in the pie chart.
+              },
+              "basicChart": { # The specification for a basic chart.  See BasicChartType for the list # A basic chart specification, can be one of many kinds of charts.
+                  # See BasicChartType for the list of all charts this supports.
+                  # of charts this supports.
+                "headerCount": 42, # The number of rows or columns in the data that are "headers".
+                    # If not set, Google Sheets will guess how many rows are headers based
+                    # on the data.
+                    #
+                    # (Note that BasicChartAxis.title may override the axis title
+                    #  inferred from the header values.)
+                "series": [ # The data this chart is visualizing.
+                  { # A single series of data in a chart.
+                      # For example, if charting stock prices over time, multiple series may exist,
+                      # one for the "Open Price", "High Price", "Low Price" and "Close Price".
+                    "series": { # The data included in a domain or series. # The data being visualized in this chart series.
+                      "sourceRange": { # Source ranges for a chart. # The source ranges of the data.
+                        "sources": [ # The ranges of data for a series or domain.
+                            # Exactly one dimension must have a length of 1,
+                            # and all sources in the list must have the same dimension
+                            # with length 1.
+                            # The domain (if it exists) & all series must have the same number
+                            # of source ranges. If using more than one source range, then the source
+                            # range at a given offset must be contiguous across the domain and series.
+                            #
+                            # For example, these are valid configurations:
+                            #
+                            #     domain sources: A1:A5
+                            #     series1 sources: B1:B5
+                            #     series2 sources: D6:D10
+                            #
+                            #     domain sources: A1:A5, C10:C12
+                            #     series1 sources: B1:B5, D10:D12
+                            #     series2 sources: C1:C5, E10:E12
+                          { # A range on a sheet.
+                              # 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 grid 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.
+                            "startRowIndex": 42, # The start row (inclusive) 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.
+                            "endColumnIndex": 42, # The end column (exclusive) of the range, or not set if unbounded.
+                          },
+                        ],
+                      },
+                    },
+                    "targetAxis": "A String", # The minor axis that will specify the range of values for this series.
+                        # For example, if charting stocks over time, the "Volume" series
+                        # may want to be pinned to the right with the prices pinned to the left,
+                        # because the scale of trading volume is different than the scale of
+                        # prices.
+                        # It is an error to specify an axis that isn't a valid minor axis
+                        # for the chart's type.
+                    "type": "A String", # The type of this series. Valid only if the
+                        # chartType is
+                        # COMBO.
+                        # Different types will change the way the series is visualized.
+                        # Only LINE, AREA,
+                        # and COLUMN are supported.
+                  },
+                ],
+                "legendPosition": "A String", # The position of the chart legend.
+                "domains": [ # The domain of data this is charting.
+                    # Only a single domain is currently supported.
+                  { # The domain of a chart.
+                      # For example, if charting stock prices over time, this would be the date.
+                    "domain": { # The data included in a domain or series. # The data of the domain. For example, if charting stock prices over time,
+                        # this be the data representing the dates.
+                      "sourceRange": { # Source ranges for a chart. # The source ranges of the data.
+                        "sources": [ # The ranges of data for a series or domain.
+                            # Exactly one dimension must have a length of 1,
+                            # and all sources in the list must have the same dimension
+                            # with length 1.
+                            # The domain (if it exists) & all series must have the same number
+                            # of source ranges. If using more than one source range, then the source
+                            # range at a given offset must be contiguous across the domain and series.
+                            #
+                            # For example, these are valid configurations:
+                            #
+                            #     domain sources: A1:A5
+                            #     series1 sources: B1:B5
+                            #     series2 sources: D6:D10
+                            #
+                            #     domain sources: A1:A5, C10:C12
+                            #     series1 sources: B1:B5, D10:D12
+                            #     series2 sources: C1:C5, E10:E12
+                          { # A range on a sheet.
+                              # 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 grid 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.
+                            "startRowIndex": 42, # The start row (inclusive) 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.
+                            "endColumnIndex": 42, # The end column (exclusive) of the range, or not set if unbounded.
+                          },
+                        ],
+                      },
+                    },
+                  },
+                ],
+                "chartType": "A String", # The type of the chart.
+                "axis": [ # The axis on the chart.
+                  { # An axis of the chart.
+                      # A chart may not have more than one axis per
+                      # axis position.
+                    "position": "A String", # The position of this axis.
+                    "format": { # The format of a run of text in a cell. # The format of the title.
+                        # Only valid if the axis is not associated with the domain.
+                        # Absent values indicate that the field isn't specified.
+                      "foregroundColor": { # Represents a color in the RGBA color space. This representation is designed # The foreground color of the text.
+                          # for simplicity of conversion to/from color representations in various
+                          # languages over compactness; for example, the fields of this representation
+                          # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                          # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                          # method in iOS; and, with just a little work, it can be easily formatted into
+                          # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                          #
+                          # Example (Java):
+                          #
+                          #      import com.google.type.Color;
+                          #
+                          #      // ...
+                          #      public static java.awt.Color fromProto(Color protocolor) {
+                          #        float alpha = protocolor.hasAlpha()
+                          #            ? protocolor.getAlpha().getValue()
+                          #            : 1.0;
+                          #
+                          #        return new java.awt.Color(
+                          #            protocolor.getRed(),
+                          #            protocolor.getGreen(),
+                          #            protocolor.getBlue(),
+                          #            alpha);
+                          #      }
+                          #
+                          #      public static Color toProto(java.awt.Color color) {
+                          #        float red = (float) color.getRed();
+                          #        float green = (float) color.getGreen();
+                          #        float blue = (float) color.getBlue();
+                          #        float denominator = 255.0;
+                          #        Color.Builder resultBuilder =
+                          #            Color
+                          #                .newBuilder()
+                          #                .setRed(red / denominator)
+                          #                .setGreen(green / denominator)
+                          #                .setBlue(blue / denominator);
+                          #        int alpha = color.getAlpha();
+                          #        if (alpha != 255) {
+                          #          result.setAlpha(
+                          #              FloatValue
+                          #                  .newBuilder()
+                          #                  .setValue(((float) alpha) / denominator)
+                          #                  .build());
+                          #        }
+                          #        return resultBuilder.build();
+                          #      }
+                          #      // ...
+                          #
+                          # Example (iOS / Obj-C):
+                          #
+                          #      // ...
+                          #      static UIColor* fromProto(Color* protocolor) {
+                          #         float red = [protocolor red];
+                          #         float green = [protocolor green];
+                          #         float blue = [protocolor blue];
+                          #         FloatValue* alpha_wrapper = [protocolor alpha];
+                          #         float alpha = 1.0;
+                          #         if (alpha_wrapper != nil) {
+                          #           alpha = [alpha_wrapper value];
+                          #         }
+                          #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                          #      }
+                          #
+                          #      static Color* toProto(UIColor* color) {
+                          #          CGFloat red, green, blue, alpha;
+                          #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                          #            return nil;
+                          #          }
+                          #          Color* result = [Color alloc] init];
+                          #          [result setRed:red];
+                          #          [result setGreen:green];
+                          #          [result setBlue:blue];
+                          #          if (alpha <= 0.9999) {
+                          #            [result setAlpha:floatWrapperWithValue(alpha)];
+                          #          }
+                          #          [result autorelease];
+                          #          return result;
+                          #     }
+                          #     // ...
+                          #
+                          #  Example (JavaScript):
+                          #
+                          #     // ...
+                          #
+                          #     var protoToCssColor = function(rgb_color) {
+                          #        var redFrac = rgb_color.red || 0.0;
+                          #        var greenFrac = rgb_color.green || 0.0;
+                          #        var blueFrac = rgb_color.blue || 0.0;
+                          #        var red = Math.floor(redFrac * 255);
+                          #        var green = Math.floor(greenFrac * 255);
+                          #        var blue = Math.floor(blueFrac * 255);
+                          #
+                          #        if (!('alpha' in rgb_color)) {
+                          #           return rgbToCssColor_(red, green, blue);
+                          #        }
+                          #
+                          #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                          #        var rgbParams = [red, green, blue].join(',');
+                          #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                          #     };
+                          #
+                          #     var rgbToCssColor_ = function(red, green, blue) {
+                          #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                          #       var hexString = rgbNumber.toString(16);
+                          #       var missingZeros = 6 - hexString.length;
+                          #       var resultBuilder = ['#'];
+                          #       for (var i = 0; i < missingZeros; i++) {
+                          #          resultBuilder.push('0');
+                          #       }
+                          #       resultBuilder.push(hexString);
+                          #       return resultBuilder.join('');
+                          #     };
+                          #
+                          #     // ...
+                        "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                        "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                            # the final pixel color is defined by the equation:
+                            #
+                            #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                            #
+                            # This means that a value of 1.0 corresponds to a solid color, whereas
+                            # a value of 0.0 corresponds to a completely transparent color. This
+                            # uses a wrapper message rather than a simple float scalar so that it is
+                            # possible to distinguish between a default value and the value being unset.
+                            # If omitted, this color object is to be rendered as a solid color
+                            # (as if the alpha value had been explicitly given with a value of 1.0).
+                        "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                        "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                      },
+                      "bold": True or False, # True if the text is bold.
+                      "strikethrough": True or False, # True if the text has a strikethrough.
+                      "fontFamily": "A String", # The font family.
+                      "fontSize": 42, # The size of the font.
+                      "italic": True or False, # True if the text is italicized.
+                      "underline": True or False, # True if the text is underlined.
+                    },
+                    "title": "A String", # The title of this axis. If set, this overrides any title inferred
+                        # from headers of the data.
+                  },
+                ],
+              },
+              "title": "A String", # The title of the chart.
+            },
+          },
+        ],
+        "filterViews": [ # The filter views in this sheet.
+          { # A filter view.
+            "title": "A String", # The name of the filter view.
+            "namedRangeId": "A String", # The named range this filter view is backed by, if any.
+                #
+                # When writing, only one of range or namedRangeId
+                # may be set.
+            "filterViewId": 42, # The ID of the filter view.
+            "range": { # A range on a sheet. # The range this filter view covers.
+                #
+                # When writing, only one of range or namedRangeId
+                # may be set.
+                # 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 grid 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.
+              "startRowIndex": 42, # The start row (inclusive) 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.
+              "endColumnIndex": 42, # The end column (exclusive) of the range, or not set if unbounded.
+            },
+            "sortSpecs": [ # The sort order per column. Later specifications are used when values
+                # are equal in the earlier specifications.
+              { # A sort order associated with a specific column or row.
+                "sortOrder": "A String", # The order data should be sorted.
+                "dimensionIndex": 42, # The dimension the sort should be applied to.
+              },
+            ],
+            "criteria": { # The criteria for showing/hiding values per column.
+                # The map's key is the column index, and the value is the criteria for
+                # that column.
+              "a_key": { # Criteria for showing/hiding rows in a filter, filter view.
+                "hiddenValues": [ # Values that should be hidden.
+                  "A String",
+                ],
+                "condition": { # A condition that can evaluate to true or false. # A condition that must be true for values to be shown.
+                    # (This does not override hiddenValues -- if a value is listed there,
+                    #  it will still be hidden.)
+                    # BooleanConditions are used by conditional formatting,
+                    # data validation, and the criteria in filters.
+                  "type": "A String", # The type of condition.
+                  "values": [ # The values of the condition. The number of supported values depends
+                      # on the condition type.  Some support zero values,
+                      # others one or two values,
+                      # and ConditionType.ONE_OF_LIST supports an arbitrary number of values.
+                    { # The value of the condition.
+                      "relativeDate": "A String", # A relative date (based on the current date).
+                          # Valid only if the type is
+                          # DATE_BEFORE,
+                          # DATE_AFTER,
+                          # DATE_ON_OR_BEFORE or
+                          # DATE_ON_OR_AFTER.
+                          #
+                          # Relative dates are not supported in data validation.
+                          # They are supported only in conditional formatting and
+                          # conditional filters.
+                      "userEnteredValue": "A String", # A value the condition is based on.
+                          # The value will be parsed as if the user typed into a cell.
+                          # Formulas are supported (and must begin with an `=`).
+                    },
+                  ],
+                },
+              },
+            },
+          },
+        ],
+        "protectedRanges": [ # The protected ranges in this sheet.
+          { # A protected range.
+            "unprotectedRanges": [ # The list of unprotected ranges within a protected sheet.
+                # Unprotected ranges are only supported on protected sheets.
+              { # A range on a sheet.
+                  # 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 grid 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.
+                "startRowIndex": 42, # The start row (inclusive) 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.
+                "endColumnIndex": 42, # The end column (exclusive) of the range, or not set if unbounded.
+              },
+            ],
+            "requestingUserCanEdit": True or False, # True if the user who requested this protected range can edit the
+                # protected area.
+                # This field is read-only.
+            "description": "A String", # The description of this protected range.
+            "namedRangeId": "A String", # The named range this protected range is backed by, if any.
+                #
+                # When writing, only one of range or namedRangeId
+                # may be set.
+            "editors": { # The editors of a protected range. # The users and groups with edit access to the protected range.
+                # This field is only visible to users with edit access to the protected
+                # range and the document.
+                # Editors are not supported with warningOnly protection.
+              "domainUsersCanEdit": True or False, # True if anyone in the document's domain has edit access to the protected
+                  # range.  Domain protection is only supported on documents within a domain.
+              "users": [ # The email addresses of users with edit access to the protected range.
+                "A String",
+              ],
+              "groups": [ # The email addresses of groups with edit access to the protected range.
+                "A String",
+              ],
+            },
+            "protectedRangeId": 42, # The ID of the protected range.
+                # This field is read-only.
+            "warningOnly": True or False, # True if this this protected range will show a warning when editing.
+                # Warning-based protection means that every user can edit data in the
+                # protected range, except editing will prompt a warning asking the user
+                # to confirm the edit.
+                #
+                # When warning: if this field is true, then editors is ignored.
+                # Additionally, if this field is changed from true to false and the
+                # `editors` field is not set (nor included in the field mask), then
+                # the editors will be set to all the editors in the document.
+            "range": { # A range on a sheet. # The range that is being protected.
+                # The range may be fully unbounded, in which case this is considered
+                # a protected sheet.
+                #
+                # When writing, only one of range or namedRangeId
+                # may be set.
+                # 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 grid 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.
+              "startRowIndex": 42, # The start row (inclusive) 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.
+              "endColumnIndex": 42, # The end column (exclusive) of the range, or not set if unbounded.
+            },
+          },
+        ],
+        "data": [ # Data in the grid, if this is a grid sheet.
+            # The number of GridData objects returned is dependent on the number of
+            # ranges requested on this sheet. For example, if this is representing
+            # `Sheet1`, and the spreadsheet was requested with ranges
+            # `Sheet1!A1:C10` and `Sheet1!D15:E20`, then the first GridData will have a
+            # startRow/startColumn of `0`,
+            # while the second one will have `startRow 14` (zero-based row 15),
+            # and `startColumn 3` (zero-based column D).
+          { # Data in the grid, as well as metadata about the dimensions.
+            "startRow": 42, # The first row this GridData refers to, zero-based.
+            "rowMetadata": [ # Metadata about the requested rows in the grid, starting with the row
+                # in startRow.
+              { # Properties about a dimension.
+                "pixelSize": 42, # The height (if a row) or width (if a column) of the dimension in pixels.
+                "hiddenByUser": True or False, # True if this dimension is explicitly hidden.
+                "hiddenByFilter": True or False, # True if this dimension is being filtered.
+                    # This field is read-only.
+              },
+            ],
+            "startColumn": 42, # The first column this GridData refers to, zero-based.
+            "columnMetadata": [ # Metadata about the requested columns in the grid, starting with the column
+                # in startColumn.
+              { # Properties about a dimension.
+                "pixelSize": 42, # The height (if a row) or width (if a column) of the dimension in pixels.
+                "hiddenByUser": True or False, # True if this dimension is explicitly hidden.
+                "hiddenByFilter": True or False, # True if this dimension is being filtered.
+                    # This field is read-only.
+              },
+            ],
+            "rowData": [ # The data in the grid, one entry per row,
+                # starting with the row in startRow.
+                # The values in RowData will correspond to columns starting
+                # at startColumn.
+              { # Data about each cell in a row.
+                "values": [ # The values in the row, one per column.
+                  { # Data about a specific cell.
+                    "pivotTable": { # A pivot table. # A pivot table anchored at this cell. The size of pivot table itself
+                        # is computed dynamically based on its data, grouping, filters, values,
+                        # etc... Only the top-left cell of the pivot table contains the pivot table
+                        # definition. The other cells will contain the calculated values of the
+                        # results of the pivot in their effectiveValue fields.
+                      "valueLayout": "A String", # Whether values should be listed horizontally (as columns)
+                          # or vertically (as rows).
+                      "rows": [ # Each row grouping in the pivot table.
+                        { # A single grouping (either row or column) in a pivot table.
+                          "showTotals": True or False, # True if the pivot table should include the totals for this grouping.
+                          "valueMetadata": [ # Metadata about values in the grouping.
+                            { # Metadata about a value in a pivot grouping.
+                              "collapsed": True or False, # True if the data corresponding to the value is collapsed.
+                              "value": { # The kinds of value that a cell in a spreadsheet can have. # The calculated value the metadata corresponds to.
+                                  # (Note that formulaValue is not valid,
+                                  #  because the values will be calculated.)
+                                "numberValue": 3.14, # Represents a double value.
+                                    # Note: Dates, Times and DateTimes are represented as doubles in
+                                    # "serial number" format.
+                                "boolValue": True or False, # Represents a boolean value.
+                                "formulaValue": "A String", # Represents a formula.
+                                "stringValue": "A String", # Represents a string value.
+                                    # Leading single quotes are not included. For example, if the user typed
+                                    # `'123` into the UI, this would be represented as a `stringValue` of
+                                    # `"123"`.
+                                "errorValue": { # An error in a cell. # Represents an error.
+                                    # This field is read-only.
+                                  "message": "A String", # A message with more information about the error
+                                      # (in the spreadsheet's locale).
+                                  "type": "A String", # The type of error.
+                                },
+                              },
+                            },
+                          ],
+                          "valueBucket": { # Information about which values in a pivot group should be used for sorting. # The bucket of the opposite pivot group to sort by.
+                              # If not specified, sorting is alphabetical by this group's values.
+                            "buckets": [ # Determines the bucket from which values are chosen to sort.
+                                #
+                                # For example, in a pivot table with one row group & two column groups,
+                                # the row group can list up to two values. The first value corresponds
+                                # to a value within the first column group, and the second value
+                                # corresponds to a value in the second column group.  If no values
+                                # are listed, this would indicate that the row should be sorted according
+                                # to the "Grand Total" over the column groups. If a single value is listed,
+                                # this would correspond to using the "Total" of that bucket.
+                              { # The kinds of value that a cell in a spreadsheet can have.
+                                "numberValue": 3.14, # Represents a double value.
+                                    # Note: Dates, Times and DateTimes are represented as doubles in
+                                    # "serial number" format.
+                                "boolValue": True or False, # Represents a boolean value.
+                                "formulaValue": "A String", # Represents a formula.
+                                "stringValue": "A String", # Represents a string value.
+                                    # Leading single quotes are not included. For example, if the user typed
+                                    # `'123` into the UI, this would be represented as a `stringValue` of
+                                    # `"123"`.
+                                "errorValue": { # An error in a cell. # Represents an error.
+                                    # This field is read-only.
+                                  "message": "A String", # A message with more information about the error
+                                      # (in the spreadsheet's locale).
+                                  "type": "A String", # The type of error.
+                                },
+                              },
+                            ],
+                            "valuesIndex": 42, # The offset in the [PivotTable.values] list which the values in this
+                                # grouping should be sorted by.
+                          },
+                          "sortOrder": "A String", # The order the values in this group should be sorted.
+                          "sourceColumnOffset": 42, # The column offset of the source range that this grouping is based on.
+                              #
+                              # For example, if the source was `C10:E15', a `sourceColumnOffset` of `0`
+                              # means this group refers to column `C`, whereas the offset `1` would refer
+                              # to column `D`.
+                        },
+                      ],
+                      "source": { # A range on a sheet. # The range the pivot table is reading data from.
+                          # 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 grid 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.
+                        "startRowIndex": 42, # The start row (inclusive) 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.
+                        "endColumnIndex": 42, # The end column (exclusive) of the range, or not set if unbounded.
+                      },
+                      "values": [ # A list of values to include in the pivot table.
+                        { # The definition of how a value in a pivot table should be calculated.
+                          "formula": "A String", # A custom formula to calculate the value.  The formula must start
+                              # with an `=` character.
+                          "summarizeFunction": "A String", # A function to summarize the value.
+                              # If formula is set, the only supported values are
+                              # SUM and
+                              # CUSTOM.
+                              # If sourceColumnOffset is set, then `CUSTOM`
+                              # is not supported.
+                          "sourceColumnOffset": 42, # The column offset of the source range that this value reads from.
+                              #
+                              # For example, if the source was `C10:E15', a `sourceColumnOffset` of `0`
+                              # means this value refers to column `C`, whereas the offset `1` would
+                              # refer to column `D`.
+                          "name": "A String", # A name to use for the value. This is only used if formula was set.
+                              # Otherwise, the column name is used.
+                        },
+                      ],
+                      "criteria": { # An optional mapping of filters per source column offset.
+                          #
+                          # The filters will be applied before aggregating data into the pivot table.
+                          # The map's key is the column offset of the source range that you want to
+                          # filter, and the value is the criteria for that column.
+                          #
+                          # For example, if the source was `C10:E15', a key of `0` will have the filter
+                          # for column `C`, whereas the key `1` is for column `D`.
+                        "a_key": { # Criteria for showing/hiding rows in a pivot table.
+                          "visibleValues": [ # Values that should be included.  Values not listed here are excluded.
+                            "A String",
+                          ],
+                        },
+                      },
+                      "columns": [ # Each column grouping in the pivot table.
+                        { # A single grouping (either row or column) in a pivot table.
+                          "showTotals": True or False, # True if the pivot table should include the totals for this grouping.
+                          "valueMetadata": [ # Metadata about values in the grouping.
+                            { # Metadata about a value in a pivot grouping.
+                              "collapsed": True or False, # True if the data corresponding to the value is collapsed.
+                              "value": { # The kinds of value that a cell in a spreadsheet can have. # The calculated value the metadata corresponds to.
+                                  # (Note that formulaValue is not valid,
+                                  #  because the values will be calculated.)
+                                "numberValue": 3.14, # Represents a double value.
+                                    # Note: Dates, Times and DateTimes are represented as doubles in
+                                    # "serial number" format.
+                                "boolValue": True or False, # Represents a boolean value.
+                                "formulaValue": "A String", # Represents a formula.
+                                "stringValue": "A String", # Represents a string value.
+                                    # Leading single quotes are not included. For example, if the user typed
+                                    # `'123` into the UI, this would be represented as a `stringValue` of
+                                    # `"123"`.
+                                "errorValue": { # An error in a cell. # Represents an error.
+                                    # This field is read-only.
+                                  "message": "A String", # A message with more information about the error
+                                      # (in the spreadsheet's locale).
+                                  "type": "A String", # The type of error.
+                                },
+                              },
+                            },
+                          ],
+                          "valueBucket": { # Information about which values in a pivot group should be used for sorting. # The bucket of the opposite pivot group to sort by.
+                              # If not specified, sorting is alphabetical by this group's values.
+                            "buckets": [ # Determines the bucket from which values are chosen to sort.
+                                #
+                                # For example, in a pivot table with one row group & two column groups,
+                                # the row group can list up to two values. The first value corresponds
+                                # to a value within the first column group, and the second value
+                                # corresponds to a value in the second column group.  If no values
+                                # are listed, this would indicate that the row should be sorted according
+                                # to the "Grand Total" over the column groups. If a single value is listed,
+                                # this would correspond to using the "Total" of that bucket.
+                              { # The kinds of value that a cell in a spreadsheet can have.
+                                "numberValue": 3.14, # Represents a double value.
+                                    # Note: Dates, Times and DateTimes are represented as doubles in
+                                    # "serial number" format.
+                                "boolValue": True or False, # Represents a boolean value.
+                                "formulaValue": "A String", # Represents a formula.
+                                "stringValue": "A String", # Represents a string value.
+                                    # Leading single quotes are not included. For example, if the user typed
+                                    # `'123` into the UI, this would be represented as a `stringValue` of
+                                    # `"123"`.
+                                "errorValue": { # An error in a cell. # Represents an error.
+                                    # This field is read-only.
+                                  "message": "A String", # A message with more information about the error
+                                      # (in the spreadsheet's locale).
+                                  "type": "A String", # The type of error.
+                                },
+                              },
+                            ],
+                            "valuesIndex": 42, # The offset in the [PivotTable.values] list which the values in this
+                                # grouping should be sorted by.
+                          },
+                          "sortOrder": "A String", # The order the values in this group should be sorted.
+                          "sourceColumnOffset": 42, # The column offset of the source range that this grouping is based on.
+                              #
+                              # For example, if the source was `C10:E15', a `sourceColumnOffset` of `0`
+                              # means this group refers to column `C`, whereas the offset `1` would refer
+                              # to column `D`.
+                        },
+                      ],
+                    },
+                    "hyperlink": "A String", # A hyperlink this cell points to, if any.
+                        # This field is read-only.  (To set it, use a `=HYPERLINK` formula.)
+                    "effectiveValue": { # The kinds of value that a cell in a spreadsheet can have. # The effective value of the cell. For cells with formulas, this will be
+                        # the calculated value.  For cells with literals, this will be
+                        # the same as the user_entered_value.
+                        # This field is read-only.
+                      "numberValue": 3.14, # Represents a double value.
+                          # Note: Dates, Times and DateTimes are represented as doubles in
+                          # "serial number" format.
+                      "boolValue": True or False, # Represents a boolean value.
+                      "formulaValue": "A String", # Represents a formula.
+                      "stringValue": "A String", # Represents a string value.
+                          # Leading single quotes are not included. For example, if the user typed
+                          # `'123` into the UI, this would be represented as a `stringValue` of
+                          # `"123"`.
+                      "errorValue": { # An error in a cell. # Represents an error.
+                          # This field is read-only.
+                        "message": "A String", # A message with more information about the error
+                            # (in the spreadsheet's locale).
+                        "type": "A String", # The type of error.
+                      },
+                    },
+                    "formattedValue": "A String", # The formatted value of the cell.
+                        # This is the value as it's shown to the user.
+                        # This field is read-only.
+                    "userEnteredValue": { # The kinds of value that a cell in a spreadsheet can have. # The value the user entered in the cell. e.g, `1234`, `'Hello'`, or `=NOW()`
+                        # Note: Dates, Times and DateTimes are represented as doubles in
+                        # serial number format.
+                      "numberValue": 3.14, # Represents a double value.
+                          # Note: Dates, Times and DateTimes are represented as doubles in
+                          # "serial number" format.
+                      "boolValue": True or False, # Represents a boolean value.
+                      "formulaValue": "A String", # Represents a formula.
+                      "stringValue": "A String", # Represents a string value.
+                          # Leading single quotes are not included. For example, if the user typed
+                          # `'123` into the UI, this would be represented as a `stringValue` of
+                          # `"123"`.
+                      "errorValue": { # An error in a cell. # Represents an error.
+                          # This field is read-only.
+                        "message": "A String", # A message with more information about the error
+                            # (in the spreadsheet's locale).
+                        "type": "A String", # The type of error.
+                      },
+                    },
+                    "note": "A String", # Any note on the cell.
+                    "effectiveFormat": { # The format of a cell. # The effective format being used by the cell.
+                        # This includes the results of applying any conditional formatting and,
+                        # if the cell contains a formula, the computed number format.
+                        # If the effective format is the default format, effective format will
+                        # not be written.
+                        # This field is read-only.
+                      "numberFormat": { # The number format of a cell. # A format describing how number values should be represented to the user.
+                          # When updating, all fields must be set.
+                        "pattern": "A String", # Pattern string used for formatting.
+                        "type": "A String", # The type of the number format.
+                      },
+                      "textDirection": "A String", # The direction of the text in the cell.
+                      "padding": { # The amount of padding around the cell, in pixels. # The padding of the cell.
+                          # When updating padding, every field must be specified.
+                        "top": 42, # The top padding of the cell.
+                        "right": 42, # The right padding of the cell.
+                        "bottom": 42, # The bottom padding of the cell.
+                        "left": 42, # The left padding of the cell.
+                      },
+                      "horizontalAlignment": "A String", # The horizontal alignment of the value in cell.
+                      "backgroundColor": { # Represents a color in the RGBA color space. This representation is designed # The background color of the cell.
+                          # for simplicity of conversion to/from color representations in various
+                          # languages over compactness; for example, the fields of this representation
+                          # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                          # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                          # method in iOS; and, with just a little work, it can be easily formatted into
+                          # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                          #
+                          # Example (Java):
+                          #
+                          #      import com.google.type.Color;
+                          #
+                          #      // ...
+                          #      public static java.awt.Color fromProto(Color protocolor) {
+                          #        float alpha = protocolor.hasAlpha()
+                          #            ? protocolor.getAlpha().getValue()
+                          #            : 1.0;
+                          #
+                          #        return new java.awt.Color(
+                          #            protocolor.getRed(),
+                          #            protocolor.getGreen(),
+                          #            protocolor.getBlue(),
+                          #            alpha);
+                          #      }
+                          #
+                          #      public static Color toProto(java.awt.Color color) {
+                          #        float red = (float) color.getRed();
+                          #        float green = (float) color.getGreen();
+                          #        float blue = (float) color.getBlue();
+                          #        float denominator = 255.0;
+                          #        Color.Builder resultBuilder =
+                          #            Color
+                          #                .newBuilder()
+                          #                .setRed(red / denominator)
+                          #                .setGreen(green / denominator)
+                          #                .setBlue(blue / denominator);
+                          #        int alpha = color.getAlpha();
+                          #        if (alpha != 255) {
+                          #          result.setAlpha(
+                          #              FloatValue
+                          #                  .newBuilder()
+                          #                  .setValue(((float) alpha) / denominator)
+                          #                  .build());
+                          #        }
+                          #        return resultBuilder.build();
+                          #      }
+                          #      // ...
+                          #
+                          # Example (iOS / Obj-C):
+                          #
+                          #      // ...
+                          #      static UIColor* fromProto(Color* protocolor) {
+                          #         float red = [protocolor red];
+                          #         float green = [protocolor green];
+                          #         float blue = [protocolor blue];
+                          #         FloatValue* alpha_wrapper = [protocolor alpha];
+                          #         float alpha = 1.0;
+                          #         if (alpha_wrapper != nil) {
+                          #           alpha = [alpha_wrapper value];
+                          #         }
+                          #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                          #      }
+                          #
+                          #      static Color* toProto(UIColor* color) {
+                          #          CGFloat red, green, blue, alpha;
+                          #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                          #            return nil;
+                          #          }
+                          #          Color* result = [Color alloc] init];
+                          #          [result setRed:red];
+                          #          [result setGreen:green];
+                          #          [result setBlue:blue];
+                          #          if (alpha <= 0.9999) {
+                          #            [result setAlpha:floatWrapperWithValue(alpha)];
+                          #          }
+                          #          [result autorelease];
+                          #          return result;
+                          #     }
+                          #     // ...
+                          #
+                          #  Example (JavaScript):
+                          #
+                          #     // ...
+                          #
+                          #     var protoToCssColor = function(rgb_color) {
+                          #        var redFrac = rgb_color.red || 0.0;
+                          #        var greenFrac = rgb_color.green || 0.0;
+                          #        var blueFrac = rgb_color.blue || 0.0;
+                          #        var red = Math.floor(redFrac * 255);
+                          #        var green = Math.floor(greenFrac * 255);
+                          #        var blue = Math.floor(blueFrac * 255);
+                          #
+                          #        if (!('alpha' in rgb_color)) {
+                          #           return rgbToCssColor_(red, green, blue);
+                          #        }
+                          #
+                          #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                          #        var rgbParams = [red, green, blue].join(',');
+                          #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                          #     };
+                          #
+                          #     var rgbToCssColor_ = function(red, green, blue) {
+                          #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                          #       var hexString = rgbNumber.toString(16);
+                          #       var missingZeros = 6 - hexString.length;
+                          #       var resultBuilder = ['#'];
+                          #       for (var i = 0; i < missingZeros; i++) {
+                          #          resultBuilder.push('0');
+                          #       }
+                          #       resultBuilder.push(hexString);
+                          #       return resultBuilder.join('');
+                          #     };
+                          #
+                          #     // ...
+                        "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                        "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                            # the final pixel color is defined by the equation:
+                            #
+                            #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                            #
+                            # This means that a value of 1.0 corresponds to a solid color, whereas
+                            # a value of 0.0 corresponds to a completely transparent color. This
+                            # uses a wrapper message rather than a simple float scalar so that it is
+                            # possible to distinguish between a default value and the value being unset.
+                            # If omitted, this color object is to be rendered as a solid color
+                            # (as if the alpha value had been explicitly given with a value of 1.0).
+                        "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                        "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                      },
+                      "verticalAlignment": "A String", # The vertical alignment of the value in cell.
+                      "textFormat": { # The format of a run of text in a cell. # The format of the text in the cell (unless overridden by a format run).
+                          # Absent values indicate that the field isn't specified.
+                        "foregroundColor": { # Represents a color in the RGBA color space. This representation is designed # The foreground color of the text.
+                            # for simplicity of conversion to/from color representations in various
+                            # languages over compactness; for example, the fields of this representation
+                            # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                            # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                            # method in iOS; and, with just a little work, it can be easily formatted into
+                            # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                            #
+                            # Example (Java):
+                            #
+                            #      import com.google.type.Color;
+                            #
+                            #      // ...
+                            #      public static java.awt.Color fromProto(Color protocolor) {
+                            #        float alpha = protocolor.hasAlpha()
+                            #            ? protocolor.getAlpha().getValue()
+                            #            : 1.0;
+                            #
+                            #        return new java.awt.Color(
+                            #            protocolor.getRed(),
+                            #            protocolor.getGreen(),
+                            #            protocolor.getBlue(),
+                            #            alpha);
+                            #      }
+                            #
+                            #      public static Color toProto(java.awt.Color color) {
+                            #        float red = (float) color.getRed();
+                            #        float green = (float) color.getGreen();
+                            #        float blue = (float) color.getBlue();
+                            #        float denominator = 255.0;
+                            #        Color.Builder resultBuilder =
+                            #            Color
+                            #                .newBuilder()
+                            #                .setRed(red / denominator)
+                            #                .setGreen(green / denominator)
+                            #                .setBlue(blue / denominator);
+                            #        int alpha = color.getAlpha();
+                            #        if (alpha != 255) {
+                            #          result.setAlpha(
+                            #              FloatValue
+                            #                  .newBuilder()
+                            #                  .setValue(((float) alpha) / denominator)
+                            #                  .build());
+                            #        }
+                            #        return resultBuilder.build();
+                            #      }
+                            #      // ...
+                            #
+                            # Example (iOS / Obj-C):
+                            #
+                            #      // ...
+                            #      static UIColor* fromProto(Color* protocolor) {
+                            #         float red = [protocolor red];
+                            #         float green = [protocolor green];
+                            #         float blue = [protocolor blue];
+                            #         FloatValue* alpha_wrapper = [protocolor alpha];
+                            #         float alpha = 1.0;
+                            #         if (alpha_wrapper != nil) {
+                            #           alpha = [alpha_wrapper value];
+                            #         }
+                            #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                            #      }
+                            #
+                            #      static Color* toProto(UIColor* color) {
+                            #          CGFloat red, green, blue, alpha;
+                            #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                            #            return nil;
+                            #          }
+                            #          Color* result = [Color alloc] init];
+                            #          [result setRed:red];
+                            #          [result setGreen:green];
+                            #          [result setBlue:blue];
+                            #          if (alpha <= 0.9999) {
+                            #            [result setAlpha:floatWrapperWithValue(alpha)];
+                            #          }
+                            #          [result autorelease];
+                            #          return result;
+                            #     }
+                            #     // ...
+                            #
+                            #  Example (JavaScript):
+                            #
+                            #     // ...
+                            #
+                            #     var protoToCssColor = function(rgb_color) {
+                            #        var redFrac = rgb_color.red || 0.0;
+                            #        var greenFrac = rgb_color.green || 0.0;
+                            #        var blueFrac = rgb_color.blue || 0.0;
+                            #        var red = Math.floor(redFrac * 255);
+                            #        var green = Math.floor(greenFrac * 255);
+                            #        var blue = Math.floor(blueFrac * 255);
+                            #
+                            #        if (!('alpha' in rgb_color)) {
+                            #           return rgbToCssColor_(red, green, blue);
+                            #        }
+                            #
+                            #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                            #        var rgbParams = [red, green, blue].join(',');
+                            #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                            #     };
+                            #
+                            #     var rgbToCssColor_ = function(red, green, blue) {
+                            #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                            #       var hexString = rgbNumber.toString(16);
+                            #       var missingZeros = 6 - hexString.length;
+                            #       var resultBuilder = ['#'];
+                            #       for (var i = 0; i < missingZeros; i++) {
+                            #          resultBuilder.push('0');
+                            #       }
+                            #       resultBuilder.push(hexString);
+                            #       return resultBuilder.join('');
+                            #     };
+                            #
+                            #     // ...
+                          "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                          "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                              # the final pixel color is defined by the equation:
+                              #
+                              #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                              #
+                              # This means that a value of 1.0 corresponds to a solid color, whereas
+                              # a value of 0.0 corresponds to a completely transparent color. This
+                              # uses a wrapper message rather than a simple float scalar so that it is
+                              # possible to distinguish between a default value and the value being unset.
+                              # If omitted, this color object is to be rendered as a solid color
+                              # (as if the alpha value had been explicitly given with a value of 1.0).
+                          "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                          "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                        },
+                        "bold": True or False, # True if the text is bold.
+                        "strikethrough": True or False, # True if the text has a strikethrough.
+                        "fontFamily": "A String", # The font family.
+                        "fontSize": 42, # The size of the font.
+                        "italic": True or False, # True if the text is italicized.
+                        "underline": True or False, # True if the text is underlined.
+                      },
+                      "hyperlinkDisplayType": "A String", # How a hyperlink, if it exists, should be displayed in the cell.
+                      "borders": { # The borders of the cell. # The borders of the cell.
+                        "top": { # A border along a cell. # The top border of the cell.
+                          "color": { # Represents a color in the RGBA color space. This representation is designed # The color of the border.
+                              # for simplicity of conversion to/from color representations in various
+                              # languages over compactness; for example, the fields of this representation
+                              # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                              # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                              # method in iOS; and, with just a little work, it can be easily formatted into
+                              # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                              #
+                              # Example (Java):
+                              #
+                              #      import com.google.type.Color;
+                              #
+                              #      // ...
+                              #      public static java.awt.Color fromProto(Color protocolor) {
+                              #        float alpha = protocolor.hasAlpha()
+                              #            ? protocolor.getAlpha().getValue()
+                              #            : 1.0;
+                              #
+                              #        return new java.awt.Color(
+                              #            protocolor.getRed(),
+                              #            protocolor.getGreen(),
+                              #            protocolor.getBlue(),
+                              #            alpha);
+                              #      }
+                              #
+                              #      public static Color toProto(java.awt.Color color) {
+                              #        float red = (float) color.getRed();
+                              #        float green = (float) color.getGreen();
+                              #        float blue = (float) color.getBlue();
+                              #        float denominator = 255.0;
+                              #        Color.Builder resultBuilder =
+                              #            Color
+                              #                .newBuilder()
+                              #                .setRed(red / denominator)
+                              #                .setGreen(green / denominator)
+                              #                .setBlue(blue / denominator);
+                              #        int alpha = color.getAlpha();
+                              #        if (alpha != 255) {
+                              #          result.setAlpha(
+                              #              FloatValue
+                              #                  .newBuilder()
+                              #                  .setValue(((float) alpha) / denominator)
+                              #                  .build());
+                              #        }
+                              #        return resultBuilder.build();
+                              #      }
+                              #      // ...
+                              #
+                              # Example (iOS / Obj-C):
+                              #
+                              #      // ...
+                              #      static UIColor* fromProto(Color* protocolor) {
+                              #         float red = [protocolor red];
+                              #         float green = [protocolor green];
+                              #         float blue = [protocolor blue];
+                              #         FloatValue* alpha_wrapper = [protocolor alpha];
+                              #         float alpha = 1.0;
+                              #         if (alpha_wrapper != nil) {
+                              #           alpha = [alpha_wrapper value];
+                              #         }
+                              #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                              #      }
+                              #
+                              #      static Color* toProto(UIColor* color) {
+                              #          CGFloat red, green, blue, alpha;
+                              #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                              #            return nil;
+                              #          }
+                              #          Color* result = [Color alloc] init];
+                              #          [result setRed:red];
+                              #          [result setGreen:green];
+                              #          [result setBlue:blue];
+                              #          if (alpha <= 0.9999) {
+                              #            [result setAlpha:floatWrapperWithValue(alpha)];
+                              #          }
+                              #          [result autorelease];
+                              #          return result;
+                              #     }
+                              #     // ...
+                              #
+                              #  Example (JavaScript):
+                              #
+                              #     // ...
+                              #
+                              #     var protoToCssColor = function(rgb_color) {
+                              #        var redFrac = rgb_color.red || 0.0;
+                              #        var greenFrac = rgb_color.green || 0.0;
+                              #        var blueFrac = rgb_color.blue || 0.0;
+                              #        var red = Math.floor(redFrac * 255);
+                              #        var green = Math.floor(greenFrac * 255);
+                              #        var blue = Math.floor(blueFrac * 255);
+                              #
+                              #        if (!('alpha' in rgb_color)) {
+                              #           return rgbToCssColor_(red, green, blue);
+                              #        }
+                              #
+                              #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                              #        var rgbParams = [red, green, blue].join(',');
+                              #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                              #     };
+                              #
+                              #     var rgbToCssColor_ = function(red, green, blue) {
+                              #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                              #       var hexString = rgbNumber.toString(16);
+                              #       var missingZeros = 6 - hexString.length;
+                              #       var resultBuilder = ['#'];
+                              #       for (var i = 0; i < missingZeros; i++) {
+                              #          resultBuilder.push('0');
+                              #       }
+                              #       resultBuilder.push(hexString);
+                              #       return resultBuilder.join('');
+                              #     };
+                              #
+                              #     // ...
+                            "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                            "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                                # the final pixel color is defined by the equation:
+                                #
+                                #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                                #
+                                # This means that a value of 1.0 corresponds to a solid color, whereas
+                                # a value of 0.0 corresponds to a completely transparent color. This
+                                # uses a wrapper message rather than a simple float scalar so that it is
+                                # possible to distinguish between a default value and the value being unset.
+                                # If omitted, this color object is to be rendered as a solid color
+                                # (as if the alpha value had been explicitly given with a value of 1.0).
+                            "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                            "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                          },
+                          "width": 42, # The width of the border, in pixels.
+                              # Border widths must be between 0 and 3 pixels.
+                          "style": "A String", # The style of the border.
+                        },
+                        "right": { # A border along a cell. # The right border of the cell.
+                          "color": { # Represents a color in the RGBA color space. This representation is designed # The color of the border.
+                              # for simplicity of conversion to/from color representations in various
+                              # languages over compactness; for example, the fields of this representation
+                              # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                              # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                              # method in iOS; and, with just a little work, it can be easily formatted into
+                              # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                              #
+                              # Example (Java):
+                              #
+                              #      import com.google.type.Color;
+                              #
+                              #      // ...
+                              #      public static java.awt.Color fromProto(Color protocolor) {
+                              #        float alpha = protocolor.hasAlpha()
+                              #            ? protocolor.getAlpha().getValue()
+                              #            : 1.0;
+                              #
+                              #        return new java.awt.Color(
+                              #            protocolor.getRed(),
+                              #            protocolor.getGreen(),
+                              #            protocolor.getBlue(),
+                              #            alpha);
+                              #      }
+                              #
+                              #      public static Color toProto(java.awt.Color color) {
+                              #        float red = (float) color.getRed();
+                              #        float green = (float) color.getGreen();
+                              #        float blue = (float) color.getBlue();
+                              #        float denominator = 255.0;
+                              #        Color.Builder resultBuilder =
+                              #            Color
+                              #                .newBuilder()
+                              #                .setRed(red / denominator)
+                              #                .setGreen(green / denominator)
+                              #                .setBlue(blue / denominator);
+                              #        int alpha = color.getAlpha();
+                              #        if (alpha != 255) {
+                              #          result.setAlpha(
+                              #              FloatValue
+                              #                  .newBuilder()
+                              #                  .setValue(((float) alpha) / denominator)
+                              #                  .build());
+                              #        }
+                              #        return resultBuilder.build();
+                              #      }
+                              #      // ...
+                              #
+                              # Example (iOS / Obj-C):
+                              #
+                              #      // ...
+                              #      static UIColor* fromProto(Color* protocolor) {
+                              #         float red = [protocolor red];
+                              #         float green = [protocolor green];
+                              #         float blue = [protocolor blue];
+                              #         FloatValue* alpha_wrapper = [protocolor alpha];
+                              #         float alpha = 1.0;
+                              #         if (alpha_wrapper != nil) {
+                              #           alpha = [alpha_wrapper value];
+                              #         }
+                              #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                              #      }
+                              #
+                              #      static Color* toProto(UIColor* color) {
+                              #          CGFloat red, green, blue, alpha;
+                              #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                              #            return nil;
+                              #          }
+                              #          Color* result = [Color alloc] init];
+                              #          [result setRed:red];
+                              #          [result setGreen:green];
+                              #          [result setBlue:blue];
+                              #          if (alpha <= 0.9999) {
+                              #            [result setAlpha:floatWrapperWithValue(alpha)];
+                              #          }
+                              #          [result autorelease];
+                              #          return result;
+                              #     }
+                              #     // ...
+                              #
+                              #  Example (JavaScript):
+                              #
+                              #     // ...
+                              #
+                              #     var protoToCssColor = function(rgb_color) {
+                              #        var redFrac = rgb_color.red || 0.0;
+                              #        var greenFrac = rgb_color.green || 0.0;
+                              #        var blueFrac = rgb_color.blue || 0.0;
+                              #        var red = Math.floor(redFrac * 255);
+                              #        var green = Math.floor(greenFrac * 255);
+                              #        var blue = Math.floor(blueFrac * 255);
+                              #
+                              #        if (!('alpha' in rgb_color)) {
+                              #           return rgbToCssColor_(red, green, blue);
+                              #        }
+                              #
+                              #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                              #        var rgbParams = [red, green, blue].join(',');
+                              #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                              #     };
+                              #
+                              #     var rgbToCssColor_ = function(red, green, blue) {
+                              #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                              #       var hexString = rgbNumber.toString(16);
+                              #       var missingZeros = 6 - hexString.length;
+                              #       var resultBuilder = ['#'];
+                              #       for (var i = 0; i < missingZeros; i++) {
+                              #          resultBuilder.push('0');
+                              #       }
+                              #       resultBuilder.push(hexString);
+                              #       return resultBuilder.join('');
+                              #     };
+                              #
+                              #     // ...
+                            "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                            "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                                # the final pixel color is defined by the equation:
+                                #
+                                #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                                #
+                                # This means that a value of 1.0 corresponds to a solid color, whereas
+                                # a value of 0.0 corresponds to a completely transparent color. This
+                                # uses a wrapper message rather than a simple float scalar so that it is
+                                # possible to distinguish between a default value and the value being unset.
+                                # If omitted, this color object is to be rendered as a solid color
+                                # (as if the alpha value had been explicitly given with a value of 1.0).
+                            "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                            "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                          },
+                          "width": 42, # The width of the border, in pixels.
+                              # Border widths must be between 0 and 3 pixels.
+                          "style": "A String", # The style of the border.
+                        },
+                        "bottom": { # A border along a cell. # The bottom border of the cell.
+                          "color": { # Represents a color in the RGBA color space. This representation is designed # The color of the border.
+                              # for simplicity of conversion to/from color representations in various
+                              # languages over compactness; for example, the fields of this representation
+                              # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                              # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                              # method in iOS; and, with just a little work, it can be easily formatted into
+                              # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                              #
+                              # Example (Java):
+                              #
+                              #      import com.google.type.Color;
+                              #
+                              #      // ...
+                              #      public static java.awt.Color fromProto(Color protocolor) {
+                              #        float alpha = protocolor.hasAlpha()
+                              #            ? protocolor.getAlpha().getValue()
+                              #            : 1.0;
+                              #
+                              #        return new java.awt.Color(
+                              #            protocolor.getRed(),
+                              #            protocolor.getGreen(),
+                              #            protocolor.getBlue(),
+                              #            alpha);
+                              #      }
+                              #
+                              #      public static Color toProto(java.awt.Color color) {
+                              #        float red = (float) color.getRed();
+                              #        float green = (float) color.getGreen();
+                              #        float blue = (float) color.getBlue();
+                              #        float denominator = 255.0;
+                              #        Color.Builder resultBuilder =
+                              #            Color
+                              #                .newBuilder()
+                              #                .setRed(red / denominator)
+                              #                .setGreen(green / denominator)
+                              #                .setBlue(blue / denominator);
+                              #        int alpha = color.getAlpha();
+                              #        if (alpha != 255) {
+                              #          result.setAlpha(
+                              #              FloatValue
+                              #                  .newBuilder()
+                              #                  .setValue(((float) alpha) / denominator)
+                              #                  .build());
+                              #        }
+                              #        return resultBuilder.build();
+                              #      }
+                              #      // ...
+                              #
+                              # Example (iOS / Obj-C):
+                              #
+                              #      // ...
+                              #      static UIColor* fromProto(Color* protocolor) {
+                              #         float red = [protocolor red];
+                              #         float green = [protocolor green];
+                              #         float blue = [protocolor blue];
+                              #         FloatValue* alpha_wrapper = [protocolor alpha];
+                              #         float alpha = 1.0;
+                              #         if (alpha_wrapper != nil) {
+                              #           alpha = [alpha_wrapper value];
+                              #         }
+                              #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                              #      }
+                              #
+                              #      static Color* toProto(UIColor* color) {
+                              #          CGFloat red, green, blue, alpha;
+                              #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                              #            return nil;
+                              #          }
+                              #          Color* result = [Color alloc] init];
+                              #          [result setRed:red];
+                              #          [result setGreen:green];
+                              #          [result setBlue:blue];
+                              #          if (alpha <= 0.9999) {
+                              #            [result setAlpha:floatWrapperWithValue(alpha)];
+                              #          }
+                              #          [result autorelease];
+                              #          return result;
+                              #     }
+                              #     // ...
+                              #
+                              #  Example (JavaScript):
+                              #
+                              #     // ...
+                              #
+                              #     var protoToCssColor = function(rgb_color) {
+                              #        var redFrac = rgb_color.red || 0.0;
+                              #        var greenFrac = rgb_color.green || 0.0;
+                              #        var blueFrac = rgb_color.blue || 0.0;
+                              #        var red = Math.floor(redFrac * 255);
+                              #        var green = Math.floor(greenFrac * 255);
+                              #        var blue = Math.floor(blueFrac * 255);
+                              #
+                              #        if (!('alpha' in rgb_color)) {
+                              #           return rgbToCssColor_(red, green, blue);
+                              #        }
+                              #
+                              #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                              #        var rgbParams = [red, green, blue].join(',');
+                              #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                              #     };
+                              #
+                              #     var rgbToCssColor_ = function(red, green, blue) {
+                              #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                              #       var hexString = rgbNumber.toString(16);
+                              #       var missingZeros = 6 - hexString.length;
+                              #       var resultBuilder = ['#'];
+                              #       for (var i = 0; i < missingZeros; i++) {
+                              #          resultBuilder.push('0');
+                              #       }
+                              #       resultBuilder.push(hexString);
+                              #       return resultBuilder.join('');
+                              #     };
+                              #
+                              #     // ...
+                            "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                            "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                                # the final pixel color is defined by the equation:
+                                #
+                                #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                                #
+                                # This means that a value of 1.0 corresponds to a solid color, whereas
+                                # a value of 0.0 corresponds to a completely transparent color. This
+                                # uses a wrapper message rather than a simple float scalar so that it is
+                                # possible to distinguish between a default value and the value being unset.
+                                # If omitted, this color object is to be rendered as a solid color
+                                # (as if the alpha value had been explicitly given with a value of 1.0).
+                            "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                            "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                          },
+                          "width": 42, # The width of the border, in pixels.
+                              # Border widths must be between 0 and 3 pixels.
+                          "style": "A String", # The style of the border.
+                        },
+                        "left": { # A border along a cell. # The left border of the cell.
+                          "color": { # Represents a color in the RGBA color space. This representation is designed # The color of the border.
+                              # for simplicity of conversion to/from color representations in various
+                              # languages over compactness; for example, the fields of this representation
+                              # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                              # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                              # method in iOS; and, with just a little work, it can be easily formatted into
+                              # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                              #
+                              # Example (Java):
+                              #
+                              #      import com.google.type.Color;
+                              #
+                              #      // ...
+                              #      public static java.awt.Color fromProto(Color protocolor) {
+                              #        float alpha = protocolor.hasAlpha()
+                              #            ? protocolor.getAlpha().getValue()
+                              #            : 1.0;
+                              #
+                              #        return new java.awt.Color(
+                              #            protocolor.getRed(),
+                              #            protocolor.getGreen(),
+                              #            protocolor.getBlue(),
+                              #            alpha);
+                              #      }
+                              #
+                              #      public static Color toProto(java.awt.Color color) {
+                              #        float red = (float) color.getRed();
+                              #        float green = (float) color.getGreen();
+                              #        float blue = (float) color.getBlue();
+                              #        float denominator = 255.0;
+                              #        Color.Builder resultBuilder =
+                              #            Color
+                              #                .newBuilder()
+                              #                .setRed(red / denominator)
+                              #                .setGreen(green / denominator)
+                              #                .setBlue(blue / denominator);
+                              #        int alpha = color.getAlpha();
+                              #        if (alpha != 255) {
+                              #          result.setAlpha(
+                              #              FloatValue
+                              #                  .newBuilder()
+                              #                  .setValue(((float) alpha) / denominator)
+                              #                  .build());
+                              #        }
+                              #        return resultBuilder.build();
+                              #      }
+                              #      // ...
+                              #
+                              # Example (iOS / Obj-C):
+                              #
+                              #      // ...
+                              #      static UIColor* fromProto(Color* protocolor) {
+                              #         float red = [protocolor red];
+                              #         float green = [protocolor green];
+                              #         float blue = [protocolor blue];
+                              #         FloatValue* alpha_wrapper = [protocolor alpha];
+                              #         float alpha = 1.0;
+                              #         if (alpha_wrapper != nil) {
+                              #           alpha = [alpha_wrapper value];
+                              #         }
+                              #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                              #      }
+                              #
+                              #      static Color* toProto(UIColor* color) {
+                              #          CGFloat red, green, blue, alpha;
+                              #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                              #            return nil;
+                              #          }
+                              #          Color* result = [Color alloc] init];
+                              #          [result setRed:red];
+                              #          [result setGreen:green];
+                              #          [result setBlue:blue];
+                              #          if (alpha <= 0.9999) {
+                              #            [result setAlpha:floatWrapperWithValue(alpha)];
+                              #          }
+                              #          [result autorelease];
+                              #          return result;
+                              #     }
+                              #     // ...
+                              #
+                              #  Example (JavaScript):
+                              #
+                              #     // ...
+                              #
+                              #     var protoToCssColor = function(rgb_color) {
+                              #        var redFrac = rgb_color.red || 0.0;
+                              #        var greenFrac = rgb_color.green || 0.0;
+                              #        var blueFrac = rgb_color.blue || 0.0;
+                              #        var red = Math.floor(redFrac * 255);
+                              #        var green = Math.floor(greenFrac * 255);
+                              #        var blue = Math.floor(blueFrac * 255);
+                              #
+                              #        if (!('alpha' in rgb_color)) {
+                              #           return rgbToCssColor_(red, green, blue);
+                              #        }
+                              #
+                              #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                              #        var rgbParams = [red, green, blue].join(',');
+                              #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                              #     };
+                              #
+                              #     var rgbToCssColor_ = function(red, green, blue) {
+                              #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                              #       var hexString = rgbNumber.toString(16);
+                              #       var missingZeros = 6 - hexString.length;
+                              #       var resultBuilder = ['#'];
+                              #       for (var i = 0; i < missingZeros; i++) {
+                              #          resultBuilder.push('0');
+                              #       }
+                              #       resultBuilder.push(hexString);
+                              #       return resultBuilder.join('');
+                              #     };
+                              #
+                              #     // ...
+                            "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                            "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                                # the final pixel color is defined by the equation:
+                                #
+                                #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                                #
+                                # This means that a value of 1.0 corresponds to a solid color, whereas
+                                # a value of 0.0 corresponds to a completely transparent color. This
+                                # uses a wrapper message rather than a simple float scalar so that it is
+                                # possible to distinguish between a default value and the value being unset.
+                                # If omitted, this color object is to be rendered as a solid color
+                                # (as if the alpha value had been explicitly given with a value of 1.0).
+                            "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                            "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                          },
+                          "width": 42, # The width of the border, in pixels.
+                              # Border widths must be between 0 and 3 pixels.
+                          "style": "A String", # The style of the border.
+                        },
+                      },
+                      "wrapStrategy": "A String", # The wrap strategy for the value in the cell.
+                    },
+                    "userEnteredFormat": { # The format of a cell. # The format the user entered for the cell.
+                        #
+                        # When writing, the new format will be merged with the existing format.
+                      "numberFormat": { # The number format of a cell. # A format describing how number values should be represented to the user.
+                          # When updating, all fields must be set.
+                        "pattern": "A String", # Pattern string used for formatting.
+                        "type": "A String", # The type of the number format.
+                      },
+                      "textDirection": "A String", # The direction of the text in the cell.
+                      "padding": { # The amount of padding around the cell, in pixels. # The padding of the cell.
+                          # When updating padding, every field must be specified.
+                        "top": 42, # The top padding of the cell.
+                        "right": 42, # The right padding of the cell.
+                        "bottom": 42, # The bottom padding of the cell.
+                        "left": 42, # The left padding of the cell.
+                      },
+                      "horizontalAlignment": "A String", # The horizontal alignment of the value in cell.
+                      "backgroundColor": { # Represents a color in the RGBA color space. This representation is designed # The background color of the cell.
+                          # for simplicity of conversion to/from color representations in various
+                          # languages over compactness; for example, the fields of this representation
+                          # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                          # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                          # method in iOS; and, with just a little work, it can be easily formatted into
+                          # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                          #
+                          # Example (Java):
+                          #
+                          #      import com.google.type.Color;
+                          #
+                          #      // ...
+                          #      public static java.awt.Color fromProto(Color protocolor) {
+                          #        float alpha = protocolor.hasAlpha()
+                          #            ? protocolor.getAlpha().getValue()
+                          #            : 1.0;
+                          #
+                          #        return new java.awt.Color(
+                          #            protocolor.getRed(),
+                          #            protocolor.getGreen(),
+                          #            protocolor.getBlue(),
+                          #            alpha);
+                          #      }
+                          #
+                          #      public static Color toProto(java.awt.Color color) {
+                          #        float red = (float) color.getRed();
+                          #        float green = (float) color.getGreen();
+                          #        float blue = (float) color.getBlue();
+                          #        float denominator = 255.0;
+                          #        Color.Builder resultBuilder =
+                          #            Color
+                          #                .newBuilder()
+                          #                .setRed(red / denominator)
+                          #                .setGreen(green / denominator)
+                          #                .setBlue(blue / denominator);
+                          #        int alpha = color.getAlpha();
+                          #        if (alpha != 255) {
+                          #          result.setAlpha(
+                          #              FloatValue
+                          #                  .newBuilder()
+                          #                  .setValue(((float) alpha) / denominator)
+                          #                  .build());
+                          #        }
+                          #        return resultBuilder.build();
+                          #      }
+                          #      // ...
+                          #
+                          # Example (iOS / Obj-C):
+                          #
+                          #      // ...
+                          #      static UIColor* fromProto(Color* protocolor) {
+                          #         float red = [protocolor red];
+                          #         float green = [protocolor green];
+                          #         float blue = [protocolor blue];
+                          #         FloatValue* alpha_wrapper = [protocolor alpha];
+                          #         float alpha = 1.0;
+                          #         if (alpha_wrapper != nil) {
+                          #           alpha = [alpha_wrapper value];
+                          #         }
+                          #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                          #      }
+                          #
+                          #      static Color* toProto(UIColor* color) {
+                          #          CGFloat red, green, blue, alpha;
+                          #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                          #            return nil;
+                          #          }
+                          #          Color* result = [Color alloc] init];
+                          #          [result setRed:red];
+                          #          [result setGreen:green];
+                          #          [result setBlue:blue];
+                          #          if (alpha <= 0.9999) {
+                          #            [result setAlpha:floatWrapperWithValue(alpha)];
+                          #          }
+                          #          [result autorelease];
+                          #          return result;
+                          #     }
+                          #     // ...
+                          #
+                          #  Example (JavaScript):
+                          #
+                          #     // ...
+                          #
+                          #     var protoToCssColor = function(rgb_color) {
+                          #        var redFrac = rgb_color.red || 0.0;
+                          #        var greenFrac = rgb_color.green || 0.0;
+                          #        var blueFrac = rgb_color.blue || 0.0;
+                          #        var red = Math.floor(redFrac * 255);
+                          #        var green = Math.floor(greenFrac * 255);
+                          #        var blue = Math.floor(blueFrac * 255);
+                          #
+                          #        if (!('alpha' in rgb_color)) {
+                          #           return rgbToCssColor_(red, green, blue);
+                          #        }
+                          #
+                          #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                          #        var rgbParams = [red, green, blue].join(',');
+                          #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                          #     };
+                          #
+                          #     var rgbToCssColor_ = function(red, green, blue) {
+                          #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                          #       var hexString = rgbNumber.toString(16);
+                          #       var missingZeros = 6 - hexString.length;
+                          #       var resultBuilder = ['#'];
+                          #       for (var i = 0; i < missingZeros; i++) {
+                          #          resultBuilder.push('0');
+                          #       }
+                          #       resultBuilder.push(hexString);
+                          #       return resultBuilder.join('');
+                          #     };
+                          #
+                          #     // ...
+                        "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                        "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                            # the final pixel color is defined by the equation:
+                            #
+                            #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                            #
+                            # This means that a value of 1.0 corresponds to a solid color, whereas
+                            # a value of 0.0 corresponds to a completely transparent color. This
+                            # uses a wrapper message rather than a simple float scalar so that it is
+                            # possible to distinguish between a default value and the value being unset.
+                            # If omitted, this color object is to be rendered as a solid color
+                            # (as if the alpha value had been explicitly given with a value of 1.0).
+                        "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                        "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                      },
+                      "verticalAlignment": "A String", # The vertical alignment of the value in cell.
+                      "textFormat": { # The format of a run of text in a cell. # The format of the text in the cell (unless overridden by a format run).
+                          # Absent values indicate that the field isn't specified.
+                        "foregroundColor": { # Represents a color in the RGBA color space. This representation is designed # The foreground color of the text.
+                            # for simplicity of conversion to/from color representations in various
+                            # languages over compactness; for example, the fields of this representation
+                            # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                            # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                            # method in iOS; and, with just a little work, it can be easily formatted into
+                            # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                            #
+                            # Example (Java):
+                            #
+                            #      import com.google.type.Color;
+                            #
+                            #      // ...
+                            #      public static java.awt.Color fromProto(Color protocolor) {
+                            #        float alpha = protocolor.hasAlpha()
+                            #            ? protocolor.getAlpha().getValue()
+                            #            : 1.0;
+                            #
+                            #        return new java.awt.Color(
+                            #            protocolor.getRed(),
+                            #            protocolor.getGreen(),
+                            #            protocolor.getBlue(),
+                            #            alpha);
+                            #      }
+                            #
+                            #      public static Color toProto(java.awt.Color color) {
+                            #        float red = (float) color.getRed();
+                            #        float green = (float) color.getGreen();
+                            #        float blue = (float) color.getBlue();
+                            #        float denominator = 255.0;
+                            #        Color.Builder resultBuilder =
+                            #            Color
+                            #                .newBuilder()
+                            #                .setRed(red / denominator)
+                            #                .setGreen(green / denominator)
+                            #                .setBlue(blue / denominator);
+                            #        int alpha = color.getAlpha();
+                            #        if (alpha != 255) {
+                            #          result.setAlpha(
+                            #              FloatValue
+                            #                  .newBuilder()
+                            #                  .setValue(((float) alpha) / denominator)
+                            #                  .build());
+                            #        }
+                            #        return resultBuilder.build();
+                            #      }
+                            #      // ...
+                            #
+                            # Example (iOS / Obj-C):
+                            #
+                            #      // ...
+                            #      static UIColor* fromProto(Color* protocolor) {
+                            #         float red = [protocolor red];
+                            #         float green = [protocolor green];
+                            #         float blue = [protocolor blue];
+                            #         FloatValue* alpha_wrapper = [protocolor alpha];
+                            #         float alpha = 1.0;
+                            #         if (alpha_wrapper != nil) {
+                            #           alpha = [alpha_wrapper value];
+                            #         }
+                            #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                            #      }
+                            #
+                            #      static Color* toProto(UIColor* color) {
+                            #          CGFloat red, green, blue, alpha;
+                            #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                            #            return nil;
+                            #          }
+                            #          Color* result = [Color alloc] init];
+                            #          [result setRed:red];
+                            #          [result setGreen:green];
+                            #          [result setBlue:blue];
+                            #          if (alpha <= 0.9999) {
+                            #            [result setAlpha:floatWrapperWithValue(alpha)];
+                            #          }
+                            #          [result autorelease];
+                            #          return result;
+                            #     }
+                            #     // ...
+                            #
+                            #  Example (JavaScript):
+                            #
+                            #     // ...
+                            #
+                            #     var protoToCssColor = function(rgb_color) {
+                            #        var redFrac = rgb_color.red || 0.0;
+                            #        var greenFrac = rgb_color.green || 0.0;
+                            #        var blueFrac = rgb_color.blue || 0.0;
+                            #        var red = Math.floor(redFrac * 255);
+                            #        var green = Math.floor(greenFrac * 255);
+                            #        var blue = Math.floor(blueFrac * 255);
+                            #
+                            #        if (!('alpha' in rgb_color)) {
+                            #           return rgbToCssColor_(red, green, blue);
+                            #        }
+                            #
+                            #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                            #        var rgbParams = [red, green, blue].join(',');
+                            #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                            #     };
+                            #
+                            #     var rgbToCssColor_ = function(red, green, blue) {
+                            #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                            #       var hexString = rgbNumber.toString(16);
+                            #       var missingZeros = 6 - hexString.length;
+                            #       var resultBuilder = ['#'];
+                            #       for (var i = 0; i < missingZeros; i++) {
+                            #          resultBuilder.push('0');
+                            #       }
+                            #       resultBuilder.push(hexString);
+                            #       return resultBuilder.join('');
+                            #     };
+                            #
+                            #     // ...
+                          "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                          "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                              # the final pixel color is defined by the equation:
+                              #
+                              #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                              #
+                              # This means that a value of 1.0 corresponds to a solid color, whereas
+                              # a value of 0.0 corresponds to a completely transparent color. This
+                              # uses a wrapper message rather than a simple float scalar so that it is
+                              # possible to distinguish between a default value and the value being unset.
+                              # If omitted, this color object is to be rendered as a solid color
+                              # (as if the alpha value had been explicitly given with a value of 1.0).
+                          "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                          "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                        },
+                        "bold": True or False, # True if the text is bold.
+                        "strikethrough": True or False, # True if the text has a strikethrough.
+                        "fontFamily": "A String", # The font family.
+                        "fontSize": 42, # The size of the font.
+                        "italic": True or False, # True if the text is italicized.
+                        "underline": True or False, # True if the text is underlined.
+                      },
+                      "hyperlinkDisplayType": "A String", # How a hyperlink, if it exists, should be displayed in the cell.
+                      "borders": { # The borders of the cell. # The borders of the cell.
+                        "top": { # A border along a cell. # The top border of the cell.
+                          "color": { # Represents a color in the RGBA color space. This representation is designed # The color of the border.
+                              # for simplicity of conversion to/from color representations in various
+                              # languages over compactness; for example, the fields of this representation
+                              # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                              # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                              # method in iOS; and, with just a little work, it can be easily formatted into
+                              # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                              #
+                              # Example (Java):
+                              #
+                              #      import com.google.type.Color;
+                              #
+                              #      // ...
+                              #      public static java.awt.Color fromProto(Color protocolor) {
+                              #        float alpha = protocolor.hasAlpha()
+                              #            ? protocolor.getAlpha().getValue()
+                              #            : 1.0;
+                              #
+                              #        return new java.awt.Color(
+                              #            protocolor.getRed(),
+                              #            protocolor.getGreen(),
+                              #            protocolor.getBlue(),
+                              #            alpha);
+                              #      }
+                              #
+                              #      public static Color toProto(java.awt.Color color) {
+                              #        float red = (float) color.getRed();
+                              #        float green = (float) color.getGreen();
+                              #        float blue = (float) color.getBlue();
+                              #        float denominator = 255.0;
+                              #        Color.Builder resultBuilder =
+                              #            Color
+                              #                .newBuilder()
+                              #                .setRed(red / denominator)
+                              #                .setGreen(green / denominator)
+                              #                .setBlue(blue / denominator);
+                              #        int alpha = color.getAlpha();
+                              #        if (alpha != 255) {
+                              #          result.setAlpha(
+                              #              FloatValue
+                              #                  .newBuilder()
+                              #                  .setValue(((float) alpha) / denominator)
+                              #                  .build());
+                              #        }
+                              #        return resultBuilder.build();
+                              #      }
+                              #      // ...
+                              #
+                              # Example (iOS / Obj-C):
+                              #
+                              #      // ...
+                              #      static UIColor* fromProto(Color* protocolor) {
+                              #         float red = [protocolor red];
+                              #         float green = [protocolor green];
+                              #         float blue = [protocolor blue];
+                              #         FloatValue* alpha_wrapper = [protocolor alpha];
+                              #         float alpha = 1.0;
+                              #         if (alpha_wrapper != nil) {
+                              #           alpha = [alpha_wrapper value];
+                              #         }
+                              #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                              #      }
+                              #
+                              #      static Color* toProto(UIColor* color) {
+                              #          CGFloat red, green, blue, alpha;
+                              #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                              #            return nil;
+                              #          }
+                              #          Color* result = [Color alloc] init];
+                              #          [result setRed:red];
+                              #          [result setGreen:green];
+                              #          [result setBlue:blue];
+                              #          if (alpha <= 0.9999) {
+                              #            [result setAlpha:floatWrapperWithValue(alpha)];
+                              #          }
+                              #          [result autorelease];
+                              #          return result;
+                              #     }
+                              #     // ...
+                              #
+                              #  Example (JavaScript):
+                              #
+                              #     // ...
+                              #
+                              #     var protoToCssColor = function(rgb_color) {
+                              #        var redFrac = rgb_color.red || 0.0;
+                              #        var greenFrac = rgb_color.green || 0.0;
+                              #        var blueFrac = rgb_color.blue || 0.0;
+                              #        var red = Math.floor(redFrac * 255);
+                              #        var green = Math.floor(greenFrac * 255);
+                              #        var blue = Math.floor(blueFrac * 255);
+                              #
+                              #        if (!('alpha' in rgb_color)) {
+                              #           return rgbToCssColor_(red, green, blue);
+                              #        }
+                              #
+                              #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                              #        var rgbParams = [red, green, blue].join(',');
+                              #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                              #     };
+                              #
+                              #     var rgbToCssColor_ = function(red, green, blue) {
+                              #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                              #       var hexString = rgbNumber.toString(16);
+                              #       var missingZeros = 6 - hexString.length;
+                              #       var resultBuilder = ['#'];
+                              #       for (var i = 0; i < missingZeros; i++) {
+                              #          resultBuilder.push('0');
+                              #       }
+                              #       resultBuilder.push(hexString);
+                              #       return resultBuilder.join('');
+                              #     };
+                              #
+                              #     // ...
+                            "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                            "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                                # the final pixel color is defined by the equation:
+                                #
+                                #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                                #
+                                # This means that a value of 1.0 corresponds to a solid color, whereas
+                                # a value of 0.0 corresponds to a completely transparent color. This
+                                # uses a wrapper message rather than a simple float scalar so that it is
+                                # possible to distinguish between a default value and the value being unset.
+                                # If omitted, this color object is to be rendered as a solid color
+                                # (as if the alpha value had been explicitly given with a value of 1.0).
+                            "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                            "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                          },
+                          "width": 42, # The width of the border, in pixels.
+                              # Border widths must be between 0 and 3 pixels.
+                          "style": "A String", # The style of the border.
+                        },
+                        "right": { # A border along a cell. # The right border of the cell.
+                          "color": { # Represents a color in the RGBA color space. This representation is designed # The color of the border.
+                              # for simplicity of conversion to/from color representations in various
+                              # languages over compactness; for example, the fields of this representation
+                              # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                              # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                              # method in iOS; and, with just a little work, it can be easily formatted into
+                              # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                              #
+                              # Example (Java):
+                              #
+                              #      import com.google.type.Color;
+                              #
+                              #      // ...
+                              #      public static java.awt.Color fromProto(Color protocolor) {
+                              #        float alpha = protocolor.hasAlpha()
+                              #            ? protocolor.getAlpha().getValue()
+                              #            : 1.0;
+                              #
+                              #        return new java.awt.Color(
+                              #            protocolor.getRed(),
+                              #            protocolor.getGreen(),
+                              #            protocolor.getBlue(),
+                              #            alpha);
+                              #      }
+                              #
+                              #      public static Color toProto(java.awt.Color color) {
+                              #        float red = (float) color.getRed();
+                              #        float green = (float) color.getGreen();
+                              #        float blue = (float) color.getBlue();
+                              #        float denominator = 255.0;
+                              #        Color.Builder resultBuilder =
+                              #            Color
+                              #                .newBuilder()
+                              #                .setRed(red / denominator)
+                              #                .setGreen(green / denominator)
+                              #                .setBlue(blue / denominator);
+                              #        int alpha = color.getAlpha();
+                              #        if (alpha != 255) {
+                              #          result.setAlpha(
+                              #              FloatValue
+                              #                  .newBuilder()
+                              #                  .setValue(((float) alpha) / denominator)
+                              #                  .build());
+                              #        }
+                              #        return resultBuilder.build();
+                              #      }
+                              #      // ...
+                              #
+                              # Example (iOS / Obj-C):
+                              #
+                              #      // ...
+                              #      static UIColor* fromProto(Color* protocolor) {
+                              #         float red = [protocolor red];
+                              #         float green = [protocolor green];
+                              #         float blue = [protocolor blue];
+                              #         FloatValue* alpha_wrapper = [protocolor alpha];
+                              #         float alpha = 1.0;
+                              #         if (alpha_wrapper != nil) {
+                              #           alpha = [alpha_wrapper value];
+                              #         }
+                              #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                              #      }
+                              #
+                              #      static Color* toProto(UIColor* color) {
+                              #          CGFloat red, green, blue, alpha;
+                              #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                              #            return nil;
+                              #          }
+                              #          Color* result = [Color alloc] init];
+                              #          [result setRed:red];
+                              #          [result setGreen:green];
+                              #          [result setBlue:blue];
+                              #          if (alpha <= 0.9999) {
+                              #            [result setAlpha:floatWrapperWithValue(alpha)];
+                              #          }
+                              #          [result autorelease];
+                              #          return result;
+                              #     }
+                              #     // ...
+                              #
+                              #  Example (JavaScript):
+                              #
+                              #     // ...
+                              #
+                              #     var protoToCssColor = function(rgb_color) {
+                              #        var redFrac = rgb_color.red || 0.0;
+                              #        var greenFrac = rgb_color.green || 0.0;
+                              #        var blueFrac = rgb_color.blue || 0.0;
+                              #        var red = Math.floor(redFrac * 255);
+                              #        var green = Math.floor(greenFrac * 255);
+                              #        var blue = Math.floor(blueFrac * 255);
+                              #
+                              #        if (!('alpha' in rgb_color)) {
+                              #           return rgbToCssColor_(red, green, blue);
+                              #        }
+                              #
+                              #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                              #        var rgbParams = [red, green, blue].join(',');
+                              #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                              #     };
+                              #
+                              #     var rgbToCssColor_ = function(red, green, blue) {
+                              #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                              #       var hexString = rgbNumber.toString(16);
+                              #       var missingZeros = 6 - hexString.length;
+                              #       var resultBuilder = ['#'];
+                              #       for (var i = 0; i < missingZeros; i++) {
+                              #          resultBuilder.push('0');
+                              #       }
+                              #       resultBuilder.push(hexString);
+                              #       return resultBuilder.join('');
+                              #     };
+                              #
+                              #     // ...
+                            "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                            "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                                # the final pixel color is defined by the equation:
+                                #
+                                #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                                #
+                                # This means that a value of 1.0 corresponds to a solid color, whereas
+                                # a value of 0.0 corresponds to a completely transparent color. This
+                                # uses a wrapper message rather than a simple float scalar so that it is
+                                # possible to distinguish between a default value and the value being unset.
+                                # If omitted, this color object is to be rendered as a solid color
+                                # (as if the alpha value had been explicitly given with a value of 1.0).
+                            "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                            "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                          },
+                          "width": 42, # The width of the border, in pixels.
+                              # Border widths must be between 0 and 3 pixels.
+                          "style": "A String", # The style of the border.
+                        },
+                        "bottom": { # A border along a cell. # The bottom border of the cell.
+                          "color": { # Represents a color in the RGBA color space. This representation is designed # The color of the border.
+                              # for simplicity of conversion to/from color representations in various
+                              # languages over compactness; for example, the fields of this representation
+                              # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                              # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                              # method in iOS; and, with just a little work, it can be easily formatted into
+                              # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                              #
+                              # Example (Java):
+                              #
+                              #      import com.google.type.Color;
+                              #
+                              #      // ...
+                              #      public static java.awt.Color fromProto(Color protocolor) {
+                              #        float alpha = protocolor.hasAlpha()
+                              #            ? protocolor.getAlpha().getValue()
+                              #            : 1.0;
+                              #
+                              #        return new java.awt.Color(
+                              #            protocolor.getRed(),
+                              #            protocolor.getGreen(),
+                              #            protocolor.getBlue(),
+                              #            alpha);
+                              #      }
+                              #
+                              #      public static Color toProto(java.awt.Color color) {
+                              #        float red = (float) color.getRed();
+                              #        float green = (float) color.getGreen();
+                              #        float blue = (float) color.getBlue();
+                              #        float denominator = 255.0;
+                              #        Color.Builder resultBuilder =
+                              #            Color
+                              #                .newBuilder()
+                              #                .setRed(red / denominator)
+                              #                .setGreen(green / denominator)
+                              #                .setBlue(blue / denominator);
+                              #        int alpha = color.getAlpha();
+                              #        if (alpha != 255) {
+                              #          result.setAlpha(
+                              #              FloatValue
+                              #                  .newBuilder()
+                              #                  .setValue(((float) alpha) / denominator)
+                              #                  .build());
+                              #        }
+                              #        return resultBuilder.build();
+                              #      }
+                              #      // ...
+                              #
+                              # Example (iOS / Obj-C):
+                              #
+                              #      // ...
+                              #      static UIColor* fromProto(Color* protocolor) {
+                              #         float red = [protocolor red];
+                              #         float green = [protocolor green];
+                              #         float blue = [protocolor blue];
+                              #         FloatValue* alpha_wrapper = [protocolor alpha];
+                              #         float alpha = 1.0;
+                              #         if (alpha_wrapper != nil) {
+                              #           alpha = [alpha_wrapper value];
+                              #         }
+                              #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                              #      }
+                              #
+                              #      static Color* toProto(UIColor* color) {
+                              #          CGFloat red, green, blue, alpha;
+                              #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                              #            return nil;
+                              #          }
+                              #          Color* result = [Color alloc] init];
+                              #          [result setRed:red];
+                              #          [result setGreen:green];
+                              #          [result setBlue:blue];
+                              #          if (alpha <= 0.9999) {
+                              #            [result setAlpha:floatWrapperWithValue(alpha)];
+                              #          }
+                              #          [result autorelease];
+                              #          return result;
+                              #     }
+                              #     // ...
+                              #
+                              #  Example (JavaScript):
+                              #
+                              #     // ...
+                              #
+                              #     var protoToCssColor = function(rgb_color) {
+                              #        var redFrac = rgb_color.red || 0.0;
+                              #        var greenFrac = rgb_color.green || 0.0;
+                              #        var blueFrac = rgb_color.blue || 0.0;
+                              #        var red = Math.floor(redFrac * 255);
+                              #        var green = Math.floor(greenFrac * 255);
+                              #        var blue = Math.floor(blueFrac * 255);
+                              #
+                              #        if (!('alpha' in rgb_color)) {
+                              #           return rgbToCssColor_(red, green, blue);
+                              #        }
+                              #
+                              #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                              #        var rgbParams = [red, green, blue].join(',');
+                              #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                              #     };
+                              #
+                              #     var rgbToCssColor_ = function(red, green, blue) {
+                              #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                              #       var hexString = rgbNumber.toString(16);
+                              #       var missingZeros = 6 - hexString.length;
+                              #       var resultBuilder = ['#'];
+                              #       for (var i = 0; i < missingZeros; i++) {
+                              #          resultBuilder.push('0');
+                              #       }
+                              #       resultBuilder.push(hexString);
+                              #       return resultBuilder.join('');
+                              #     };
+                              #
+                              #     // ...
+                            "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                            "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                                # the final pixel color is defined by the equation:
+                                #
+                                #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                                #
+                                # This means that a value of 1.0 corresponds to a solid color, whereas
+                                # a value of 0.0 corresponds to a completely transparent color. This
+                                # uses a wrapper message rather than a simple float scalar so that it is
+                                # possible to distinguish between a default value and the value being unset.
+                                # If omitted, this color object is to be rendered as a solid color
+                                # (as if the alpha value had been explicitly given with a value of 1.0).
+                            "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                            "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                          },
+                          "width": 42, # The width of the border, in pixels.
+                              # Border widths must be between 0 and 3 pixels.
+                          "style": "A String", # The style of the border.
+                        },
+                        "left": { # A border along a cell. # The left border of the cell.
+                          "color": { # Represents a color in the RGBA color space. This representation is designed # The color of the border.
+                              # for simplicity of conversion to/from color representations in various
+                              # languages over compactness; for example, the fields of this representation
+                              # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                              # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                              # method in iOS; and, with just a little work, it can be easily formatted into
+                              # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                              #
+                              # Example (Java):
+                              #
+                              #      import com.google.type.Color;
+                              #
+                              #      // ...
+                              #      public static java.awt.Color fromProto(Color protocolor) {
+                              #        float alpha = protocolor.hasAlpha()
+                              #            ? protocolor.getAlpha().getValue()
+                              #            : 1.0;
+                              #
+                              #        return new java.awt.Color(
+                              #            protocolor.getRed(),
+                              #            protocolor.getGreen(),
+                              #            protocolor.getBlue(),
+                              #            alpha);
+                              #      }
+                              #
+                              #      public static Color toProto(java.awt.Color color) {
+                              #        float red = (float) color.getRed();
+                              #        float green = (float) color.getGreen();
+                              #        float blue = (float) color.getBlue();
+                              #        float denominator = 255.0;
+                              #        Color.Builder resultBuilder =
+                              #            Color
+                              #                .newBuilder()
+                              #                .setRed(red / denominator)
+                              #                .setGreen(green / denominator)
+                              #                .setBlue(blue / denominator);
+                              #        int alpha = color.getAlpha();
+                              #        if (alpha != 255) {
+                              #          result.setAlpha(
+                              #              FloatValue
+                              #                  .newBuilder()
+                              #                  .setValue(((float) alpha) / denominator)
+                              #                  .build());
+                              #        }
+                              #        return resultBuilder.build();
+                              #      }
+                              #      // ...
+                              #
+                              # Example (iOS / Obj-C):
+                              #
+                              #      // ...
+                              #      static UIColor* fromProto(Color* protocolor) {
+                              #         float red = [protocolor red];
+                              #         float green = [protocolor green];
+                              #         float blue = [protocolor blue];
+                              #         FloatValue* alpha_wrapper = [protocolor alpha];
+                              #         float alpha = 1.0;
+                              #         if (alpha_wrapper != nil) {
+                              #           alpha = [alpha_wrapper value];
+                              #         }
+                              #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                              #      }
+                              #
+                              #      static Color* toProto(UIColor* color) {
+                              #          CGFloat red, green, blue, alpha;
+                              #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                              #            return nil;
+                              #          }
+                              #          Color* result = [Color alloc] init];
+                              #          [result setRed:red];
+                              #          [result setGreen:green];
+                              #          [result setBlue:blue];
+                              #          if (alpha <= 0.9999) {
+                              #            [result setAlpha:floatWrapperWithValue(alpha)];
+                              #          }
+                              #          [result autorelease];
+                              #          return result;
+                              #     }
+                              #     // ...
+                              #
+                              #  Example (JavaScript):
+                              #
+                              #     // ...
+                              #
+                              #     var protoToCssColor = function(rgb_color) {
+                              #        var redFrac = rgb_color.red || 0.0;
+                              #        var greenFrac = rgb_color.green || 0.0;
+                              #        var blueFrac = rgb_color.blue || 0.0;
+                              #        var red = Math.floor(redFrac * 255);
+                              #        var green = Math.floor(greenFrac * 255);
+                              #        var blue = Math.floor(blueFrac * 255);
+                              #
+                              #        if (!('alpha' in rgb_color)) {
+                              #           return rgbToCssColor_(red, green, blue);
+                              #        }
+                              #
+                              #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                              #        var rgbParams = [red, green, blue].join(',');
+                              #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                              #     };
+                              #
+                              #     var rgbToCssColor_ = function(red, green, blue) {
+                              #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                              #       var hexString = rgbNumber.toString(16);
+                              #       var missingZeros = 6 - hexString.length;
+                              #       var resultBuilder = ['#'];
+                              #       for (var i = 0; i < missingZeros; i++) {
+                              #          resultBuilder.push('0');
+                              #       }
+                              #       resultBuilder.push(hexString);
+                              #       return resultBuilder.join('');
+                              #     };
+                              #
+                              #     // ...
+                            "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                            "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                                # the final pixel color is defined by the equation:
+                                #
+                                #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                                #
+                                # This means that a value of 1.0 corresponds to a solid color, whereas
+                                # a value of 0.0 corresponds to a completely transparent color. This
+                                # uses a wrapper message rather than a simple float scalar so that it is
+                                # possible to distinguish between a default value and the value being unset.
+                                # If omitted, this color object is to be rendered as a solid color
+                                # (as if the alpha value had been explicitly given with a value of 1.0).
+                            "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                            "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                          },
+                          "width": 42, # The width of the border, in pixels.
+                              # Border widths must be between 0 and 3 pixels.
+                          "style": "A String", # The style of the border.
+                        },
+                      },
+                      "wrapStrategy": "A String", # The wrap strategy for the value in the cell.
+                    },
+                    "dataValidation": { # A data validation rule. # A data validation rule on the cell, if any.
+                        #
+                        # When writing, the new data validation rule will overwrite any prior rule.
+                      "showCustomUi": True or False, # True if the UI should be customized based on the kind of condition.
+                          # If true, "List" conditions will show a dropdown.
+                      "strict": True or False, # True if invalid data should be rejected.
+                      "inputMessage": "A String", # A message to show the user when adding data to the cell.
+                      "condition": { # A condition that can evaluate to true or false. # The condition that data in the cell must match.
+                          # BooleanConditions are used by conditional formatting,
+                          # data validation, and the criteria in filters.
+                        "type": "A String", # The type of condition.
+                        "values": [ # The values of the condition. The number of supported values depends
+                            # on the condition type.  Some support zero values,
+                            # others one or two values,
+                            # and ConditionType.ONE_OF_LIST supports an arbitrary number of values.
+                          { # The value of the condition.
+                            "relativeDate": "A String", # A relative date (based on the current date).
+                                # Valid only if the type is
+                                # DATE_BEFORE,
+                                # DATE_AFTER,
+                                # DATE_ON_OR_BEFORE or
+                                # DATE_ON_OR_AFTER.
+                                #
+                                # Relative dates are not supported in data validation.
+                                # They are supported only in conditional formatting and
+                                # conditional filters.
+                            "userEnteredValue": "A String", # A value the condition is based on.
+                                # The value will be parsed as if the user typed into a cell.
+                                # Formulas are supported (and must begin with an `=`).
+                          },
+                        ],
+                      },
+                    },
+                    "textFormatRuns": [ # Runs of rich text applied to subsections of the cell.
+                        # Runs start at specific indexes in the text and continue until the next
+                        # run. Properties of a run will continue unless explicitly changed
+                        # in a subsequent run (and properties of the first run will continue
+                        # the properties of the cell unless explicitly changed).
+                        #
+                        # When writing, the new runs will overwrite any prior runs.
+                      { # A run of a text format. The format of this run continues until explicitly
+                          # overridden in the next run.
+                          # When updating, all fields must be set.
+                        "startIndex": 42, # The character index where this run starts.
+                        "format": { # The format of a run of text in a cell. # The format of this run.  Absent values inherit the cell's format.
+                            # Absent values indicate that the field isn't specified.
+                          "foregroundColor": { # Represents a color in the RGBA color space. This representation is designed # The foreground color of the text.
+                              # for simplicity of conversion to/from color representations in various
+                              # languages over compactness; for example, the fields of this representation
+                              # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                              # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                              # method in iOS; and, with just a little work, it can be easily formatted into
+                              # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                              #
+                              # Example (Java):
+                              #
+                              #      import com.google.type.Color;
+                              #
+                              #      // ...
+                              #      public static java.awt.Color fromProto(Color protocolor) {
+                              #        float alpha = protocolor.hasAlpha()
+                              #            ? protocolor.getAlpha().getValue()
+                              #            : 1.0;
+                              #
+                              #        return new java.awt.Color(
+                              #            protocolor.getRed(),
+                              #            protocolor.getGreen(),
+                              #            protocolor.getBlue(),
+                              #            alpha);
+                              #      }
+                              #
+                              #      public static Color toProto(java.awt.Color color) {
+                              #        float red = (float) color.getRed();
+                              #        float green = (float) color.getGreen();
+                              #        float blue = (float) color.getBlue();
+                              #        float denominator = 255.0;
+                              #        Color.Builder resultBuilder =
+                              #            Color
+                              #                .newBuilder()
+                              #                .setRed(red / denominator)
+                              #                .setGreen(green / denominator)
+                              #                .setBlue(blue / denominator);
+                              #        int alpha = color.getAlpha();
+                              #        if (alpha != 255) {
+                              #          result.setAlpha(
+                              #              FloatValue
+                              #                  .newBuilder()
+                              #                  .setValue(((float) alpha) / denominator)
+                              #                  .build());
+                              #        }
+                              #        return resultBuilder.build();
+                              #      }
+                              #      // ...
+                              #
+                              # Example (iOS / Obj-C):
+                              #
+                              #      // ...
+                              #      static UIColor* fromProto(Color* protocolor) {
+                              #         float red = [protocolor red];
+                              #         float green = [protocolor green];
+                              #         float blue = [protocolor blue];
+                              #         FloatValue* alpha_wrapper = [protocolor alpha];
+                              #         float alpha = 1.0;
+                              #         if (alpha_wrapper != nil) {
+                              #           alpha = [alpha_wrapper value];
+                              #         }
+                              #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                              #      }
+                              #
+                              #      static Color* toProto(UIColor* color) {
+                              #          CGFloat red, green, blue, alpha;
+                              #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                              #            return nil;
+                              #          }
+                              #          Color* result = [Color alloc] init];
+                              #          [result setRed:red];
+                              #          [result setGreen:green];
+                              #          [result setBlue:blue];
+                              #          if (alpha <= 0.9999) {
+                              #            [result setAlpha:floatWrapperWithValue(alpha)];
+                              #          }
+                              #          [result autorelease];
+                              #          return result;
+                              #     }
+                              #     // ...
+                              #
+                              #  Example (JavaScript):
+                              #
+                              #     // ...
+                              #
+                              #     var protoToCssColor = function(rgb_color) {
+                              #        var redFrac = rgb_color.red || 0.0;
+                              #        var greenFrac = rgb_color.green || 0.0;
+                              #        var blueFrac = rgb_color.blue || 0.0;
+                              #        var red = Math.floor(redFrac * 255);
+                              #        var green = Math.floor(greenFrac * 255);
+                              #        var blue = Math.floor(blueFrac * 255);
+                              #
+                              #        if (!('alpha' in rgb_color)) {
+                              #           return rgbToCssColor_(red, green, blue);
+                              #        }
+                              #
+                              #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                              #        var rgbParams = [red, green, blue].join(',');
+                              #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                              #     };
+                              #
+                              #     var rgbToCssColor_ = function(red, green, blue) {
+                              #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                              #       var hexString = rgbNumber.toString(16);
+                              #       var missingZeros = 6 - hexString.length;
+                              #       var resultBuilder = ['#'];
+                              #       for (var i = 0; i < missingZeros; i++) {
+                              #          resultBuilder.push('0');
+                              #       }
+                              #       resultBuilder.push(hexString);
+                              #       return resultBuilder.join('');
+                              #     };
+                              #
+                              #     // ...
+                            "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                            "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                                # the final pixel color is defined by the equation:
+                                #
+                                #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                                #
+                                # This means that a value of 1.0 corresponds to a solid color, whereas
+                                # a value of 0.0 corresponds to a completely transparent color. This
+                                # uses a wrapper message rather than a simple float scalar so that it is
+                                # possible to distinguish between a default value and the value being unset.
+                                # If omitted, this color object is to be rendered as a solid color
+                                # (as if the alpha value had been explicitly given with a value of 1.0).
+                            "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                            "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                          },
+                          "bold": True or False, # True if the text is bold.
+                          "strikethrough": True or False, # True if the text has a strikethrough.
+                          "fontFamily": "A String", # The font family.
+                          "fontSize": 42, # The size of the font.
+                          "italic": True or False, # True if the text is italicized.
+                          "underline": True or False, # True if the text is underlined.
+                        },
+                      },
+                    ],
+                  },
+                ],
+              },
+            ],
+          },
+        ],
+        "properties": { # Properties of a sheet. # The properties of the sheet.
+          "sheetType": "A String", # The type of sheet. Defaults to GRID.
+              # This field cannot be changed once set.
+          "index": 42, # The index of the sheet within the spreadsheet.
+              # When adding or updating sheet properties, if this field
+              # is excluded then the sheet will be added or moved to the end
+              # of the sheet list.
+          "title": "A String", # The name of the sheet.
+          "gridProperties": { # Properties of a grid. # Additional properties of the sheet if this sheet is a grid.
+              # (If the sheet is an object sheet, containing a chart or image, then
+              # this field will be absent.)
+              # When writing it is an error to set any grid properties on non-grid sheets.
+            "columnCount": 42, # The number of columns in the grid.
+            "rowCount": 42, # The number of rows in the grid.
+            "frozenColumnCount": 42, # The number of columns that are frozen in the grid.
+            "hideGridlines": True or False, # True if the grid isn't showing gridlines in the UI.
+            "frozenRowCount": 42, # The number of rows that are frozen in the grid.
+          },
+          "rightToLeft": True or False, # True if the sheet is an RTL sheet instead of an LTR sheet.
+          "tabColor": { # Represents a color in the RGBA color space. This representation is designed # The color of the tab in the UI.
+              # for simplicity of conversion to/from color representations in various
+              # languages over compactness; for example, the fields of this representation
+              # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+              # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+              # method in iOS; and, with just a little work, it can be easily formatted into
+              # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+              #
+              # Example (Java):
+              #
+              #      import com.google.type.Color;
+              #
+              #      // ...
+              #      public static java.awt.Color fromProto(Color protocolor) {
+              #        float alpha = protocolor.hasAlpha()
+              #            ? protocolor.getAlpha().getValue()
+              #            : 1.0;
+              #
+              #        return new java.awt.Color(
+              #            protocolor.getRed(),
+              #            protocolor.getGreen(),
+              #            protocolor.getBlue(),
+              #            alpha);
+              #      }
+              #
+              #      public static Color toProto(java.awt.Color color) {
+              #        float red = (float) color.getRed();
+              #        float green = (float) color.getGreen();
+              #        float blue = (float) color.getBlue();
+              #        float denominator = 255.0;
+              #        Color.Builder resultBuilder =
+              #            Color
+              #                .newBuilder()
+              #                .setRed(red / denominator)
+              #                .setGreen(green / denominator)
+              #                .setBlue(blue / denominator);
+              #        int alpha = color.getAlpha();
+              #        if (alpha != 255) {
+              #          result.setAlpha(
+              #              FloatValue
+              #                  .newBuilder()
+              #                  .setValue(((float) alpha) / denominator)
+              #                  .build());
+              #        }
+              #        return resultBuilder.build();
+              #      }
+              #      // ...
+              #
+              # Example (iOS / Obj-C):
+              #
+              #      // ...
+              #      static UIColor* fromProto(Color* protocolor) {
+              #         float red = [protocolor red];
+              #         float green = [protocolor green];
+              #         float blue = [protocolor blue];
+              #         FloatValue* alpha_wrapper = [protocolor alpha];
+              #         float alpha = 1.0;
+              #         if (alpha_wrapper != nil) {
+              #           alpha = [alpha_wrapper value];
+              #         }
+              #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+              #      }
+              #
+              #      static Color* toProto(UIColor* color) {
+              #          CGFloat red, green, blue, alpha;
+              #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+              #            return nil;
+              #          }
+              #          Color* result = [Color alloc] init];
+              #          [result setRed:red];
+              #          [result setGreen:green];
+              #          [result setBlue:blue];
+              #          if (alpha <= 0.9999) {
+              #            [result setAlpha:floatWrapperWithValue(alpha)];
+              #          }
+              #          [result autorelease];
+              #          return result;
+              #     }
+              #     // ...
+              #
+              #  Example (JavaScript):
+              #
+              #     // ...
+              #
+              #     var protoToCssColor = function(rgb_color) {
+              #        var redFrac = rgb_color.red || 0.0;
+              #        var greenFrac = rgb_color.green || 0.0;
+              #        var blueFrac = rgb_color.blue || 0.0;
+              #        var red = Math.floor(redFrac * 255);
+              #        var green = Math.floor(greenFrac * 255);
+              #        var blue = Math.floor(blueFrac * 255);
+              #
+              #        if (!('alpha' in rgb_color)) {
+              #           return rgbToCssColor_(red, green, blue);
+              #        }
+              #
+              #        var alphaFrac = rgb_color.alpha.value || 0.0;
+              #        var rgbParams = [red, green, blue].join(',');
+              #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+              #     };
+              #
+              #     var rgbToCssColor_ = function(red, green, blue) {
+              #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+              #       var hexString = rgbNumber.toString(16);
+              #       var missingZeros = 6 - hexString.length;
+              #       var resultBuilder = ['#'];
+              #       for (var i = 0; i < missingZeros; i++) {
+              #          resultBuilder.push('0');
+              #       }
+              #       resultBuilder.push(hexString);
+              #       return resultBuilder.join('');
+              #     };
+              #
+              #     // ...
+            "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+            "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                # the final pixel color is defined by the equation:
+                #
+                #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                #
+                # This means that a value of 1.0 corresponds to a solid color, whereas
+                # a value of 0.0 corresponds to a completely transparent color. This
+                # uses a wrapper message rather than a simple float scalar so that it is
+                # possible to distinguish between a default value and the value being unset.
+                # If omitted, this color object is to be rendered as a solid color
+                # (as if the alpha value had been explicitly given with a value of 1.0).
+            "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+            "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+          },
+          "hidden": True or False, # True if the sheet is hidden in the UI, false if it's visible.
+          "sheetId": 42, # The ID of the sheet. Must be non-negative.
+              # This field cannot be changed once set.
+        },
+      },
+    ],
+  }
+
+  x__xgafv: string, V1 error format.
+    Allowed values
+      1 - v1 error format
+      2 - v2 error format
+
+Returns:
+  An object of the form:
+
+    { # Resource that represents a spreadsheet.
+      "spreadsheetId": "A String", # The ID of the spreadsheet.
+          # This field is read-only.
+      "namedRanges": [ # The named ranges defined in a spreadsheet.
+        { # A named range.
+          "namedRangeId": "A String", # The ID of the named range.
+          "range": { # A range on a sheet. # The range this represents.
+              # 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 grid 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.
+            "startRowIndex": 42, # The start row (inclusive) 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.
+            "endColumnIndex": 42, # The end column (exclusive) of the range, or not set if unbounded.
+          },
+          "name": "A String", # The name of the named range.
+        },
+      ],
+      "properties": { # Properties of a spreadsheet. # Overall properties of a spreadsheet.
+        "locale": "A String", # The locale of the spreadsheet in one of the following formats:
+            # * an ISO 639-1 language code such as `en`
+            # * an ISO 639-2 language code such as `fil`, if no 639-1 code exists
+            # * a combination of the ISO language code and country code, such as `en_US`
+            # Note: when updating this field, not all locales/languages are supported.
+        "timeZone": "A String", # The time zone of the spreadsheet, in CLDR format such as
+            # `America/New_York`. If the time zone isn't recognized, this may
+            # be a custom time zone such as `GMT-07:00`.
+        "autoRecalc": "A String", # The amount of time to wait before volatile functions are recalculated.
+        "defaultFormat": { # The format of a cell. # The default format of all cells in the spreadsheet.
+            # CellData.effectiveFormat will not be set if the cell's format is equal
+            # to this default format.
+            # This field is read-only.
+          "numberFormat": { # The number format of a cell. # A format describing how number values should be represented to the user.
+              # When updating, all fields must be set.
+            "pattern": "A String", # Pattern string used for formatting.
+            "type": "A String", # The type of the number format.
+          },
+          "textDirection": "A String", # The direction of the text in the cell.
+          "padding": { # The amount of padding around the cell, in pixels. # The padding of the cell.
+              # When updating padding, every field must be specified.
+            "top": 42, # The top padding of the cell.
+            "right": 42, # The right padding of the cell.
+            "bottom": 42, # The bottom padding of the cell.
+            "left": 42, # The left padding of the cell.
+          },
+          "horizontalAlignment": "A String", # The horizontal alignment of the value in cell.
+          "backgroundColor": { # Represents a color in the RGBA color space. This representation is designed # The background color of the cell.
+              # for simplicity of conversion to/from color representations in various
+              # languages over compactness; for example, the fields of this representation
+              # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+              # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+              # method in iOS; and, with just a little work, it can be easily formatted into
+              # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+              #
+              # Example (Java):
+              #
+              #      import com.google.type.Color;
+              #
+              #      // ...
+              #      public static java.awt.Color fromProto(Color protocolor) {
+              #        float alpha = protocolor.hasAlpha()
+              #            ? protocolor.getAlpha().getValue()
+              #            : 1.0;
+              #
+              #        return new java.awt.Color(
+              #            protocolor.getRed(),
+              #            protocolor.getGreen(),
+              #            protocolor.getBlue(),
+              #            alpha);
+              #      }
+              #
+              #      public static Color toProto(java.awt.Color color) {
+              #        float red = (float) color.getRed();
+              #        float green = (float) color.getGreen();
+              #        float blue = (float) color.getBlue();
+              #        float denominator = 255.0;
+              #        Color.Builder resultBuilder =
+              #            Color
+              #                .newBuilder()
+              #                .setRed(red / denominator)
+              #                .setGreen(green / denominator)
+              #                .setBlue(blue / denominator);
+              #        int alpha = color.getAlpha();
+              #        if (alpha != 255) {
+              #          result.setAlpha(
+              #              FloatValue
+              #                  .newBuilder()
+              #                  .setValue(((float) alpha) / denominator)
+              #                  .build());
+              #        }
+              #        return resultBuilder.build();
+              #      }
+              #      // ...
+              #
+              # Example (iOS / Obj-C):
+              #
+              #      // ...
+              #      static UIColor* fromProto(Color* protocolor) {
+              #         float red = [protocolor red];
+              #         float green = [protocolor green];
+              #         float blue = [protocolor blue];
+              #         FloatValue* alpha_wrapper = [protocolor alpha];
+              #         float alpha = 1.0;
+              #         if (alpha_wrapper != nil) {
+              #           alpha = [alpha_wrapper value];
+              #         }
+              #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+              #      }
+              #
+              #      static Color* toProto(UIColor* color) {
+              #          CGFloat red, green, blue, alpha;
+              #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+              #            return nil;
+              #          }
+              #          Color* result = [Color alloc] init];
+              #          [result setRed:red];
+              #          [result setGreen:green];
+              #          [result setBlue:blue];
+              #          if (alpha <= 0.9999) {
+              #            [result setAlpha:floatWrapperWithValue(alpha)];
+              #          }
+              #          [result autorelease];
+              #          return result;
+              #     }
+              #     // ...
+              #
+              #  Example (JavaScript):
+              #
+              #     // ...
+              #
+              #     var protoToCssColor = function(rgb_color) {
+              #        var redFrac = rgb_color.red || 0.0;
+              #        var greenFrac = rgb_color.green || 0.0;
+              #        var blueFrac = rgb_color.blue || 0.0;
+              #        var red = Math.floor(redFrac * 255);
+              #        var green = Math.floor(greenFrac * 255);
+              #        var blue = Math.floor(blueFrac * 255);
+              #
+              #        if (!('alpha' in rgb_color)) {
+              #           return rgbToCssColor_(red, green, blue);
+              #        }
+              #
+              #        var alphaFrac = rgb_color.alpha.value || 0.0;
+              #        var rgbParams = [red, green, blue].join(',');
+              #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+              #     };
+              #
+              #     var rgbToCssColor_ = function(red, green, blue) {
+              #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+              #       var hexString = rgbNumber.toString(16);
+              #       var missingZeros = 6 - hexString.length;
+              #       var resultBuilder = ['#'];
+              #       for (var i = 0; i < missingZeros; i++) {
+              #          resultBuilder.push('0');
+              #       }
+              #       resultBuilder.push(hexString);
+              #       return resultBuilder.join('');
+              #     };
+              #
+              #     // ...
+            "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+            "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                # the final pixel color is defined by the equation:
+                #
+                #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                #
+                # This means that a value of 1.0 corresponds to a solid color, whereas
+                # a value of 0.0 corresponds to a completely transparent color. This
+                # uses a wrapper message rather than a simple float scalar so that it is
+                # possible to distinguish between a default value and the value being unset.
+                # If omitted, this color object is to be rendered as a solid color
+                # (as if the alpha value had been explicitly given with a value of 1.0).
+            "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+            "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+          },
+          "verticalAlignment": "A String", # The vertical alignment of the value in cell.
+          "textFormat": { # The format of a run of text in a cell. # The format of the text in the cell (unless overridden by a format run).
+              # Absent values indicate that the field isn't specified.
+            "foregroundColor": { # Represents a color in the RGBA color space. This representation is designed # The foreground color of the text.
+                # for simplicity of conversion to/from color representations in various
+                # languages over compactness; for example, the fields of this representation
+                # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                # method in iOS; and, with just a little work, it can be easily formatted into
+                # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                #
+                # Example (Java):
+                #
+                #      import com.google.type.Color;
+                #
+                #      // ...
+                #      public static java.awt.Color fromProto(Color protocolor) {
+                #        float alpha = protocolor.hasAlpha()
+                #            ? protocolor.getAlpha().getValue()
+                #            : 1.0;
+                #
+                #        return new java.awt.Color(
+                #            protocolor.getRed(),
+                #            protocolor.getGreen(),
+                #            protocolor.getBlue(),
+                #            alpha);
+                #      }
+                #
+                #      public static Color toProto(java.awt.Color color) {
+                #        float red = (float) color.getRed();
+                #        float green = (float) color.getGreen();
+                #        float blue = (float) color.getBlue();
+                #        float denominator = 255.0;
+                #        Color.Builder resultBuilder =
+                #            Color
+                #                .newBuilder()
+                #                .setRed(red / denominator)
+                #                .setGreen(green / denominator)
+                #                .setBlue(blue / denominator);
+                #        int alpha = color.getAlpha();
+                #        if (alpha != 255) {
+                #          result.setAlpha(
+                #              FloatValue
+                #                  .newBuilder()
+                #                  .setValue(((float) alpha) / denominator)
+                #                  .build());
+                #        }
+                #        return resultBuilder.build();
+                #      }
+                #      // ...
+                #
+                # Example (iOS / Obj-C):
+                #
+                #      // ...
+                #      static UIColor* fromProto(Color* protocolor) {
+                #         float red = [protocolor red];
+                #         float green = [protocolor green];
+                #         float blue = [protocolor blue];
+                #         FloatValue* alpha_wrapper = [protocolor alpha];
+                #         float alpha = 1.0;
+                #         if (alpha_wrapper != nil) {
+                #           alpha = [alpha_wrapper value];
+                #         }
+                #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                #      }
+                #
+                #      static Color* toProto(UIColor* color) {
+                #          CGFloat red, green, blue, alpha;
+                #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                #            return nil;
+                #          }
+                #          Color* result = [Color alloc] init];
+                #          [result setRed:red];
+                #          [result setGreen:green];
+                #          [result setBlue:blue];
+                #          if (alpha <= 0.9999) {
+                #            [result setAlpha:floatWrapperWithValue(alpha)];
+                #          }
+                #          [result autorelease];
+                #          return result;
+                #     }
+                #     // ...
+                #
+                #  Example (JavaScript):
+                #
+                #     // ...
+                #
+                #     var protoToCssColor = function(rgb_color) {
+                #        var redFrac = rgb_color.red || 0.0;
+                #        var greenFrac = rgb_color.green || 0.0;
+                #        var blueFrac = rgb_color.blue || 0.0;
+                #        var red = Math.floor(redFrac * 255);
+                #        var green = Math.floor(greenFrac * 255);
+                #        var blue = Math.floor(blueFrac * 255);
+                #
+                #        if (!('alpha' in rgb_color)) {
+                #           return rgbToCssColor_(red, green, blue);
+                #        }
+                #
+                #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                #        var rgbParams = [red, green, blue].join(',');
+                #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                #     };
+                #
+                #     var rgbToCssColor_ = function(red, green, blue) {
+                #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                #       var hexString = rgbNumber.toString(16);
+                #       var missingZeros = 6 - hexString.length;
+                #       var resultBuilder = ['#'];
+                #       for (var i = 0; i < missingZeros; i++) {
+                #          resultBuilder.push('0');
+                #       }
+                #       resultBuilder.push(hexString);
+                #       return resultBuilder.join('');
+                #     };
+                #
+                #     // ...
+              "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+              "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                  # the final pixel color is defined by the equation:
+                  #
+                  #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                  #
+                  # This means that a value of 1.0 corresponds to a solid color, whereas
+                  # a value of 0.0 corresponds to a completely transparent color. This
+                  # uses a wrapper message rather than a simple float scalar so that it is
+                  # possible to distinguish between a default value and the value being unset.
+                  # If omitted, this color object is to be rendered as a solid color
+                  # (as if the alpha value had been explicitly given with a value of 1.0).
+              "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+              "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+            },
+            "bold": True or False, # True if the text is bold.
+            "strikethrough": True or False, # True if the text has a strikethrough.
+            "fontFamily": "A String", # The font family.
+            "fontSize": 42, # The size of the font.
+            "italic": True or False, # True if the text is italicized.
+            "underline": True or False, # True if the text is underlined.
+          },
+          "hyperlinkDisplayType": "A String", # How a hyperlink, if it exists, should be displayed in the cell.
+          "borders": { # The borders of the cell. # The borders of the cell.
+            "top": { # A border along a cell. # The top border of the cell.
+              "color": { # Represents a color in the RGBA color space. This representation is designed # The color of the border.
+                  # for simplicity of conversion to/from color representations in various
+                  # languages over compactness; for example, the fields of this representation
+                  # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                  # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                  # method in iOS; and, with just a little work, it can be easily formatted into
+                  # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                  #
+                  # Example (Java):
+                  #
+                  #      import com.google.type.Color;
+                  #
+                  #      // ...
+                  #      public static java.awt.Color fromProto(Color protocolor) {
+                  #        float alpha = protocolor.hasAlpha()
+                  #            ? protocolor.getAlpha().getValue()
+                  #            : 1.0;
+                  #
+                  #        return new java.awt.Color(
+                  #            protocolor.getRed(),
+                  #            protocolor.getGreen(),
+                  #            protocolor.getBlue(),
+                  #            alpha);
+                  #      }
+                  #
+                  #      public static Color toProto(java.awt.Color color) {
+                  #        float red = (float) color.getRed();
+                  #        float green = (float) color.getGreen();
+                  #        float blue = (float) color.getBlue();
+                  #        float denominator = 255.0;
+                  #        Color.Builder resultBuilder =
+                  #            Color
+                  #                .newBuilder()
+                  #                .setRed(red / denominator)
+                  #                .setGreen(green / denominator)
+                  #                .setBlue(blue / denominator);
+                  #        int alpha = color.getAlpha();
+                  #        if (alpha != 255) {
+                  #          result.setAlpha(
+                  #              FloatValue
+                  #                  .newBuilder()
+                  #                  .setValue(((float) alpha) / denominator)
+                  #                  .build());
+                  #        }
+                  #        return resultBuilder.build();
+                  #      }
+                  #      // ...
+                  #
+                  # Example (iOS / Obj-C):
+                  #
+                  #      // ...
+                  #      static UIColor* fromProto(Color* protocolor) {
+                  #         float red = [protocolor red];
+                  #         float green = [protocolor green];
+                  #         float blue = [protocolor blue];
+                  #         FloatValue* alpha_wrapper = [protocolor alpha];
+                  #         float alpha = 1.0;
+                  #         if (alpha_wrapper != nil) {
+                  #           alpha = [alpha_wrapper value];
+                  #         }
+                  #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                  #      }
+                  #
+                  #      static Color* toProto(UIColor* color) {
+                  #          CGFloat red, green, blue, alpha;
+                  #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                  #            return nil;
+                  #          }
+                  #          Color* result = [Color alloc] init];
+                  #          [result setRed:red];
+                  #          [result setGreen:green];
+                  #          [result setBlue:blue];
+                  #          if (alpha <= 0.9999) {
+                  #            [result setAlpha:floatWrapperWithValue(alpha)];
+                  #          }
+                  #          [result autorelease];
+                  #          return result;
+                  #     }
+                  #     // ...
+                  #
+                  #  Example (JavaScript):
+                  #
+                  #     // ...
+                  #
+                  #     var protoToCssColor = function(rgb_color) {
+                  #        var redFrac = rgb_color.red || 0.0;
+                  #        var greenFrac = rgb_color.green || 0.0;
+                  #        var blueFrac = rgb_color.blue || 0.0;
+                  #        var red = Math.floor(redFrac * 255);
+                  #        var green = Math.floor(greenFrac * 255);
+                  #        var blue = Math.floor(blueFrac * 255);
+                  #
+                  #        if (!('alpha' in rgb_color)) {
+                  #           return rgbToCssColor_(red, green, blue);
+                  #        }
+                  #
+                  #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                  #        var rgbParams = [red, green, blue].join(',');
+                  #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                  #     };
+                  #
+                  #     var rgbToCssColor_ = function(red, green, blue) {
+                  #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                  #       var hexString = rgbNumber.toString(16);
+                  #       var missingZeros = 6 - hexString.length;
+                  #       var resultBuilder = ['#'];
+                  #       for (var i = 0; i < missingZeros; i++) {
+                  #          resultBuilder.push('0');
+                  #       }
+                  #       resultBuilder.push(hexString);
+                  #       return resultBuilder.join('');
+                  #     };
+                  #
+                  #     // ...
+                "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                    # the final pixel color is defined by the equation:
+                    #
+                    #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                    #
+                    # This means that a value of 1.0 corresponds to a solid color, whereas
+                    # a value of 0.0 corresponds to a completely transparent color. This
+                    # uses a wrapper message rather than a simple float scalar so that it is
+                    # possible to distinguish between a default value and the value being unset.
+                    # If omitted, this color object is to be rendered as a solid color
+                    # (as if the alpha value had been explicitly given with a value of 1.0).
+                "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+              },
+              "width": 42, # The width of the border, in pixels.
+                  # Border widths must be between 0 and 3 pixels.
+              "style": "A String", # The style of the border.
+            },
+            "right": { # A border along a cell. # The right border of the cell.
+              "color": { # Represents a color in the RGBA color space. This representation is designed # The color of the border.
+                  # for simplicity of conversion to/from color representations in various
+                  # languages over compactness; for example, the fields of this representation
+                  # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                  # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                  # method in iOS; and, with just a little work, it can be easily formatted into
+                  # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                  #
+                  # Example (Java):
+                  #
+                  #      import com.google.type.Color;
+                  #
+                  #      // ...
+                  #      public static java.awt.Color fromProto(Color protocolor) {
+                  #        float alpha = protocolor.hasAlpha()
+                  #            ? protocolor.getAlpha().getValue()
+                  #            : 1.0;
+                  #
+                  #        return new java.awt.Color(
+                  #            protocolor.getRed(),
+                  #            protocolor.getGreen(),
+                  #            protocolor.getBlue(),
+                  #            alpha);
+                  #      }
+                  #
+                  #      public static Color toProto(java.awt.Color color) {
+                  #        float red = (float) color.getRed();
+                  #        float green = (float) color.getGreen();
+                  #        float blue = (float) color.getBlue();
+                  #        float denominator = 255.0;
+                  #        Color.Builder resultBuilder =
+                  #            Color
+                  #                .newBuilder()
+                  #                .setRed(red / denominator)
+                  #                .setGreen(green / denominator)
+                  #                .setBlue(blue / denominator);
+                  #        int alpha = color.getAlpha();
+                  #        if (alpha != 255) {
+                  #          result.setAlpha(
+                  #              FloatValue
+                  #                  .newBuilder()
+                  #                  .setValue(((float) alpha) / denominator)
+                  #                  .build());
+                  #        }
+                  #        return resultBuilder.build();
+                  #      }
+                  #      // ...
+                  #
+                  # Example (iOS / Obj-C):
+                  #
+                  #      // ...
+                  #      static UIColor* fromProto(Color* protocolor) {
+                  #         float red = [protocolor red];
+                  #         float green = [protocolor green];
+                  #         float blue = [protocolor blue];
+                  #         FloatValue* alpha_wrapper = [protocolor alpha];
+                  #         float alpha = 1.0;
+                  #         if (alpha_wrapper != nil) {
+                  #           alpha = [alpha_wrapper value];
+                  #         }
+                  #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                  #      }
+                  #
+                  #      static Color* toProto(UIColor* color) {
+                  #          CGFloat red, green, blue, alpha;
+                  #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                  #            return nil;
+                  #          }
+                  #          Color* result = [Color alloc] init];
+                  #          [result setRed:red];
+                  #          [result setGreen:green];
+                  #          [result setBlue:blue];
+                  #          if (alpha <= 0.9999) {
+                  #            [result setAlpha:floatWrapperWithValue(alpha)];
+                  #          }
+                  #          [result autorelease];
+                  #          return result;
+                  #     }
+                  #     // ...
+                  #
+                  #  Example (JavaScript):
+                  #
+                  #     // ...
+                  #
+                  #     var protoToCssColor = function(rgb_color) {
+                  #        var redFrac = rgb_color.red || 0.0;
+                  #        var greenFrac = rgb_color.green || 0.0;
+                  #        var blueFrac = rgb_color.blue || 0.0;
+                  #        var red = Math.floor(redFrac * 255);
+                  #        var green = Math.floor(greenFrac * 255);
+                  #        var blue = Math.floor(blueFrac * 255);
+                  #
+                  #        if (!('alpha' in rgb_color)) {
+                  #           return rgbToCssColor_(red, green, blue);
+                  #        }
+                  #
+                  #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                  #        var rgbParams = [red, green, blue].join(',');
+                  #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                  #     };
+                  #
+                  #     var rgbToCssColor_ = function(red, green, blue) {
+                  #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                  #       var hexString = rgbNumber.toString(16);
+                  #       var missingZeros = 6 - hexString.length;
+                  #       var resultBuilder = ['#'];
+                  #       for (var i = 0; i < missingZeros; i++) {
+                  #          resultBuilder.push('0');
+                  #       }
+                  #       resultBuilder.push(hexString);
+                  #       return resultBuilder.join('');
+                  #     };
+                  #
+                  #     // ...
+                "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                    # the final pixel color is defined by the equation:
+                    #
+                    #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                    #
+                    # This means that a value of 1.0 corresponds to a solid color, whereas
+                    # a value of 0.0 corresponds to a completely transparent color. This
+                    # uses a wrapper message rather than a simple float scalar so that it is
+                    # possible to distinguish between a default value and the value being unset.
+                    # If omitted, this color object is to be rendered as a solid color
+                    # (as if the alpha value had been explicitly given with a value of 1.0).
+                "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+              },
+              "width": 42, # The width of the border, in pixels.
+                  # Border widths must be between 0 and 3 pixels.
+              "style": "A String", # The style of the border.
+            },
+            "bottom": { # A border along a cell. # The bottom border of the cell.
+              "color": { # Represents a color in the RGBA color space. This representation is designed # The color of the border.
+                  # for simplicity of conversion to/from color representations in various
+                  # languages over compactness; for example, the fields of this representation
+                  # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                  # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                  # method in iOS; and, with just a little work, it can be easily formatted into
+                  # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                  #
+                  # Example (Java):
+                  #
+                  #      import com.google.type.Color;
+                  #
+                  #      // ...
+                  #      public static java.awt.Color fromProto(Color protocolor) {
+                  #        float alpha = protocolor.hasAlpha()
+                  #            ? protocolor.getAlpha().getValue()
+                  #            : 1.0;
+                  #
+                  #        return new java.awt.Color(
+                  #            protocolor.getRed(),
+                  #            protocolor.getGreen(),
+                  #            protocolor.getBlue(),
+                  #            alpha);
+                  #      }
+                  #
+                  #      public static Color toProto(java.awt.Color color) {
+                  #        float red = (float) color.getRed();
+                  #        float green = (float) color.getGreen();
+                  #        float blue = (float) color.getBlue();
+                  #        float denominator = 255.0;
+                  #        Color.Builder resultBuilder =
+                  #            Color
+                  #                .newBuilder()
+                  #                .setRed(red / denominator)
+                  #                .setGreen(green / denominator)
+                  #                .setBlue(blue / denominator);
+                  #        int alpha = color.getAlpha();
+                  #        if (alpha != 255) {
+                  #          result.setAlpha(
+                  #              FloatValue
+                  #                  .newBuilder()
+                  #                  .setValue(((float) alpha) / denominator)
+                  #                  .build());
+                  #        }
+                  #        return resultBuilder.build();
+                  #      }
+                  #      // ...
+                  #
+                  # Example (iOS / Obj-C):
+                  #
+                  #      // ...
+                  #      static UIColor* fromProto(Color* protocolor) {
+                  #         float red = [protocolor red];
+                  #         float green = [protocolor green];
+                  #         float blue = [protocolor blue];
+                  #         FloatValue* alpha_wrapper = [protocolor alpha];
+                  #         float alpha = 1.0;
+                  #         if (alpha_wrapper != nil) {
+                  #           alpha = [alpha_wrapper value];
+                  #         }
+                  #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                  #      }
+                  #
+                  #      static Color* toProto(UIColor* color) {
+                  #          CGFloat red, green, blue, alpha;
+                  #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                  #            return nil;
+                  #          }
+                  #          Color* result = [Color alloc] init];
+                  #          [result setRed:red];
+                  #          [result setGreen:green];
+                  #          [result setBlue:blue];
+                  #          if (alpha <= 0.9999) {
+                  #            [result setAlpha:floatWrapperWithValue(alpha)];
+                  #          }
+                  #          [result autorelease];
+                  #          return result;
+                  #     }
+                  #     // ...
+                  #
+                  #  Example (JavaScript):
+                  #
+                  #     // ...
+                  #
+                  #     var protoToCssColor = function(rgb_color) {
+                  #        var redFrac = rgb_color.red || 0.0;
+                  #        var greenFrac = rgb_color.green || 0.0;
+                  #        var blueFrac = rgb_color.blue || 0.0;
+                  #        var red = Math.floor(redFrac * 255);
+                  #        var green = Math.floor(greenFrac * 255);
+                  #        var blue = Math.floor(blueFrac * 255);
+                  #
+                  #        if (!('alpha' in rgb_color)) {
+                  #           return rgbToCssColor_(red, green, blue);
+                  #        }
+                  #
+                  #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                  #        var rgbParams = [red, green, blue].join(',');
+                  #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                  #     };
+                  #
+                  #     var rgbToCssColor_ = function(red, green, blue) {
+                  #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                  #       var hexString = rgbNumber.toString(16);
+                  #       var missingZeros = 6 - hexString.length;
+                  #       var resultBuilder = ['#'];
+                  #       for (var i = 0; i < missingZeros; i++) {
+                  #          resultBuilder.push('0');
+                  #       }
+                  #       resultBuilder.push(hexString);
+                  #       return resultBuilder.join('');
+                  #     };
+                  #
+                  #     // ...
+                "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                    # the final pixel color is defined by the equation:
+                    #
+                    #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                    #
+                    # This means that a value of 1.0 corresponds to a solid color, whereas
+                    # a value of 0.0 corresponds to a completely transparent color. This
+                    # uses a wrapper message rather than a simple float scalar so that it is
+                    # possible to distinguish between a default value and the value being unset.
+                    # If omitted, this color object is to be rendered as a solid color
+                    # (as if the alpha value had been explicitly given with a value of 1.0).
+                "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+              },
+              "width": 42, # The width of the border, in pixels.
+                  # Border widths must be between 0 and 3 pixels.
+              "style": "A String", # The style of the border.
+            },
+            "left": { # A border along a cell. # The left border of the cell.
+              "color": { # Represents a color in the RGBA color space. This representation is designed # The color of the border.
+                  # for simplicity of conversion to/from color representations in various
+                  # languages over compactness; for example, the fields of this representation
+                  # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                  # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                  # method in iOS; and, with just a little work, it can be easily formatted into
+                  # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                  #
+                  # Example (Java):
+                  #
+                  #      import com.google.type.Color;
+                  #
+                  #      // ...
+                  #      public static java.awt.Color fromProto(Color protocolor) {
+                  #        float alpha = protocolor.hasAlpha()
+                  #            ? protocolor.getAlpha().getValue()
+                  #            : 1.0;
+                  #
+                  #        return new java.awt.Color(
+                  #            protocolor.getRed(),
+                  #            protocolor.getGreen(),
+                  #            protocolor.getBlue(),
+                  #            alpha);
+                  #      }
+                  #
+                  #      public static Color toProto(java.awt.Color color) {
+                  #        float red = (float) color.getRed();
+                  #        float green = (float) color.getGreen();
+                  #        float blue = (float) color.getBlue();
+                  #        float denominator = 255.0;
+                  #        Color.Builder resultBuilder =
+                  #            Color
+                  #                .newBuilder()
+                  #                .setRed(red / denominator)
+                  #                .setGreen(green / denominator)
+                  #                .setBlue(blue / denominator);
+                  #        int alpha = color.getAlpha();
+                  #        if (alpha != 255) {
+                  #          result.setAlpha(
+                  #              FloatValue
+                  #                  .newBuilder()
+                  #                  .setValue(((float) alpha) / denominator)
+                  #                  .build());
+                  #        }
+                  #        return resultBuilder.build();
+                  #      }
+                  #      // ...
+                  #
+                  # Example (iOS / Obj-C):
+                  #
+                  #      // ...
+                  #      static UIColor* fromProto(Color* protocolor) {
+                  #         float red = [protocolor red];
+                  #         float green = [protocolor green];
+                  #         float blue = [protocolor blue];
+                  #         FloatValue* alpha_wrapper = [protocolor alpha];
+                  #         float alpha = 1.0;
+                  #         if (alpha_wrapper != nil) {
+                  #           alpha = [alpha_wrapper value];
+                  #         }
+                  #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                  #      }
+                  #
+                  #      static Color* toProto(UIColor* color) {
+                  #          CGFloat red, green, blue, alpha;
+                  #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                  #            return nil;
+                  #          }
+                  #          Color* result = [Color alloc] init];
+                  #          [result setRed:red];
+                  #          [result setGreen:green];
+                  #          [result setBlue:blue];
+                  #          if (alpha <= 0.9999) {
+                  #            [result setAlpha:floatWrapperWithValue(alpha)];
+                  #          }
+                  #          [result autorelease];
+                  #          return result;
+                  #     }
+                  #     // ...
+                  #
+                  #  Example (JavaScript):
+                  #
+                  #     // ...
+                  #
+                  #     var protoToCssColor = function(rgb_color) {
+                  #        var redFrac = rgb_color.red || 0.0;
+                  #        var greenFrac = rgb_color.green || 0.0;
+                  #        var blueFrac = rgb_color.blue || 0.0;
+                  #        var red = Math.floor(redFrac * 255);
+                  #        var green = Math.floor(greenFrac * 255);
+                  #        var blue = Math.floor(blueFrac * 255);
+                  #
+                  #        if (!('alpha' in rgb_color)) {
+                  #           return rgbToCssColor_(red, green, blue);
+                  #        }
+                  #
+                  #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                  #        var rgbParams = [red, green, blue].join(',');
+                  #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                  #     };
+                  #
+                  #     var rgbToCssColor_ = function(red, green, blue) {
+                  #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                  #       var hexString = rgbNumber.toString(16);
+                  #       var missingZeros = 6 - hexString.length;
+                  #       var resultBuilder = ['#'];
+                  #       for (var i = 0; i < missingZeros; i++) {
+                  #          resultBuilder.push('0');
+                  #       }
+                  #       resultBuilder.push(hexString);
+                  #       return resultBuilder.join('');
+                  #     };
+                  #
+                  #     // ...
+                "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                    # the final pixel color is defined by the equation:
+                    #
+                    #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                    #
+                    # This means that a value of 1.0 corresponds to a solid color, whereas
+                    # a value of 0.0 corresponds to a completely transparent color. This
+                    # uses a wrapper message rather than a simple float scalar so that it is
+                    # possible to distinguish between a default value and the value being unset.
+                    # If omitted, this color object is to be rendered as a solid color
+                    # (as if the alpha value had been explicitly given with a value of 1.0).
+                "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+              },
+              "width": 42, # The width of the border, in pixels.
+                  # Border widths must be between 0 and 3 pixels.
+              "style": "A String", # The style of the border.
+            },
+          },
+          "wrapStrategy": "A String", # The wrap strategy for the value in the cell.
+        },
+        "title": "A String", # The title of the spreadsheet.
+      },
+      "sheets": [ # The sheets that are part of a spreadsheet.
+        { # A sheet in a spreadsheet.
+          "conditionalFormats": [ # The conditional format rules in this sheet.
+            { # A rule describing a conditional format.
+              "ranges": [ # The ranges that will be formatted if the condition is true.
+                  # All the ranges must be on the same grid.
+                { # A range on a sheet.
+                    # 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 grid 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.
+                  "startRowIndex": 42, # The start row (inclusive) 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.
+                  "endColumnIndex": 42, # The end column (exclusive) of the range, or not set if unbounded.
+                },
+              ],
+              "booleanRule": { # A rule that may or may not match, depending on the condition. # The formatting is either "on" or "off" according to the rule.
+                "condition": { # A condition that can evaluate to true or false. # The condition of the rule. If the condition evaluates to true,
+                    # the format will be applied.
+                    # BooleanConditions are used by conditional formatting,
+                    # data validation, and the criteria in filters.
+                  "type": "A String", # The type of condition.
+                  "values": [ # The values of the condition. The number of supported values depends
+                      # on the condition type.  Some support zero values,
+                      # others one or two values,
+                      # and ConditionType.ONE_OF_LIST supports an arbitrary number of values.
+                    { # The value of the condition.
+                      "relativeDate": "A String", # A relative date (based on the current date).
+                          # Valid only if the type is
+                          # DATE_BEFORE,
+                          # DATE_AFTER,
+                          # DATE_ON_OR_BEFORE or
+                          # DATE_ON_OR_AFTER.
+                          #
+                          # Relative dates are not supported in data validation.
+                          # They are supported only in conditional formatting and
+                          # conditional filters.
+                      "userEnteredValue": "A String", # A value the condition is based on.
+                          # The value will be parsed as if the user typed into a cell.
+                          # Formulas are supported (and must begin with an `=`).
+                    },
+                  ],
+                },
+                "format": { # The format of a cell. # The format to apply.
+                    # Conditional formatting can only apply a subset of formatting:
+                    # bold, italic,
+                    # strikethrough,
+                    # foreground color &
+                    # background color.
+                  "numberFormat": { # The number format of a cell. # A format describing how number values should be represented to the user.
+                      # When updating, all fields must be set.
+                    "pattern": "A String", # Pattern string used for formatting.
+                    "type": "A String", # The type of the number format.
+                  },
+                  "textDirection": "A String", # The direction of the text in the cell.
+                  "padding": { # The amount of padding around the cell, in pixels. # The padding of the cell.
+                      # When updating padding, every field must be specified.
+                    "top": 42, # The top padding of the cell.
+                    "right": 42, # The right padding of the cell.
+                    "bottom": 42, # The bottom padding of the cell.
+                    "left": 42, # The left padding of the cell.
+                  },
+                  "horizontalAlignment": "A String", # The horizontal alignment of the value in cell.
+                  "backgroundColor": { # Represents a color in the RGBA color space. This representation is designed # The background color of the cell.
+                      # for simplicity of conversion to/from color representations in various
+                      # languages over compactness; for example, the fields of this representation
+                      # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                      # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                      # method in iOS; and, with just a little work, it can be easily formatted into
+                      # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                      #
+                      # Example (Java):
+                      #
+                      #      import com.google.type.Color;
+                      #
+                      #      // ...
+                      #      public static java.awt.Color fromProto(Color protocolor) {
+                      #        float alpha = protocolor.hasAlpha()
+                      #            ? protocolor.getAlpha().getValue()
+                      #            : 1.0;
+                      #
+                      #        return new java.awt.Color(
+                      #            protocolor.getRed(),
+                      #            protocolor.getGreen(),
+                      #            protocolor.getBlue(),
+                      #            alpha);
+                      #      }
+                      #
+                      #      public static Color toProto(java.awt.Color color) {
+                      #        float red = (float) color.getRed();
+                      #        float green = (float) color.getGreen();
+                      #        float blue = (float) color.getBlue();
+                      #        float denominator = 255.0;
+                      #        Color.Builder resultBuilder =
+                      #            Color
+                      #                .newBuilder()
+                      #                .setRed(red / denominator)
+                      #                .setGreen(green / denominator)
+                      #                .setBlue(blue / denominator);
+                      #        int alpha = color.getAlpha();
+                      #        if (alpha != 255) {
+                      #          result.setAlpha(
+                      #              FloatValue
+                      #                  .newBuilder()
+                      #                  .setValue(((float) alpha) / denominator)
+                      #                  .build());
+                      #        }
+                      #        return resultBuilder.build();
+                      #      }
+                      #      // ...
+                      #
+                      # Example (iOS / Obj-C):
+                      #
+                      #      // ...
+                      #      static UIColor* fromProto(Color* protocolor) {
+                      #         float red = [protocolor red];
+                      #         float green = [protocolor green];
+                      #         float blue = [protocolor blue];
+                      #         FloatValue* alpha_wrapper = [protocolor alpha];
+                      #         float alpha = 1.0;
+                      #         if (alpha_wrapper != nil) {
+                      #           alpha = [alpha_wrapper value];
+                      #         }
+                      #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                      #      }
+                      #
+                      #      static Color* toProto(UIColor* color) {
+                      #          CGFloat red, green, blue, alpha;
+                      #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                      #            return nil;
+                      #          }
+                      #          Color* result = [Color alloc] init];
+                      #          [result setRed:red];
+                      #          [result setGreen:green];
+                      #          [result setBlue:blue];
+                      #          if (alpha <= 0.9999) {
+                      #            [result setAlpha:floatWrapperWithValue(alpha)];
+                      #          }
+                      #          [result autorelease];
+                      #          return result;
+                      #     }
+                      #     // ...
+                      #
+                      #  Example (JavaScript):
+                      #
+                      #     // ...
+                      #
+                      #     var protoToCssColor = function(rgb_color) {
+                      #        var redFrac = rgb_color.red || 0.0;
+                      #        var greenFrac = rgb_color.green || 0.0;
+                      #        var blueFrac = rgb_color.blue || 0.0;
+                      #        var red = Math.floor(redFrac * 255);
+                      #        var green = Math.floor(greenFrac * 255);
+                      #        var blue = Math.floor(blueFrac * 255);
+                      #
+                      #        if (!('alpha' in rgb_color)) {
+                      #           return rgbToCssColor_(red, green, blue);
+                      #        }
+                      #
+                      #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                      #        var rgbParams = [red, green, blue].join(',');
+                      #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                      #     };
+                      #
+                      #     var rgbToCssColor_ = function(red, green, blue) {
+                      #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                      #       var hexString = rgbNumber.toString(16);
+                      #       var missingZeros = 6 - hexString.length;
+                      #       var resultBuilder = ['#'];
+                      #       for (var i = 0; i < missingZeros; i++) {
+                      #          resultBuilder.push('0');
+                      #       }
+                      #       resultBuilder.push(hexString);
+                      #       return resultBuilder.join('');
+                      #     };
+                      #
+                      #     // ...
+                    "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                    "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                        # the final pixel color is defined by the equation:
+                        #
+                        #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                        #
+                        # This means that a value of 1.0 corresponds to a solid color, whereas
+                        # a value of 0.0 corresponds to a completely transparent color. This
+                        # uses a wrapper message rather than a simple float scalar so that it is
+                        # possible to distinguish between a default value and the value being unset.
+                        # If omitted, this color object is to be rendered as a solid color
+                        # (as if the alpha value had been explicitly given with a value of 1.0).
+                    "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                    "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                  },
+                  "verticalAlignment": "A String", # The vertical alignment of the value in cell.
+                  "textFormat": { # The format of a run of text in a cell. # The format of the text in the cell (unless overridden by a format run).
+                      # Absent values indicate that the field isn't specified.
+                    "foregroundColor": { # Represents a color in the RGBA color space. This representation is designed # The foreground color of the text.
+                        # for simplicity of conversion to/from color representations in various
+                        # languages over compactness; for example, the fields of this representation
+                        # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                        # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                        # method in iOS; and, with just a little work, it can be easily formatted into
+                        # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                        #
+                        # Example (Java):
+                        #
+                        #      import com.google.type.Color;
+                        #
+                        #      // ...
+                        #      public static java.awt.Color fromProto(Color protocolor) {
+                        #        float alpha = protocolor.hasAlpha()
+                        #            ? protocolor.getAlpha().getValue()
+                        #            : 1.0;
+                        #
+                        #        return new java.awt.Color(
+                        #            protocolor.getRed(),
+                        #            protocolor.getGreen(),
+                        #            protocolor.getBlue(),
+                        #            alpha);
+                        #      }
+                        #
+                        #      public static Color toProto(java.awt.Color color) {
+                        #        float red = (float) color.getRed();
+                        #        float green = (float) color.getGreen();
+                        #        float blue = (float) color.getBlue();
+                        #        float denominator = 255.0;
+                        #        Color.Builder resultBuilder =
+                        #            Color
+                        #                .newBuilder()
+                        #                .setRed(red / denominator)
+                        #                .setGreen(green / denominator)
+                        #                .setBlue(blue / denominator);
+                        #        int alpha = color.getAlpha();
+                        #        if (alpha != 255) {
+                        #          result.setAlpha(
+                        #              FloatValue
+                        #                  .newBuilder()
+                        #                  .setValue(((float) alpha) / denominator)
+                        #                  .build());
+                        #        }
+                        #        return resultBuilder.build();
+                        #      }
+                        #      // ...
+                        #
+                        # Example (iOS / Obj-C):
+                        #
+                        #      // ...
+                        #      static UIColor* fromProto(Color* protocolor) {
+                        #         float red = [protocolor red];
+                        #         float green = [protocolor green];
+                        #         float blue = [protocolor blue];
+                        #         FloatValue* alpha_wrapper = [protocolor alpha];
+                        #         float alpha = 1.0;
+                        #         if (alpha_wrapper != nil) {
+                        #           alpha = [alpha_wrapper value];
+                        #         }
+                        #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                        #      }
+                        #
+                        #      static Color* toProto(UIColor* color) {
+                        #          CGFloat red, green, blue, alpha;
+                        #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                        #            return nil;
+                        #          }
+                        #          Color* result = [Color alloc] init];
+                        #          [result setRed:red];
+                        #          [result setGreen:green];
+                        #          [result setBlue:blue];
+                        #          if (alpha <= 0.9999) {
+                        #            [result setAlpha:floatWrapperWithValue(alpha)];
+                        #          }
+                        #          [result autorelease];
+                        #          return result;
+                        #     }
+                        #     // ...
+                        #
+                        #  Example (JavaScript):
+                        #
+                        #     // ...
+                        #
+                        #     var protoToCssColor = function(rgb_color) {
+                        #        var redFrac = rgb_color.red || 0.0;
+                        #        var greenFrac = rgb_color.green || 0.0;
+                        #        var blueFrac = rgb_color.blue || 0.0;
+                        #        var red = Math.floor(redFrac * 255);
+                        #        var green = Math.floor(greenFrac * 255);
+                        #        var blue = Math.floor(blueFrac * 255);
+                        #
+                        #        if (!('alpha' in rgb_color)) {
+                        #           return rgbToCssColor_(red, green, blue);
+                        #        }
+                        #
+                        #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                        #        var rgbParams = [red, green, blue].join(',');
+                        #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                        #     };
+                        #
+                        #     var rgbToCssColor_ = function(red, green, blue) {
+                        #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                        #       var hexString = rgbNumber.toString(16);
+                        #       var missingZeros = 6 - hexString.length;
+                        #       var resultBuilder = ['#'];
+                        #       for (var i = 0; i < missingZeros; i++) {
+                        #          resultBuilder.push('0');
+                        #       }
+                        #       resultBuilder.push(hexString);
+                        #       return resultBuilder.join('');
+                        #     };
+                        #
+                        #     // ...
+                      "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                      "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                          # the final pixel color is defined by the equation:
+                          #
+                          #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                          #
+                          # This means that a value of 1.0 corresponds to a solid color, whereas
+                          # a value of 0.0 corresponds to a completely transparent color. This
+                          # uses a wrapper message rather than a simple float scalar so that it is
+                          # possible to distinguish between a default value and the value being unset.
+                          # If omitted, this color object is to be rendered as a solid color
+                          # (as if the alpha value had been explicitly given with a value of 1.0).
+                      "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                      "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                    },
+                    "bold": True or False, # True if the text is bold.
+                    "strikethrough": True or False, # True if the text has a strikethrough.
+                    "fontFamily": "A String", # The font family.
+                    "fontSize": 42, # The size of the font.
+                    "italic": True or False, # True if the text is italicized.
+                    "underline": True or False, # True if the text is underlined.
+                  },
+                  "hyperlinkDisplayType": "A String", # How a hyperlink, if it exists, should be displayed in the cell.
+                  "borders": { # The borders of the cell. # The borders of the cell.
+                    "top": { # A border along a cell. # The top border of the cell.
+                      "color": { # Represents a color in the RGBA color space. This representation is designed # The color of the border.
+                          # for simplicity of conversion to/from color representations in various
+                          # languages over compactness; for example, the fields of this representation
+                          # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                          # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                          # method in iOS; and, with just a little work, it can be easily formatted into
+                          # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                          #
+                          # Example (Java):
+                          #
+                          #      import com.google.type.Color;
+                          #
+                          #      // ...
+                          #      public static java.awt.Color fromProto(Color protocolor) {
+                          #        float alpha = protocolor.hasAlpha()
+                          #            ? protocolor.getAlpha().getValue()
+                          #            : 1.0;
+                          #
+                          #        return new java.awt.Color(
+                          #            protocolor.getRed(),
+                          #            protocolor.getGreen(),
+                          #            protocolor.getBlue(),
+                          #            alpha);
+                          #      }
+                          #
+                          #      public static Color toProto(java.awt.Color color) {
+                          #        float red = (float) color.getRed();
+                          #        float green = (float) color.getGreen();
+                          #        float blue = (float) color.getBlue();
+                          #        float denominator = 255.0;
+                          #        Color.Builder resultBuilder =
+                          #            Color
+                          #                .newBuilder()
+                          #                .setRed(red / denominator)
+                          #                .setGreen(green / denominator)
+                          #                .setBlue(blue / denominator);
+                          #        int alpha = color.getAlpha();
+                          #        if (alpha != 255) {
+                          #          result.setAlpha(
+                          #              FloatValue
+                          #                  .newBuilder()
+                          #                  .setValue(((float) alpha) / denominator)
+                          #                  .build());
+                          #        }
+                          #        return resultBuilder.build();
+                          #      }
+                          #      // ...
+                          #
+                          # Example (iOS / Obj-C):
+                          #
+                          #      // ...
+                          #      static UIColor* fromProto(Color* protocolor) {
+                          #         float red = [protocolor red];
+                          #         float green = [protocolor green];
+                          #         float blue = [protocolor blue];
+                          #         FloatValue* alpha_wrapper = [protocolor alpha];
+                          #         float alpha = 1.0;
+                          #         if (alpha_wrapper != nil) {
+                          #           alpha = [alpha_wrapper value];
+                          #         }
+                          #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                          #      }
+                          #
+                          #      static Color* toProto(UIColor* color) {
+                          #          CGFloat red, green, blue, alpha;
+                          #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                          #            return nil;
+                          #          }
+                          #          Color* result = [Color alloc] init];
+                          #          [result setRed:red];
+                          #          [result setGreen:green];
+                          #          [result setBlue:blue];
+                          #          if (alpha <= 0.9999) {
+                          #            [result setAlpha:floatWrapperWithValue(alpha)];
+                          #          }
+                          #          [result autorelease];
+                          #          return result;
+                          #     }
+                          #     // ...
+                          #
+                          #  Example (JavaScript):
+                          #
+                          #     // ...
+                          #
+                          #     var protoToCssColor = function(rgb_color) {
+                          #        var redFrac = rgb_color.red || 0.0;
+                          #        var greenFrac = rgb_color.green || 0.0;
+                          #        var blueFrac = rgb_color.blue || 0.0;
+                          #        var red = Math.floor(redFrac * 255);
+                          #        var green = Math.floor(greenFrac * 255);
+                          #        var blue = Math.floor(blueFrac * 255);
+                          #
+                          #        if (!('alpha' in rgb_color)) {
+                          #           return rgbToCssColor_(red, green, blue);
+                          #        }
+                          #
+                          #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                          #        var rgbParams = [red, green, blue].join(',');
+                          #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                          #     };
+                          #
+                          #     var rgbToCssColor_ = function(red, green, blue) {
+                          #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                          #       var hexString = rgbNumber.toString(16);
+                          #       var missingZeros = 6 - hexString.length;
+                          #       var resultBuilder = ['#'];
+                          #       for (var i = 0; i < missingZeros; i++) {
+                          #          resultBuilder.push('0');
+                          #       }
+                          #       resultBuilder.push(hexString);
+                          #       return resultBuilder.join('');
+                          #     };
+                          #
+                          #     // ...
+                        "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                        "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                            # the final pixel color is defined by the equation:
+                            #
+                            #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                            #
+                            # This means that a value of 1.0 corresponds to a solid color, whereas
+                            # a value of 0.0 corresponds to a completely transparent color. This
+                            # uses a wrapper message rather than a simple float scalar so that it is
+                            # possible to distinguish between a default value and the value being unset.
+                            # If omitted, this color object is to be rendered as a solid color
+                            # (as if the alpha value had been explicitly given with a value of 1.0).
+                        "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                        "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                      },
+                      "width": 42, # The width of the border, in pixels.
+                          # Border widths must be between 0 and 3 pixels.
+                      "style": "A String", # The style of the border.
+                    },
+                    "right": { # A border along a cell. # The right border of the cell.
+                      "color": { # Represents a color in the RGBA color space. This representation is designed # The color of the border.
+                          # for simplicity of conversion to/from color representations in various
+                          # languages over compactness; for example, the fields of this representation
+                          # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                          # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                          # method in iOS; and, with just a little work, it can be easily formatted into
+                          # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                          #
+                          # Example (Java):
+                          #
+                          #      import com.google.type.Color;
+                          #
+                          #      // ...
+                          #      public static java.awt.Color fromProto(Color protocolor) {
+                          #        float alpha = protocolor.hasAlpha()
+                          #            ? protocolor.getAlpha().getValue()
+                          #            : 1.0;
+                          #
+                          #        return new java.awt.Color(
+                          #            protocolor.getRed(),
+                          #            protocolor.getGreen(),
+                          #            protocolor.getBlue(),
+                          #            alpha);
+                          #      }
+                          #
+                          #      public static Color toProto(java.awt.Color color) {
+                          #        float red = (float) color.getRed();
+                          #        float green = (float) color.getGreen();
+                          #        float blue = (float) color.getBlue();
+                          #        float denominator = 255.0;
+                          #        Color.Builder resultBuilder =
+                          #            Color
+                          #                .newBuilder()
+                          #                .setRed(red / denominator)
+                          #                .setGreen(green / denominator)
+                          #                .setBlue(blue / denominator);
+                          #        int alpha = color.getAlpha();
+                          #        if (alpha != 255) {
+                          #          result.setAlpha(
+                          #              FloatValue
+                          #                  .newBuilder()
+                          #                  .setValue(((float) alpha) / denominator)
+                          #                  .build());
+                          #        }
+                          #        return resultBuilder.build();
+                          #      }
+                          #      // ...
+                          #
+                          # Example (iOS / Obj-C):
+                          #
+                          #      // ...
+                          #      static UIColor* fromProto(Color* protocolor) {
+                          #         float red = [protocolor red];
+                          #         float green = [protocolor green];
+                          #         float blue = [protocolor blue];
+                          #         FloatValue* alpha_wrapper = [protocolor alpha];
+                          #         float alpha = 1.0;
+                          #         if (alpha_wrapper != nil) {
+                          #           alpha = [alpha_wrapper value];
+                          #         }
+                          #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                          #      }
+                          #
+                          #      static Color* toProto(UIColor* color) {
+                          #          CGFloat red, green, blue, alpha;
+                          #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                          #            return nil;
+                          #          }
+                          #          Color* result = [Color alloc] init];
+                          #          [result setRed:red];
+                          #          [result setGreen:green];
+                          #          [result setBlue:blue];
+                          #          if (alpha <= 0.9999) {
+                          #            [result setAlpha:floatWrapperWithValue(alpha)];
+                          #          }
+                          #          [result autorelease];
+                          #          return result;
+                          #     }
+                          #     // ...
+                          #
+                          #  Example (JavaScript):
+                          #
+                          #     // ...
+                          #
+                          #     var protoToCssColor = function(rgb_color) {
+                          #        var redFrac = rgb_color.red || 0.0;
+                          #        var greenFrac = rgb_color.green || 0.0;
+                          #        var blueFrac = rgb_color.blue || 0.0;
+                          #        var red = Math.floor(redFrac * 255);
+                          #        var green = Math.floor(greenFrac * 255);
+                          #        var blue = Math.floor(blueFrac * 255);
+                          #
+                          #        if (!('alpha' in rgb_color)) {
+                          #           return rgbToCssColor_(red, green, blue);
+                          #        }
+                          #
+                          #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                          #        var rgbParams = [red, green, blue].join(',');
+                          #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                          #     };
+                          #
+                          #     var rgbToCssColor_ = function(red, green, blue) {
+                          #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                          #       var hexString = rgbNumber.toString(16);
+                          #       var missingZeros = 6 - hexString.length;
+                          #       var resultBuilder = ['#'];
+                          #       for (var i = 0; i < missingZeros; i++) {
+                          #          resultBuilder.push('0');
+                          #       }
+                          #       resultBuilder.push(hexString);
+                          #       return resultBuilder.join('');
+                          #     };
+                          #
+                          #     // ...
+                        "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                        "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                            # the final pixel color is defined by the equation:
+                            #
+                            #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                            #
+                            # This means that a value of 1.0 corresponds to a solid color, whereas
+                            # a value of 0.0 corresponds to a completely transparent color. This
+                            # uses a wrapper message rather than a simple float scalar so that it is
+                            # possible to distinguish between a default value and the value being unset.
+                            # If omitted, this color object is to be rendered as a solid color
+                            # (as if the alpha value had been explicitly given with a value of 1.0).
+                        "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                        "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                      },
+                      "width": 42, # The width of the border, in pixels.
+                          # Border widths must be between 0 and 3 pixels.
+                      "style": "A String", # The style of the border.
+                    },
+                    "bottom": { # A border along a cell. # The bottom border of the cell.
+                      "color": { # Represents a color in the RGBA color space. This representation is designed # The color of the border.
+                          # for simplicity of conversion to/from color representations in various
+                          # languages over compactness; for example, the fields of this representation
+                          # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                          # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                          # method in iOS; and, with just a little work, it can be easily formatted into
+                          # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                          #
+                          # Example (Java):
+                          #
+                          #      import com.google.type.Color;
+                          #
+                          #      // ...
+                          #      public static java.awt.Color fromProto(Color protocolor) {
+                          #        float alpha = protocolor.hasAlpha()
+                          #            ? protocolor.getAlpha().getValue()
+                          #            : 1.0;
+                          #
+                          #        return new java.awt.Color(
+                          #            protocolor.getRed(),
+                          #            protocolor.getGreen(),
+                          #            protocolor.getBlue(),
+                          #            alpha);
+                          #      }
+                          #
+                          #      public static Color toProto(java.awt.Color color) {
+                          #        float red = (float) color.getRed();
+                          #        float green = (float) color.getGreen();
+                          #        float blue = (float) color.getBlue();
+                          #        float denominator = 255.0;
+                          #        Color.Builder resultBuilder =
+                          #            Color
+                          #                .newBuilder()
+                          #                .setRed(red / denominator)
+                          #                .setGreen(green / denominator)
+                          #                .setBlue(blue / denominator);
+                          #        int alpha = color.getAlpha();
+                          #        if (alpha != 255) {
+                          #          result.setAlpha(
+                          #              FloatValue
+                          #                  .newBuilder()
+                          #                  .setValue(((float) alpha) / denominator)
+                          #                  .build());
+                          #        }
+                          #        return resultBuilder.build();
+                          #      }
+                          #      // ...
+                          #
+                          # Example (iOS / Obj-C):
+                          #
+                          #      // ...
+                          #      static UIColor* fromProto(Color* protocolor) {
+                          #         float red = [protocolor red];
+                          #         float green = [protocolor green];
+                          #         float blue = [protocolor blue];
+                          #         FloatValue* alpha_wrapper = [protocolor alpha];
+                          #         float alpha = 1.0;
+                          #         if (alpha_wrapper != nil) {
+                          #           alpha = [alpha_wrapper value];
+                          #         }
+                          #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                          #      }
+                          #
+                          #      static Color* toProto(UIColor* color) {
+                          #          CGFloat red, green, blue, alpha;
+                          #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                          #            return nil;
+                          #          }
+                          #          Color* result = [Color alloc] init];
+                          #          [result setRed:red];
+                          #          [result setGreen:green];
+                          #          [result setBlue:blue];
+                          #          if (alpha <= 0.9999) {
+                          #            [result setAlpha:floatWrapperWithValue(alpha)];
+                          #          }
+                          #          [result autorelease];
+                          #          return result;
+                          #     }
+                          #     // ...
+                          #
+                          #  Example (JavaScript):
+                          #
+                          #     // ...
+                          #
+                          #     var protoToCssColor = function(rgb_color) {
+                          #        var redFrac = rgb_color.red || 0.0;
+                          #        var greenFrac = rgb_color.green || 0.0;
+                          #        var blueFrac = rgb_color.blue || 0.0;
+                          #        var red = Math.floor(redFrac * 255);
+                          #        var green = Math.floor(greenFrac * 255);
+                          #        var blue = Math.floor(blueFrac * 255);
+                          #
+                          #        if (!('alpha' in rgb_color)) {
+                          #           return rgbToCssColor_(red, green, blue);
+                          #        }
+                          #
+                          #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                          #        var rgbParams = [red, green, blue].join(',');
+                          #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                          #     };
+                          #
+                          #     var rgbToCssColor_ = function(red, green, blue) {
+                          #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                          #       var hexString = rgbNumber.toString(16);
+                          #       var missingZeros = 6 - hexString.length;
+                          #       var resultBuilder = ['#'];
+                          #       for (var i = 0; i < missingZeros; i++) {
+                          #          resultBuilder.push('0');
+                          #       }
+                          #       resultBuilder.push(hexString);
+                          #       return resultBuilder.join('');
+                          #     };
+                          #
+                          #     // ...
+                        "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                        "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                            # the final pixel color is defined by the equation:
+                            #
+                            #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                            #
+                            # This means that a value of 1.0 corresponds to a solid color, whereas
+                            # a value of 0.0 corresponds to a completely transparent color. This
+                            # uses a wrapper message rather than a simple float scalar so that it is
+                            # possible to distinguish between a default value and the value being unset.
+                            # If omitted, this color object is to be rendered as a solid color
+                            # (as if the alpha value had been explicitly given with a value of 1.0).
+                        "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                        "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                      },
+                      "width": 42, # The width of the border, in pixels.
+                          # Border widths must be between 0 and 3 pixels.
+                      "style": "A String", # The style of the border.
+                    },
+                    "left": { # A border along a cell. # The left border of the cell.
+                      "color": { # Represents a color in the RGBA color space. This representation is designed # The color of the border.
+                          # for simplicity of conversion to/from color representations in various
+                          # languages over compactness; for example, the fields of this representation
+                          # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                          # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                          # method in iOS; and, with just a little work, it can be easily formatted into
+                          # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                          #
+                          # Example (Java):
+                          #
+                          #      import com.google.type.Color;
+                          #
+                          #      // ...
+                          #      public static java.awt.Color fromProto(Color protocolor) {
+                          #        float alpha = protocolor.hasAlpha()
+                          #            ? protocolor.getAlpha().getValue()
+                          #            : 1.0;
+                          #
+                          #        return new java.awt.Color(
+                          #            protocolor.getRed(),
+                          #            protocolor.getGreen(),
+                          #            protocolor.getBlue(),
+                          #            alpha);
+                          #      }
+                          #
+                          #      public static Color toProto(java.awt.Color color) {
+                          #        float red = (float) color.getRed();
+                          #        float green = (float) color.getGreen();
+                          #        float blue = (float) color.getBlue();
+                          #        float denominator = 255.0;
+                          #        Color.Builder resultBuilder =
+                          #            Color
+                          #                .newBuilder()
+                          #                .setRed(red / denominator)
+                          #                .setGreen(green / denominator)
+                          #                .setBlue(blue / denominator);
+                          #        int alpha = color.getAlpha();
+                          #        if (alpha != 255) {
+                          #          result.setAlpha(
+                          #              FloatValue
+                          #                  .newBuilder()
+                          #                  .setValue(((float) alpha) / denominator)
+                          #                  .build());
+                          #        }
+                          #        return resultBuilder.build();
+                          #      }
+                          #      // ...
+                          #
+                          # Example (iOS / Obj-C):
+                          #
+                          #      // ...
+                          #      static UIColor* fromProto(Color* protocolor) {
+                          #         float red = [protocolor red];
+                          #         float green = [protocolor green];
+                          #         float blue = [protocolor blue];
+                          #         FloatValue* alpha_wrapper = [protocolor alpha];
+                          #         float alpha = 1.0;
+                          #         if (alpha_wrapper != nil) {
+                          #           alpha = [alpha_wrapper value];
+                          #         }
+                          #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                          #      }
+                          #
+                          #      static Color* toProto(UIColor* color) {
+                          #          CGFloat red, green, blue, alpha;
+                          #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                          #            return nil;
+                          #          }
+                          #          Color* result = [Color alloc] init];
+                          #          [result setRed:red];
+                          #          [result setGreen:green];
+                          #          [result setBlue:blue];
+                          #          if (alpha <= 0.9999) {
+                          #            [result setAlpha:floatWrapperWithValue(alpha)];
+                          #          }
+                          #          [result autorelease];
+                          #          return result;
+                          #     }
+                          #     // ...
+                          #
+                          #  Example (JavaScript):
+                          #
+                          #     // ...
+                          #
+                          #     var protoToCssColor = function(rgb_color) {
+                          #        var redFrac = rgb_color.red || 0.0;
+                          #        var greenFrac = rgb_color.green || 0.0;
+                          #        var blueFrac = rgb_color.blue || 0.0;
+                          #        var red = Math.floor(redFrac * 255);
+                          #        var green = Math.floor(greenFrac * 255);
+                          #        var blue = Math.floor(blueFrac * 255);
+                          #
+                          #        if (!('alpha' in rgb_color)) {
+                          #           return rgbToCssColor_(red, green, blue);
+                          #        }
+                          #
+                          #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                          #        var rgbParams = [red, green, blue].join(',');
+                          #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                          #     };
+                          #
+                          #     var rgbToCssColor_ = function(red, green, blue) {
+                          #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                          #       var hexString = rgbNumber.toString(16);
+                          #       var missingZeros = 6 - hexString.length;
+                          #       var resultBuilder = ['#'];
+                          #       for (var i = 0; i < missingZeros; i++) {
+                          #          resultBuilder.push('0');
+                          #       }
+                          #       resultBuilder.push(hexString);
+                          #       return resultBuilder.join('');
+                          #     };
+                          #
+                          #     // ...
+                        "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                        "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                            # the final pixel color is defined by the equation:
+                            #
+                            #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                            #
+                            # This means that a value of 1.0 corresponds to a solid color, whereas
+                            # a value of 0.0 corresponds to a completely transparent color. This
+                            # uses a wrapper message rather than a simple float scalar so that it is
+                            # possible to distinguish between a default value and the value being unset.
+                            # If omitted, this color object is to be rendered as a solid color
+                            # (as if the alpha value had been explicitly given with a value of 1.0).
+                        "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                        "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                      },
+                      "width": 42, # The width of the border, in pixels.
+                          # Border widths must be between 0 and 3 pixels.
+                      "style": "A String", # The style of the border.
+                    },
+                  },
+                  "wrapStrategy": "A String", # The wrap strategy for the value in the cell.
+                },
+              },
+              "gradientRule": { # A rule that applies a gradient color scale format, based on # The formatting will vary based on the gradients in the rule.
+                  # the interpolation points listed. The format of a cell will vary
+                  # based on its contents as compared to the values of the interpolation
+                  # points.
+                "maxpoint": { # A single interpolation point a gradient conditional format. # The final interpolation point.
+                    # These pin the gradient color scale according to the color,
+                    # type and value chosen.
+                  "color": { # Represents a color in the RGBA color space. This representation is designed # The color this interpolation point should use.
+                      # for simplicity of conversion to/from color representations in various
+                      # languages over compactness; for example, the fields of this representation
+                      # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                      # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                      # method in iOS; and, with just a little work, it can be easily formatted into
+                      # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                      #
+                      # Example (Java):
+                      #
+                      #      import com.google.type.Color;
+                      #
+                      #      // ...
+                      #      public static java.awt.Color fromProto(Color protocolor) {
+                      #        float alpha = protocolor.hasAlpha()
+                      #            ? protocolor.getAlpha().getValue()
+                      #            : 1.0;
+                      #
+                      #        return new java.awt.Color(
+                      #            protocolor.getRed(),
+                      #            protocolor.getGreen(),
+                      #            protocolor.getBlue(),
+                      #            alpha);
+                      #      }
+                      #
+                      #      public static Color toProto(java.awt.Color color) {
+                      #        float red = (float) color.getRed();
+                      #        float green = (float) color.getGreen();
+                      #        float blue = (float) color.getBlue();
+                      #        float denominator = 255.0;
+                      #        Color.Builder resultBuilder =
+                      #            Color
+                      #                .newBuilder()
+                      #                .setRed(red / denominator)
+                      #                .setGreen(green / denominator)
+                      #                .setBlue(blue / denominator);
+                      #        int alpha = color.getAlpha();
+                      #        if (alpha != 255) {
+                      #          result.setAlpha(
+                      #              FloatValue
+                      #                  .newBuilder()
+                      #                  .setValue(((float) alpha) / denominator)
+                      #                  .build());
+                      #        }
+                      #        return resultBuilder.build();
+                      #      }
+                      #      // ...
+                      #
+                      # Example (iOS / Obj-C):
+                      #
+                      #      // ...
+                      #      static UIColor* fromProto(Color* protocolor) {
+                      #         float red = [protocolor red];
+                      #         float green = [protocolor green];
+                      #         float blue = [protocolor blue];
+                      #         FloatValue* alpha_wrapper = [protocolor alpha];
+                      #         float alpha = 1.0;
+                      #         if (alpha_wrapper != nil) {
+                      #           alpha = [alpha_wrapper value];
+                      #         }
+                      #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                      #      }
+                      #
+                      #      static Color* toProto(UIColor* color) {
+                      #          CGFloat red, green, blue, alpha;
+                      #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                      #            return nil;
+                      #          }
+                      #          Color* result = [Color alloc] init];
+                      #          [result setRed:red];
+                      #          [result setGreen:green];
+                      #          [result setBlue:blue];
+                      #          if (alpha <= 0.9999) {
+                      #            [result setAlpha:floatWrapperWithValue(alpha)];
+                      #          }
+                      #          [result autorelease];
+                      #          return result;
+                      #     }
+                      #     // ...
+                      #
+                      #  Example (JavaScript):
+                      #
+                      #     // ...
+                      #
+                      #     var protoToCssColor = function(rgb_color) {
+                      #        var redFrac = rgb_color.red || 0.0;
+                      #        var greenFrac = rgb_color.green || 0.0;
+                      #        var blueFrac = rgb_color.blue || 0.0;
+                      #        var red = Math.floor(redFrac * 255);
+                      #        var green = Math.floor(greenFrac * 255);
+                      #        var blue = Math.floor(blueFrac * 255);
+                      #
+                      #        if (!('alpha' in rgb_color)) {
+                      #           return rgbToCssColor_(red, green, blue);
+                      #        }
+                      #
+                      #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                      #        var rgbParams = [red, green, blue].join(',');
+                      #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                      #     };
+                      #
+                      #     var rgbToCssColor_ = function(red, green, blue) {
+                      #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                      #       var hexString = rgbNumber.toString(16);
+                      #       var missingZeros = 6 - hexString.length;
+                      #       var resultBuilder = ['#'];
+                      #       for (var i = 0; i < missingZeros; i++) {
+                      #          resultBuilder.push('0');
+                      #       }
+                      #       resultBuilder.push(hexString);
+                      #       return resultBuilder.join('');
+                      #     };
+                      #
+                      #     // ...
+                    "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                    "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                        # the final pixel color is defined by the equation:
+                        #
+                        #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                        #
+                        # This means that a value of 1.0 corresponds to a solid color, whereas
+                        # a value of 0.0 corresponds to a completely transparent color. This
+                        # uses a wrapper message rather than a simple float scalar so that it is
+                        # possible to distinguish between a default value and the value being unset.
+                        # If omitted, this color object is to be rendered as a solid color
+                        # (as if the alpha value had been explicitly given with a value of 1.0).
+                    "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                    "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                  },
+                  "type": "A String", # How the value should be interpreted.
+                  "value": "A String", # The value this interpolation point uses.  May be a formula.
+                      # Unused if type is MIN or
+                      # MAX.
+                },
+                "midpoint": { # A single interpolation point a gradient conditional format. # An optional midway interpolation point.
+                    # These pin the gradient color scale according to the color,
+                    # type and value chosen.
+                  "color": { # Represents a color in the RGBA color space. This representation is designed # The color this interpolation point should use.
+                      # for simplicity of conversion to/from color representations in various
+                      # languages over compactness; for example, the fields of this representation
+                      # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                      # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                      # method in iOS; and, with just a little work, it can be easily formatted into
+                      # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                      #
+                      # Example (Java):
+                      #
+                      #      import com.google.type.Color;
+                      #
+                      #      // ...
+                      #      public static java.awt.Color fromProto(Color protocolor) {
+                      #        float alpha = protocolor.hasAlpha()
+                      #            ? protocolor.getAlpha().getValue()
+                      #            : 1.0;
+                      #
+                      #        return new java.awt.Color(
+                      #            protocolor.getRed(),
+                      #            protocolor.getGreen(),
+                      #            protocolor.getBlue(),
+                      #            alpha);
+                      #      }
+                      #
+                      #      public static Color toProto(java.awt.Color color) {
+                      #        float red = (float) color.getRed();
+                      #        float green = (float) color.getGreen();
+                      #        float blue = (float) color.getBlue();
+                      #        float denominator = 255.0;
+                      #        Color.Builder resultBuilder =
+                      #            Color
+                      #                .newBuilder()
+                      #                .setRed(red / denominator)
+                      #                .setGreen(green / denominator)
+                      #                .setBlue(blue / denominator);
+                      #        int alpha = color.getAlpha();
+                      #        if (alpha != 255) {
+                      #          result.setAlpha(
+                      #              FloatValue
+                      #                  .newBuilder()
+                      #                  .setValue(((float) alpha) / denominator)
+                      #                  .build());
+                      #        }
+                      #        return resultBuilder.build();
+                      #      }
+                      #      // ...
+                      #
+                      # Example (iOS / Obj-C):
+                      #
+                      #      // ...
+                      #      static UIColor* fromProto(Color* protocolor) {
+                      #         float red = [protocolor red];
+                      #         float green = [protocolor green];
+                      #         float blue = [protocolor blue];
+                      #         FloatValue* alpha_wrapper = [protocolor alpha];
+                      #         float alpha = 1.0;
+                      #         if (alpha_wrapper != nil) {
+                      #           alpha = [alpha_wrapper value];
+                      #         }
+                      #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                      #      }
+                      #
+                      #      static Color* toProto(UIColor* color) {
+                      #          CGFloat red, green, blue, alpha;
+                      #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                      #            return nil;
+                      #          }
+                      #          Color* result = [Color alloc] init];
+                      #          [result setRed:red];
+                      #          [result setGreen:green];
+                      #          [result setBlue:blue];
+                      #          if (alpha <= 0.9999) {
+                      #            [result setAlpha:floatWrapperWithValue(alpha)];
+                      #          }
+                      #          [result autorelease];
+                      #          return result;
+                      #     }
+                      #     // ...
+                      #
+                      #  Example (JavaScript):
+                      #
+                      #     // ...
+                      #
+                      #     var protoToCssColor = function(rgb_color) {
+                      #        var redFrac = rgb_color.red || 0.0;
+                      #        var greenFrac = rgb_color.green || 0.0;
+                      #        var blueFrac = rgb_color.blue || 0.0;
+                      #        var red = Math.floor(redFrac * 255);
+                      #        var green = Math.floor(greenFrac * 255);
+                      #        var blue = Math.floor(blueFrac * 255);
+                      #
+                      #        if (!('alpha' in rgb_color)) {
+                      #           return rgbToCssColor_(red, green, blue);
+                      #        }
+                      #
+                      #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                      #        var rgbParams = [red, green, blue].join(',');
+                      #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                      #     };
+                      #
+                      #     var rgbToCssColor_ = function(red, green, blue) {
+                      #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                      #       var hexString = rgbNumber.toString(16);
+                      #       var missingZeros = 6 - hexString.length;
+                      #       var resultBuilder = ['#'];
+                      #       for (var i = 0; i < missingZeros; i++) {
+                      #          resultBuilder.push('0');
+                      #       }
+                      #       resultBuilder.push(hexString);
+                      #       return resultBuilder.join('');
+                      #     };
+                      #
+                      #     // ...
+                    "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                    "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                        # the final pixel color is defined by the equation:
+                        #
+                        #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                        #
+                        # This means that a value of 1.0 corresponds to a solid color, whereas
+                        # a value of 0.0 corresponds to a completely transparent color. This
+                        # uses a wrapper message rather than a simple float scalar so that it is
+                        # possible to distinguish between a default value and the value being unset.
+                        # If omitted, this color object is to be rendered as a solid color
+                        # (as if the alpha value had been explicitly given with a value of 1.0).
+                    "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                    "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                  },
+                  "type": "A String", # How the value should be interpreted.
+                  "value": "A String", # The value this interpolation point uses.  May be a formula.
+                      # Unused if type is MIN or
+                      # MAX.
+                },
+                "minpoint": { # A single interpolation point a gradient conditional format. # The starting interpolation point.
+                    # These pin the gradient color scale according to the color,
+                    # type and value chosen.
+                  "color": { # Represents a color in the RGBA color space. This representation is designed # The color this interpolation point should use.
+                      # for simplicity of conversion to/from color representations in various
+                      # languages over compactness; for example, the fields of this representation
+                      # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                      # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                      # method in iOS; and, with just a little work, it can be easily formatted into
+                      # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                      #
+                      # Example (Java):
+                      #
+                      #      import com.google.type.Color;
+                      #
+                      #      // ...
+                      #      public static java.awt.Color fromProto(Color protocolor) {
+                      #        float alpha = protocolor.hasAlpha()
+                      #            ? protocolor.getAlpha().getValue()
+                      #            : 1.0;
+                      #
+                      #        return new java.awt.Color(
+                      #            protocolor.getRed(),
+                      #            protocolor.getGreen(),
+                      #            protocolor.getBlue(),
+                      #            alpha);
+                      #      }
+                      #
+                      #      public static Color toProto(java.awt.Color color) {
+                      #        float red = (float) color.getRed();
+                      #        float green = (float) color.getGreen();
+                      #        float blue = (float) color.getBlue();
+                      #        float denominator = 255.0;
+                      #        Color.Builder resultBuilder =
+                      #            Color
+                      #                .newBuilder()
+                      #                .setRed(red / denominator)
+                      #                .setGreen(green / denominator)
+                      #                .setBlue(blue / denominator);
+                      #        int alpha = color.getAlpha();
+                      #        if (alpha != 255) {
+                      #          result.setAlpha(
+                      #              FloatValue
+                      #                  .newBuilder()
+                      #                  .setValue(((float) alpha) / denominator)
+                      #                  .build());
+                      #        }
+                      #        return resultBuilder.build();
+                      #      }
+                      #      // ...
+                      #
+                      # Example (iOS / Obj-C):
+                      #
+                      #      // ...
+                      #      static UIColor* fromProto(Color* protocolor) {
+                      #         float red = [protocolor red];
+                      #         float green = [protocolor green];
+                      #         float blue = [protocolor blue];
+                      #         FloatValue* alpha_wrapper = [protocolor alpha];
+                      #         float alpha = 1.0;
+                      #         if (alpha_wrapper != nil) {
+                      #           alpha = [alpha_wrapper value];
+                      #         }
+                      #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                      #      }
+                      #
+                      #      static Color* toProto(UIColor* color) {
+                      #          CGFloat red, green, blue, alpha;
+                      #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                      #            return nil;
+                      #          }
+                      #          Color* result = [Color alloc] init];
+                      #          [result setRed:red];
+                      #          [result setGreen:green];
+                      #          [result setBlue:blue];
+                      #          if (alpha <= 0.9999) {
+                      #            [result setAlpha:floatWrapperWithValue(alpha)];
+                      #          }
+                      #          [result autorelease];
+                      #          return result;
+                      #     }
+                      #     // ...
+                      #
+                      #  Example (JavaScript):
+                      #
+                      #     // ...
+                      #
+                      #     var protoToCssColor = function(rgb_color) {
+                      #        var redFrac = rgb_color.red || 0.0;
+                      #        var greenFrac = rgb_color.green || 0.0;
+                      #        var blueFrac = rgb_color.blue || 0.0;
+                      #        var red = Math.floor(redFrac * 255);
+                      #        var green = Math.floor(greenFrac * 255);
+                      #        var blue = Math.floor(blueFrac * 255);
+                      #
+                      #        if (!('alpha' in rgb_color)) {
+                      #           return rgbToCssColor_(red, green, blue);
+                      #        }
+                      #
+                      #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                      #        var rgbParams = [red, green, blue].join(',');
+                      #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                      #     };
+                      #
+                      #     var rgbToCssColor_ = function(red, green, blue) {
+                      #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                      #       var hexString = rgbNumber.toString(16);
+                      #       var missingZeros = 6 - hexString.length;
+                      #       var resultBuilder = ['#'];
+                      #       for (var i = 0; i < missingZeros; i++) {
+                      #          resultBuilder.push('0');
+                      #       }
+                      #       resultBuilder.push(hexString);
+                      #       return resultBuilder.join('');
+                      #     };
+                      #
+                      #     // ...
+                    "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                    "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                        # the final pixel color is defined by the equation:
+                        #
+                        #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                        #
+                        # This means that a value of 1.0 corresponds to a solid color, whereas
+                        # a value of 0.0 corresponds to a completely transparent color. This
+                        # uses a wrapper message rather than a simple float scalar so that it is
+                        # possible to distinguish between a default value and the value being unset.
+                        # If omitted, this color object is to be rendered as a solid color
+                        # (as if the alpha value had been explicitly given with a value of 1.0).
+                    "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                    "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                  },
+                  "type": "A String", # How the value should be interpreted.
+                  "value": "A String", # The value this interpolation point uses.  May be a formula.
+                      # Unused if type is MIN or
+                      # MAX.
+                },
+              },
+            },
+          ],
+          "merges": [ # The ranges that are merged together.
+            { # A range on a sheet.
+                # 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 grid 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.
+              "startRowIndex": 42, # The start row (inclusive) 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.
+              "endColumnIndex": 42, # The end column (exclusive) of the range, or not set if unbounded.
+            },
+          ],
+          "basicFilter": { # The default filter associated with a sheet. # The filter on this sheet, if any.
+            "range": { # A range on a sheet. # The range the filter covers.
+                # 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 grid 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.
+              "startRowIndex": 42, # The start row (inclusive) 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.
+              "endColumnIndex": 42, # The end column (exclusive) of the range, or not set if unbounded.
+            },
+            "sortSpecs": [ # The sort order per column. Later specifications are used when values
+                # are equal in the earlier specifications.
+              { # A sort order associated with a specific column or row.
+                "sortOrder": "A String", # The order data should be sorted.
+                "dimensionIndex": 42, # The dimension the sort should be applied to.
+              },
+            ],
+            "criteria": { # The criteria for showing/hiding values per column.
+                # The map's key is the column index, and the value is the criteria for
+                # that column.
+              "a_key": { # Criteria for showing/hiding rows in a filter, filter view.
+                "hiddenValues": [ # Values that should be hidden.
+                  "A String",
+                ],
+                "condition": { # A condition that can evaluate to true or false. # A condition that must be true for values to be shown.
+                    # (This does not override hiddenValues -- if a value is listed there,
+                    #  it will still be hidden.)
+                    # BooleanConditions are used by conditional formatting,
+                    # data validation, and the criteria in filters.
+                  "type": "A String", # The type of condition.
+                  "values": [ # The values of the condition. The number of supported values depends
+                      # on the condition type.  Some support zero values,
+                      # others one or two values,
+                      # and ConditionType.ONE_OF_LIST supports an arbitrary number of values.
+                    { # The value of the condition.
+                      "relativeDate": "A String", # A relative date (based on the current date).
+                          # Valid only if the type is
+                          # DATE_BEFORE,
+                          # DATE_AFTER,
+                          # DATE_ON_OR_BEFORE or
+                          # DATE_ON_OR_AFTER.
+                          #
+                          # Relative dates are not supported in data validation.
+                          # They are supported only in conditional formatting and
+                          # conditional filters.
+                      "userEnteredValue": "A String", # A value the condition is based on.
+                          # The value will be parsed as if the user typed into a cell.
+                          # Formulas are supported (and must begin with an `=`).
+                    },
+                  ],
+                },
+              },
+            },
+          },
+          "charts": [ # The specifications of every chart on this sheet.
+            { # A chart embedded in a sheet.
+              "chartId": 42, # The ID of the chart.
+              "position": { # The position of an embedded object such as a chart. # The position of the chart.
+                "newSheet": True or False, # If true, the embedded object will be put on a new sheet whose ID
+                    # is chosen for you. Used only when writing.
+                "sheetId": 42, # The sheet this is on. Set only if the embedded object
+                    # is on its own sheet. Must be non-negative.
+                "overlayPosition": { # The location an object is overlaid on top of a grid. # The position the object is overlaid on top of a grid.
+                  "anchorCell": { # A coordinate in a sheet. # The cell the object is anchored to.
+                      # All indexes are zero-based.
+                    "rowIndex": 42, # The row index of the coordinate.
+                    "columnIndex": 42, # The column index of the coordinate.
+                    "sheetId": 42, # The sheet this coordinate is on.
+                  },
+                  "offsetYPixels": 42, # The vertical offset, in pixels, that the object is offset
+                      # from the anchor cell.
+                  "widthPixels": 42, # The width of the object, in pixels. Defaults to 600.
+                  "offsetXPixels": 42, # The horizontal offset, in pixels, that the object is offset
+                      # from the anchor cell.
+                  "heightPixels": 42, # The height of the object, in pixels. Defaults to 371.
+                },
+              },
+              "spec": { # The specifications of a chart. # The specification of the chart.
+                "hiddenDimensionStrategy": "A String", # Determines how the charts will use hidden rows or columns.
+                    # This value is only meaningful if the
+                    # ChartData.sourceRange
+                    # is used for a domain or series.
+                "pieChart": { # A <a href="/chart/interactive/docs/gallery/piechart">pie chart</a>. # A pie chart specification.
+                  "series": { # The data included in a domain or series. # The data that covers the one and only series of the pie chart.
+                    "sourceRange": { # Source ranges for a chart. # The source ranges of the data.
+                      "sources": [ # The ranges of data for a series or domain.
+                          # Exactly one dimension must have a length of 1,
+                          # and all sources in the list must have the same dimension
+                          # with length 1.
+                          # The domain (if it exists) & all series must have the same number
+                          # of source ranges. If using more than one source range, then the source
+                          # range at a given offset must be contiguous across the domain and series.
+                          #
+                          # For example, these are valid configurations:
+                          #
+                          #     domain sources: A1:A5
+                          #     series1 sources: B1:B5
+                          #     series2 sources: D6:D10
+                          #
+                          #     domain sources: A1:A5, C10:C12
+                          #     series1 sources: B1:B5, D10:D12
+                          #     series2 sources: C1:C5, E10:E12
+                        { # A range on a sheet.
+                            # 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 grid 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.
+                          "startRowIndex": 42, # The start row (inclusive) 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.
+                          "endColumnIndex": 42, # The end column (exclusive) of the range, or not set if unbounded.
+                        },
+                      ],
+                    },
+                  },
+                  "domain": { # The data included in a domain or series. # The data that covers the domain of the pie chart.
+                    "sourceRange": { # Source ranges for a chart. # The source ranges of the data.
+                      "sources": [ # The ranges of data for a series or domain.
+                          # Exactly one dimension must have a length of 1,
+                          # and all sources in the list must have the same dimension
+                          # with length 1.
+                          # The domain (if it exists) & all series must have the same number
+                          # of source ranges. If using more than one source range, then the source
+                          # range at a given offset must be contiguous across the domain and series.
+                          #
+                          # For example, these are valid configurations:
+                          #
+                          #     domain sources: A1:A5
+                          #     series1 sources: B1:B5
+                          #     series2 sources: D6:D10
+                          #
+                          #     domain sources: A1:A5, C10:C12
+                          #     series1 sources: B1:B5, D10:D12
+                          #     series2 sources: C1:C5, E10:E12
+                        { # A range on a sheet.
+                            # 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 grid 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.
+                          "startRowIndex": 42, # The start row (inclusive) 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.
+                          "endColumnIndex": 42, # The end column (exclusive) of the range, or not set if unbounded.
+                        },
+                      ],
+                    },
+                  },
+                  "threeDimensional": True or False, # True if the pie is three dimensional.
+                  "legendPosition": "A String", # Where the legend of the pie chart should be drawn.
+                  "pieHole": 3.14, # The size of the hole in the pie chart.
+                },
+                "basicChart": { # The specification for a basic chart.  See BasicChartType for the list # A basic chart specification, can be one of many kinds of charts.
+                    # See BasicChartType for the list of all charts this supports.
+                    # of charts this supports.
+                  "headerCount": 42, # The number of rows or columns in the data that are "headers".
+                      # If not set, Google Sheets will guess how many rows are headers based
+                      # on the data.
+                      #
+                      # (Note that BasicChartAxis.title may override the axis title
+                      #  inferred from the header values.)
+                  "series": [ # The data this chart is visualizing.
+                    { # A single series of data in a chart.
+                        # For example, if charting stock prices over time, multiple series may exist,
+                        # one for the "Open Price", "High Price", "Low Price" and "Close Price".
+                      "series": { # The data included in a domain or series. # The data being visualized in this chart series.
+                        "sourceRange": { # Source ranges for a chart. # The source ranges of the data.
+                          "sources": [ # The ranges of data for a series or domain.
+                              # Exactly one dimension must have a length of 1,
+                              # and all sources in the list must have the same dimension
+                              # with length 1.
+                              # The domain (if it exists) & all series must have the same number
+                              # of source ranges. If using more than one source range, then the source
+                              # range at a given offset must be contiguous across the domain and series.
+                              #
+                              # For example, these are valid configurations:
+                              #
+                              #     domain sources: A1:A5
+                              #     series1 sources: B1:B5
+                              #     series2 sources: D6:D10
+                              #
+                              #     domain sources: A1:A5, C10:C12
+                              #     series1 sources: B1:B5, D10:D12
+                              #     series2 sources: C1:C5, E10:E12
+                            { # A range on a sheet.
+                                # 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 grid 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.
+                              "startRowIndex": 42, # The start row (inclusive) 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.
+                              "endColumnIndex": 42, # The end column (exclusive) of the range, or not set if unbounded.
+                            },
+                          ],
+                        },
+                      },
+                      "targetAxis": "A String", # The minor axis that will specify the range of values for this series.
+                          # For example, if charting stocks over time, the "Volume" series
+                          # may want to be pinned to the right with the prices pinned to the left,
+                          # because the scale of trading volume is different than the scale of
+                          # prices.
+                          # It is an error to specify an axis that isn't a valid minor axis
+                          # for the chart's type.
+                      "type": "A String", # The type of this series. Valid only if the
+                          # chartType is
+                          # COMBO.
+                          # Different types will change the way the series is visualized.
+                          # Only LINE, AREA,
+                          # and COLUMN are supported.
+                    },
+                  ],
+                  "legendPosition": "A String", # The position of the chart legend.
+                  "domains": [ # The domain of data this is charting.
+                      # Only a single domain is currently supported.
+                    { # The domain of a chart.
+                        # For example, if charting stock prices over time, this would be the date.
+                      "domain": { # The data included in a domain or series. # The data of the domain. For example, if charting stock prices over time,
+                          # this be the data representing the dates.
+                        "sourceRange": { # Source ranges for a chart. # The source ranges of the data.
+                          "sources": [ # The ranges of data for a series or domain.
+                              # Exactly one dimension must have a length of 1,
+                              # and all sources in the list must have the same dimension
+                              # with length 1.
+                              # The domain (if it exists) & all series must have the same number
+                              # of source ranges. If using more than one source range, then the source
+                              # range at a given offset must be contiguous across the domain and series.
+                              #
+                              # For example, these are valid configurations:
+                              #
+                              #     domain sources: A1:A5
+                              #     series1 sources: B1:B5
+                              #     series2 sources: D6:D10
+                              #
+                              #     domain sources: A1:A5, C10:C12
+                              #     series1 sources: B1:B5, D10:D12
+                              #     series2 sources: C1:C5, E10:E12
+                            { # A range on a sheet.
+                                # 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 grid 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.
+                              "startRowIndex": 42, # The start row (inclusive) 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.
+                              "endColumnIndex": 42, # The end column (exclusive) of the range, or not set if unbounded.
+                            },
+                          ],
+                        },
+                      },
+                    },
+                  ],
+                  "chartType": "A String", # The type of the chart.
+                  "axis": [ # The axis on the chart.
+                    { # An axis of the chart.
+                        # A chart may not have more than one axis per
+                        # axis position.
+                      "position": "A String", # The position of this axis.
+                      "format": { # The format of a run of text in a cell. # The format of the title.
+                          # Only valid if the axis is not associated with the domain.
+                          # Absent values indicate that the field isn't specified.
+                        "foregroundColor": { # Represents a color in the RGBA color space. This representation is designed # The foreground color of the text.
+                            # for simplicity of conversion to/from color representations in various
+                            # languages over compactness; for example, the fields of this representation
+                            # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                            # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                            # method in iOS; and, with just a little work, it can be easily formatted into
+                            # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                            #
+                            # Example (Java):
+                            #
+                            #      import com.google.type.Color;
+                            #
+                            #      // ...
+                            #      public static java.awt.Color fromProto(Color protocolor) {
+                            #        float alpha = protocolor.hasAlpha()
+                            #            ? protocolor.getAlpha().getValue()
+                            #            : 1.0;
+                            #
+                            #        return new java.awt.Color(
+                            #            protocolor.getRed(),
+                            #            protocolor.getGreen(),
+                            #            protocolor.getBlue(),
+                            #            alpha);
+                            #      }
+                            #
+                            #      public static Color toProto(java.awt.Color color) {
+                            #        float red = (float) color.getRed();
+                            #        float green = (float) color.getGreen();
+                            #        float blue = (float) color.getBlue();
+                            #        float denominator = 255.0;
+                            #        Color.Builder resultBuilder =
+                            #            Color
+                            #                .newBuilder()
+                            #                .setRed(red / denominator)
+                            #                .setGreen(green / denominator)
+                            #                .setBlue(blue / denominator);
+                            #        int alpha = color.getAlpha();
+                            #        if (alpha != 255) {
+                            #          result.setAlpha(
+                            #              FloatValue
+                            #                  .newBuilder()
+                            #                  .setValue(((float) alpha) / denominator)
+                            #                  .build());
+                            #        }
+                            #        return resultBuilder.build();
+                            #      }
+                            #      // ...
+                            #
+                            # Example (iOS / Obj-C):
+                            #
+                            #      // ...
+                            #      static UIColor* fromProto(Color* protocolor) {
+                            #         float red = [protocolor red];
+                            #         float green = [protocolor green];
+                            #         float blue = [protocolor blue];
+                            #         FloatValue* alpha_wrapper = [protocolor alpha];
+                            #         float alpha = 1.0;
+                            #         if (alpha_wrapper != nil) {
+                            #           alpha = [alpha_wrapper value];
+                            #         }
+                            #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                            #      }
+                            #
+                            #      static Color* toProto(UIColor* color) {
+                            #          CGFloat red, green, blue, alpha;
+                            #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                            #            return nil;
+                            #          }
+                            #          Color* result = [Color alloc] init];
+                            #          [result setRed:red];
+                            #          [result setGreen:green];
+                            #          [result setBlue:blue];
+                            #          if (alpha <= 0.9999) {
+                            #            [result setAlpha:floatWrapperWithValue(alpha)];
+                            #          }
+                            #          [result autorelease];
+                            #          return result;
+                            #     }
+                            #     // ...
+                            #
+                            #  Example (JavaScript):
+                            #
+                            #     // ...
+                            #
+                            #     var protoToCssColor = function(rgb_color) {
+                            #        var redFrac = rgb_color.red || 0.0;
+                            #        var greenFrac = rgb_color.green || 0.0;
+                            #        var blueFrac = rgb_color.blue || 0.0;
+                            #        var red = Math.floor(redFrac * 255);
+                            #        var green = Math.floor(greenFrac * 255);
+                            #        var blue = Math.floor(blueFrac * 255);
+                            #
+                            #        if (!('alpha' in rgb_color)) {
+                            #           return rgbToCssColor_(red, green, blue);
+                            #        }
+                            #
+                            #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                            #        var rgbParams = [red, green, blue].join(',');
+                            #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                            #     };
+                            #
+                            #     var rgbToCssColor_ = function(red, green, blue) {
+                            #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                            #       var hexString = rgbNumber.toString(16);
+                            #       var missingZeros = 6 - hexString.length;
+                            #       var resultBuilder = ['#'];
+                            #       for (var i = 0; i < missingZeros; i++) {
+                            #          resultBuilder.push('0');
+                            #       }
+                            #       resultBuilder.push(hexString);
+                            #       return resultBuilder.join('');
+                            #     };
+                            #
+                            #     // ...
+                          "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                          "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                              # the final pixel color is defined by the equation:
+                              #
+                              #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                              #
+                              # This means that a value of 1.0 corresponds to a solid color, whereas
+                              # a value of 0.0 corresponds to a completely transparent color. This
+                              # uses a wrapper message rather than a simple float scalar so that it is
+                              # possible to distinguish between a default value and the value being unset.
+                              # If omitted, this color object is to be rendered as a solid color
+                              # (as if the alpha value had been explicitly given with a value of 1.0).
+                          "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                          "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                        },
+                        "bold": True or False, # True if the text is bold.
+                        "strikethrough": True or False, # True if the text has a strikethrough.
+                        "fontFamily": "A String", # The font family.
+                        "fontSize": 42, # The size of the font.
+                        "italic": True or False, # True if the text is italicized.
+                        "underline": True or False, # True if the text is underlined.
+                      },
+                      "title": "A String", # The title of this axis. If set, this overrides any title inferred
+                          # from headers of the data.
+                    },
+                  ],
+                },
+                "title": "A String", # The title of the chart.
+              },
+            },
+          ],
+          "filterViews": [ # The filter views in this sheet.
+            { # A filter view.
+              "title": "A String", # The name of the filter view.
+              "namedRangeId": "A String", # The named range this filter view is backed by, if any.
+                  #
+                  # When writing, only one of range or namedRangeId
+                  # may be set.
+              "filterViewId": 42, # The ID of the filter view.
+              "range": { # A range on a sheet. # The range this filter view covers.
+                  #
+                  # When writing, only one of range or namedRangeId
+                  # may be set.
+                  # 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 grid 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.
+                "startRowIndex": 42, # The start row (inclusive) 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.
+                "endColumnIndex": 42, # The end column (exclusive) of the range, or not set if unbounded.
+              },
+              "sortSpecs": [ # The sort order per column. Later specifications are used when values
+                  # are equal in the earlier specifications.
+                { # A sort order associated with a specific column or row.
+                  "sortOrder": "A String", # The order data should be sorted.
+                  "dimensionIndex": 42, # The dimension the sort should be applied to.
+                },
+              ],
+              "criteria": { # The criteria for showing/hiding values per column.
+                  # The map's key is the column index, and the value is the criteria for
+                  # that column.
+                "a_key": { # Criteria for showing/hiding rows in a filter, filter view.
+                  "hiddenValues": [ # Values that should be hidden.
+                    "A String",
+                  ],
+                  "condition": { # A condition that can evaluate to true or false. # A condition that must be true for values to be shown.
+                      # (This does not override hiddenValues -- if a value is listed there,
+                      #  it will still be hidden.)
+                      # BooleanConditions are used by conditional formatting,
+                      # data validation, and the criteria in filters.
+                    "type": "A String", # The type of condition.
+                    "values": [ # The values of the condition. The number of supported values depends
+                        # on the condition type.  Some support zero values,
+                        # others one or two values,
+                        # and ConditionType.ONE_OF_LIST supports an arbitrary number of values.
+                      { # The value of the condition.
+                        "relativeDate": "A String", # A relative date (based on the current date).
+                            # Valid only if the type is
+                            # DATE_BEFORE,
+                            # DATE_AFTER,
+                            # DATE_ON_OR_BEFORE or
+                            # DATE_ON_OR_AFTER.
+                            #
+                            # Relative dates are not supported in data validation.
+                            # They are supported only in conditional formatting and
+                            # conditional filters.
+                        "userEnteredValue": "A String", # A value the condition is based on.
+                            # The value will be parsed as if the user typed into a cell.
+                            # Formulas are supported (and must begin with an `=`).
+                      },
+                    ],
+                  },
+                },
+              },
+            },
+          ],
+          "protectedRanges": [ # The protected ranges in this sheet.
+            { # A protected range.
+              "unprotectedRanges": [ # The list of unprotected ranges within a protected sheet.
+                  # Unprotected ranges are only supported on protected sheets.
+                { # A range on a sheet.
+                    # 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 grid 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.
+                  "startRowIndex": 42, # The start row (inclusive) 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.
+                  "endColumnIndex": 42, # The end column (exclusive) of the range, or not set if unbounded.
+                },
+              ],
+              "requestingUserCanEdit": True or False, # True if the user who requested this protected range can edit the
+                  # protected area.
+                  # This field is read-only.
+              "description": "A String", # The description of this protected range.
+              "namedRangeId": "A String", # The named range this protected range is backed by, if any.
+                  #
+                  # When writing, only one of range or namedRangeId
+                  # may be set.
+              "editors": { # The editors of a protected range. # The users and groups with edit access to the protected range.
+                  # This field is only visible to users with edit access to the protected
+                  # range and the document.
+                  # Editors are not supported with warningOnly protection.
+                "domainUsersCanEdit": True or False, # True if anyone in the document's domain has edit access to the protected
+                    # range.  Domain protection is only supported on documents within a domain.
+                "users": [ # The email addresses of users with edit access to the protected range.
+                  "A String",
+                ],
+                "groups": [ # The email addresses of groups with edit access to the protected range.
+                  "A String",
+                ],
+              },
+              "protectedRangeId": 42, # The ID of the protected range.
+                  # This field is read-only.
+              "warningOnly": True or False, # True if this this protected range will show a warning when editing.
+                  # Warning-based protection means that every user can edit data in the
+                  # protected range, except editing will prompt a warning asking the user
+                  # to confirm the edit.
+                  #
+                  # When warning: if this field is true, then editors is ignored.
+                  # Additionally, if this field is changed from true to false and the
+                  # `editors` field is not set (nor included in the field mask), then
+                  # the editors will be set to all the editors in the document.
+              "range": { # A range on a sheet. # The range that is being protected.
+                  # The range may be fully unbounded, in which case this is considered
+                  # a protected sheet.
+                  #
+                  # When writing, only one of range or namedRangeId
+                  # may be set.
+                  # 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 grid 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.
+                "startRowIndex": 42, # The start row (inclusive) 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.
+                "endColumnIndex": 42, # The end column (exclusive) of the range, or not set if unbounded.
+              },
+            },
+          ],
+          "data": [ # Data in the grid, if this is a grid sheet.
+              # The number of GridData objects returned is dependent on the number of
+              # ranges requested on this sheet. For example, if this is representing
+              # `Sheet1`, and the spreadsheet was requested with ranges
+              # `Sheet1!A1:C10` and `Sheet1!D15:E20`, then the first GridData will have a
+              # startRow/startColumn of `0`,
+              # while the second one will have `startRow 14` (zero-based row 15),
+              # and `startColumn 3` (zero-based column D).
+            { # Data in the grid, as well as metadata about the dimensions.
+              "startRow": 42, # The first row this GridData refers to, zero-based.
+              "rowMetadata": [ # Metadata about the requested rows in the grid, starting with the row
+                  # in startRow.
+                { # Properties about a dimension.
+                  "pixelSize": 42, # The height (if a row) or width (if a column) of the dimension in pixels.
+                  "hiddenByUser": True or False, # True if this dimension is explicitly hidden.
+                  "hiddenByFilter": True or False, # True if this dimension is being filtered.
+                      # This field is read-only.
+                },
+              ],
+              "startColumn": 42, # The first column this GridData refers to, zero-based.
+              "columnMetadata": [ # Metadata about the requested columns in the grid, starting with the column
+                  # in startColumn.
+                { # Properties about a dimension.
+                  "pixelSize": 42, # The height (if a row) or width (if a column) of the dimension in pixels.
+                  "hiddenByUser": True or False, # True if this dimension is explicitly hidden.
+                  "hiddenByFilter": True or False, # True if this dimension is being filtered.
+                      # This field is read-only.
+                },
+              ],
+              "rowData": [ # The data in the grid, one entry per row,
+                  # starting with the row in startRow.
+                  # The values in RowData will correspond to columns starting
+                  # at startColumn.
+                { # Data about each cell in a row.
+                  "values": [ # The values in the row, one per column.
+                    { # Data about a specific cell.
+                      "pivotTable": { # A pivot table. # A pivot table anchored at this cell. The size of pivot table itself
+                          # is computed dynamically based on its data, grouping, filters, values,
+                          # etc... Only the top-left cell of the pivot table contains the pivot table
+                          # definition. The other cells will contain the calculated values of the
+                          # results of the pivot in their effectiveValue fields.
+                        "valueLayout": "A String", # Whether values should be listed horizontally (as columns)
+                            # or vertically (as rows).
+                        "rows": [ # Each row grouping in the pivot table.
+                          { # A single grouping (either row or column) in a pivot table.
+                            "showTotals": True or False, # True if the pivot table should include the totals for this grouping.
+                            "valueMetadata": [ # Metadata about values in the grouping.
+                              { # Metadata about a value in a pivot grouping.
+                                "collapsed": True or False, # True if the data corresponding to the value is collapsed.
+                                "value": { # The kinds of value that a cell in a spreadsheet can have. # The calculated value the metadata corresponds to.
+                                    # (Note that formulaValue is not valid,
+                                    #  because the values will be calculated.)
+                                  "numberValue": 3.14, # Represents a double value.
+                                      # Note: Dates, Times and DateTimes are represented as doubles in
+                                      # "serial number" format.
+                                  "boolValue": True or False, # Represents a boolean value.
+                                  "formulaValue": "A String", # Represents a formula.
+                                  "stringValue": "A String", # Represents a string value.
+                                      # Leading single quotes are not included. For example, if the user typed
+                                      # `'123` into the UI, this would be represented as a `stringValue` of
+                                      # `"123"`.
+                                  "errorValue": { # An error in a cell. # Represents an error.
+                                      # This field is read-only.
+                                    "message": "A String", # A message with more information about the error
+                                        # (in the spreadsheet's locale).
+                                    "type": "A String", # The type of error.
+                                  },
+                                },
+                              },
+                            ],
+                            "valueBucket": { # Information about which values in a pivot group should be used for sorting. # The bucket of the opposite pivot group to sort by.
+                                # If not specified, sorting is alphabetical by this group's values.
+                              "buckets": [ # Determines the bucket from which values are chosen to sort.
+                                  #
+                                  # For example, in a pivot table with one row group & two column groups,
+                                  # the row group can list up to two values. The first value corresponds
+                                  # to a value within the first column group, and the second value
+                                  # corresponds to a value in the second column group.  If no values
+                                  # are listed, this would indicate that the row should be sorted according
+                                  # to the "Grand Total" over the column groups. If a single value is listed,
+                                  # this would correspond to using the "Total" of that bucket.
+                                { # The kinds of value that a cell in a spreadsheet can have.
+                                  "numberValue": 3.14, # Represents a double value.
+                                      # Note: Dates, Times and DateTimes are represented as doubles in
+                                      # "serial number" format.
+                                  "boolValue": True or False, # Represents a boolean value.
+                                  "formulaValue": "A String", # Represents a formula.
+                                  "stringValue": "A String", # Represents a string value.
+                                      # Leading single quotes are not included. For example, if the user typed
+                                      # `'123` into the UI, this would be represented as a `stringValue` of
+                                      # `"123"`.
+                                  "errorValue": { # An error in a cell. # Represents an error.
+                                      # This field is read-only.
+                                    "message": "A String", # A message with more information about the error
+                                        # (in the spreadsheet's locale).
+                                    "type": "A String", # The type of error.
+                                  },
+                                },
+                              ],
+                              "valuesIndex": 42, # The offset in the [PivotTable.values] list which the values in this
+                                  # grouping should be sorted by.
+                            },
+                            "sortOrder": "A String", # The order the values in this group should be sorted.
+                            "sourceColumnOffset": 42, # The column offset of the source range that this grouping is based on.
+                                #
+                                # For example, if the source was `C10:E15', a `sourceColumnOffset` of `0`
+                                # means this group refers to column `C`, whereas the offset `1` would refer
+                                # to column `D`.
+                          },
+                        ],
+                        "source": { # A range on a sheet. # The range the pivot table is reading data from.
+                            # 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 grid 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.
+                          "startRowIndex": 42, # The start row (inclusive) 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.
+                          "endColumnIndex": 42, # The end column (exclusive) of the range, or not set if unbounded.
+                        },
+                        "values": [ # A list of values to include in the pivot table.
+                          { # The definition of how a value in a pivot table should be calculated.
+                            "formula": "A String", # A custom formula to calculate the value.  The formula must start
+                                # with an `=` character.
+                            "summarizeFunction": "A String", # A function to summarize the value.
+                                # If formula is set, the only supported values are
+                                # SUM and
+                                # CUSTOM.
+                                # If sourceColumnOffset is set, then `CUSTOM`
+                                # is not supported.
+                            "sourceColumnOffset": 42, # The column offset of the source range that this value reads from.
+                                #
+                                # For example, if the source was `C10:E15', a `sourceColumnOffset` of `0`
+                                # means this value refers to column `C`, whereas the offset `1` would
+                                # refer to column `D`.
+                            "name": "A String", # A name to use for the value. This is only used if formula was set.
+                                # Otherwise, the column name is used.
+                          },
+                        ],
+                        "criteria": { # An optional mapping of filters per source column offset.
+                            #
+                            # The filters will be applied before aggregating data into the pivot table.
+                            # The map's key is the column offset of the source range that you want to
+                            # filter, and the value is the criteria for that column.
+                            #
+                            # For example, if the source was `C10:E15', a key of `0` will have the filter
+                            # for column `C`, whereas the key `1` is for column `D`.
+                          "a_key": { # Criteria for showing/hiding rows in a pivot table.
+                            "visibleValues": [ # Values that should be included.  Values not listed here are excluded.
+                              "A String",
+                            ],
+                          },
+                        },
+                        "columns": [ # Each column grouping in the pivot table.
+                          { # A single grouping (either row or column) in a pivot table.
+                            "showTotals": True or False, # True if the pivot table should include the totals for this grouping.
+                            "valueMetadata": [ # Metadata about values in the grouping.
+                              { # Metadata about a value in a pivot grouping.
+                                "collapsed": True or False, # True if the data corresponding to the value is collapsed.
+                                "value": { # The kinds of value that a cell in a spreadsheet can have. # The calculated value the metadata corresponds to.
+                                    # (Note that formulaValue is not valid,
+                                    #  because the values will be calculated.)
+                                  "numberValue": 3.14, # Represents a double value.
+                                      # Note: Dates, Times and DateTimes are represented as doubles in
+                                      # "serial number" format.
+                                  "boolValue": True or False, # Represents a boolean value.
+                                  "formulaValue": "A String", # Represents a formula.
+                                  "stringValue": "A String", # Represents a string value.
+                                      # Leading single quotes are not included. For example, if the user typed
+                                      # `'123` into the UI, this would be represented as a `stringValue` of
+                                      # `"123"`.
+                                  "errorValue": { # An error in a cell. # Represents an error.
+                                      # This field is read-only.
+                                    "message": "A String", # A message with more information about the error
+                                        # (in the spreadsheet's locale).
+                                    "type": "A String", # The type of error.
+                                  },
+                                },
+                              },
+                            ],
+                            "valueBucket": { # Information about which values in a pivot group should be used for sorting. # The bucket of the opposite pivot group to sort by.
+                                # If not specified, sorting is alphabetical by this group's values.
+                              "buckets": [ # Determines the bucket from which values are chosen to sort.
+                                  #
+                                  # For example, in a pivot table with one row group & two column groups,
+                                  # the row group can list up to two values. The first value corresponds
+                                  # to a value within the first column group, and the second value
+                                  # corresponds to a value in the second column group.  If no values
+                                  # are listed, this would indicate that the row should be sorted according
+                                  # to the "Grand Total" over the column groups. If a single value is listed,
+                                  # this would correspond to using the "Total" of that bucket.
+                                { # The kinds of value that a cell in a spreadsheet can have.
+                                  "numberValue": 3.14, # Represents a double value.
+                                      # Note: Dates, Times and DateTimes are represented as doubles in
+                                      # "serial number" format.
+                                  "boolValue": True or False, # Represents a boolean value.
+                                  "formulaValue": "A String", # Represents a formula.
+                                  "stringValue": "A String", # Represents a string value.
+                                      # Leading single quotes are not included. For example, if the user typed
+                                      # `'123` into the UI, this would be represented as a `stringValue` of
+                                      # `"123"`.
+                                  "errorValue": { # An error in a cell. # Represents an error.
+                                      # This field is read-only.
+                                    "message": "A String", # A message with more information about the error
+                                        # (in the spreadsheet's locale).
+                                    "type": "A String", # The type of error.
+                                  },
+                                },
+                              ],
+                              "valuesIndex": 42, # The offset in the [PivotTable.values] list which the values in this
+                                  # grouping should be sorted by.
+                            },
+                            "sortOrder": "A String", # The order the values in this group should be sorted.
+                            "sourceColumnOffset": 42, # The column offset of the source range that this grouping is based on.
+                                #
+                                # For example, if the source was `C10:E15', a `sourceColumnOffset` of `0`
+                                # means this group refers to column `C`, whereas the offset `1` would refer
+                                # to column `D`.
+                          },
+                        ],
+                      },
+                      "hyperlink": "A String", # A hyperlink this cell points to, if any.
+                          # This field is read-only.  (To set it, use a `=HYPERLINK` formula.)
+                      "effectiveValue": { # The kinds of value that a cell in a spreadsheet can have. # The effective value of the cell. For cells with formulas, this will be
+                          # the calculated value.  For cells with literals, this will be
+                          # the same as the user_entered_value.
+                          # This field is read-only.
+                        "numberValue": 3.14, # Represents a double value.
+                            # Note: Dates, Times and DateTimes are represented as doubles in
+                            # "serial number" format.
+                        "boolValue": True or False, # Represents a boolean value.
+                        "formulaValue": "A String", # Represents a formula.
+                        "stringValue": "A String", # Represents a string value.
+                            # Leading single quotes are not included. For example, if the user typed
+                            # `'123` into the UI, this would be represented as a `stringValue` of
+                            # `"123"`.
+                        "errorValue": { # An error in a cell. # Represents an error.
+                            # This field is read-only.
+                          "message": "A String", # A message with more information about the error
+                              # (in the spreadsheet's locale).
+                          "type": "A String", # The type of error.
+                        },
+                      },
+                      "formattedValue": "A String", # The formatted value of the cell.
+                          # This is the value as it's shown to the user.
+                          # This field is read-only.
+                      "userEnteredValue": { # The kinds of value that a cell in a spreadsheet can have. # The value the user entered in the cell. e.g, `1234`, `'Hello'`, or `=NOW()`
+                          # Note: Dates, Times and DateTimes are represented as doubles in
+                          # serial number format.
+                        "numberValue": 3.14, # Represents a double value.
+                            # Note: Dates, Times and DateTimes are represented as doubles in
+                            # "serial number" format.
+                        "boolValue": True or False, # Represents a boolean value.
+                        "formulaValue": "A String", # Represents a formula.
+                        "stringValue": "A String", # Represents a string value.
+                            # Leading single quotes are not included. For example, if the user typed
+                            # `'123` into the UI, this would be represented as a `stringValue` of
+                            # `"123"`.
+                        "errorValue": { # An error in a cell. # Represents an error.
+                            # This field is read-only.
+                          "message": "A String", # A message with more information about the error
+                              # (in the spreadsheet's locale).
+                          "type": "A String", # The type of error.
+                        },
+                      },
+                      "note": "A String", # Any note on the cell.
+                      "effectiveFormat": { # The format of a cell. # The effective format being used by the cell.
+                          # This includes the results of applying any conditional formatting and,
+                          # if the cell contains a formula, the computed number format.
+                          # If the effective format is the default format, effective format will
+                          # not be written.
+                          # This field is read-only.
+                        "numberFormat": { # The number format of a cell. # A format describing how number values should be represented to the user.
+                            # When updating, all fields must be set.
+                          "pattern": "A String", # Pattern string used for formatting.
+                          "type": "A String", # The type of the number format.
+                        },
+                        "textDirection": "A String", # The direction of the text in the cell.
+                        "padding": { # The amount of padding around the cell, in pixels. # The padding of the cell.
+                            # When updating padding, every field must be specified.
+                          "top": 42, # The top padding of the cell.
+                          "right": 42, # The right padding of the cell.
+                          "bottom": 42, # The bottom padding of the cell.
+                          "left": 42, # The left padding of the cell.
+                        },
+                        "horizontalAlignment": "A String", # The horizontal alignment of the value in cell.
+                        "backgroundColor": { # Represents a color in the RGBA color space. This representation is designed # The background color of the cell.
+                            # for simplicity of conversion to/from color representations in various
+                            # languages over compactness; for example, the fields of this representation
+                            # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                            # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                            # method in iOS; and, with just a little work, it can be easily formatted into
+                            # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                            #
+                            # Example (Java):
+                            #
+                            #      import com.google.type.Color;
+                            #
+                            #      // ...
+                            #      public static java.awt.Color fromProto(Color protocolor) {
+                            #        float alpha = protocolor.hasAlpha()
+                            #            ? protocolor.getAlpha().getValue()
+                            #            : 1.0;
+                            #
+                            #        return new java.awt.Color(
+                            #            protocolor.getRed(),
+                            #            protocolor.getGreen(),
+                            #            protocolor.getBlue(),
+                            #            alpha);
+                            #      }
+                            #
+                            #      public static Color toProto(java.awt.Color color) {
+                            #        float red = (float) color.getRed();
+                            #        float green = (float) color.getGreen();
+                            #        float blue = (float) color.getBlue();
+                            #        float denominator = 255.0;
+                            #        Color.Builder resultBuilder =
+                            #            Color
+                            #                .newBuilder()
+                            #                .setRed(red / denominator)
+                            #                .setGreen(green / denominator)
+                            #                .setBlue(blue / denominator);
+                            #        int alpha = color.getAlpha();
+                            #        if (alpha != 255) {
+                            #          result.setAlpha(
+                            #              FloatValue
+                            #                  .newBuilder()
+                            #                  .setValue(((float) alpha) / denominator)
+                            #                  .build());
+                            #        }
+                            #        return resultBuilder.build();
+                            #      }
+                            #      // ...
+                            #
+                            # Example (iOS / Obj-C):
+                            #
+                            #      // ...
+                            #      static UIColor* fromProto(Color* protocolor) {
+                            #         float red = [protocolor red];
+                            #         float green = [protocolor green];
+                            #         float blue = [protocolor blue];
+                            #         FloatValue* alpha_wrapper = [protocolor alpha];
+                            #         float alpha = 1.0;
+                            #         if (alpha_wrapper != nil) {
+                            #           alpha = [alpha_wrapper value];
+                            #         }
+                            #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                            #      }
+                            #
+                            #      static Color* toProto(UIColor* color) {
+                            #          CGFloat red, green, blue, alpha;
+                            #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                            #            return nil;
+                            #          }
+                            #          Color* result = [Color alloc] init];
+                            #          [result setRed:red];
+                            #          [result setGreen:green];
+                            #          [result setBlue:blue];
+                            #          if (alpha <= 0.9999) {
+                            #            [result setAlpha:floatWrapperWithValue(alpha)];
+                            #          }
+                            #          [result autorelease];
+                            #          return result;
+                            #     }
+                            #     // ...
+                            #
+                            #  Example (JavaScript):
+                            #
+                            #     // ...
+                            #
+                            #     var protoToCssColor = function(rgb_color) {
+                            #        var redFrac = rgb_color.red || 0.0;
+                            #        var greenFrac = rgb_color.green || 0.0;
+                            #        var blueFrac = rgb_color.blue || 0.0;
+                            #        var red = Math.floor(redFrac * 255);
+                            #        var green = Math.floor(greenFrac * 255);
+                            #        var blue = Math.floor(blueFrac * 255);
+                            #
+                            #        if (!('alpha' in rgb_color)) {
+                            #           return rgbToCssColor_(red, green, blue);
+                            #        }
+                            #
+                            #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                            #        var rgbParams = [red, green, blue].join(',');
+                            #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                            #     };
+                            #
+                            #     var rgbToCssColor_ = function(red, green, blue) {
+                            #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                            #       var hexString = rgbNumber.toString(16);
+                            #       var missingZeros = 6 - hexString.length;
+                            #       var resultBuilder = ['#'];
+                            #       for (var i = 0; i < missingZeros; i++) {
+                            #          resultBuilder.push('0');
+                            #       }
+                            #       resultBuilder.push(hexString);
+                            #       return resultBuilder.join('');
+                            #     };
+                            #
+                            #     // ...
+                          "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                          "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                              # the final pixel color is defined by the equation:
+                              #
+                              #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                              #
+                              # This means that a value of 1.0 corresponds to a solid color, whereas
+                              # a value of 0.0 corresponds to a completely transparent color. This
+                              # uses a wrapper message rather than a simple float scalar so that it is
+                              # possible to distinguish between a default value and the value being unset.
+                              # If omitted, this color object is to be rendered as a solid color
+                              # (as if the alpha value had been explicitly given with a value of 1.0).
+                          "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                          "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                        },
+                        "verticalAlignment": "A String", # The vertical alignment of the value in cell.
+                        "textFormat": { # The format of a run of text in a cell. # The format of the text in the cell (unless overridden by a format run).
+                            # Absent values indicate that the field isn't specified.
+                          "foregroundColor": { # Represents a color in the RGBA color space. This representation is designed # The foreground color of the text.
+                              # for simplicity of conversion to/from color representations in various
+                              # languages over compactness; for example, the fields of this representation
+                              # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                              # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                              # method in iOS; and, with just a little work, it can be easily formatted into
+                              # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                              #
+                              # Example (Java):
+                              #
+                              #      import com.google.type.Color;
+                              #
+                              #      // ...
+                              #      public static java.awt.Color fromProto(Color protocolor) {
+                              #        float alpha = protocolor.hasAlpha()
+                              #            ? protocolor.getAlpha().getValue()
+                              #            : 1.0;
+                              #
+                              #        return new java.awt.Color(
+                              #            protocolor.getRed(),
+                              #            protocolor.getGreen(),
+                              #            protocolor.getBlue(),
+                              #            alpha);
+                              #      }
+                              #
+                              #      public static Color toProto(java.awt.Color color) {
+                              #        float red = (float) color.getRed();
+                              #        float green = (float) color.getGreen();
+                              #        float blue = (float) color.getBlue();
+                              #        float denominator = 255.0;
+                              #        Color.Builder resultBuilder =
+                              #            Color
+                              #                .newBuilder()
+                              #                .setRed(red / denominator)
+                              #                .setGreen(green / denominator)
+                              #                .setBlue(blue / denominator);
+                              #        int alpha = color.getAlpha();
+                              #        if (alpha != 255) {
+                              #          result.setAlpha(
+                              #              FloatValue
+                              #                  .newBuilder()
+                              #                  .setValue(((float) alpha) / denominator)
+                              #                  .build());
+                              #        }
+                              #        return resultBuilder.build();
+                              #      }
+                              #      // ...
+                              #
+                              # Example (iOS / Obj-C):
+                              #
+                              #      // ...
+                              #      static UIColor* fromProto(Color* protocolor) {
+                              #         float red = [protocolor red];
+                              #         float green = [protocolor green];
+                              #         float blue = [protocolor blue];
+                              #         FloatValue* alpha_wrapper = [protocolor alpha];
+                              #         float alpha = 1.0;
+                              #         if (alpha_wrapper != nil) {
+                              #           alpha = [alpha_wrapper value];
+                              #         }
+                              #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                              #      }
+                              #
+                              #      static Color* toProto(UIColor* color) {
+                              #          CGFloat red, green, blue, alpha;
+                              #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                              #            return nil;
+                              #          }
+                              #          Color* result = [Color alloc] init];
+                              #          [result setRed:red];
+                              #          [result setGreen:green];
+                              #          [result setBlue:blue];
+                              #          if (alpha <= 0.9999) {
+                              #            [result setAlpha:floatWrapperWithValue(alpha)];
+                              #          }
+                              #          [result autorelease];
+                              #          return result;
+                              #     }
+                              #     // ...
+                              #
+                              #  Example (JavaScript):
+                              #
+                              #     // ...
+                              #
+                              #     var protoToCssColor = function(rgb_color) {
+                              #        var redFrac = rgb_color.red || 0.0;
+                              #        var greenFrac = rgb_color.green || 0.0;
+                              #        var blueFrac = rgb_color.blue || 0.0;
+                              #        var red = Math.floor(redFrac * 255);
+                              #        var green = Math.floor(greenFrac * 255);
+                              #        var blue = Math.floor(blueFrac * 255);
+                              #
+                              #        if (!('alpha' in rgb_color)) {
+                              #           return rgbToCssColor_(red, green, blue);
+                              #        }
+                              #
+                              #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                              #        var rgbParams = [red, green, blue].join(',');
+                              #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                              #     };
+                              #
+                              #     var rgbToCssColor_ = function(red, green, blue) {
+                              #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                              #       var hexString = rgbNumber.toString(16);
+                              #       var missingZeros = 6 - hexString.length;
+                              #       var resultBuilder = ['#'];
+                              #       for (var i = 0; i < missingZeros; i++) {
+                              #          resultBuilder.push('0');
+                              #       }
+                              #       resultBuilder.push(hexString);
+                              #       return resultBuilder.join('');
+                              #     };
+                              #
+                              #     // ...
+                            "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                            "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                                # the final pixel color is defined by the equation:
+                                #
+                                #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                                #
+                                # This means that a value of 1.0 corresponds to a solid color, whereas
+                                # a value of 0.0 corresponds to a completely transparent color. This
+                                # uses a wrapper message rather than a simple float scalar so that it is
+                                # possible to distinguish between a default value and the value being unset.
+                                # If omitted, this color object is to be rendered as a solid color
+                                # (as if the alpha value had been explicitly given with a value of 1.0).
+                            "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                            "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                          },
+                          "bold": True or False, # True if the text is bold.
+                          "strikethrough": True or False, # True if the text has a strikethrough.
+                          "fontFamily": "A String", # The font family.
+                          "fontSize": 42, # The size of the font.
+                          "italic": True or False, # True if the text is italicized.
+                          "underline": True or False, # True if the text is underlined.
+                        },
+                        "hyperlinkDisplayType": "A String", # How a hyperlink, if it exists, should be displayed in the cell.
+                        "borders": { # The borders of the cell. # The borders of the cell.
+                          "top": { # A border along a cell. # The top border of the cell.
+                            "color": { # Represents a color in the RGBA color space. This representation is designed # The color of the border.
+                                # for simplicity of conversion to/from color representations in various
+                                # languages over compactness; for example, the fields of this representation
+                                # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                                # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                                # method in iOS; and, with just a little work, it can be easily formatted into
+                                # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                                #
+                                # Example (Java):
+                                #
+                                #      import com.google.type.Color;
+                                #
+                                #      // ...
+                                #      public static java.awt.Color fromProto(Color protocolor) {
+                                #        float alpha = protocolor.hasAlpha()
+                                #            ? protocolor.getAlpha().getValue()
+                                #            : 1.0;
+                                #
+                                #        return new java.awt.Color(
+                                #            protocolor.getRed(),
+                                #            protocolor.getGreen(),
+                                #            protocolor.getBlue(),
+                                #            alpha);
+                                #      }
+                                #
+                                #      public static Color toProto(java.awt.Color color) {
+                                #        float red = (float) color.getRed();
+                                #        float green = (float) color.getGreen();
+                                #        float blue = (float) color.getBlue();
+                                #        float denominator = 255.0;
+                                #        Color.Builder resultBuilder =
+                                #            Color
+                                #                .newBuilder()
+                                #                .setRed(red / denominator)
+                                #                .setGreen(green / denominator)
+                                #                .setBlue(blue / denominator);
+                                #        int alpha = color.getAlpha();
+                                #        if (alpha != 255) {
+                                #          result.setAlpha(
+                                #              FloatValue
+                                #                  .newBuilder()
+                                #                  .setValue(((float) alpha) / denominator)
+                                #                  .build());
+                                #        }
+                                #        return resultBuilder.build();
+                                #      }
+                                #      // ...
+                                #
+                                # Example (iOS / Obj-C):
+                                #
+                                #      // ...
+                                #      static UIColor* fromProto(Color* protocolor) {
+                                #         float red = [protocolor red];
+                                #         float green = [protocolor green];
+                                #         float blue = [protocolor blue];
+                                #         FloatValue* alpha_wrapper = [protocolor alpha];
+                                #         float alpha = 1.0;
+                                #         if (alpha_wrapper != nil) {
+                                #           alpha = [alpha_wrapper value];
+                                #         }
+                                #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                                #      }
+                                #
+                                #      static Color* toProto(UIColor* color) {
+                                #          CGFloat red, green, blue, alpha;
+                                #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                                #            return nil;
+                                #          }
+                                #          Color* result = [Color alloc] init];
+                                #          [result setRed:red];
+                                #          [result setGreen:green];
+                                #          [result setBlue:blue];
+                                #          if (alpha <= 0.9999) {
+                                #            [result setAlpha:floatWrapperWithValue(alpha)];
+                                #          }
+                                #          [result autorelease];
+                                #          return result;
+                                #     }
+                                #     // ...
+                                #
+                                #  Example (JavaScript):
+                                #
+                                #     // ...
+                                #
+                                #     var protoToCssColor = function(rgb_color) {
+                                #        var redFrac = rgb_color.red || 0.0;
+                                #        var greenFrac = rgb_color.green || 0.0;
+                                #        var blueFrac = rgb_color.blue || 0.0;
+                                #        var red = Math.floor(redFrac * 255);
+                                #        var green = Math.floor(greenFrac * 255);
+                                #        var blue = Math.floor(blueFrac * 255);
+                                #
+                                #        if (!('alpha' in rgb_color)) {
+                                #           return rgbToCssColor_(red, green, blue);
+                                #        }
+                                #
+                                #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                                #        var rgbParams = [red, green, blue].join(',');
+                                #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                                #     };
+                                #
+                                #     var rgbToCssColor_ = function(red, green, blue) {
+                                #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                                #       var hexString = rgbNumber.toString(16);
+                                #       var missingZeros = 6 - hexString.length;
+                                #       var resultBuilder = ['#'];
+                                #       for (var i = 0; i < missingZeros; i++) {
+                                #          resultBuilder.push('0');
+                                #       }
+                                #       resultBuilder.push(hexString);
+                                #       return resultBuilder.join('');
+                                #     };
+                                #
+                                #     // ...
+                              "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                              "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                                  # the final pixel color is defined by the equation:
+                                  #
+                                  #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                                  #
+                                  # This means that a value of 1.0 corresponds to a solid color, whereas
+                                  # a value of 0.0 corresponds to a completely transparent color. This
+                                  # uses a wrapper message rather than a simple float scalar so that it is
+                                  # possible to distinguish between a default value and the value being unset.
+                                  # If omitted, this color object is to be rendered as a solid color
+                                  # (as if the alpha value had been explicitly given with a value of 1.0).
+                              "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                              "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                            },
+                            "width": 42, # The width of the border, in pixels.
+                                # Border widths must be between 0 and 3 pixels.
+                            "style": "A String", # The style of the border.
+                          },
+                          "right": { # A border along a cell. # The right border of the cell.
+                            "color": { # Represents a color in the RGBA color space. This representation is designed # The color of the border.
+                                # for simplicity of conversion to/from color representations in various
+                                # languages over compactness; for example, the fields of this representation
+                                # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                                # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                                # method in iOS; and, with just a little work, it can be easily formatted into
+                                # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                                #
+                                # Example (Java):
+                                #
+                                #      import com.google.type.Color;
+                                #
+                                #      // ...
+                                #      public static java.awt.Color fromProto(Color protocolor) {
+                                #        float alpha = protocolor.hasAlpha()
+                                #            ? protocolor.getAlpha().getValue()
+                                #            : 1.0;
+                                #
+                                #        return new java.awt.Color(
+                                #            protocolor.getRed(),
+                                #            protocolor.getGreen(),
+                                #            protocolor.getBlue(),
+                                #            alpha);
+                                #      }
+                                #
+                                #      public static Color toProto(java.awt.Color color) {
+                                #        float red = (float) color.getRed();
+                                #        float green = (float) color.getGreen();
+                                #        float blue = (float) color.getBlue();
+                                #        float denominator = 255.0;
+                                #        Color.Builder resultBuilder =
+                                #            Color
+                                #                .newBuilder()
+                                #                .setRed(red / denominator)
+                                #                .setGreen(green / denominator)
+                                #                .setBlue(blue / denominator);
+                                #        int alpha = color.getAlpha();
+                                #        if (alpha != 255) {
+                                #          result.setAlpha(
+                                #              FloatValue
+                                #                  .newBuilder()
+                                #                  .setValue(((float) alpha) / denominator)
+                                #                  .build());
+                                #        }
+                                #        return resultBuilder.build();
+                                #      }
+                                #      // ...
+                                #
+                                # Example (iOS / Obj-C):
+                                #
+                                #      // ...
+                                #      static UIColor* fromProto(Color* protocolor) {
+                                #         float red = [protocolor red];
+                                #         float green = [protocolor green];
+                                #         float blue = [protocolor blue];
+                                #         FloatValue* alpha_wrapper = [protocolor alpha];
+                                #         float alpha = 1.0;
+                                #         if (alpha_wrapper != nil) {
+                                #           alpha = [alpha_wrapper value];
+                                #         }
+                                #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                                #      }
+                                #
+                                #      static Color* toProto(UIColor* color) {
+                                #          CGFloat red, green, blue, alpha;
+                                #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                                #            return nil;
+                                #          }
+                                #          Color* result = [Color alloc] init];
+                                #          [result setRed:red];
+                                #          [result setGreen:green];
+                                #          [result setBlue:blue];
+                                #          if (alpha <= 0.9999) {
+                                #            [result setAlpha:floatWrapperWithValue(alpha)];
+                                #          }
+                                #          [result autorelease];
+                                #          return result;
+                                #     }
+                                #     // ...
+                                #
+                                #  Example (JavaScript):
+                                #
+                                #     // ...
+                                #
+                                #     var protoToCssColor = function(rgb_color) {
+                                #        var redFrac = rgb_color.red || 0.0;
+                                #        var greenFrac = rgb_color.green || 0.0;
+                                #        var blueFrac = rgb_color.blue || 0.0;
+                                #        var red = Math.floor(redFrac * 255);
+                                #        var green = Math.floor(greenFrac * 255);
+                                #        var blue = Math.floor(blueFrac * 255);
+                                #
+                                #        if (!('alpha' in rgb_color)) {
+                                #           return rgbToCssColor_(red, green, blue);
+                                #        }
+                                #
+                                #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                                #        var rgbParams = [red, green, blue].join(',');
+                                #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                                #     };
+                                #
+                                #     var rgbToCssColor_ = function(red, green, blue) {
+                                #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                                #       var hexString = rgbNumber.toString(16);
+                                #       var missingZeros = 6 - hexString.length;
+                                #       var resultBuilder = ['#'];
+                                #       for (var i = 0; i < missingZeros; i++) {
+                                #          resultBuilder.push('0');
+                                #       }
+                                #       resultBuilder.push(hexString);
+                                #       return resultBuilder.join('');
+                                #     };
+                                #
+                                #     // ...
+                              "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                              "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                                  # the final pixel color is defined by the equation:
+                                  #
+                                  #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                                  #
+                                  # This means that a value of 1.0 corresponds to a solid color, whereas
+                                  # a value of 0.0 corresponds to a completely transparent color. This
+                                  # uses a wrapper message rather than a simple float scalar so that it is
+                                  # possible to distinguish between a default value and the value being unset.
+                                  # If omitted, this color object is to be rendered as a solid color
+                                  # (as if the alpha value had been explicitly given with a value of 1.0).
+                              "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                              "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                            },
+                            "width": 42, # The width of the border, in pixels.
+                                # Border widths must be between 0 and 3 pixels.
+                            "style": "A String", # The style of the border.
+                          },
+                          "bottom": { # A border along a cell. # The bottom border of the cell.
+                            "color": { # Represents a color in the RGBA color space. This representation is designed # The color of the border.
+                                # for simplicity of conversion to/from color representations in various
+                                # languages over compactness; for example, the fields of this representation
+                                # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                                # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                                # method in iOS; and, with just a little work, it can be easily formatted into
+                                # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                                #
+                                # Example (Java):
+                                #
+                                #      import com.google.type.Color;
+                                #
+                                #      // ...
+                                #      public static java.awt.Color fromProto(Color protocolor) {
+                                #        float alpha = protocolor.hasAlpha()
+                                #            ? protocolor.getAlpha().getValue()
+                                #            : 1.0;
+                                #
+                                #        return new java.awt.Color(
+                                #            protocolor.getRed(),
+                                #            protocolor.getGreen(),
+                                #            protocolor.getBlue(),
+                                #            alpha);
+                                #      }
+                                #
+                                #      public static Color toProto(java.awt.Color color) {
+                                #        float red = (float) color.getRed();
+                                #        float green = (float) color.getGreen();
+                                #        float blue = (float) color.getBlue();
+                                #        float denominator = 255.0;
+                                #        Color.Builder resultBuilder =
+                                #            Color
+                                #                .newBuilder()
+                                #                .setRed(red / denominator)
+                                #                .setGreen(green / denominator)
+                                #                .setBlue(blue / denominator);
+                                #        int alpha = color.getAlpha();
+                                #        if (alpha != 255) {
+                                #          result.setAlpha(
+                                #              FloatValue
+                                #                  .newBuilder()
+                                #                  .setValue(((float) alpha) / denominator)
+                                #                  .build());
+                                #        }
+                                #        return resultBuilder.build();
+                                #      }
+                                #      // ...
+                                #
+                                # Example (iOS / Obj-C):
+                                #
+                                #      // ...
+                                #      static UIColor* fromProto(Color* protocolor) {
+                                #         float red = [protocolor red];
+                                #         float green = [protocolor green];
+                                #         float blue = [protocolor blue];
+                                #         FloatValue* alpha_wrapper = [protocolor alpha];
+                                #         float alpha = 1.0;
+                                #         if (alpha_wrapper != nil) {
+                                #           alpha = [alpha_wrapper value];
+                                #         }
+                                #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                                #      }
+                                #
+                                #      static Color* toProto(UIColor* color) {
+                                #          CGFloat red, green, blue, alpha;
+                                #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                                #            return nil;
+                                #          }
+                                #          Color* result = [Color alloc] init];
+                                #          [result setRed:red];
+                                #          [result setGreen:green];
+                                #          [result setBlue:blue];
+                                #          if (alpha <= 0.9999) {
+                                #            [result setAlpha:floatWrapperWithValue(alpha)];
+                                #          }
+                                #          [result autorelease];
+                                #          return result;
+                                #     }
+                                #     // ...
+                                #
+                                #  Example (JavaScript):
+                                #
+                                #     // ...
+                                #
+                                #     var protoToCssColor = function(rgb_color) {
+                                #        var redFrac = rgb_color.red || 0.0;
+                                #        var greenFrac = rgb_color.green || 0.0;
+                                #        var blueFrac = rgb_color.blue || 0.0;
+                                #        var red = Math.floor(redFrac * 255);
+                                #        var green = Math.floor(greenFrac * 255);
+                                #        var blue = Math.floor(blueFrac * 255);
+                                #
+                                #        if (!('alpha' in rgb_color)) {
+                                #           return rgbToCssColor_(red, green, blue);
+                                #        }
+                                #
+                                #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                                #        var rgbParams = [red, green, blue].join(',');
+                                #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                                #     };
+                                #
+                                #     var rgbToCssColor_ = function(red, green, blue) {
+                                #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                                #       var hexString = rgbNumber.toString(16);
+                                #       var missingZeros = 6 - hexString.length;
+                                #       var resultBuilder = ['#'];
+                                #       for (var i = 0; i < missingZeros; i++) {
+                                #          resultBuilder.push('0');
+                                #       }
+                                #       resultBuilder.push(hexString);
+                                #       return resultBuilder.join('');
+                                #     };
+                                #
+                                #     // ...
+                              "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                              "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                                  # the final pixel color is defined by the equation:
+                                  #
+                                  #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                                  #
+                                  # This means that a value of 1.0 corresponds to a solid color, whereas
+                                  # a value of 0.0 corresponds to a completely transparent color. This
+                                  # uses a wrapper message rather than a simple float scalar so that it is
+                                  # possible to distinguish between a default value and the value being unset.
+                                  # If omitted, this color object is to be rendered as a solid color
+                                  # (as if the alpha value had been explicitly given with a value of 1.0).
+                              "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                              "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                            },
+                            "width": 42, # The width of the border, in pixels.
+                                # Border widths must be between 0 and 3 pixels.
+                            "style": "A String", # The style of the border.
+                          },
+                          "left": { # A border along a cell. # The left border of the cell.
+                            "color": { # Represents a color in the RGBA color space. This representation is designed # The color of the border.
+                                # for simplicity of conversion to/from color representations in various
+                                # languages over compactness; for example, the fields of this representation
+                                # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                                # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                                # method in iOS; and, with just a little work, it can be easily formatted into
+                                # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                                #
+                                # Example (Java):
+                                #
+                                #      import com.google.type.Color;
+                                #
+                                #      // ...
+                                #      public static java.awt.Color fromProto(Color protocolor) {
+                                #        float alpha = protocolor.hasAlpha()
+                                #            ? protocolor.getAlpha().getValue()
+                                #            : 1.0;
+                                #
+                                #        return new java.awt.Color(
+                                #            protocolor.getRed(),
+                                #            protocolor.getGreen(),
+                                #            protocolor.getBlue(),
+                                #            alpha);
+                                #      }
+                                #
+                                #      public static Color toProto(java.awt.Color color) {
+                                #        float red = (float) color.getRed();
+                                #        float green = (float) color.getGreen();
+                                #        float blue = (float) color.getBlue();
+                                #        float denominator = 255.0;
+                                #        Color.Builder resultBuilder =
+                                #            Color
+                                #                .newBuilder()
+                                #                .setRed(red / denominator)
+                                #                .setGreen(green / denominator)
+                                #                .setBlue(blue / denominator);
+                                #        int alpha = color.getAlpha();
+                                #        if (alpha != 255) {
+                                #          result.setAlpha(
+                                #              FloatValue
+                                #                  .newBuilder()
+                                #                  .setValue(((float) alpha) / denominator)
+                                #                  .build());
+                                #        }
+                                #        return resultBuilder.build();
+                                #      }
+                                #      // ...
+                                #
+                                # Example (iOS / Obj-C):
+                                #
+                                #      // ...
+                                #      static UIColor* fromProto(Color* protocolor) {
+                                #         float red = [protocolor red];
+                                #         float green = [protocolor green];
+                                #         float blue = [protocolor blue];
+                                #         FloatValue* alpha_wrapper = [protocolor alpha];
+                                #         float alpha = 1.0;
+                                #         if (alpha_wrapper != nil) {
+                                #           alpha = [alpha_wrapper value];
+                                #         }
+                                #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                                #      }
+                                #
+                                #      static Color* toProto(UIColor* color) {
+                                #          CGFloat red, green, blue, alpha;
+                                #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                                #            return nil;
+                                #          }
+                                #          Color* result = [Color alloc] init];
+                                #          [result setRed:red];
+                                #          [result setGreen:green];
+                                #          [result setBlue:blue];
+                                #          if (alpha <= 0.9999) {
+                                #            [result setAlpha:floatWrapperWithValue(alpha)];
+                                #          }
+                                #          [result autorelease];
+                                #          return result;
+                                #     }
+                                #     // ...
+                                #
+                                #  Example (JavaScript):
+                                #
+                                #     // ...
+                                #
+                                #     var protoToCssColor = function(rgb_color) {
+                                #        var redFrac = rgb_color.red || 0.0;
+                                #        var greenFrac = rgb_color.green || 0.0;
+                                #        var blueFrac = rgb_color.blue || 0.0;
+                                #        var red = Math.floor(redFrac * 255);
+                                #        var green = Math.floor(greenFrac * 255);
+                                #        var blue = Math.floor(blueFrac * 255);
+                                #
+                                #        if (!('alpha' in rgb_color)) {
+                                #           return rgbToCssColor_(red, green, blue);
+                                #        }
+                                #
+                                #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                                #        var rgbParams = [red, green, blue].join(',');
+                                #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                                #     };
+                                #
+                                #     var rgbToCssColor_ = function(red, green, blue) {
+                                #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                                #       var hexString = rgbNumber.toString(16);
+                                #       var missingZeros = 6 - hexString.length;
+                                #       var resultBuilder = ['#'];
+                                #       for (var i = 0; i < missingZeros; i++) {
+                                #          resultBuilder.push('0');
+                                #       }
+                                #       resultBuilder.push(hexString);
+                                #       return resultBuilder.join('');
+                                #     };
+                                #
+                                #     // ...
+                              "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                              "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                                  # the final pixel color is defined by the equation:
+                                  #
+                                  #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                                  #
+                                  # This means that a value of 1.0 corresponds to a solid color, whereas
+                                  # a value of 0.0 corresponds to a completely transparent color. This
+                                  # uses a wrapper message rather than a simple float scalar so that it is
+                                  # possible to distinguish between a default value and the value being unset.
+                                  # If omitted, this color object is to be rendered as a solid color
+                                  # (as if the alpha value had been explicitly given with a value of 1.0).
+                              "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                              "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                            },
+                            "width": 42, # The width of the border, in pixels.
+                                # Border widths must be between 0 and 3 pixels.
+                            "style": "A String", # The style of the border.
+                          },
+                        },
+                        "wrapStrategy": "A String", # The wrap strategy for the value in the cell.
+                      },
+                      "userEnteredFormat": { # The format of a cell. # The format the user entered for the cell.
+                          #
+                          # When writing, the new format will be merged with the existing format.
+                        "numberFormat": { # The number format of a cell. # A format describing how number values should be represented to the user.
+                            # When updating, all fields must be set.
+                          "pattern": "A String", # Pattern string used for formatting.
+                          "type": "A String", # The type of the number format.
+                        },
+                        "textDirection": "A String", # The direction of the text in the cell.
+                        "padding": { # The amount of padding around the cell, in pixels. # The padding of the cell.
+                            # When updating padding, every field must be specified.
+                          "top": 42, # The top padding of the cell.
+                          "right": 42, # The right padding of the cell.
+                          "bottom": 42, # The bottom padding of the cell.
+                          "left": 42, # The left padding of the cell.
+                        },
+                        "horizontalAlignment": "A String", # The horizontal alignment of the value in cell.
+                        "backgroundColor": { # Represents a color in the RGBA color space. This representation is designed # The background color of the cell.
+                            # for simplicity of conversion to/from color representations in various
+                            # languages over compactness; for example, the fields of this representation
+                            # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                            # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                            # method in iOS; and, with just a little work, it can be easily formatted into
+                            # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                            #
+                            # Example (Java):
+                            #
+                            #      import com.google.type.Color;
+                            #
+                            #      // ...
+                            #      public static java.awt.Color fromProto(Color protocolor) {
+                            #        float alpha = protocolor.hasAlpha()
+                            #            ? protocolor.getAlpha().getValue()
+                            #            : 1.0;
+                            #
+                            #        return new java.awt.Color(
+                            #            protocolor.getRed(),
+                            #            protocolor.getGreen(),
+                            #            protocolor.getBlue(),
+                            #            alpha);
+                            #      }
+                            #
+                            #      public static Color toProto(java.awt.Color color) {
+                            #        float red = (float) color.getRed();
+                            #        float green = (float) color.getGreen();
+                            #        float blue = (float) color.getBlue();
+                            #        float denominator = 255.0;
+                            #        Color.Builder resultBuilder =
+                            #            Color
+                            #                .newBuilder()
+                            #                .setRed(red / denominator)
+                            #                .setGreen(green / denominator)
+                            #                .setBlue(blue / denominator);
+                            #        int alpha = color.getAlpha();
+                            #        if (alpha != 255) {
+                            #          result.setAlpha(
+                            #              FloatValue
+                            #                  .newBuilder()
+                            #                  .setValue(((float) alpha) / denominator)
+                            #                  .build());
+                            #        }
+                            #        return resultBuilder.build();
+                            #      }
+                            #      // ...
+                            #
+                            # Example (iOS / Obj-C):
+                            #
+                            #      // ...
+                            #      static UIColor* fromProto(Color* protocolor) {
+                            #         float red = [protocolor red];
+                            #         float green = [protocolor green];
+                            #         float blue = [protocolor blue];
+                            #         FloatValue* alpha_wrapper = [protocolor alpha];
+                            #         float alpha = 1.0;
+                            #         if (alpha_wrapper != nil) {
+                            #           alpha = [alpha_wrapper value];
+                            #         }
+                            #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                            #      }
+                            #
+                            #      static Color* toProto(UIColor* color) {
+                            #          CGFloat red, green, blue, alpha;
+                            #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                            #            return nil;
+                            #          }
+                            #          Color* result = [Color alloc] init];
+                            #          [result setRed:red];
+                            #          [result setGreen:green];
+                            #          [result setBlue:blue];
+                            #          if (alpha <= 0.9999) {
+                            #            [result setAlpha:floatWrapperWithValue(alpha)];
+                            #          }
+                            #          [result autorelease];
+                            #          return result;
+                            #     }
+                            #     // ...
+                            #
+                            #  Example (JavaScript):
+                            #
+                            #     // ...
+                            #
+                            #     var protoToCssColor = function(rgb_color) {
+                            #        var redFrac = rgb_color.red || 0.0;
+                            #        var greenFrac = rgb_color.green || 0.0;
+                            #        var blueFrac = rgb_color.blue || 0.0;
+                            #        var red = Math.floor(redFrac * 255);
+                            #        var green = Math.floor(greenFrac * 255);
+                            #        var blue = Math.floor(blueFrac * 255);
+                            #
+                            #        if (!('alpha' in rgb_color)) {
+                            #           return rgbToCssColor_(red, green, blue);
+                            #        }
+                            #
+                            #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                            #        var rgbParams = [red, green, blue].join(',');
+                            #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                            #     };
+                            #
+                            #     var rgbToCssColor_ = function(red, green, blue) {
+                            #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                            #       var hexString = rgbNumber.toString(16);
+                            #       var missingZeros = 6 - hexString.length;
+                            #       var resultBuilder = ['#'];
+                            #       for (var i = 0; i < missingZeros; i++) {
+                            #          resultBuilder.push('0');
+                            #       }
+                            #       resultBuilder.push(hexString);
+                            #       return resultBuilder.join('');
+                            #     };
+                            #
+                            #     // ...
+                          "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                          "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                              # the final pixel color is defined by the equation:
+                              #
+                              #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                              #
+                              # This means that a value of 1.0 corresponds to a solid color, whereas
+                              # a value of 0.0 corresponds to a completely transparent color. This
+                              # uses a wrapper message rather than a simple float scalar so that it is
+                              # possible to distinguish between a default value and the value being unset.
+                              # If omitted, this color object is to be rendered as a solid color
+                              # (as if the alpha value had been explicitly given with a value of 1.0).
+                          "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                          "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                        },
+                        "verticalAlignment": "A String", # The vertical alignment of the value in cell.
+                        "textFormat": { # The format of a run of text in a cell. # The format of the text in the cell (unless overridden by a format run).
+                            # Absent values indicate that the field isn't specified.
+                          "foregroundColor": { # Represents a color in the RGBA color space. This representation is designed # The foreground color of the text.
+                              # for simplicity of conversion to/from color representations in various
+                              # languages over compactness; for example, the fields of this representation
+                              # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                              # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                              # method in iOS; and, with just a little work, it can be easily formatted into
+                              # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                              #
+                              # Example (Java):
+                              #
+                              #      import com.google.type.Color;
+                              #
+                              #      // ...
+                              #      public static java.awt.Color fromProto(Color protocolor) {
+                              #        float alpha = protocolor.hasAlpha()
+                              #            ? protocolor.getAlpha().getValue()
+                              #            : 1.0;
+                              #
+                              #        return new java.awt.Color(
+                              #            protocolor.getRed(),
+                              #            protocolor.getGreen(),
+                              #            protocolor.getBlue(),
+                              #            alpha);
+                              #      }
+                              #
+                              #      public static Color toProto(java.awt.Color color) {
+                              #        float red = (float) color.getRed();
+                              #        float green = (float) color.getGreen();
+                              #        float blue = (float) color.getBlue();
+                              #        float denominator = 255.0;
+                              #        Color.Builder resultBuilder =
+                              #            Color
+                              #                .newBuilder()
+                              #                .setRed(red / denominator)
+                              #                .setGreen(green / denominator)
+                              #                .setBlue(blue / denominator);
+                              #        int alpha = color.getAlpha();
+                              #        if (alpha != 255) {
+                              #          result.setAlpha(
+                              #              FloatValue
+                              #                  .newBuilder()
+                              #                  .setValue(((float) alpha) / denominator)
+                              #                  .build());
+                              #        }
+                              #        return resultBuilder.build();
+                              #      }
+                              #      // ...
+                              #
+                              # Example (iOS / Obj-C):
+                              #
+                              #      // ...
+                              #      static UIColor* fromProto(Color* protocolor) {
+                              #         float red = [protocolor red];
+                              #         float green = [protocolor green];
+                              #         float blue = [protocolor blue];
+                              #         FloatValue* alpha_wrapper = [protocolor alpha];
+                              #         float alpha = 1.0;
+                              #         if (alpha_wrapper != nil) {
+                              #           alpha = [alpha_wrapper value];
+                              #         }
+                              #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                              #      }
+                              #
+                              #      static Color* toProto(UIColor* color) {
+                              #          CGFloat red, green, blue, alpha;
+                              #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                              #            return nil;
+                              #          }
+                              #          Color* result = [Color alloc] init];
+                              #          [result setRed:red];
+                              #          [result setGreen:green];
+                              #          [result setBlue:blue];
+                              #          if (alpha <= 0.9999) {
+                              #            [result setAlpha:floatWrapperWithValue(alpha)];
+                              #          }
+                              #          [result autorelease];
+                              #          return result;
+                              #     }
+                              #     // ...
+                              #
+                              #  Example (JavaScript):
+                              #
+                              #     // ...
+                              #
+                              #     var protoToCssColor = function(rgb_color) {
+                              #        var redFrac = rgb_color.red || 0.0;
+                              #        var greenFrac = rgb_color.green || 0.0;
+                              #        var blueFrac = rgb_color.blue || 0.0;
+                              #        var red = Math.floor(redFrac * 255);
+                              #        var green = Math.floor(greenFrac * 255);
+                              #        var blue = Math.floor(blueFrac * 255);
+                              #
+                              #        if (!('alpha' in rgb_color)) {
+                              #           return rgbToCssColor_(red, green, blue);
+                              #        }
+                              #
+                              #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                              #        var rgbParams = [red, green, blue].join(',');
+                              #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                              #     };
+                              #
+                              #     var rgbToCssColor_ = function(red, green, blue) {
+                              #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                              #       var hexString = rgbNumber.toString(16);
+                              #       var missingZeros = 6 - hexString.length;
+                              #       var resultBuilder = ['#'];
+                              #       for (var i = 0; i < missingZeros; i++) {
+                              #          resultBuilder.push('0');
+                              #       }
+                              #       resultBuilder.push(hexString);
+                              #       return resultBuilder.join('');
+                              #     };
+                              #
+                              #     // ...
+                            "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                            "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                                # the final pixel color is defined by the equation:
+                                #
+                                #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                                #
+                                # This means that a value of 1.0 corresponds to a solid color, whereas
+                                # a value of 0.0 corresponds to a completely transparent color. This
+                                # uses a wrapper message rather than a simple float scalar so that it is
+                                # possible to distinguish between a default value and the value being unset.
+                                # If omitted, this color object is to be rendered as a solid color
+                                # (as if the alpha value had been explicitly given with a value of 1.0).
+                            "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                            "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                          },
+                          "bold": True or False, # True if the text is bold.
+                          "strikethrough": True or False, # True if the text has a strikethrough.
+                          "fontFamily": "A String", # The font family.
+                          "fontSize": 42, # The size of the font.
+                          "italic": True or False, # True if the text is italicized.
+                          "underline": True or False, # True if the text is underlined.
+                        },
+                        "hyperlinkDisplayType": "A String", # How a hyperlink, if it exists, should be displayed in the cell.
+                        "borders": { # The borders of the cell. # The borders of the cell.
+                          "top": { # A border along a cell. # The top border of the cell.
+                            "color": { # Represents a color in the RGBA color space. This representation is designed # The color of the border.
+                                # for simplicity of conversion to/from color representations in various
+                                # languages over compactness; for example, the fields of this representation
+                                # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                                # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                                # method in iOS; and, with just a little work, it can be easily formatted into
+                                # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                                #
+                                # Example (Java):
+                                #
+                                #      import com.google.type.Color;
+                                #
+                                #      // ...
+                                #      public static java.awt.Color fromProto(Color protocolor) {
+                                #        float alpha = protocolor.hasAlpha()
+                                #            ? protocolor.getAlpha().getValue()
+                                #            : 1.0;
+                                #
+                                #        return new java.awt.Color(
+                                #            protocolor.getRed(),
+                                #            protocolor.getGreen(),
+                                #            protocolor.getBlue(),
+                                #            alpha);
+                                #      }
+                                #
+                                #      public static Color toProto(java.awt.Color color) {
+                                #        float red = (float) color.getRed();
+                                #        float green = (float) color.getGreen();
+                                #        float blue = (float) color.getBlue();
+                                #        float denominator = 255.0;
+                                #        Color.Builder resultBuilder =
+                                #            Color
+                                #                .newBuilder()
+                                #                .setRed(red / denominator)
+                                #                .setGreen(green / denominator)
+                                #                .setBlue(blue / denominator);
+                                #        int alpha = color.getAlpha();
+                                #        if (alpha != 255) {
+                                #          result.setAlpha(
+                                #              FloatValue
+                                #                  .newBuilder()
+                                #                  .setValue(((float) alpha) / denominator)
+                                #                  .build());
+                                #        }
+                                #        return resultBuilder.build();
+                                #      }
+                                #      // ...
+                                #
+                                # Example (iOS / Obj-C):
+                                #
+                                #      // ...
+                                #      static UIColor* fromProto(Color* protocolor) {
+                                #         float red = [protocolor red];
+                                #         float green = [protocolor green];
+                                #         float blue = [protocolor blue];
+                                #         FloatValue* alpha_wrapper = [protocolor alpha];
+                                #         float alpha = 1.0;
+                                #         if (alpha_wrapper != nil) {
+                                #           alpha = [alpha_wrapper value];
+                                #         }
+                                #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                                #      }
+                                #
+                                #      static Color* toProto(UIColor* color) {
+                                #          CGFloat red, green, blue, alpha;
+                                #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                                #            return nil;
+                                #          }
+                                #          Color* result = [Color alloc] init];
+                                #          [result setRed:red];
+                                #          [result setGreen:green];
+                                #          [result setBlue:blue];
+                                #          if (alpha <= 0.9999) {
+                                #            [result setAlpha:floatWrapperWithValue(alpha)];
+                                #          }
+                                #          [result autorelease];
+                                #          return result;
+                                #     }
+                                #     // ...
+                                #
+                                #  Example (JavaScript):
+                                #
+                                #     // ...
+                                #
+                                #     var protoToCssColor = function(rgb_color) {
+                                #        var redFrac = rgb_color.red || 0.0;
+                                #        var greenFrac = rgb_color.green || 0.0;
+                                #        var blueFrac = rgb_color.blue || 0.0;
+                                #        var red = Math.floor(redFrac * 255);
+                                #        var green = Math.floor(greenFrac * 255);
+                                #        var blue = Math.floor(blueFrac * 255);
+                                #
+                                #        if (!('alpha' in rgb_color)) {
+                                #           return rgbToCssColor_(red, green, blue);
+                                #        }
+                                #
+                                #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                                #        var rgbParams = [red, green, blue].join(',');
+                                #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                                #     };
+                                #
+                                #     var rgbToCssColor_ = function(red, green, blue) {
+                                #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                                #       var hexString = rgbNumber.toString(16);
+                                #       var missingZeros = 6 - hexString.length;
+                                #       var resultBuilder = ['#'];
+                                #       for (var i = 0; i < missingZeros; i++) {
+                                #          resultBuilder.push('0');
+                                #       }
+                                #       resultBuilder.push(hexString);
+                                #       return resultBuilder.join('');
+                                #     };
+                                #
+                                #     // ...
+                              "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                              "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                                  # the final pixel color is defined by the equation:
+                                  #
+                                  #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                                  #
+                                  # This means that a value of 1.0 corresponds to a solid color, whereas
+                                  # a value of 0.0 corresponds to a completely transparent color. This
+                                  # uses a wrapper message rather than a simple float scalar so that it is
+                                  # possible to distinguish between a default value and the value being unset.
+                                  # If omitted, this color object is to be rendered as a solid color
+                                  # (as if the alpha value had been explicitly given with a value of 1.0).
+                              "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                              "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                            },
+                            "width": 42, # The width of the border, in pixels.
+                                # Border widths must be between 0 and 3 pixels.
+                            "style": "A String", # The style of the border.
+                          },
+                          "right": { # A border along a cell. # The right border of the cell.
+                            "color": { # Represents a color in the RGBA color space. This representation is designed # The color of the border.
+                                # for simplicity of conversion to/from color representations in various
+                                # languages over compactness; for example, the fields of this representation
+                                # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                                # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                                # method in iOS; and, with just a little work, it can be easily formatted into
+                                # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                                #
+                                # Example (Java):
+                                #
+                                #      import com.google.type.Color;
+                                #
+                                #      // ...
+                                #      public static java.awt.Color fromProto(Color protocolor) {
+                                #        float alpha = protocolor.hasAlpha()
+                                #            ? protocolor.getAlpha().getValue()
+                                #            : 1.0;
+                                #
+                                #        return new java.awt.Color(
+                                #            protocolor.getRed(),
+                                #            protocolor.getGreen(),
+                                #            protocolor.getBlue(),
+                                #            alpha);
+                                #      }
+                                #
+                                #      public static Color toProto(java.awt.Color color) {
+                                #        float red = (float) color.getRed();
+                                #        float green = (float) color.getGreen();
+                                #        float blue = (float) color.getBlue();
+                                #        float denominator = 255.0;
+                                #        Color.Builder resultBuilder =
+                                #            Color
+                                #                .newBuilder()
+                                #                .setRed(red / denominator)
+                                #                .setGreen(green / denominator)
+                                #                .setBlue(blue / denominator);
+                                #        int alpha = color.getAlpha();
+                                #        if (alpha != 255) {
+                                #          result.setAlpha(
+                                #              FloatValue
+                                #                  .newBuilder()
+                                #                  .setValue(((float) alpha) / denominator)
+                                #                  .build());
+                                #        }
+                                #        return resultBuilder.build();
+                                #      }
+                                #      // ...
+                                #
+                                # Example (iOS / Obj-C):
+                                #
+                                #      // ...
+                                #      static UIColor* fromProto(Color* protocolor) {
+                                #         float red = [protocolor red];
+                                #         float green = [protocolor green];
+                                #         float blue = [protocolor blue];
+                                #         FloatValue* alpha_wrapper = [protocolor alpha];
+                                #         float alpha = 1.0;
+                                #         if (alpha_wrapper != nil) {
+                                #           alpha = [alpha_wrapper value];
+                                #         }
+                                #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                                #      }
+                                #
+                                #      static Color* toProto(UIColor* color) {
+                                #          CGFloat red, green, blue, alpha;
+                                #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                                #            return nil;
+                                #          }
+                                #          Color* result = [Color alloc] init];
+                                #          [result setRed:red];
+                                #          [result setGreen:green];
+                                #          [result setBlue:blue];
+                                #          if (alpha <= 0.9999) {
+                                #            [result setAlpha:floatWrapperWithValue(alpha)];
+                                #          }
+                                #          [result autorelease];
+                                #          return result;
+                                #     }
+                                #     // ...
+                                #
+                                #  Example (JavaScript):
+                                #
+                                #     // ...
+                                #
+                                #     var protoToCssColor = function(rgb_color) {
+                                #        var redFrac = rgb_color.red || 0.0;
+                                #        var greenFrac = rgb_color.green || 0.0;
+                                #        var blueFrac = rgb_color.blue || 0.0;
+                                #        var red = Math.floor(redFrac * 255);
+                                #        var green = Math.floor(greenFrac * 255);
+                                #        var blue = Math.floor(blueFrac * 255);
+                                #
+                                #        if (!('alpha' in rgb_color)) {
+                                #           return rgbToCssColor_(red, green, blue);
+                                #        }
+                                #
+                                #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                                #        var rgbParams = [red, green, blue].join(',');
+                                #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                                #     };
+                                #
+                                #     var rgbToCssColor_ = function(red, green, blue) {
+                                #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                                #       var hexString = rgbNumber.toString(16);
+                                #       var missingZeros = 6 - hexString.length;
+                                #       var resultBuilder = ['#'];
+                                #       for (var i = 0; i < missingZeros; i++) {
+                                #          resultBuilder.push('0');
+                                #       }
+                                #       resultBuilder.push(hexString);
+                                #       return resultBuilder.join('');
+                                #     };
+                                #
+                                #     // ...
+                              "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                              "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                                  # the final pixel color is defined by the equation:
+                                  #
+                                  #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                                  #
+                                  # This means that a value of 1.0 corresponds to a solid color, whereas
+                                  # a value of 0.0 corresponds to a completely transparent color. This
+                                  # uses a wrapper message rather than a simple float scalar so that it is
+                                  # possible to distinguish between a default value and the value being unset.
+                                  # If omitted, this color object is to be rendered as a solid color
+                                  # (as if the alpha value had been explicitly given with a value of 1.0).
+                              "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                              "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                            },
+                            "width": 42, # The width of the border, in pixels.
+                                # Border widths must be between 0 and 3 pixels.
+                            "style": "A String", # The style of the border.
+                          },
+                          "bottom": { # A border along a cell. # The bottom border of the cell.
+                            "color": { # Represents a color in the RGBA color space. This representation is designed # The color of the border.
+                                # for simplicity of conversion to/from color representations in various
+                                # languages over compactness; for example, the fields of this representation
+                                # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                                # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                                # method in iOS; and, with just a little work, it can be easily formatted into
+                                # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                                #
+                                # Example (Java):
+                                #
+                                #      import com.google.type.Color;
+                                #
+                                #      // ...
+                                #      public static java.awt.Color fromProto(Color protocolor) {
+                                #        float alpha = protocolor.hasAlpha()
+                                #            ? protocolor.getAlpha().getValue()
+                                #            : 1.0;
+                                #
+                                #        return new java.awt.Color(
+                                #            protocolor.getRed(),
+                                #            protocolor.getGreen(),
+                                #            protocolor.getBlue(),
+                                #            alpha);
+                                #      }
+                                #
+                                #      public static Color toProto(java.awt.Color color) {
+                                #        float red = (float) color.getRed();
+                                #        float green = (float) color.getGreen();
+                                #        float blue = (float) color.getBlue();
+                                #        float denominator = 255.0;
+                                #        Color.Builder resultBuilder =
+                                #            Color
+                                #                .newBuilder()
+                                #                .setRed(red / denominator)
+                                #                .setGreen(green / denominator)
+                                #                .setBlue(blue / denominator);
+                                #        int alpha = color.getAlpha();
+                                #        if (alpha != 255) {
+                                #          result.setAlpha(
+                                #              FloatValue
+                                #                  .newBuilder()
+                                #                  .setValue(((float) alpha) / denominator)
+                                #                  .build());
+                                #        }
+                                #        return resultBuilder.build();
+                                #      }
+                                #      // ...
+                                #
+                                # Example (iOS / Obj-C):
+                                #
+                                #      // ...
+                                #      static UIColor* fromProto(Color* protocolor) {
+                                #         float red = [protocolor red];
+                                #         float green = [protocolor green];
+                                #         float blue = [protocolor blue];
+                                #         FloatValue* alpha_wrapper = [protocolor alpha];
+                                #         float alpha = 1.0;
+                                #         if (alpha_wrapper != nil) {
+                                #           alpha = [alpha_wrapper value];
+                                #         }
+                                #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                                #      }
+                                #
+                                #      static Color* toProto(UIColor* color) {
+                                #          CGFloat red, green, blue, alpha;
+                                #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                                #            return nil;
+                                #          }
+                                #          Color* result = [Color alloc] init];
+                                #          [result setRed:red];
+                                #          [result setGreen:green];
+                                #          [result setBlue:blue];
+                                #          if (alpha <= 0.9999) {
+                                #            [result setAlpha:floatWrapperWithValue(alpha)];
+                                #          }
+                                #          [result autorelease];
+                                #          return result;
+                                #     }
+                                #     // ...
+                                #
+                                #  Example (JavaScript):
+                                #
+                                #     // ...
+                                #
+                                #     var protoToCssColor = function(rgb_color) {
+                                #        var redFrac = rgb_color.red || 0.0;
+                                #        var greenFrac = rgb_color.green || 0.0;
+                                #        var blueFrac = rgb_color.blue || 0.0;
+                                #        var red = Math.floor(redFrac * 255);
+                                #        var green = Math.floor(greenFrac * 255);
+                                #        var blue = Math.floor(blueFrac * 255);
+                                #
+                                #        if (!('alpha' in rgb_color)) {
+                                #           return rgbToCssColor_(red, green, blue);
+                                #        }
+                                #
+                                #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                                #        var rgbParams = [red, green, blue].join(',');
+                                #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                                #     };
+                                #
+                                #     var rgbToCssColor_ = function(red, green, blue) {
+                                #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                                #       var hexString = rgbNumber.toString(16);
+                                #       var missingZeros = 6 - hexString.length;
+                                #       var resultBuilder = ['#'];
+                                #       for (var i = 0; i < missingZeros; i++) {
+                                #          resultBuilder.push('0');
+                                #       }
+                                #       resultBuilder.push(hexString);
+                                #       return resultBuilder.join('');
+                                #     };
+                                #
+                                #     // ...
+                              "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                              "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                                  # the final pixel color is defined by the equation:
+                                  #
+                                  #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                                  #
+                                  # This means that a value of 1.0 corresponds to a solid color, whereas
+                                  # a value of 0.0 corresponds to a completely transparent color. This
+                                  # uses a wrapper message rather than a simple float scalar so that it is
+                                  # possible to distinguish between a default value and the value being unset.
+                                  # If omitted, this color object is to be rendered as a solid color
+                                  # (as if the alpha value had been explicitly given with a value of 1.0).
+                              "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                              "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                            },
+                            "width": 42, # The width of the border, in pixels.
+                                # Border widths must be between 0 and 3 pixels.
+                            "style": "A String", # The style of the border.
+                          },
+                          "left": { # A border along a cell. # The left border of the cell.
+                            "color": { # Represents a color in the RGBA color space. This representation is designed # The color of the border.
+                                # for simplicity of conversion to/from color representations in various
+                                # languages over compactness; for example, the fields of this representation
+                                # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                                # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                                # method in iOS; and, with just a little work, it can be easily formatted into
+                                # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                                #
+                                # Example (Java):
+                                #
+                                #      import com.google.type.Color;
+                                #
+                                #      // ...
+                                #      public static java.awt.Color fromProto(Color protocolor) {
+                                #        float alpha = protocolor.hasAlpha()
+                                #            ? protocolor.getAlpha().getValue()
+                                #            : 1.0;
+                                #
+                                #        return new java.awt.Color(
+                                #            protocolor.getRed(),
+                                #            protocolor.getGreen(),
+                                #            protocolor.getBlue(),
+                                #            alpha);
+                                #      }
+                                #
+                                #      public static Color toProto(java.awt.Color color) {
+                                #        float red = (float) color.getRed();
+                                #        float green = (float) color.getGreen();
+                                #        float blue = (float) color.getBlue();
+                                #        float denominator = 255.0;
+                                #        Color.Builder resultBuilder =
+                                #            Color
+                                #                .newBuilder()
+                                #                .setRed(red / denominator)
+                                #                .setGreen(green / denominator)
+                                #                .setBlue(blue / denominator);
+                                #        int alpha = color.getAlpha();
+                                #        if (alpha != 255) {
+                                #          result.setAlpha(
+                                #              FloatValue
+                                #                  .newBuilder()
+                                #                  .setValue(((float) alpha) / denominator)
+                                #                  .build());
+                                #        }
+                                #        return resultBuilder.build();
+                                #      }
+                                #      // ...
+                                #
+                                # Example (iOS / Obj-C):
+                                #
+                                #      // ...
+                                #      static UIColor* fromProto(Color* protocolor) {
+                                #         float red = [protocolor red];
+                                #         float green = [protocolor green];
+                                #         float blue = [protocolor blue];
+                                #         FloatValue* alpha_wrapper = [protocolor alpha];
+                                #         float alpha = 1.0;
+                                #         if (alpha_wrapper != nil) {
+                                #           alpha = [alpha_wrapper value];
+                                #         }
+                                #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                                #      }
+                                #
+                                #      static Color* toProto(UIColor* color) {
+                                #          CGFloat red, green, blue, alpha;
+                                #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                                #            return nil;
+                                #          }
+                                #          Color* result = [Color alloc] init];
+                                #          [result setRed:red];
+                                #          [result setGreen:green];
+                                #          [result setBlue:blue];
+                                #          if (alpha <= 0.9999) {
+                                #            [result setAlpha:floatWrapperWithValue(alpha)];
+                                #          }
+                                #          [result autorelease];
+                                #          return result;
+                                #     }
+                                #     // ...
+                                #
+                                #  Example (JavaScript):
+                                #
+                                #     // ...
+                                #
+                                #     var protoToCssColor = function(rgb_color) {
+                                #        var redFrac = rgb_color.red || 0.0;
+                                #        var greenFrac = rgb_color.green || 0.0;
+                                #        var blueFrac = rgb_color.blue || 0.0;
+                                #        var red = Math.floor(redFrac * 255);
+                                #        var green = Math.floor(greenFrac * 255);
+                                #        var blue = Math.floor(blueFrac * 255);
+                                #
+                                #        if (!('alpha' in rgb_color)) {
+                                #           return rgbToCssColor_(red, green, blue);
+                                #        }
+                                #
+                                #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                                #        var rgbParams = [red, green, blue].join(',');
+                                #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                                #     };
+                                #
+                                #     var rgbToCssColor_ = function(red, green, blue) {
+                                #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                                #       var hexString = rgbNumber.toString(16);
+                                #       var missingZeros = 6 - hexString.length;
+                                #       var resultBuilder = ['#'];
+                                #       for (var i = 0; i < missingZeros; i++) {
+                                #          resultBuilder.push('0');
+                                #       }
+                                #       resultBuilder.push(hexString);
+                                #       return resultBuilder.join('');
+                                #     };
+                                #
+                                #     // ...
+                              "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                              "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                                  # the final pixel color is defined by the equation:
+                                  #
+                                  #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                                  #
+                                  # This means that a value of 1.0 corresponds to a solid color, whereas
+                                  # a value of 0.0 corresponds to a completely transparent color. This
+                                  # uses a wrapper message rather than a simple float scalar so that it is
+                                  # possible to distinguish between a default value and the value being unset.
+                                  # If omitted, this color object is to be rendered as a solid color
+                                  # (as if the alpha value had been explicitly given with a value of 1.0).
+                              "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                              "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                            },
+                            "width": 42, # The width of the border, in pixels.
+                                # Border widths must be between 0 and 3 pixels.
+                            "style": "A String", # The style of the border.
+                          },
+                        },
+                        "wrapStrategy": "A String", # The wrap strategy for the value in the cell.
+                      },
+                      "dataValidation": { # A data validation rule. # A data validation rule on the cell, if any.
+                          #
+                          # When writing, the new data validation rule will overwrite any prior rule.
+                        "showCustomUi": True or False, # True if the UI should be customized based on the kind of condition.
+                            # If true, "List" conditions will show a dropdown.
+                        "strict": True or False, # True if invalid data should be rejected.
+                        "inputMessage": "A String", # A message to show the user when adding data to the cell.
+                        "condition": { # A condition that can evaluate to true or false. # The condition that data in the cell must match.
+                            # BooleanConditions are used by conditional formatting,
+                            # data validation, and the criteria in filters.
+                          "type": "A String", # The type of condition.
+                          "values": [ # The values of the condition. The number of supported values depends
+                              # on the condition type.  Some support zero values,
+                              # others one or two values,
+                              # and ConditionType.ONE_OF_LIST supports an arbitrary number of values.
+                            { # The value of the condition.
+                              "relativeDate": "A String", # A relative date (based on the current date).
+                                  # Valid only if the type is
+                                  # DATE_BEFORE,
+                                  # DATE_AFTER,
+                                  # DATE_ON_OR_BEFORE or
+                                  # DATE_ON_OR_AFTER.
+                                  #
+                                  # Relative dates are not supported in data validation.
+                                  # They are supported only in conditional formatting and
+                                  # conditional filters.
+                              "userEnteredValue": "A String", # A value the condition is based on.
+                                  # The value will be parsed as if the user typed into a cell.
+                                  # Formulas are supported (and must begin with an `=`).
+                            },
+                          ],
+                        },
+                      },
+                      "textFormatRuns": [ # Runs of rich text applied to subsections of the cell.
+                          # Runs start at specific indexes in the text and continue until the next
+                          # run. Properties of a run will continue unless explicitly changed
+                          # in a subsequent run (and properties of the first run will continue
+                          # the properties of the cell unless explicitly changed).
+                          #
+                          # When writing, the new runs will overwrite any prior runs.
+                        { # A run of a text format. The format of this run continues until explicitly
+                            # overridden in the next run.
+                            # When updating, all fields must be set.
+                          "startIndex": 42, # The character index where this run starts.
+                          "format": { # The format of a run of text in a cell. # The format of this run.  Absent values inherit the cell's format.
+                              # Absent values indicate that the field isn't specified.
+                            "foregroundColor": { # Represents a color in the RGBA color space. This representation is designed # The foreground color of the text.
+                                # for simplicity of conversion to/from color representations in various
+                                # languages over compactness; for example, the fields of this representation
+                                # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                                # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                                # method in iOS; and, with just a little work, it can be easily formatted into
+                                # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                                #
+                                # Example (Java):
+                                #
+                                #      import com.google.type.Color;
+                                #
+                                #      // ...
+                                #      public static java.awt.Color fromProto(Color protocolor) {
+                                #        float alpha = protocolor.hasAlpha()
+                                #            ? protocolor.getAlpha().getValue()
+                                #            : 1.0;
+                                #
+                                #        return new java.awt.Color(
+                                #            protocolor.getRed(),
+                                #            protocolor.getGreen(),
+                                #            protocolor.getBlue(),
+                                #            alpha);
+                                #      }
+                                #
+                                #      public static Color toProto(java.awt.Color color) {
+                                #        float red = (float) color.getRed();
+                                #        float green = (float) color.getGreen();
+                                #        float blue = (float) color.getBlue();
+                                #        float denominator = 255.0;
+                                #        Color.Builder resultBuilder =
+                                #            Color
+                                #                .newBuilder()
+                                #                .setRed(red / denominator)
+                                #                .setGreen(green / denominator)
+                                #                .setBlue(blue / denominator);
+                                #        int alpha = color.getAlpha();
+                                #        if (alpha != 255) {
+                                #          result.setAlpha(
+                                #              FloatValue
+                                #                  .newBuilder()
+                                #                  .setValue(((float) alpha) / denominator)
+                                #                  .build());
+                                #        }
+                                #        return resultBuilder.build();
+                                #      }
+                                #      // ...
+                                #
+                                # Example (iOS / Obj-C):
+                                #
+                                #      // ...
+                                #      static UIColor* fromProto(Color* protocolor) {
+                                #         float red = [protocolor red];
+                                #         float green = [protocolor green];
+                                #         float blue = [protocolor blue];
+                                #         FloatValue* alpha_wrapper = [protocolor alpha];
+                                #         float alpha = 1.0;
+                                #         if (alpha_wrapper != nil) {
+                                #           alpha = [alpha_wrapper value];
+                                #         }
+                                #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                                #      }
+                                #
+                                #      static Color* toProto(UIColor* color) {
+                                #          CGFloat red, green, blue, alpha;
+                                #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                                #            return nil;
+                                #          }
+                                #          Color* result = [Color alloc] init];
+                                #          [result setRed:red];
+                                #          [result setGreen:green];
+                                #          [result setBlue:blue];
+                                #          if (alpha <= 0.9999) {
+                                #            [result setAlpha:floatWrapperWithValue(alpha)];
+                                #          }
+                                #          [result autorelease];
+                                #          return result;
+                                #     }
+                                #     // ...
+                                #
+                                #  Example (JavaScript):
+                                #
+                                #     // ...
+                                #
+                                #     var protoToCssColor = function(rgb_color) {
+                                #        var redFrac = rgb_color.red || 0.0;
+                                #        var greenFrac = rgb_color.green || 0.0;
+                                #        var blueFrac = rgb_color.blue || 0.0;
+                                #        var red = Math.floor(redFrac * 255);
+                                #        var green = Math.floor(greenFrac * 255);
+                                #        var blue = Math.floor(blueFrac * 255);
+                                #
+                                #        if (!('alpha' in rgb_color)) {
+                                #           return rgbToCssColor_(red, green, blue);
+                                #        }
+                                #
+                                #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                                #        var rgbParams = [red, green, blue].join(',');
+                                #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                                #     };
+                                #
+                                #     var rgbToCssColor_ = function(red, green, blue) {
+                                #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                                #       var hexString = rgbNumber.toString(16);
+                                #       var missingZeros = 6 - hexString.length;
+                                #       var resultBuilder = ['#'];
+                                #       for (var i = 0; i < missingZeros; i++) {
+                                #          resultBuilder.push('0');
+                                #       }
+                                #       resultBuilder.push(hexString);
+                                #       return resultBuilder.join('');
+                                #     };
+                                #
+                                #     // ...
+                              "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                              "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                                  # the final pixel color is defined by the equation:
+                                  #
+                                  #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                                  #
+                                  # This means that a value of 1.0 corresponds to a solid color, whereas
+                                  # a value of 0.0 corresponds to a completely transparent color. This
+                                  # uses a wrapper message rather than a simple float scalar so that it is
+                                  # possible to distinguish between a default value and the value being unset.
+                                  # If omitted, this color object is to be rendered as a solid color
+                                  # (as if the alpha value had been explicitly given with a value of 1.0).
+                              "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                              "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                            },
+                            "bold": True or False, # True if the text is bold.
+                            "strikethrough": True or False, # True if the text has a strikethrough.
+                            "fontFamily": "A String", # The font family.
+                            "fontSize": 42, # The size of the font.
+                            "italic": True or False, # True if the text is italicized.
+                            "underline": True or False, # True if the text is underlined.
+                          },
+                        },
+                      ],
+                    },
+                  ],
+                },
+              ],
+            },
+          ],
+          "properties": { # Properties of a sheet. # The properties of the sheet.
+            "sheetType": "A String", # The type of sheet. Defaults to GRID.
+                # This field cannot be changed once set.
+            "index": 42, # The index of the sheet within the spreadsheet.
+                # When adding or updating sheet properties, if this field
+                # is excluded then the sheet will be added or moved to the end
+                # of the sheet list.
+            "title": "A String", # The name of the sheet.
+            "gridProperties": { # Properties of a grid. # Additional properties of the sheet if this sheet is a grid.
+                # (If the sheet is an object sheet, containing a chart or image, then
+                # this field will be absent.)
+                # When writing it is an error to set any grid properties on non-grid sheets.
+              "columnCount": 42, # The number of columns in the grid.
+              "rowCount": 42, # The number of rows in the grid.
+              "frozenColumnCount": 42, # The number of columns that are frozen in the grid.
+              "hideGridlines": True or False, # True if the grid isn't showing gridlines in the UI.
+              "frozenRowCount": 42, # The number of rows that are frozen in the grid.
+            },
+            "rightToLeft": True or False, # True if the sheet is an RTL sheet instead of an LTR sheet.
+            "tabColor": { # Represents a color in the RGBA color space. This representation is designed # The color of the tab in the UI.
+                # for simplicity of conversion to/from color representations in various
+                # languages over compactness; for example, the fields of this representation
+                # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                # method in iOS; and, with just a little work, it can be easily formatted into
+                # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                #
+                # Example (Java):
+                #
+                #      import com.google.type.Color;
+                #
+                #      // ...
+                #      public static java.awt.Color fromProto(Color protocolor) {
+                #        float alpha = protocolor.hasAlpha()
+                #            ? protocolor.getAlpha().getValue()
+                #            : 1.0;
+                #
+                #        return new java.awt.Color(
+                #            protocolor.getRed(),
+                #            protocolor.getGreen(),
+                #            protocolor.getBlue(),
+                #            alpha);
+                #      }
+                #
+                #      public static Color toProto(java.awt.Color color) {
+                #        float red = (float) color.getRed();
+                #        float green = (float) color.getGreen();
+                #        float blue = (float) color.getBlue();
+                #        float denominator = 255.0;
+                #        Color.Builder resultBuilder =
+                #            Color
+                #                .newBuilder()
+                #                .setRed(red / denominator)
+                #                .setGreen(green / denominator)
+                #                .setBlue(blue / denominator);
+                #        int alpha = color.getAlpha();
+                #        if (alpha != 255) {
+                #          result.setAlpha(
+                #              FloatValue
+                #                  .newBuilder()
+                #                  .setValue(((float) alpha) / denominator)
+                #                  .build());
+                #        }
+                #        return resultBuilder.build();
+                #      }
+                #      // ...
+                #
+                # Example (iOS / Obj-C):
+                #
+                #      // ...
+                #      static UIColor* fromProto(Color* protocolor) {
+                #         float red = [protocolor red];
+                #         float green = [protocolor green];
+                #         float blue = [protocolor blue];
+                #         FloatValue* alpha_wrapper = [protocolor alpha];
+                #         float alpha = 1.0;
+                #         if (alpha_wrapper != nil) {
+                #           alpha = [alpha_wrapper value];
+                #         }
+                #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                #      }
+                #
+                #      static Color* toProto(UIColor* color) {
+                #          CGFloat red, green, blue, alpha;
+                #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                #            return nil;
+                #          }
+                #          Color* result = [Color alloc] init];
+                #          [result setRed:red];
+                #          [result setGreen:green];
+                #          [result setBlue:blue];
+                #          if (alpha <= 0.9999) {
+                #            [result setAlpha:floatWrapperWithValue(alpha)];
+                #          }
+                #          [result autorelease];
+                #          return result;
+                #     }
+                #     // ...
+                #
+                #  Example (JavaScript):
+                #
+                #     // ...
+                #
+                #     var protoToCssColor = function(rgb_color) {
+                #        var redFrac = rgb_color.red || 0.0;
+                #        var greenFrac = rgb_color.green || 0.0;
+                #        var blueFrac = rgb_color.blue || 0.0;
+                #        var red = Math.floor(redFrac * 255);
+                #        var green = Math.floor(greenFrac * 255);
+                #        var blue = Math.floor(blueFrac * 255);
+                #
+                #        if (!('alpha' in rgb_color)) {
+                #           return rgbToCssColor_(red, green, blue);
+                #        }
+                #
+                #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                #        var rgbParams = [red, green, blue].join(',');
+                #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                #     };
+                #
+                #     var rgbToCssColor_ = function(red, green, blue) {
+                #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                #       var hexString = rgbNumber.toString(16);
+                #       var missingZeros = 6 - hexString.length;
+                #       var resultBuilder = ['#'];
+                #       for (var i = 0; i < missingZeros; i++) {
+                #          resultBuilder.push('0');
+                #       }
+                #       resultBuilder.push(hexString);
+                #       return resultBuilder.join('');
+                #     };
+                #
+                #     // ...
+              "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+              "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                  # the final pixel color is defined by the equation:
+                  #
+                  #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                  #
+                  # This means that a value of 1.0 corresponds to a solid color, whereas
+                  # a value of 0.0 corresponds to a completely transparent color. This
+                  # uses a wrapper message rather than a simple float scalar so that it is
+                  # possible to distinguish between a default value and the value being unset.
+                  # If omitted, this color object is to be rendered as a solid color
+                  # (as if the alpha value had been explicitly given with a value of 1.0).
+              "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+              "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+            },
+            "hidden": True or False, # True if the sheet is hidden in the UI, false if it's visible.
+            "sheetId": 42, # The ID of the sheet. Must be non-negative.
+                # This field cannot be changed once set.
+          },
+        },
+      ],
+    }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="get">get(spreadsheetId, ranges=None, x__xgafv=None, includeGridData=None)</code>
+  <pre>Returns the spreadsheet at the given id.
+The caller must specify the spreadsheet ID.
+
+By default, data within grids will not be returned.
+You can include grid data one of two ways: specify a field mask listing
+your desired fields (using the `fields` URL parameter in HTTP,
+or `FieldMaskContext.response_mask` in the request extensions in an RPC),
+or by setting the
+includeGridData URL parameter
+to true.  If a field mask is set, the `includeGridData` parameter is
+ignored.
+
+For large spreadsheets, it is recommended to retrieve only the specific
+fields of the spreadsheet that you want.
+
+To retrieve only subsets of the spreadsheet, use the
+ranges URL parameter.
+Multiple ranges can be specified.  Limiting the range will
+return only the portions of the spreadsheet that intersect the requested
+ranges. Ranges are specified using A1 notation.
+
+Args:
+  spreadsheetId: string, The spreadsheet to request. (required)
+  ranges: string, The ranges to retrieve from the spreadsheet. (repeated)
+  x__xgafv: string, V1 error format.
+    Allowed values
+      1 - v1 error format
+      2 - v2 error format
+  includeGridData: boolean, True if grid data should be returned.
+This parameter is ignored if a field mask was set in the request.
+
+Returns:
+  An object of the form:
+
+    { # Resource that represents a spreadsheet.
+      "spreadsheetId": "A String", # The ID of the spreadsheet.
+          # This field is read-only.
+      "namedRanges": [ # The named ranges defined in a spreadsheet.
+        { # A named range.
+          "namedRangeId": "A String", # The ID of the named range.
+          "range": { # A range on a sheet. # The range this represents.
+              # 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 grid 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.
+            "startRowIndex": 42, # The start row (inclusive) 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.
+            "endColumnIndex": 42, # The end column (exclusive) of the range, or not set if unbounded.
+          },
+          "name": "A String", # The name of the named range.
+        },
+      ],
+      "properties": { # Properties of a spreadsheet. # Overall properties of a spreadsheet.
+        "locale": "A String", # The locale of the spreadsheet in one of the following formats:
+            # * an ISO 639-1 language code such as `en`
+            # * an ISO 639-2 language code such as `fil`, if no 639-1 code exists
+            # * a combination of the ISO language code and country code, such as `en_US`
+            # Note: when updating this field, not all locales/languages are supported.
+        "timeZone": "A String", # The time zone of the spreadsheet, in CLDR format such as
+            # `America/New_York`. If the time zone isn't recognized, this may
+            # be a custom time zone such as `GMT-07:00`.
+        "autoRecalc": "A String", # The amount of time to wait before volatile functions are recalculated.
+        "defaultFormat": { # The format of a cell. # The default format of all cells in the spreadsheet.
+            # CellData.effectiveFormat will not be set if the cell's format is equal
+            # to this default format.
+            # This field is read-only.
+          "numberFormat": { # The number format of a cell. # A format describing how number values should be represented to the user.
+              # When updating, all fields must be set.
+            "pattern": "A String", # Pattern string used for formatting.
+            "type": "A String", # The type of the number format.
+          },
+          "textDirection": "A String", # The direction of the text in the cell.
+          "padding": { # The amount of padding around the cell, in pixels. # The padding of the cell.
+              # When updating padding, every field must be specified.
+            "top": 42, # The top padding of the cell.
+            "right": 42, # The right padding of the cell.
+            "bottom": 42, # The bottom padding of the cell.
+            "left": 42, # The left padding of the cell.
+          },
+          "horizontalAlignment": "A String", # The horizontal alignment of the value in cell.
+          "backgroundColor": { # Represents a color in the RGBA color space. This representation is designed # The background color of the cell.
+              # for simplicity of conversion to/from color representations in various
+              # languages over compactness; for example, the fields of this representation
+              # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+              # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+              # method in iOS; and, with just a little work, it can be easily formatted into
+              # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+              #
+              # Example (Java):
+              #
+              #      import com.google.type.Color;
+              #
+              #      // ...
+              #      public static java.awt.Color fromProto(Color protocolor) {
+              #        float alpha = protocolor.hasAlpha()
+              #            ? protocolor.getAlpha().getValue()
+              #            : 1.0;
+              #
+              #        return new java.awt.Color(
+              #            protocolor.getRed(),
+              #            protocolor.getGreen(),
+              #            protocolor.getBlue(),
+              #            alpha);
+              #      }
+              #
+              #      public static Color toProto(java.awt.Color color) {
+              #        float red = (float) color.getRed();
+              #        float green = (float) color.getGreen();
+              #        float blue = (float) color.getBlue();
+              #        float denominator = 255.0;
+              #        Color.Builder resultBuilder =
+              #            Color
+              #                .newBuilder()
+              #                .setRed(red / denominator)
+              #                .setGreen(green / denominator)
+              #                .setBlue(blue / denominator);
+              #        int alpha = color.getAlpha();
+              #        if (alpha != 255) {
+              #          result.setAlpha(
+              #              FloatValue
+              #                  .newBuilder()
+              #                  .setValue(((float) alpha) / denominator)
+              #                  .build());
+              #        }
+              #        return resultBuilder.build();
+              #      }
+              #      // ...
+              #
+              # Example (iOS / Obj-C):
+              #
+              #      // ...
+              #      static UIColor* fromProto(Color* protocolor) {
+              #         float red = [protocolor red];
+              #         float green = [protocolor green];
+              #         float blue = [protocolor blue];
+              #         FloatValue* alpha_wrapper = [protocolor alpha];
+              #         float alpha = 1.0;
+              #         if (alpha_wrapper != nil) {
+              #           alpha = [alpha_wrapper value];
+              #         }
+              #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+              #      }
+              #
+              #      static Color* toProto(UIColor* color) {
+              #          CGFloat red, green, blue, alpha;
+              #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+              #            return nil;
+              #          }
+              #          Color* result = [Color alloc] init];
+              #          [result setRed:red];
+              #          [result setGreen:green];
+              #          [result setBlue:blue];
+              #          if (alpha <= 0.9999) {
+              #            [result setAlpha:floatWrapperWithValue(alpha)];
+              #          }
+              #          [result autorelease];
+              #          return result;
+              #     }
+              #     // ...
+              #
+              #  Example (JavaScript):
+              #
+              #     // ...
+              #
+              #     var protoToCssColor = function(rgb_color) {
+              #        var redFrac = rgb_color.red || 0.0;
+              #        var greenFrac = rgb_color.green || 0.0;
+              #        var blueFrac = rgb_color.blue || 0.0;
+              #        var red = Math.floor(redFrac * 255);
+              #        var green = Math.floor(greenFrac * 255);
+              #        var blue = Math.floor(blueFrac * 255);
+              #
+              #        if (!('alpha' in rgb_color)) {
+              #           return rgbToCssColor_(red, green, blue);
+              #        }
+              #
+              #        var alphaFrac = rgb_color.alpha.value || 0.0;
+              #        var rgbParams = [red, green, blue].join(',');
+              #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+              #     };
+              #
+              #     var rgbToCssColor_ = function(red, green, blue) {
+              #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+              #       var hexString = rgbNumber.toString(16);
+              #       var missingZeros = 6 - hexString.length;
+              #       var resultBuilder = ['#'];
+              #       for (var i = 0; i < missingZeros; i++) {
+              #          resultBuilder.push('0');
+              #       }
+              #       resultBuilder.push(hexString);
+              #       return resultBuilder.join('');
+              #     };
+              #
+              #     // ...
+            "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+            "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                # the final pixel color is defined by the equation:
+                #
+                #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                #
+                # This means that a value of 1.0 corresponds to a solid color, whereas
+                # a value of 0.0 corresponds to a completely transparent color. This
+                # uses a wrapper message rather than a simple float scalar so that it is
+                # possible to distinguish between a default value and the value being unset.
+                # If omitted, this color object is to be rendered as a solid color
+                # (as if the alpha value had been explicitly given with a value of 1.0).
+            "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+            "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+          },
+          "verticalAlignment": "A String", # The vertical alignment of the value in cell.
+          "textFormat": { # The format of a run of text in a cell. # The format of the text in the cell (unless overridden by a format run).
+              # Absent values indicate that the field isn't specified.
+            "foregroundColor": { # Represents a color in the RGBA color space. This representation is designed # The foreground color of the text.
+                # for simplicity of conversion to/from color representations in various
+                # languages over compactness; for example, the fields of this representation
+                # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                # method in iOS; and, with just a little work, it can be easily formatted into
+                # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                #
+                # Example (Java):
+                #
+                #      import com.google.type.Color;
+                #
+                #      // ...
+                #      public static java.awt.Color fromProto(Color protocolor) {
+                #        float alpha = protocolor.hasAlpha()
+                #            ? protocolor.getAlpha().getValue()
+                #            : 1.0;
+                #
+                #        return new java.awt.Color(
+                #            protocolor.getRed(),
+                #            protocolor.getGreen(),
+                #            protocolor.getBlue(),
+                #            alpha);
+                #      }
+                #
+                #      public static Color toProto(java.awt.Color color) {
+                #        float red = (float) color.getRed();
+                #        float green = (float) color.getGreen();
+                #        float blue = (float) color.getBlue();
+                #        float denominator = 255.0;
+                #        Color.Builder resultBuilder =
+                #            Color
+                #                .newBuilder()
+                #                .setRed(red / denominator)
+                #                .setGreen(green / denominator)
+                #                .setBlue(blue / denominator);
+                #        int alpha = color.getAlpha();
+                #        if (alpha != 255) {
+                #          result.setAlpha(
+                #              FloatValue
+                #                  .newBuilder()
+                #                  .setValue(((float) alpha) / denominator)
+                #                  .build());
+                #        }
+                #        return resultBuilder.build();
+                #      }
+                #      // ...
+                #
+                # Example (iOS / Obj-C):
+                #
+                #      // ...
+                #      static UIColor* fromProto(Color* protocolor) {
+                #         float red = [protocolor red];
+                #         float green = [protocolor green];
+                #         float blue = [protocolor blue];
+                #         FloatValue* alpha_wrapper = [protocolor alpha];
+                #         float alpha = 1.0;
+                #         if (alpha_wrapper != nil) {
+                #           alpha = [alpha_wrapper value];
+                #         }
+                #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                #      }
+                #
+                #      static Color* toProto(UIColor* color) {
+                #          CGFloat red, green, blue, alpha;
+                #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                #            return nil;
+                #          }
+                #          Color* result = [Color alloc] init];
+                #          [result setRed:red];
+                #          [result setGreen:green];
+                #          [result setBlue:blue];
+                #          if (alpha <= 0.9999) {
+                #            [result setAlpha:floatWrapperWithValue(alpha)];
+                #          }
+                #          [result autorelease];
+                #          return result;
+                #     }
+                #     // ...
+                #
+                #  Example (JavaScript):
+                #
+                #     // ...
+                #
+                #     var protoToCssColor = function(rgb_color) {
+                #        var redFrac = rgb_color.red || 0.0;
+                #        var greenFrac = rgb_color.green || 0.0;
+                #        var blueFrac = rgb_color.blue || 0.0;
+                #        var red = Math.floor(redFrac * 255);
+                #        var green = Math.floor(greenFrac * 255);
+                #        var blue = Math.floor(blueFrac * 255);
+                #
+                #        if (!('alpha' in rgb_color)) {
+                #           return rgbToCssColor_(red, green, blue);
+                #        }
+                #
+                #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                #        var rgbParams = [red, green, blue].join(',');
+                #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                #     };
+                #
+                #     var rgbToCssColor_ = function(red, green, blue) {
+                #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                #       var hexString = rgbNumber.toString(16);
+                #       var missingZeros = 6 - hexString.length;
+                #       var resultBuilder = ['#'];
+                #       for (var i = 0; i < missingZeros; i++) {
+                #          resultBuilder.push('0');
+                #       }
+                #       resultBuilder.push(hexString);
+                #       return resultBuilder.join('');
+                #     };
+                #
+                #     // ...
+              "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+              "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                  # the final pixel color is defined by the equation:
+                  #
+                  #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                  #
+                  # This means that a value of 1.0 corresponds to a solid color, whereas
+                  # a value of 0.0 corresponds to a completely transparent color. This
+                  # uses a wrapper message rather than a simple float scalar so that it is
+                  # possible to distinguish between a default value and the value being unset.
+                  # If omitted, this color object is to be rendered as a solid color
+                  # (as if the alpha value had been explicitly given with a value of 1.0).
+              "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+              "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+            },
+            "bold": True or False, # True if the text is bold.
+            "strikethrough": True or False, # True if the text has a strikethrough.
+            "fontFamily": "A String", # The font family.
+            "fontSize": 42, # The size of the font.
+            "italic": True or False, # True if the text is italicized.
+            "underline": True or False, # True if the text is underlined.
+          },
+          "hyperlinkDisplayType": "A String", # How a hyperlink, if it exists, should be displayed in the cell.
+          "borders": { # The borders of the cell. # The borders of the cell.
+            "top": { # A border along a cell. # The top border of the cell.
+              "color": { # Represents a color in the RGBA color space. This representation is designed # The color of the border.
+                  # for simplicity of conversion to/from color representations in various
+                  # languages over compactness; for example, the fields of this representation
+                  # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                  # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                  # method in iOS; and, with just a little work, it can be easily formatted into
+                  # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                  #
+                  # Example (Java):
+                  #
+                  #      import com.google.type.Color;
+                  #
+                  #      // ...
+                  #      public static java.awt.Color fromProto(Color protocolor) {
+                  #        float alpha = protocolor.hasAlpha()
+                  #            ? protocolor.getAlpha().getValue()
+                  #            : 1.0;
+                  #
+                  #        return new java.awt.Color(
+                  #            protocolor.getRed(),
+                  #            protocolor.getGreen(),
+                  #            protocolor.getBlue(),
+                  #            alpha);
+                  #      }
+                  #
+                  #      public static Color toProto(java.awt.Color color) {
+                  #        float red = (float) color.getRed();
+                  #        float green = (float) color.getGreen();
+                  #        float blue = (float) color.getBlue();
+                  #        float denominator = 255.0;
+                  #        Color.Builder resultBuilder =
+                  #            Color
+                  #                .newBuilder()
+                  #                .setRed(red / denominator)
+                  #                .setGreen(green / denominator)
+                  #                .setBlue(blue / denominator);
+                  #        int alpha = color.getAlpha();
+                  #        if (alpha != 255) {
+                  #          result.setAlpha(
+                  #              FloatValue
+                  #                  .newBuilder()
+                  #                  .setValue(((float) alpha) / denominator)
+                  #                  .build());
+                  #        }
+                  #        return resultBuilder.build();
+                  #      }
+                  #      // ...
+                  #
+                  # Example (iOS / Obj-C):
+                  #
+                  #      // ...
+                  #      static UIColor* fromProto(Color* protocolor) {
+                  #         float red = [protocolor red];
+                  #         float green = [protocolor green];
+                  #         float blue = [protocolor blue];
+                  #         FloatValue* alpha_wrapper = [protocolor alpha];
+                  #         float alpha = 1.0;
+                  #         if (alpha_wrapper != nil) {
+                  #           alpha = [alpha_wrapper value];
+                  #         }
+                  #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                  #      }
+                  #
+                  #      static Color* toProto(UIColor* color) {
+                  #          CGFloat red, green, blue, alpha;
+                  #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                  #            return nil;
+                  #          }
+                  #          Color* result = [Color alloc] init];
+                  #          [result setRed:red];
+                  #          [result setGreen:green];
+                  #          [result setBlue:blue];
+                  #          if (alpha <= 0.9999) {
+                  #            [result setAlpha:floatWrapperWithValue(alpha)];
+                  #          }
+                  #          [result autorelease];
+                  #          return result;
+                  #     }
+                  #     // ...
+                  #
+                  #  Example (JavaScript):
+                  #
+                  #     // ...
+                  #
+                  #     var protoToCssColor = function(rgb_color) {
+                  #        var redFrac = rgb_color.red || 0.0;
+                  #        var greenFrac = rgb_color.green || 0.0;
+                  #        var blueFrac = rgb_color.blue || 0.0;
+                  #        var red = Math.floor(redFrac * 255);
+                  #        var green = Math.floor(greenFrac * 255);
+                  #        var blue = Math.floor(blueFrac * 255);
+                  #
+                  #        if (!('alpha' in rgb_color)) {
+                  #           return rgbToCssColor_(red, green, blue);
+                  #        }
+                  #
+                  #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                  #        var rgbParams = [red, green, blue].join(',');
+                  #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                  #     };
+                  #
+                  #     var rgbToCssColor_ = function(red, green, blue) {
+                  #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                  #       var hexString = rgbNumber.toString(16);
+                  #       var missingZeros = 6 - hexString.length;
+                  #       var resultBuilder = ['#'];
+                  #       for (var i = 0; i < missingZeros; i++) {
+                  #          resultBuilder.push('0');
+                  #       }
+                  #       resultBuilder.push(hexString);
+                  #       return resultBuilder.join('');
+                  #     };
+                  #
+                  #     // ...
+                "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                    # the final pixel color is defined by the equation:
+                    #
+                    #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                    #
+                    # This means that a value of 1.0 corresponds to a solid color, whereas
+                    # a value of 0.0 corresponds to a completely transparent color. This
+                    # uses a wrapper message rather than a simple float scalar so that it is
+                    # possible to distinguish between a default value and the value being unset.
+                    # If omitted, this color object is to be rendered as a solid color
+                    # (as if the alpha value had been explicitly given with a value of 1.0).
+                "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+              },
+              "width": 42, # The width of the border, in pixels.
+                  # Border widths must be between 0 and 3 pixels.
+              "style": "A String", # The style of the border.
+            },
+            "right": { # A border along a cell. # The right border of the cell.
+              "color": { # Represents a color in the RGBA color space. This representation is designed # The color of the border.
+                  # for simplicity of conversion to/from color representations in various
+                  # languages over compactness; for example, the fields of this representation
+                  # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                  # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                  # method in iOS; and, with just a little work, it can be easily formatted into
+                  # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                  #
+                  # Example (Java):
+                  #
+                  #      import com.google.type.Color;
+                  #
+                  #      // ...
+                  #      public static java.awt.Color fromProto(Color protocolor) {
+                  #        float alpha = protocolor.hasAlpha()
+                  #            ? protocolor.getAlpha().getValue()
+                  #            : 1.0;
+                  #
+                  #        return new java.awt.Color(
+                  #            protocolor.getRed(),
+                  #            protocolor.getGreen(),
+                  #            protocolor.getBlue(),
+                  #            alpha);
+                  #      }
+                  #
+                  #      public static Color toProto(java.awt.Color color) {
+                  #        float red = (float) color.getRed();
+                  #        float green = (float) color.getGreen();
+                  #        float blue = (float) color.getBlue();
+                  #        float denominator = 255.0;
+                  #        Color.Builder resultBuilder =
+                  #            Color
+                  #                .newBuilder()
+                  #                .setRed(red / denominator)
+                  #                .setGreen(green / denominator)
+                  #                .setBlue(blue / denominator);
+                  #        int alpha = color.getAlpha();
+                  #        if (alpha != 255) {
+                  #          result.setAlpha(
+                  #              FloatValue
+                  #                  .newBuilder()
+                  #                  .setValue(((float) alpha) / denominator)
+                  #                  .build());
+                  #        }
+                  #        return resultBuilder.build();
+                  #      }
+                  #      // ...
+                  #
+                  # Example (iOS / Obj-C):
+                  #
+                  #      // ...
+                  #      static UIColor* fromProto(Color* protocolor) {
+                  #         float red = [protocolor red];
+                  #         float green = [protocolor green];
+                  #         float blue = [protocolor blue];
+                  #         FloatValue* alpha_wrapper = [protocolor alpha];
+                  #         float alpha = 1.0;
+                  #         if (alpha_wrapper != nil) {
+                  #           alpha = [alpha_wrapper value];
+                  #         }
+                  #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                  #      }
+                  #
+                  #      static Color* toProto(UIColor* color) {
+                  #          CGFloat red, green, blue, alpha;
+                  #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                  #            return nil;
+                  #          }
+                  #          Color* result = [Color alloc] init];
+                  #          [result setRed:red];
+                  #          [result setGreen:green];
+                  #          [result setBlue:blue];
+                  #          if (alpha <= 0.9999) {
+                  #            [result setAlpha:floatWrapperWithValue(alpha)];
+                  #          }
+                  #          [result autorelease];
+                  #          return result;
+                  #     }
+                  #     // ...
+                  #
+                  #  Example (JavaScript):
+                  #
+                  #     // ...
+                  #
+                  #     var protoToCssColor = function(rgb_color) {
+                  #        var redFrac = rgb_color.red || 0.0;
+                  #        var greenFrac = rgb_color.green || 0.0;
+                  #        var blueFrac = rgb_color.blue || 0.0;
+                  #        var red = Math.floor(redFrac * 255);
+                  #        var green = Math.floor(greenFrac * 255);
+                  #        var blue = Math.floor(blueFrac * 255);
+                  #
+                  #        if (!('alpha' in rgb_color)) {
+                  #           return rgbToCssColor_(red, green, blue);
+                  #        }
+                  #
+                  #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                  #        var rgbParams = [red, green, blue].join(',');
+                  #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                  #     };
+                  #
+                  #     var rgbToCssColor_ = function(red, green, blue) {
+                  #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                  #       var hexString = rgbNumber.toString(16);
+                  #       var missingZeros = 6 - hexString.length;
+                  #       var resultBuilder = ['#'];
+                  #       for (var i = 0; i < missingZeros; i++) {
+                  #          resultBuilder.push('0');
+                  #       }
+                  #       resultBuilder.push(hexString);
+                  #       return resultBuilder.join('');
+                  #     };
+                  #
+                  #     // ...
+                "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                    # the final pixel color is defined by the equation:
+                    #
+                    #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                    #
+                    # This means that a value of 1.0 corresponds to a solid color, whereas
+                    # a value of 0.0 corresponds to a completely transparent color. This
+                    # uses a wrapper message rather than a simple float scalar so that it is
+                    # possible to distinguish between a default value and the value being unset.
+                    # If omitted, this color object is to be rendered as a solid color
+                    # (as if the alpha value had been explicitly given with a value of 1.0).
+                "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+              },
+              "width": 42, # The width of the border, in pixels.
+                  # Border widths must be between 0 and 3 pixels.
+              "style": "A String", # The style of the border.
+            },
+            "bottom": { # A border along a cell. # The bottom border of the cell.
+              "color": { # Represents a color in the RGBA color space. This representation is designed # The color of the border.
+                  # for simplicity of conversion to/from color representations in various
+                  # languages over compactness; for example, the fields of this representation
+                  # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                  # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                  # method in iOS; and, with just a little work, it can be easily formatted into
+                  # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                  #
+                  # Example (Java):
+                  #
+                  #      import com.google.type.Color;
+                  #
+                  #      // ...
+                  #      public static java.awt.Color fromProto(Color protocolor) {
+                  #        float alpha = protocolor.hasAlpha()
+                  #            ? protocolor.getAlpha().getValue()
+                  #            : 1.0;
+                  #
+                  #        return new java.awt.Color(
+                  #            protocolor.getRed(),
+                  #            protocolor.getGreen(),
+                  #            protocolor.getBlue(),
+                  #            alpha);
+                  #      }
+                  #
+                  #      public static Color toProto(java.awt.Color color) {
+                  #        float red = (float) color.getRed();
+                  #        float green = (float) color.getGreen();
+                  #        float blue = (float) color.getBlue();
+                  #        float denominator = 255.0;
+                  #        Color.Builder resultBuilder =
+                  #            Color
+                  #                .newBuilder()
+                  #                .setRed(red / denominator)
+                  #                .setGreen(green / denominator)
+                  #                .setBlue(blue / denominator);
+                  #        int alpha = color.getAlpha();
+                  #        if (alpha != 255) {
+                  #          result.setAlpha(
+                  #              FloatValue
+                  #                  .newBuilder()
+                  #                  .setValue(((float) alpha) / denominator)
+                  #                  .build());
+                  #        }
+                  #        return resultBuilder.build();
+                  #      }
+                  #      // ...
+                  #
+                  # Example (iOS / Obj-C):
+                  #
+                  #      // ...
+                  #      static UIColor* fromProto(Color* protocolor) {
+                  #         float red = [protocolor red];
+                  #         float green = [protocolor green];
+                  #         float blue = [protocolor blue];
+                  #         FloatValue* alpha_wrapper = [protocolor alpha];
+                  #         float alpha = 1.0;
+                  #         if (alpha_wrapper != nil) {
+                  #           alpha = [alpha_wrapper value];
+                  #         }
+                  #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                  #      }
+                  #
+                  #      static Color* toProto(UIColor* color) {
+                  #          CGFloat red, green, blue, alpha;
+                  #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                  #            return nil;
+                  #          }
+                  #          Color* result = [Color alloc] init];
+                  #          [result setRed:red];
+                  #          [result setGreen:green];
+                  #          [result setBlue:blue];
+                  #          if (alpha <= 0.9999) {
+                  #            [result setAlpha:floatWrapperWithValue(alpha)];
+                  #          }
+                  #          [result autorelease];
+                  #          return result;
+                  #     }
+                  #     // ...
+                  #
+                  #  Example (JavaScript):
+                  #
+                  #     // ...
+                  #
+                  #     var protoToCssColor = function(rgb_color) {
+                  #        var redFrac = rgb_color.red || 0.0;
+                  #        var greenFrac = rgb_color.green || 0.0;
+                  #        var blueFrac = rgb_color.blue || 0.0;
+                  #        var red = Math.floor(redFrac * 255);
+                  #        var green = Math.floor(greenFrac * 255);
+                  #        var blue = Math.floor(blueFrac * 255);
+                  #
+                  #        if (!('alpha' in rgb_color)) {
+                  #           return rgbToCssColor_(red, green, blue);
+                  #        }
+                  #
+                  #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                  #        var rgbParams = [red, green, blue].join(',');
+                  #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                  #     };
+                  #
+                  #     var rgbToCssColor_ = function(red, green, blue) {
+                  #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                  #       var hexString = rgbNumber.toString(16);
+                  #       var missingZeros = 6 - hexString.length;
+                  #       var resultBuilder = ['#'];
+                  #       for (var i = 0; i < missingZeros; i++) {
+                  #          resultBuilder.push('0');
+                  #       }
+                  #       resultBuilder.push(hexString);
+                  #       return resultBuilder.join('');
+                  #     };
+                  #
+                  #     // ...
+                "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                    # the final pixel color is defined by the equation:
+                    #
+                    #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                    #
+                    # This means that a value of 1.0 corresponds to a solid color, whereas
+                    # a value of 0.0 corresponds to a completely transparent color. This
+                    # uses a wrapper message rather than a simple float scalar so that it is
+                    # possible to distinguish between a default value and the value being unset.
+                    # If omitted, this color object is to be rendered as a solid color
+                    # (as if the alpha value had been explicitly given with a value of 1.0).
+                "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+              },
+              "width": 42, # The width of the border, in pixels.
+                  # Border widths must be between 0 and 3 pixels.
+              "style": "A String", # The style of the border.
+            },
+            "left": { # A border along a cell. # The left border of the cell.
+              "color": { # Represents a color in the RGBA color space. This representation is designed # The color of the border.
+                  # for simplicity of conversion to/from color representations in various
+                  # languages over compactness; for example, the fields of this representation
+                  # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                  # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                  # method in iOS; and, with just a little work, it can be easily formatted into
+                  # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                  #
+                  # Example (Java):
+                  #
+                  #      import com.google.type.Color;
+                  #
+                  #      // ...
+                  #      public static java.awt.Color fromProto(Color protocolor) {
+                  #        float alpha = protocolor.hasAlpha()
+                  #            ? protocolor.getAlpha().getValue()
+                  #            : 1.0;
+                  #
+                  #        return new java.awt.Color(
+                  #            protocolor.getRed(),
+                  #            protocolor.getGreen(),
+                  #            protocolor.getBlue(),
+                  #            alpha);
+                  #      }
+                  #
+                  #      public static Color toProto(java.awt.Color color) {
+                  #        float red = (float) color.getRed();
+                  #        float green = (float) color.getGreen();
+                  #        float blue = (float) color.getBlue();
+                  #        float denominator = 255.0;
+                  #        Color.Builder resultBuilder =
+                  #            Color
+                  #                .newBuilder()
+                  #                .setRed(red / denominator)
+                  #                .setGreen(green / denominator)
+                  #                .setBlue(blue / denominator);
+                  #        int alpha = color.getAlpha();
+                  #        if (alpha != 255) {
+                  #          result.setAlpha(
+                  #              FloatValue
+                  #                  .newBuilder()
+                  #                  .setValue(((float) alpha) / denominator)
+                  #                  .build());
+                  #        }
+                  #        return resultBuilder.build();
+                  #      }
+                  #      // ...
+                  #
+                  # Example (iOS / Obj-C):
+                  #
+                  #      // ...
+                  #      static UIColor* fromProto(Color* protocolor) {
+                  #         float red = [protocolor red];
+                  #         float green = [protocolor green];
+                  #         float blue = [protocolor blue];
+                  #         FloatValue* alpha_wrapper = [protocolor alpha];
+                  #         float alpha = 1.0;
+                  #         if (alpha_wrapper != nil) {
+                  #           alpha = [alpha_wrapper value];
+                  #         }
+                  #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                  #      }
+                  #
+                  #      static Color* toProto(UIColor* color) {
+                  #          CGFloat red, green, blue, alpha;
+                  #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                  #            return nil;
+                  #          }
+                  #          Color* result = [Color alloc] init];
+                  #          [result setRed:red];
+                  #          [result setGreen:green];
+                  #          [result setBlue:blue];
+                  #          if (alpha <= 0.9999) {
+                  #            [result setAlpha:floatWrapperWithValue(alpha)];
+                  #          }
+                  #          [result autorelease];
+                  #          return result;
+                  #     }
+                  #     // ...
+                  #
+                  #  Example (JavaScript):
+                  #
+                  #     // ...
+                  #
+                  #     var protoToCssColor = function(rgb_color) {
+                  #        var redFrac = rgb_color.red || 0.0;
+                  #        var greenFrac = rgb_color.green || 0.0;
+                  #        var blueFrac = rgb_color.blue || 0.0;
+                  #        var red = Math.floor(redFrac * 255);
+                  #        var green = Math.floor(greenFrac * 255);
+                  #        var blue = Math.floor(blueFrac * 255);
+                  #
+                  #        if (!('alpha' in rgb_color)) {
+                  #           return rgbToCssColor_(red, green, blue);
+                  #        }
+                  #
+                  #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                  #        var rgbParams = [red, green, blue].join(',');
+                  #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                  #     };
+                  #
+                  #     var rgbToCssColor_ = function(red, green, blue) {
+                  #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                  #       var hexString = rgbNumber.toString(16);
+                  #       var missingZeros = 6 - hexString.length;
+                  #       var resultBuilder = ['#'];
+                  #       for (var i = 0; i < missingZeros; i++) {
+                  #          resultBuilder.push('0');
+                  #       }
+                  #       resultBuilder.push(hexString);
+                  #       return resultBuilder.join('');
+                  #     };
+                  #
+                  #     // ...
+                "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                    # the final pixel color is defined by the equation:
+                    #
+                    #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                    #
+                    # This means that a value of 1.0 corresponds to a solid color, whereas
+                    # a value of 0.0 corresponds to a completely transparent color. This
+                    # uses a wrapper message rather than a simple float scalar so that it is
+                    # possible to distinguish between a default value and the value being unset.
+                    # If omitted, this color object is to be rendered as a solid color
+                    # (as if the alpha value had been explicitly given with a value of 1.0).
+                "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+              },
+              "width": 42, # The width of the border, in pixels.
+                  # Border widths must be between 0 and 3 pixels.
+              "style": "A String", # The style of the border.
+            },
+          },
+          "wrapStrategy": "A String", # The wrap strategy for the value in the cell.
+        },
+        "title": "A String", # The title of the spreadsheet.
+      },
+      "sheets": [ # The sheets that are part of a spreadsheet.
+        { # A sheet in a spreadsheet.
+          "conditionalFormats": [ # The conditional format rules in this sheet.
+            { # A rule describing a conditional format.
+              "ranges": [ # The ranges that will be formatted if the condition is true.
+                  # All the ranges must be on the same grid.
+                { # A range on a sheet.
+                    # 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 grid 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.
+                  "startRowIndex": 42, # The start row (inclusive) 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.
+                  "endColumnIndex": 42, # The end column (exclusive) of the range, or not set if unbounded.
+                },
+              ],
+              "booleanRule": { # A rule that may or may not match, depending on the condition. # The formatting is either "on" or "off" according to the rule.
+                "condition": { # A condition that can evaluate to true or false. # The condition of the rule. If the condition evaluates to true,
+                    # the format will be applied.
+                    # BooleanConditions are used by conditional formatting,
+                    # data validation, and the criteria in filters.
+                  "type": "A String", # The type of condition.
+                  "values": [ # The values of the condition. The number of supported values depends
+                      # on the condition type.  Some support zero values,
+                      # others one or two values,
+                      # and ConditionType.ONE_OF_LIST supports an arbitrary number of values.
+                    { # The value of the condition.
+                      "relativeDate": "A String", # A relative date (based on the current date).
+                          # Valid only if the type is
+                          # DATE_BEFORE,
+                          # DATE_AFTER,
+                          # DATE_ON_OR_BEFORE or
+                          # DATE_ON_OR_AFTER.
+                          #
+                          # Relative dates are not supported in data validation.
+                          # They are supported only in conditional formatting and
+                          # conditional filters.
+                      "userEnteredValue": "A String", # A value the condition is based on.
+                          # The value will be parsed as if the user typed into a cell.
+                          # Formulas are supported (and must begin with an `=`).
+                    },
+                  ],
+                },
+                "format": { # The format of a cell. # The format to apply.
+                    # Conditional formatting can only apply a subset of formatting:
+                    # bold, italic,
+                    # strikethrough,
+                    # foreground color &
+                    # background color.
+                  "numberFormat": { # The number format of a cell. # A format describing how number values should be represented to the user.
+                      # When updating, all fields must be set.
+                    "pattern": "A String", # Pattern string used for formatting.
+                    "type": "A String", # The type of the number format.
+                  },
+                  "textDirection": "A String", # The direction of the text in the cell.
+                  "padding": { # The amount of padding around the cell, in pixels. # The padding of the cell.
+                      # When updating padding, every field must be specified.
+                    "top": 42, # The top padding of the cell.
+                    "right": 42, # The right padding of the cell.
+                    "bottom": 42, # The bottom padding of the cell.
+                    "left": 42, # The left padding of the cell.
+                  },
+                  "horizontalAlignment": "A String", # The horizontal alignment of the value in cell.
+                  "backgroundColor": { # Represents a color in the RGBA color space. This representation is designed # The background color of the cell.
+                      # for simplicity of conversion to/from color representations in various
+                      # languages over compactness; for example, the fields of this representation
+                      # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                      # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                      # method in iOS; and, with just a little work, it can be easily formatted into
+                      # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                      #
+                      # Example (Java):
+                      #
+                      #      import com.google.type.Color;
+                      #
+                      #      // ...
+                      #      public static java.awt.Color fromProto(Color protocolor) {
+                      #        float alpha = protocolor.hasAlpha()
+                      #            ? protocolor.getAlpha().getValue()
+                      #            : 1.0;
+                      #
+                      #        return new java.awt.Color(
+                      #            protocolor.getRed(),
+                      #            protocolor.getGreen(),
+                      #            protocolor.getBlue(),
+                      #            alpha);
+                      #      }
+                      #
+                      #      public static Color toProto(java.awt.Color color) {
+                      #        float red = (float) color.getRed();
+                      #        float green = (float) color.getGreen();
+                      #        float blue = (float) color.getBlue();
+                      #        float denominator = 255.0;
+                      #        Color.Builder resultBuilder =
+                      #            Color
+                      #                .newBuilder()
+                      #                .setRed(red / denominator)
+                      #                .setGreen(green / denominator)
+                      #                .setBlue(blue / denominator);
+                      #        int alpha = color.getAlpha();
+                      #        if (alpha != 255) {
+                      #          result.setAlpha(
+                      #              FloatValue
+                      #                  .newBuilder()
+                      #                  .setValue(((float) alpha) / denominator)
+                      #                  .build());
+                      #        }
+                      #        return resultBuilder.build();
+                      #      }
+                      #      // ...
+                      #
+                      # Example (iOS / Obj-C):
+                      #
+                      #      // ...
+                      #      static UIColor* fromProto(Color* protocolor) {
+                      #         float red = [protocolor red];
+                      #         float green = [protocolor green];
+                      #         float blue = [protocolor blue];
+                      #         FloatValue* alpha_wrapper = [protocolor alpha];
+                      #         float alpha = 1.0;
+                      #         if (alpha_wrapper != nil) {
+                      #           alpha = [alpha_wrapper value];
+                      #         }
+                      #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                      #      }
+                      #
+                      #      static Color* toProto(UIColor* color) {
+                      #          CGFloat red, green, blue, alpha;
+                      #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                      #            return nil;
+                      #          }
+                      #          Color* result = [Color alloc] init];
+                      #          [result setRed:red];
+                      #          [result setGreen:green];
+                      #          [result setBlue:blue];
+                      #          if (alpha <= 0.9999) {
+                      #            [result setAlpha:floatWrapperWithValue(alpha)];
+                      #          }
+                      #          [result autorelease];
+                      #          return result;
+                      #     }
+                      #     // ...
+                      #
+                      #  Example (JavaScript):
+                      #
+                      #     // ...
+                      #
+                      #     var protoToCssColor = function(rgb_color) {
+                      #        var redFrac = rgb_color.red || 0.0;
+                      #        var greenFrac = rgb_color.green || 0.0;
+                      #        var blueFrac = rgb_color.blue || 0.0;
+                      #        var red = Math.floor(redFrac * 255);
+                      #        var green = Math.floor(greenFrac * 255);
+                      #        var blue = Math.floor(blueFrac * 255);
+                      #
+                      #        if (!('alpha' in rgb_color)) {
+                      #           return rgbToCssColor_(red, green, blue);
+                      #        }
+                      #
+                      #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                      #        var rgbParams = [red, green, blue].join(',');
+                      #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                      #     };
+                      #
+                      #     var rgbToCssColor_ = function(red, green, blue) {
+                      #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                      #       var hexString = rgbNumber.toString(16);
+                      #       var missingZeros = 6 - hexString.length;
+                      #       var resultBuilder = ['#'];
+                      #       for (var i = 0; i < missingZeros; i++) {
+                      #          resultBuilder.push('0');
+                      #       }
+                      #       resultBuilder.push(hexString);
+                      #       return resultBuilder.join('');
+                      #     };
+                      #
+                      #     // ...
+                    "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                    "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                        # the final pixel color is defined by the equation:
+                        #
+                        #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                        #
+                        # This means that a value of 1.0 corresponds to a solid color, whereas
+                        # a value of 0.0 corresponds to a completely transparent color. This
+                        # uses a wrapper message rather than a simple float scalar so that it is
+                        # possible to distinguish between a default value and the value being unset.
+                        # If omitted, this color object is to be rendered as a solid color
+                        # (as if the alpha value had been explicitly given with a value of 1.0).
+                    "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                    "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                  },
+                  "verticalAlignment": "A String", # The vertical alignment of the value in cell.
+                  "textFormat": { # The format of a run of text in a cell. # The format of the text in the cell (unless overridden by a format run).
+                      # Absent values indicate that the field isn't specified.
+                    "foregroundColor": { # Represents a color in the RGBA color space. This representation is designed # The foreground color of the text.
+                        # for simplicity of conversion to/from color representations in various
+                        # languages over compactness; for example, the fields of this representation
+                        # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                        # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                        # method in iOS; and, with just a little work, it can be easily formatted into
+                        # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                        #
+                        # Example (Java):
+                        #
+                        #      import com.google.type.Color;
+                        #
+                        #      // ...
+                        #      public static java.awt.Color fromProto(Color protocolor) {
+                        #        float alpha = protocolor.hasAlpha()
+                        #            ? protocolor.getAlpha().getValue()
+                        #            : 1.0;
+                        #
+                        #        return new java.awt.Color(
+                        #            protocolor.getRed(),
+                        #            protocolor.getGreen(),
+                        #            protocolor.getBlue(),
+                        #            alpha);
+                        #      }
+                        #
+                        #      public static Color toProto(java.awt.Color color) {
+                        #        float red = (float) color.getRed();
+                        #        float green = (float) color.getGreen();
+                        #        float blue = (float) color.getBlue();
+                        #        float denominator = 255.0;
+                        #        Color.Builder resultBuilder =
+                        #            Color
+                        #                .newBuilder()
+                        #                .setRed(red / denominator)
+                        #                .setGreen(green / denominator)
+                        #                .setBlue(blue / denominator);
+                        #        int alpha = color.getAlpha();
+                        #        if (alpha != 255) {
+                        #          result.setAlpha(
+                        #              FloatValue
+                        #                  .newBuilder()
+                        #                  .setValue(((float) alpha) / denominator)
+                        #                  .build());
+                        #        }
+                        #        return resultBuilder.build();
+                        #      }
+                        #      // ...
+                        #
+                        # Example (iOS / Obj-C):
+                        #
+                        #      // ...
+                        #      static UIColor* fromProto(Color* protocolor) {
+                        #         float red = [protocolor red];
+                        #         float green = [protocolor green];
+                        #         float blue = [protocolor blue];
+                        #         FloatValue* alpha_wrapper = [protocolor alpha];
+                        #         float alpha = 1.0;
+                        #         if (alpha_wrapper != nil) {
+                        #           alpha = [alpha_wrapper value];
+                        #         }
+                        #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                        #      }
+                        #
+                        #      static Color* toProto(UIColor* color) {
+                        #          CGFloat red, green, blue, alpha;
+                        #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                        #            return nil;
+                        #          }
+                        #          Color* result = [Color alloc] init];
+                        #          [result setRed:red];
+                        #          [result setGreen:green];
+                        #          [result setBlue:blue];
+                        #          if (alpha <= 0.9999) {
+                        #            [result setAlpha:floatWrapperWithValue(alpha)];
+                        #          }
+                        #          [result autorelease];
+                        #          return result;
+                        #     }
+                        #     // ...
+                        #
+                        #  Example (JavaScript):
+                        #
+                        #     // ...
+                        #
+                        #     var protoToCssColor = function(rgb_color) {
+                        #        var redFrac = rgb_color.red || 0.0;
+                        #        var greenFrac = rgb_color.green || 0.0;
+                        #        var blueFrac = rgb_color.blue || 0.0;
+                        #        var red = Math.floor(redFrac * 255);
+                        #        var green = Math.floor(greenFrac * 255);
+                        #        var blue = Math.floor(blueFrac * 255);
+                        #
+                        #        if (!('alpha' in rgb_color)) {
+                        #           return rgbToCssColor_(red, green, blue);
+                        #        }
+                        #
+                        #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                        #        var rgbParams = [red, green, blue].join(',');
+                        #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                        #     };
+                        #
+                        #     var rgbToCssColor_ = function(red, green, blue) {
+                        #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                        #       var hexString = rgbNumber.toString(16);
+                        #       var missingZeros = 6 - hexString.length;
+                        #       var resultBuilder = ['#'];
+                        #       for (var i = 0; i < missingZeros; i++) {
+                        #          resultBuilder.push('0');
+                        #       }
+                        #       resultBuilder.push(hexString);
+                        #       return resultBuilder.join('');
+                        #     };
+                        #
+                        #     // ...
+                      "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                      "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                          # the final pixel color is defined by the equation:
+                          #
+                          #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                          #
+                          # This means that a value of 1.0 corresponds to a solid color, whereas
+                          # a value of 0.0 corresponds to a completely transparent color. This
+                          # uses a wrapper message rather than a simple float scalar so that it is
+                          # possible to distinguish between a default value and the value being unset.
+                          # If omitted, this color object is to be rendered as a solid color
+                          # (as if the alpha value had been explicitly given with a value of 1.0).
+                      "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                      "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                    },
+                    "bold": True or False, # True if the text is bold.
+                    "strikethrough": True or False, # True if the text has a strikethrough.
+                    "fontFamily": "A String", # The font family.
+                    "fontSize": 42, # The size of the font.
+                    "italic": True or False, # True if the text is italicized.
+                    "underline": True or False, # True if the text is underlined.
+                  },
+                  "hyperlinkDisplayType": "A String", # How a hyperlink, if it exists, should be displayed in the cell.
+                  "borders": { # The borders of the cell. # The borders of the cell.
+                    "top": { # A border along a cell. # The top border of the cell.
+                      "color": { # Represents a color in the RGBA color space. This representation is designed # The color of the border.
+                          # for simplicity of conversion to/from color representations in various
+                          # languages over compactness; for example, the fields of this representation
+                          # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                          # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                          # method in iOS; and, with just a little work, it can be easily formatted into
+                          # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                          #
+                          # Example (Java):
+                          #
+                          #      import com.google.type.Color;
+                          #
+                          #      // ...
+                          #      public static java.awt.Color fromProto(Color protocolor) {
+                          #        float alpha = protocolor.hasAlpha()
+                          #            ? protocolor.getAlpha().getValue()
+                          #            : 1.0;
+                          #
+                          #        return new java.awt.Color(
+                          #            protocolor.getRed(),
+                          #            protocolor.getGreen(),
+                          #            protocolor.getBlue(),
+                          #            alpha);
+                          #      }
+                          #
+                          #      public static Color toProto(java.awt.Color color) {
+                          #        float red = (float) color.getRed();
+                          #        float green = (float) color.getGreen();
+                          #        float blue = (float) color.getBlue();
+                          #        float denominator = 255.0;
+                          #        Color.Builder resultBuilder =
+                          #            Color
+                          #                .newBuilder()
+                          #                .setRed(red / denominator)
+                          #                .setGreen(green / denominator)
+                          #                .setBlue(blue / denominator);
+                          #        int alpha = color.getAlpha();
+                          #        if (alpha != 255) {
+                          #          result.setAlpha(
+                          #              FloatValue
+                          #                  .newBuilder()
+                          #                  .setValue(((float) alpha) / denominator)
+                          #                  .build());
+                          #        }
+                          #        return resultBuilder.build();
+                          #      }
+                          #      // ...
+                          #
+                          # Example (iOS / Obj-C):
+                          #
+                          #      // ...
+                          #      static UIColor* fromProto(Color* protocolor) {
+                          #         float red = [protocolor red];
+                          #         float green = [protocolor green];
+                          #         float blue = [protocolor blue];
+                          #         FloatValue* alpha_wrapper = [protocolor alpha];
+                          #         float alpha = 1.0;
+                          #         if (alpha_wrapper != nil) {
+                          #           alpha = [alpha_wrapper value];
+                          #         }
+                          #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                          #      }
+                          #
+                          #      static Color* toProto(UIColor* color) {
+                          #          CGFloat red, green, blue, alpha;
+                          #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                          #            return nil;
+                          #          }
+                          #          Color* result = [Color alloc] init];
+                          #          [result setRed:red];
+                          #          [result setGreen:green];
+                          #          [result setBlue:blue];
+                          #          if (alpha <= 0.9999) {
+                          #            [result setAlpha:floatWrapperWithValue(alpha)];
+                          #          }
+                          #          [result autorelease];
+                          #          return result;
+                          #     }
+                          #     // ...
+                          #
+                          #  Example (JavaScript):
+                          #
+                          #     // ...
+                          #
+                          #     var protoToCssColor = function(rgb_color) {
+                          #        var redFrac = rgb_color.red || 0.0;
+                          #        var greenFrac = rgb_color.green || 0.0;
+                          #        var blueFrac = rgb_color.blue || 0.0;
+                          #        var red = Math.floor(redFrac * 255);
+                          #        var green = Math.floor(greenFrac * 255);
+                          #        var blue = Math.floor(blueFrac * 255);
+                          #
+                          #        if (!('alpha' in rgb_color)) {
+                          #           return rgbToCssColor_(red, green, blue);
+                          #        }
+                          #
+                          #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                          #        var rgbParams = [red, green, blue].join(',');
+                          #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                          #     };
+                          #
+                          #     var rgbToCssColor_ = function(red, green, blue) {
+                          #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                          #       var hexString = rgbNumber.toString(16);
+                          #       var missingZeros = 6 - hexString.length;
+                          #       var resultBuilder = ['#'];
+                          #       for (var i = 0; i < missingZeros; i++) {
+                          #          resultBuilder.push('0');
+                          #       }
+                          #       resultBuilder.push(hexString);
+                          #       return resultBuilder.join('');
+                          #     };
+                          #
+                          #     // ...
+                        "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                        "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                            # the final pixel color is defined by the equation:
+                            #
+                            #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                            #
+                            # This means that a value of 1.0 corresponds to a solid color, whereas
+                            # a value of 0.0 corresponds to a completely transparent color. This
+                            # uses a wrapper message rather than a simple float scalar so that it is
+                            # possible to distinguish between a default value and the value being unset.
+                            # If omitted, this color object is to be rendered as a solid color
+                            # (as if the alpha value had been explicitly given with a value of 1.0).
+                        "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                        "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                      },
+                      "width": 42, # The width of the border, in pixels.
+                          # Border widths must be between 0 and 3 pixels.
+                      "style": "A String", # The style of the border.
+                    },
+                    "right": { # A border along a cell. # The right border of the cell.
+                      "color": { # Represents a color in the RGBA color space. This representation is designed # The color of the border.
+                          # for simplicity of conversion to/from color representations in various
+                          # languages over compactness; for example, the fields of this representation
+                          # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                          # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                          # method in iOS; and, with just a little work, it can be easily formatted into
+                          # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                          #
+                          # Example (Java):
+                          #
+                          #      import com.google.type.Color;
+                          #
+                          #      // ...
+                          #      public static java.awt.Color fromProto(Color protocolor) {
+                          #        float alpha = protocolor.hasAlpha()
+                          #            ? protocolor.getAlpha().getValue()
+                          #            : 1.0;
+                          #
+                          #        return new java.awt.Color(
+                          #            protocolor.getRed(),
+                          #            protocolor.getGreen(),
+                          #            protocolor.getBlue(),
+                          #            alpha);
+                          #      }
+                          #
+                          #      public static Color toProto(java.awt.Color color) {
+                          #        float red = (float) color.getRed();
+                          #        float green = (float) color.getGreen();
+                          #        float blue = (float) color.getBlue();
+                          #        float denominator = 255.0;
+                          #        Color.Builder resultBuilder =
+                          #            Color
+                          #                .newBuilder()
+                          #                .setRed(red / denominator)
+                          #                .setGreen(green / denominator)
+                          #                .setBlue(blue / denominator);
+                          #        int alpha = color.getAlpha();
+                          #        if (alpha != 255) {
+                          #          result.setAlpha(
+                          #              FloatValue
+                          #                  .newBuilder()
+                          #                  .setValue(((float) alpha) / denominator)
+                          #                  .build());
+                          #        }
+                          #        return resultBuilder.build();
+                          #      }
+                          #      // ...
+                          #
+                          # Example (iOS / Obj-C):
+                          #
+                          #      // ...
+                          #      static UIColor* fromProto(Color* protocolor) {
+                          #         float red = [protocolor red];
+                          #         float green = [protocolor green];
+                          #         float blue = [protocolor blue];
+                          #         FloatValue* alpha_wrapper = [protocolor alpha];
+                          #         float alpha = 1.0;
+                          #         if (alpha_wrapper != nil) {
+                          #           alpha = [alpha_wrapper value];
+                          #         }
+                          #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                          #      }
+                          #
+                          #      static Color* toProto(UIColor* color) {
+                          #          CGFloat red, green, blue, alpha;
+                          #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                          #            return nil;
+                          #          }
+                          #          Color* result = [Color alloc] init];
+                          #          [result setRed:red];
+                          #          [result setGreen:green];
+                          #          [result setBlue:blue];
+                          #          if (alpha <= 0.9999) {
+                          #            [result setAlpha:floatWrapperWithValue(alpha)];
+                          #          }
+                          #          [result autorelease];
+                          #          return result;
+                          #     }
+                          #     // ...
+                          #
+                          #  Example (JavaScript):
+                          #
+                          #     // ...
+                          #
+                          #     var protoToCssColor = function(rgb_color) {
+                          #        var redFrac = rgb_color.red || 0.0;
+                          #        var greenFrac = rgb_color.green || 0.0;
+                          #        var blueFrac = rgb_color.blue || 0.0;
+                          #        var red = Math.floor(redFrac * 255);
+                          #        var green = Math.floor(greenFrac * 255);
+                          #        var blue = Math.floor(blueFrac * 255);
+                          #
+                          #        if (!('alpha' in rgb_color)) {
+                          #           return rgbToCssColor_(red, green, blue);
+                          #        }
+                          #
+                          #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                          #        var rgbParams = [red, green, blue].join(',');
+                          #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                          #     };
+                          #
+                          #     var rgbToCssColor_ = function(red, green, blue) {
+                          #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                          #       var hexString = rgbNumber.toString(16);
+                          #       var missingZeros = 6 - hexString.length;
+                          #       var resultBuilder = ['#'];
+                          #       for (var i = 0; i < missingZeros; i++) {
+                          #          resultBuilder.push('0');
+                          #       }
+                          #       resultBuilder.push(hexString);
+                          #       return resultBuilder.join('');
+                          #     };
+                          #
+                          #     // ...
+                        "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                        "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                            # the final pixel color is defined by the equation:
+                            #
+                            #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                            #
+                            # This means that a value of 1.0 corresponds to a solid color, whereas
+                            # a value of 0.0 corresponds to a completely transparent color. This
+                            # uses a wrapper message rather than a simple float scalar so that it is
+                            # possible to distinguish between a default value and the value being unset.
+                            # If omitted, this color object is to be rendered as a solid color
+                            # (as if the alpha value had been explicitly given with a value of 1.0).
+                        "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                        "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                      },
+                      "width": 42, # The width of the border, in pixels.
+                          # Border widths must be between 0 and 3 pixels.
+                      "style": "A String", # The style of the border.
+                    },
+                    "bottom": { # A border along a cell. # The bottom border of the cell.
+                      "color": { # Represents a color in the RGBA color space. This representation is designed # The color of the border.
+                          # for simplicity of conversion to/from color representations in various
+                          # languages over compactness; for example, the fields of this representation
+                          # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                          # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                          # method in iOS; and, with just a little work, it can be easily formatted into
+                          # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                          #
+                          # Example (Java):
+                          #
+                          #      import com.google.type.Color;
+                          #
+                          #      // ...
+                          #      public static java.awt.Color fromProto(Color protocolor) {
+                          #        float alpha = protocolor.hasAlpha()
+                          #            ? protocolor.getAlpha().getValue()
+                          #            : 1.0;
+                          #
+                          #        return new java.awt.Color(
+                          #            protocolor.getRed(),
+                          #            protocolor.getGreen(),
+                          #            protocolor.getBlue(),
+                          #            alpha);
+                          #      }
+                          #
+                          #      public static Color toProto(java.awt.Color color) {
+                          #        float red = (float) color.getRed();
+                          #        float green = (float) color.getGreen();
+                          #        float blue = (float) color.getBlue();
+                          #        float denominator = 255.0;
+                          #        Color.Builder resultBuilder =
+                          #            Color
+                          #                .newBuilder()
+                          #                .setRed(red / denominator)
+                          #                .setGreen(green / denominator)
+                          #                .setBlue(blue / denominator);
+                          #        int alpha = color.getAlpha();
+                          #        if (alpha != 255) {
+                          #          result.setAlpha(
+                          #              FloatValue
+                          #                  .newBuilder()
+                          #                  .setValue(((float) alpha) / denominator)
+                          #                  .build());
+                          #        }
+                          #        return resultBuilder.build();
+                          #      }
+                          #      // ...
+                          #
+                          # Example (iOS / Obj-C):
+                          #
+                          #      // ...
+                          #      static UIColor* fromProto(Color* protocolor) {
+                          #         float red = [protocolor red];
+                          #         float green = [protocolor green];
+                          #         float blue = [protocolor blue];
+                          #         FloatValue* alpha_wrapper = [protocolor alpha];
+                          #         float alpha = 1.0;
+                          #         if (alpha_wrapper != nil) {
+                          #           alpha = [alpha_wrapper value];
+                          #         }
+                          #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                          #      }
+                          #
+                          #      static Color* toProto(UIColor* color) {
+                          #          CGFloat red, green, blue, alpha;
+                          #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                          #            return nil;
+                          #          }
+                          #          Color* result = [Color alloc] init];
+                          #          [result setRed:red];
+                          #          [result setGreen:green];
+                          #          [result setBlue:blue];
+                          #          if (alpha <= 0.9999) {
+                          #            [result setAlpha:floatWrapperWithValue(alpha)];
+                          #          }
+                          #          [result autorelease];
+                          #          return result;
+                          #     }
+                          #     // ...
+                          #
+                          #  Example (JavaScript):
+                          #
+                          #     // ...
+                          #
+                          #     var protoToCssColor = function(rgb_color) {
+                          #        var redFrac = rgb_color.red || 0.0;
+                          #        var greenFrac = rgb_color.green || 0.0;
+                          #        var blueFrac = rgb_color.blue || 0.0;
+                          #        var red = Math.floor(redFrac * 255);
+                          #        var green = Math.floor(greenFrac * 255);
+                          #        var blue = Math.floor(blueFrac * 255);
+                          #
+                          #        if (!('alpha' in rgb_color)) {
+                          #           return rgbToCssColor_(red, green, blue);
+                          #        }
+                          #
+                          #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                          #        var rgbParams = [red, green, blue].join(',');
+                          #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                          #     };
+                          #
+                          #     var rgbToCssColor_ = function(red, green, blue) {
+                          #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                          #       var hexString = rgbNumber.toString(16);
+                          #       var missingZeros = 6 - hexString.length;
+                          #       var resultBuilder = ['#'];
+                          #       for (var i = 0; i < missingZeros; i++) {
+                          #          resultBuilder.push('0');
+                          #       }
+                          #       resultBuilder.push(hexString);
+                          #       return resultBuilder.join('');
+                          #     };
+                          #
+                          #     // ...
+                        "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                        "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                            # the final pixel color is defined by the equation:
+                            #
+                            #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                            #
+                            # This means that a value of 1.0 corresponds to a solid color, whereas
+                            # a value of 0.0 corresponds to a completely transparent color. This
+                            # uses a wrapper message rather than a simple float scalar so that it is
+                            # possible to distinguish between a default value and the value being unset.
+                            # If omitted, this color object is to be rendered as a solid color
+                            # (as if the alpha value had been explicitly given with a value of 1.0).
+                        "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                        "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                      },
+                      "width": 42, # The width of the border, in pixels.
+                          # Border widths must be between 0 and 3 pixels.
+                      "style": "A String", # The style of the border.
+                    },
+                    "left": { # A border along a cell. # The left border of the cell.
+                      "color": { # Represents a color in the RGBA color space. This representation is designed # The color of the border.
+                          # for simplicity of conversion to/from color representations in various
+                          # languages over compactness; for example, the fields of this representation
+                          # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                          # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                          # method in iOS; and, with just a little work, it can be easily formatted into
+                          # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                          #
+                          # Example (Java):
+                          #
+                          #      import com.google.type.Color;
+                          #
+                          #      // ...
+                          #      public static java.awt.Color fromProto(Color protocolor) {
+                          #        float alpha = protocolor.hasAlpha()
+                          #            ? protocolor.getAlpha().getValue()
+                          #            : 1.0;
+                          #
+                          #        return new java.awt.Color(
+                          #            protocolor.getRed(),
+                          #            protocolor.getGreen(),
+                          #            protocolor.getBlue(),
+                          #            alpha);
+                          #      }
+                          #
+                          #      public static Color toProto(java.awt.Color color) {
+                          #        float red = (float) color.getRed();
+                          #        float green = (float) color.getGreen();
+                          #        float blue = (float) color.getBlue();
+                          #        float denominator = 255.0;
+                          #        Color.Builder resultBuilder =
+                          #            Color
+                          #                .newBuilder()
+                          #                .setRed(red / denominator)
+                          #                .setGreen(green / denominator)
+                          #                .setBlue(blue / denominator);
+                          #        int alpha = color.getAlpha();
+                          #        if (alpha != 255) {
+                          #          result.setAlpha(
+                          #              FloatValue
+                          #                  .newBuilder()
+                          #                  .setValue(((float) alpha) / denominator)
+                          #                  .build());
+                          #        }
+                          #        return resultBuilder.build();
+                          #      }
+                          #      // ...
+                          #
+                          # Example (iOS / Obj-C):
+                          #
+                          #      // ...
+                          #      static UIColor* fromProto(Color* protocolor) {
+                          #         float red = [protocolor red];
+                          #         float green = [protocolor green];
+                          #         float blue = [protocolor blue];
+                          #         FloatValue* alpha_wrapper = [protocolor alpha];
+                          #         float alpha = 1.0;
+                          #         if (alpha_wrapper != nil) {
+                          #           alpha = [alpha_wrapper value];
+                          #         }
+                          #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                          #      }
+                          #
+                          #      static Color* toProto(UIColor* color) {
+                          #          CGFloat red, green, blue, alpha;
+                          #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                          #            return nil;
+                          #          }
+                          #          Color* result = [Color alloc] init];
+                          #          [result setRed:red];
+                          #          [result setGreen:green];
+                          #          [result setBlue:blue];
+                          #          if (alpha <= 0.9999) {
+                          #            [result setAlpha:floatWrapperWithValue(alpha)];
+                          #          }
+                          #          [result autorelease];
+                          #          return result;
+                          #     }
+                          #     // ...
+                          #
+                          #  Example (JavaScript):
+                          #
+                          #     // ...
+                          #
+                          #     var protoToCssColor = function(rgb_color) {
+                          #        var redFrac = rgb_color.red || 0.0;
+                          #        var greenFrac = rgb_color.green || 0.0;
+                          #        var blueFrac = rgb_color.blue || 0.0;
+                          #        var red = Math.floor(redFrac * 255);
+                          #        var green = Math.floor(greenFrac * 255);
+                          #        var blue = Math.floor(blueFrac * 255);
+                          #
+                          #        if (!('alpha' in rgb_color)) {
+                          #           return rgbToCssColor_(red, green, blue);
+                          #        }
+                          #
+                          #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                          #        var rgbParams = [red, green, blue].join(',');
+                          #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                          #     };
+                          #
+                          #     var rgbToCssColor_ = function(red, green, blue) {
+                          #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                          #       var hexString = rgbNumber.toString(16);
+                          #       var missingZeros = 6 - hexString.length;
+                          #       var resultBuilder = ['#'];
+                          #       for (var i = 0; i < missingZeros; i++) {
+                          #          resultBuilder.push('0');
+                          #       }
+                          #       resultBuilder.push(hexString);
+                          #       return resultBuilder.join('');
+                          #     };
+                          #
+                          #     // ...
+                        "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                        "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                            # the final pixel color is defined by the equation:
+                            #
+                            #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                            #
+                            # This means that a value of 1.0 corresponds to a solid color, whereas
+                            # a value of 0.0 corresponds to a completely transparent color. This
+                            # uses a wrapper message rather than a simple float scalar so that it is
+                            # possible to distinguish between a default value and the value being unset.
+                            # If omitted, this color object is to be rendered as a solid color
+                            # (as if the alpha value had been explicitly given with a value of 1.0).
+                        "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                        "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                      },
+                      "width": 42, # The width of the border, in pixels.
+                          # Border widths must be between 0 and 3 pixels.
+                      "style": "A String", # The style of the border.
+                    },
+                  },
+                  "wrapStrategy": "A String", # The wrap strategy for the value in the cell.
+                },
+              },
+              "gradientRule": { # A rule that applies a gradient color scale format, based on # The formatting will vary based on the gradients in the rule.
+                  # the interpolation points listed. The format of a cell will vary
+                  # based on its contents as compared to the values of the interpolation
+                  # points.
+                "maxpoint": { # A single interpolation point a gradient conditional format. # The final interpolation point.
+                    # These pin the gradient color scale according to the color,
+                    # type and value chosen.
+                  "color": { # Represents a color in the RGBA color space. This representation is designed # The color this interpolation point should use.
+                      # for simplicity of conversion to/from color representations in various
+                      # languages over compactness; for example, the fields of this representation
+                      # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                      # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                      # method in iOS; and, with just a little work, it can be easily formatted into
+                      # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                      #
+                      # Example (Java):
+                      #
+                      #      import com.google.type.Color;
+                      #
+                      #      // ...
+                      #      public static java.awt.Color fromProto(Color protocolor) {
+                      #        float alpha = protocolor.hasAlpha()
+                      #            ? protocolor.getAlpha().getValue()
+                      #            : 1.0;
+                      #
+                      #        return new java.awt.Color(
+                      #            protocolor.getRed(),
+                      #            protocolor.getGreen(),
+                      #            protocolor.getBlue(),
+                      #            alpha);
+                      #      }
+                      #
+                      #      public static Color toProto(java.awt.Color color) {
+                      #        float red = (float) color.getRed();
+                      #        float green = (float) color.getGreen();
+                      #        float blue = (float) color.getBlue();
+                      #        float denominator = 255.0;
+                      #        Color.Builder resultBuilder =
+                      #            Color
+                      #                .newBuilder()
+                      #                .setRed(red / denominator)
+                      #                .setGreen(green / denominator)
+                      #                .setBlue(blue / denominator);
+                      #        int alpha = color.getAlpha();
+                      #        if (alpha != 255) {
+                      #          result.setAlpha(
+                      #              FloatValue
+                      #                  .newBuilder()
+                      #                  .setValue(((float) alpha) / denominator)
+                      #                  .build());
+                      #        }
+                      #        return resultBuilder.build();
+                      #      }
+                      #      // ...
+                      #
+                      # Example (iOS / Obj-C):
+                      #
+                      #      // ...
+                      #      static UIColor* fromProto(Color* protocolor) {
+                      #         float red = [protocolor red];
+                      #         float green = [protocolor green];
+                      #         float blue = [protocolor blue];
+                      #         FloatValue* alpha_wrapper = [protocolor alpha];
+                      #         float alpha = 1.0;
+                      #         if (alpha_wrapper != nil) {
+                      #           alpha = [alpha_wrapper value];
+                      #         }
+                      #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                      #      }
+                      #
+                      #      static Color* toProto(UIColor* color) {
+                      #          CGFloat red, green, blue, alpha;
+                      #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                      #            return nil;
+                      #          }
+                      #          Color* result = [Color alloc] init];
+                      #          [result setRed:red];
+                      #          [result setGreen:green];
+                      #          [result setBlue:blue];
+                      #          if (alpha <= 0.9999) {
+                      #            [result setAlpha:floatWrapperWithValue(alpha)];
+                      #          }
+                      #          [result autorelease];
+                      #          return result;
+                      #     }
+                      #     // ...
+                      #
+                      #  Example (JavaScript):
+                      #
+                      #     // ...
+                      #
+                      #     var protoToCssColor = function(rgb_color) {
+                      #        var redFrac = rgb_color.red || 0.0;
+                      #        var greenFrac = rgb_color.green || 0.0;
+                      #        var blueFrac = rgb_color.blue || 0.0;
+                      #        var red = Math.floor(redFrac * 255);
+                      #        var green = Math.floor(greenFrac * 255);
+                      #        var blue = Math.floor(blueFrac * 255);
+                      #
+                      #        if (!('alpha' in rgb_color)) {
+                      #           return rgbToCssColor_(red, green, blue);
+                      #        }
+                      #
+                      #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                      #        var rgbParams = [red, green, blue].join(',');
+                      #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                      #     };
+                      #
+                      #     var rgbToCssColor_ = function(red, green, blue) {
+                      #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                      #       var hexString = rgbNumber.toString(16);
+                      #       var missingZeros = 6 - hexString.length;
+                      #       var resultBuilder = ['#'];
+                      #       for (var i = 0; i < missingZeros; i++) {
+                      #          resultBuilder.push('0');
+                      #       }
+                      #       resultBuilder.push(hexString);
+                      #       return resultBuilder.join('');
+                      #     };
+                      #
+                      #     // ...
+                    "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                    "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                        # the final pixel color is defined by the equation:
+                        #
+                        #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                        #
+                        # This means that a value of 1.0 corresponds to a solid color, whereas
+                        # a value of 0.0 corresponds to a completely transparent color. This
+                        # uses a wrapper message rather than a simple float scalar so that it is
+                        # possible to distinguish between a default value and the value being unset.
+                        # If omitted, this color object is to be rendered as a solid color
+                        # (as if the alpha value had been explicitly given with a value of 1.0).
+                    "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                    "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                  },
+                  "type": "A String", # How the value should be interpreted.
+                  "value": "A String", # The value this interpolation point uses.  May be a formula.
+                      # Unused if type is MIN or
+                      # MAX.
+                },
+                "midpoint": { # A single interpolation point a gradient conditional format. # An optional midway interpolation point.
+                    # These pin the gradient color scale according to the color,
+                    # type and value chosen.
+                  "color": { # Represents a color in the RGBA color space. This representation is designed # The color this interpolation point should use.
+                      # for simplicity of conversion to/from color representations in various
+                      # languages over compactness; for example, the fields of this representation
+                      # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                      # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                      # method in iOS; and, with just a little work, it can be easily formatted into
+                      # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                      #
+                      # Example (Java):
+                      #
+                      #      import com.google.type.Color;
+                      #
+                      #      // ...
+                      #      public static java.awt.Color fromProto(Color protocolor) {
+                      #        float alpha = protocolor.hasAlpha()
+                      #            ? protocolor.getAlpha().getValue()
+                      #            : 1.0;
+                      #
+                      #        return new java.awt.Color(
+                      #            protocolor.getRed(),
+                      #            protocolor.getGreen(),
+                      #            protocolor.getBlue(),
+                      #            alpha);
+                      #      }
+                      #
+                      #      public static Color toProto(java.awt.Color color) {
+                      #        float red = (float) color.getRed();
+                      #        float green = (float) color.getGreen();
+                      #        float blue = (float) color.getBlue();
+                      #        float denominator = 255.0;
+                      #        Color.Builder resultBuilder =
+                      #            Color
+                      #                .newBuilder()
+                      #                .setRed(red / denominator)
+                      #                .setGreen(green / denominator)
+                      #                .setBlue(blue / denominator);
+                      #        int alpha = color.getAlpha();
+                      #        if (alpha != 255) {
+                      #          result.setAlpha(
+                      #              FloatValue
+                      #                  .newBuilder()
+                      #                  .setValue(((float) alpha) / denominator)
+                      #                  .build());
+                      #        }
+                      #        return resultBuilder.build();
+                      #      }
+                      #      // ...
+                      #
+                      # Example (iOS / Obj-C):
+                      #
+                      #      // ...
+                      #      static UIColor* fromProto(Color* protocolor) {
+                      #         float red = [protocolor red];
+                      #         float green = [protocolor green];
+                      #         float blue = [protocolor blue];
+                      #         FloatValue* alpha_wrapper = [protocolor alpha];
+                      #         float alpha = 1.0;
+                      #         if (alpha_wrapper != nil) {
+                      #           alpha = [alpha_wrapper value];
+                      #         }
+                      #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                      #      }
+                      #
+                      #      static Color* toProto(UIColor* color) {
+                      #          CGFloat red, green, blue, alpha;
+                      #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                      #            return nil;
+                      #          }
+                      #          Color* result = [Color alloc] init];
+                      #          [result setRed:red];
+                      #          [result setGreen:green];
+                      #          [result setBlue:blue];
+                      #          if (alpha <= 0.9999) {
+                      #            [result setAlpha:floatWrapperWithValue(alpha)];
+                      #          }
+                      #          [result autorelease];
+                      #          return result;
+                      #     }
+                      #     // ...
+                      #
+                      #  Example (JavaScript):
+                      #
+                      #     // ...
+                      #
+                      #     var protoToCssColor = function(rgb_color) {
+                      #        var redFrac = rgb_color.red || 0.0;
+                      #        var greenFrac = rgb_color.green || 0.0;
+                      #        var blueFrac = rgb_color.blue || 0.0;
+                      #        var red = Math.floor(redFrac * 255);
+                      #        var green = Math.floor(greenFrac * 255);
+                      #        var blue = Math.floor(blueFrac * 255);
+                      #
+                      #        if (!('alpha' in rgb_color)) {
+                      #           return rgbToCssColor_(red, green, blue);
+                      #        }
+                      #
+                      #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                      #        var rgbParams = [red, green, blue].join(',');
+                      #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                      #     };
+                      #
+                      #     var rgbToCssColor_ = function(red, green, blue) {
+                      #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                      #       var hexString = rgbNumber.toString(16);
+                      #       var missingZeros = 6 - hexString.length;
+                      #       var resultBuilder = ['#'];
+                      #       for (var i = 0; i < missingZeros; i++) {
+                      #          resultBuilder.push('0');
+                      #       }
+                      #       resultBuilder.push(hexString);
+                      #       return resultBuilder.join('');
+                      #     };
+                      #
+                      #     // ...
+                    "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                    "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                        # the final pixel color is defined by the equation:
+                        #
+                        #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                        #
+                        # This means that a value of 1.0 corresponds to a solid color, whereas
+                        # a value of 0.0 corresponds to a completely transparent color. This
+                        # uses a wrapper message rather than a simple float scalar so that it is
+                        # possible to distinguish between a default value and the value being unset.
+                        # If omitted, this color object is to be rendered as a solid color
+                        # (as if the alpha value had been explicitly given with a value of 1.0).
+                    "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                    "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                  },
+                  "type": "A String", # How the value should be interpreted.
+                  "value": "A String", # The value this interpolation point uses.  May be a formula.
+                      # Unused if type is MIN or
+                      # MAX.
+                },
+                "minpoint": { # A single interpolation point a gradient conditional format. # The starting interpolation point.
+                    # These pin the gradient color scale according to the color,
+                    # type and value chosen.
+                  "color": { # Represents a color in the RGBA color space. This representation is designed # The color this interpolation point should use.
+                      # for simplicity of conversion to/from color representations in various
+                      # languages over compactness; for example, the fields of this representation
+                      # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                      # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                      # method in iOS; and, with just a little work, it can be easily formatted into
+                      # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                      #
+                      # Example (Java):
+                      #
+                      #      import com.google.type.Color;
+                      #
+                      #      // ...
+                      #      public static java.awt.Color fromProto(Color protocolor) {
+                      #        float alpha = protocolor.hasAlpha()
+                      #            ? protocolor.getAlpha().getValue()
+                      #            : 1.0;
+                      #
+                      #        return new java.awt.Color(
+                      #            protocolor.getRed(),
+                      #            protocolor.getGreen(),
+                      #            protocolor.getBlue(),
+                      #            alpha);
+                      #      }
+                      #
+                      #      public static Color toProto(java.awt.Color color) {
+                      #        float red = (float) color.getRed();
+                      #        float green = (float) color.getGreen();
+                      #        float blue = (float) color.getBlue();
+                      #        float denominator = 255.0;
+                      #        Color.Builder resultBuilder =
+                      #            Color
+                      #                .newBuilder()
+                      #                .setRed(red / denominator)
+                      #                .setGreen(green / denominator)
+                      #                .setBlue(blue / denominator);
+                      #        int alpha = color.getAlpha();
+                      #        if (alpha != 255) {
+                      #          result.setAlpha(
+                      #              FloatValue
+                      #                  .newBuilder()
+                      #                  .setValue(((float) alpha) / denominator)
+                      #                  .build());
+                      #        }
+                      #        return resultBuilder.build();
+                      #      }
+                      #      // ...
+                      #
+                      # Example (iOS / Obj-C):
+                      #
+                      #      // ...
+                      #      static UIColor* fromProto(Color* protocolor) {
+                      #         float red = [protocolor red];
+                      #         float green = [protocolor green];
+                      #         float blue = [protocolor blue];
+                      #         FloatValue* alpha_wrapper = [protocolor alpha];
+                      #         float alpha = 1.0;
+                      #         if (alpha_wrapper != nil) {
+                      #           alpha = [alpha_wrapper value];
+                      #         }
+                      #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                      #      }
+                      #
+                      #      static Color* toProto(UIColor* color) {
+                      #          CGFloat red, green, blue, alpha;
+                      #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                      #            return nil;
+                      #          }
+                      #          Color* result = [Color alloc] init];
+                      #          [result setRed:red];
+                      #          [result setGreen:green];
+                      #          [result setBlue:blue];
+                      #          if (alpha <= 0.9999) {
+                      #            [result setAlpha:floatWrapperWithValue(alpha)];
+                      #          }
+                      #          [result autorelease];
+                      #          return result;
+                      #     }
+                      #     // ...
+                      #
+                      #  Example (JavaScript):
+                      #
+                      #     // ...
+                      #
+                      #     var protoToCssColor = function(rgb_color) {
+                      #        var redFrac = rgb_color.red || 0.0;
+                      #        var greenFrac = rgb_color.green || 0.0;
+                      #        var blueFrac = rgb_color.blue || 0.0;
+                      #        var red = Math.floor(redFrac * 255);
+                      #        var green = Math.floor(greenFrac * 255);
+                      #        var blue = Math.floor(blueFrac * 255);
+                      #
+                      #        if (!('alpha' in rgb_color)) {
+                      #           return rgbToCssColor_(red, green, blue);
+                      #        }
+                      #
+                      #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                      #        var rgbParams = [red, green, blue].join(',');
+                      #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                      #     };
+                      #
+                      #     var rgbToCssColor_ = function(red, green, blue) {
+                      #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                      #       var hexString = rgbNumber.toString(16);
+                      #       var missingZeros = 6 - hexString.length;
+                      #       var resultBuilder = ['#'];
+                      #       for (var i = 0; i < missingZeros; i++) {
+                      #          resultBuilder.push('0');
+                      #       }
+                      #       resultBuilder.push(hexString);
+                      #       return resultBuilder.join('');
+                      #     };
+                      #
+                      #     // ...
+                    "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                    "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                        # the final pixel color is defined by the equation:
+                        #
+                        #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                        #
+                        # This means that a value of 1.0 corresponds to a solid color, whereas
+                        # a value of 0.0 corresponds to a completely transparent color. This
+                        # uses a wrapper message rather than a simple float scalar so that it is
+                        # possible to distinguish between a default value and the value being unset.
+                        # If omitted, this color object is to be rendered as a solid color
+                        # (as if the alpha value had been explicitly given with a value of 1.0).
+                    "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                    "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                  },
+                  "type": "A String", # How the value should be interpreted.
+                  "value": "A String", # The value this interpolation point uses.  May be a formula.
+                      # Unused if type is MIN or
+                      # MAX.
+                },
+              },
+            },
+          ],
+          "merges": [ # The ranges that are merged together.
+            { # A range on a sheet.
+                # 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 grid 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.
+              "startRowIndex": 42, # The start row (inclusive) 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.
+              "endColumnIndex": 42, # The end column (exclusive) of the range, or not set if unbounded.
+            },
+          ],
+          "basicFilter": { # The default filter associated with a sheet. # The filter on this sheet, if any.
+            "range": { # A range on a sheet. # The range the filter covers.
+                # 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 grid 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.
+              "startRowIndex": 42, # The start row (inclusive) 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.
+              "endColumnIndex": 42, # The end column (exclusive) of the range, or not set if unbounded.
+            },
+            "sortSpecs": [ # The sort order per column. Later specifications are used when values
+                # are equal in the earlier specifications.
+              { # A sort order associated with a specific column or row.
+                "sortOrder": "A String", # The order data should be sorted.
+                "dimensionIndex": 42, # The dimension the sort should be applied to.
+              },
+            ],
+            "criteria": { # The criteria for showing/hiding values per column.
+                # The map's key is the column index, and the value is the criteria for
+                # that column.
+              "a_key": { # Criteria for showing/hiding rows in a filter, filter view.
+                "hiddenValues": [ # Values that should be hidden.
+                  "A String",
+                ],
+                "condition": { # A condition that can evaluate to true or false. # A condition that must be true for values to be shown.
+                    # (This does not override hiddenValues -- if a value is listed there,
+                    #  it will still be hidden.)
+                    # BooleanConditions are used by conditional formatting,
+                    # data validation, and the criteria in filters.
+                  "type": "A String", # The type of condition.
+                  "values": [ # The values of the condition. The number of supported values depends
+                      # on the condition type.  Some support zero values,
+                      # others one or two values,
+                      # and ConditionType.ONE_OF_LIST supports an arbitrary number of values.
+                    { # The value of the condition.
+                      "relativeDate": "A String", # A relative date (based on the current date).
+                          # Valid only if the type is
+                          # DATE_BEFORE,
+                          # DATE_AFTER,
+                          # DATE_ON_OR_BEFORE or
+                          # DATE_ON_OR_AFTER.
+                          #
+                          # Relative dates are not supported in data validation.
+                          # They are supported only in conditional formatting and
+                          # conditional filters.
+                      "userEnteredValue": "A String", # A value the condition is based on.
+                          # The value will be parsed as if the user typed into a cell.
+                          # Formulas are supported (and must begin with an `=`).
+                    },
+                  ],
+                },
+              },
+            },
+          },
+          "charts": [ # The specifications of every chart on this sheet.
+            { # A chart embedded in a sheet.
+              "chartId": 42, # The ID of the chart.
+              "position": { # The position of an embedded object such as a chart. # The position of the chart.
+                "newSheet": True or False, # If true, the embedded object will be put on a new sheet whose ID
+                    # is chosen for you. Used only when writing.
+                "sheetId": 42, # The sheet this is on. Set only if the embedded object
+                    # is on its own sheet. Must be non-negative.
+                "overlayPosition": { # The location an object is overlaid on top of a grid. # The position the object is overlaid on top of a grid.
+                  "anchorCell": { # A coordinate in a sheet. # The cell the object is anchored to.
+                      # All indexes are zero-based.
+                    "rowIndex": 42, # The row index of the coordinate.
+                    "columnIndex": 42, # The column index of the coordinate.
+                    "sheetId": 42, # The sheet this coordinate is on.
+                  },
+                  "offsetYPixels": 42, # The vertical offset, in pixels, that the object is offset
+                      # from the anchor cell.
+                  "widthPixels": 42, # The width of the object, in pixels. Defaults to 600.
+                  "offsetXPixels": 42, # The horizontal offset, in pixels, that the object is offset
+                      # from the anchor cell.
+                  "heightPixels": 42, # The height of the object, in pixels. Defaults to 371.
+                },
+              },
+              "spec": { # The specifications of a chart. # The specification of the chart.
+                "hiddenDimensionStrategy": "A String", # Determines how the charts will use hidden rows or columns.
+                    # This value is only meaningful if the
+                    # ChartData.sourceRange
+                    # is used for a domain or series.
+                "pieChart": { # A <a href="/chart/interactive/docs/gallery/piechart">pie chart</a>. # A pie chart specification.
+                  "series": { # The data included in a domain or series. # The data that covers the one and only series of the pie chart.
+                    "sourceRange": { # Source ranges for a chart. # The source ranges of the data.
+                      "sources": [ # The ranges of data for a series or domain.
+                          # Exactly one dimension must have a length of 1,
+                          # and all sources in the list must have the same dimension
+                          # with length 1.
+                          # The domain (if it exists) & all series must have the same number
+                          # of source ranges. If using more than one source range, then the source
+                          # range at a given offset must be contiguous across the domain and series.
+                          #
+                          # For example, these are valid configurations:
+                          #
+                          #     domain sources: A1:A5
+                          #     series1 sources: B1:B5
+                          #     series2 sources: D6:D10
+                          #
+                          #     domain sources: A1:A5, C10:C12
+                          #     series1 sources: B1:B5, D10:D12
+                          #     series2 sources: C1:C5, E10:E12
+                        { # A range on a sheet.
+                            # 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 grid 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.
+                          "startRowIndex": 42, # The start row (inclusive) 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.
+                          "endColumnIndex": 42, # The end column (exclusive) of the range, or not set if unbounded.
+                        },
+                      ],
+                    },
+                  },
+                  "domain": { # The data included in a domain or series. # The data that covers the domain of the pie chart.
+                    "sourceRange": { # Source ranges for a chart. # The source ranges of the data.
+                      "sources": [ # The ranges of data for a series or domain.
+                          # Exactly one dimension must have a length of 1,
+                          # and all sources in the list must have the same dimension
+                          # with length 1.
+                          # The domain (if it exists) & all series must have the same number
+                          # of source ranges. If using more than one source range, then the source
+                          # range at a given offset must be contiguous across the domain and series.
+                          #
+                          # For example, these are valid configurations:
+                          #
+                          #     domain sources: A1:A5
+                          #     series1 sources: B1:B5
+                          #     series2 sources: D6:D10
+                          #
+                          #     domain sources: A1:A5, C10:C12
+                          #     series1 sources: B1:B5, D10:D12
+                          #     series2 sources: C1:C5, E10:E12
+                        { # A range on a sheet.
+                            # 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 grid 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.
+                          "startRowIndex": 42, # The start row (inclusive) 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.
+                          "endColumnIndex": 42, # The end column (exclusive) of the range, or not set if unbounded.
+                        },
+                      ],
+                    },
+                  },
+                  "threeDimensional": True or False, # True if the pie is three dimensional.
+                  "legendPosition": "A String", # Where the legend of the pie chart should be drawn.
+                  "pieHole": 3.14, # The size of the hole in the pie chart.
+                },
+                "basicChart": { # The specification for a basic chart.  See BasicChartType for the list # A basic chart specification, can be one of many kinds of charts.
+                    # See BasicChartType for the list of all charts this supports.
+                    # of charts this supports.
+                  "headerCount": 42, # The number of rows or columns in the data that are "headers".
+                      # If not set, Google Sheets will guess how many rows are headers based
+                      # on the data.
+                      #
+                      # (Note that BasicChartAxis.title may override the axis title
+                      #  inferred from the header values.)
+                  "series": [ # The data this chart is visualizing.
+                    { # A single series of data in a chart.
+                        # For example, if charting stock prices over time, multiple series may exist,
+                        # one for the "Open Price", "High Price", "Low Price" and "Close Price".
+                      "series": { # The data included in a domain or series. # The data being visualized in this chart series.
+                        "sourceRange": { # Source ranges for a chart. # The source ranges of the data.
+                          "sources": [ # The ranges of data for a series or domain.
+                              # Exactly one dimension must have a length of 1,
+                              # and all sources in the list must have the same dimension
+                              # with length 1.
+                              # The domain (if it exists) & all series must have the same number
+                              # of source ranges. If using more than one source range, then the source
+                              # range at a given offset must be contiguous across the domain and series.
+                              #
+                              # For example, these are valid configurations:
+                              #
+                              #     domain sources: A1:A5
+                              #     series1 sources: B1:B5
+                              #     series2 sources: D6:D10
+                              #
+                              #     domain sources: A1:A5, C10:C12
+                              #     series1 sources: B1:B5, D10:D12
+                              #     series2 sources: C1:C5, E10:E12
+                            { # A range on a sheet.
+                                # 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 grid 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.
+                              "startRowIndex": 42, # The start row (inclusive) 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.
+                              "endColumnIndex": 42, # The end column (exclusive) of the range, or not set if unbounded.
+                            },
+                          ],
+                        },
+                      },
+                      "targetAxis": "A String", # The minor axis that will specify the range of values for this series.
+                          # For example, if charting stocks over time, the "Volume" series
+                          # may want to be pinned to the right with the prices pinned to the left,
+                          # because the scale of trading volume is different than the scale of
+                          # prices.
+                          # It is an error to specify an axis that isn't a valid minor axis
+                          # for the chart's type.
+                      "type": "A String", # The type of this series. Valid only if the
+                          # chartType is
+                          # COMBO.
+                          # Different types will change the way the series is visualized.
+                          # Only LINE, AREA,
+                          # and COLUMN are supported.
+                    },
+                  ],
+                  "legendPosition": "A String", # The position of the chart legend.
+                  "domains": [ # The domain of data this is charting.
+                      # Only a single domain is currently supported.
+                    { # The domain of a chart.
+                        # For example, if charting stock prices over time, this would be the date.
+                      "domain": { # The data included in a domain or series. # The data of the domain. For example, if charting stock prices over time,
+                          # this be the data representing the dates.
+                        "sourceRange": { # Source ranges for a chart. # The source ranges of the data.
+                          "sources": [ # The ranges of data for a series or domain.
+                              # Exactly one dimension must have a length of 1,
+                              # and all sources in the list must have the same dimension
+                              # with length 1.
+                              # The domain (if it exists) & all series must have the same number
+                              # of source ranges. If using more than one source range, then the source
+                              # range at a given offset must be contiguous across the domain and series.
+                              #
+                              # For example, these are valid configurations:
+                              #
+                              #     domain sources: A1:A5
+                              #     series1 sources: B1:B5
+                              #     series2 sources: D6:D10
+                              #
+                              #     domain sources: A1:A5, C10:C12
+                              #     series1 sources: B1:B5, D10:D12
+                              #     series2 sources: C1:C5, E10:E12
+                            { # A range on a sheet.
+                                # 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 grid 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.
+                              "startRowIndex": 42, # The start row (inclusive) 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.
+                              "endColumnIndex": 42, # The end column (exclusive) of the range, or not set if unbounded.
+                            },
+                          ],
+                        },
+                      },
+                    },
+                  ],
+                  "chartType": "A String", # The type of the chart.
+                  "axis": [ # The axis on the chart.
+                    { # An axis of the chart.
+                        # A chart may not have more than one axis per
+                        # axis position.
+                      "position": "A String", # The position of this axis.
+                      "format": { # The format of a run of text in a cell. # The format of the title.
+                          # Only valid if the axis is not associated with the domain.
+                          # Absent values indicate that the field isn't specified.
+                        "foregroundColor": { # Represents a color in the RGBA color space. This representation is designed # The foreground color of the text.
+                            # for simplicity of conversion to/from color representations in various
+                            # languages over compactness; for example, the fields of this representation
+                            # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                            # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                            # method in iOS; and, with just a little work, it can be easily formatted into
+                            # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                            #
+                            # Example (Java):
+                            #
+                            #      import com.google.type.Color;
+                            #
+                            #      // ...
+                            #      public static java.awt.Color fromProto(Color protocolor) {
+                            #        float alpha = protocolor.hasAlpha()
+                            #            ? protocolor.getAlpha().getValue()
+                            #            : 1.0;
+                            #
+                            #        return new java.awt.Color(
+                            #            protocolor.getRed(),
+                            #            protocolor.getGreen(),
+                            #            protocolor.getBlue(),
+                            #            alpha);
+                            #      }
+                            #
+                            #      public static Color toProto(java.awt.Color color) {
+                            #        float red = (float) color.getRed();
+                            #        float green = (float) color.getGreen();
+                            #        float blue = (float) color.getBlue();
+                            #        float denominator = 255.0;
+                            #        Color.Builder resultBuilder =
+                            #            Color
+                            #                .newBuilder()
+                            #                .setRed(red / denominator)
+                            #                .setGreen(green / denominator)
+                            #                .setBlue(blue / denominator);
+                            #        int alpha = color.getAlpha();
+                            #        if (alpha != 255) {
+                            #          result.setAlpha(
+                            #              FloatValue
+                            #                  .newBuilder()
+                            #                  .setValue(((float) alpha) / denominator)
+                            #                  .build());
+                            #        }
+                            #        return resultBuilder.build();
+                            #      }
+                            #      // ...
+                            #
+                            # Example (iOS / Obj-C):
+                            #
+                            #      // ...
+                            #      static UIColor* fromProto(Color* protocolor) {
+                            #         float red = [protocolor red];
+                            #         float green = [protocolor green];
+                            #         float blue = [protocolor blue];
+                            #         FloatValue* alpha_wrapper = [protocolor alpha];
+                            #         float alpha = 1.0;
+                            #         if (alpha_wrapper != nil) {
+                            #           alpha = [alpha_wrapper value];
+                            #         }
+                            #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                            #      }
+                            #
+                            #      static Color* toProto(UIColor* color) {
+                            #          CGFloat red, green, blue, alpha;
+                            #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                            #            return nil;
+                            #          }
+                            #          Color* result = [Color alloc] init];
+                            #          [result setRed:red];
+                            #          [result setGreen:green];
+                            #          [result setBlue:blue];
+                            #          if (alpha <= 0.9999) {
+                            #            [result setAlpha:floatWrapperWithValue(alpha)];
+                            #          }
+                            #          [result autorelease];
+                            #          return result;
+                            #     }
+                            #     // ...
+                            #
+                            #  Example (JavaScript):
+                            #
+                            #     // ...
+                            #
+                            #     var protoToCssColor = function(rgb_color) {
+                            #        var redFrac = rgb_color.red || 0.0;
+                            #        var greenFrac = rgb_color.green || 0.0;
+                            #        var blueFrac = rgb_color.blue || 0.0;
+                            #        var red = Math.floor(redFrac * 255);
+                            #        var green = Math.floor(greenFrac * 255);
+                            #        var blue = Math.floor(blueFrac * 255);
+                            #
+                            #        if (!('alpha' in rgb_color)) {
+                            #           return rgbToCssColor_(red, green, blue);
+                            #        }
+                            #
+                            #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                            #        var rgbParams = [red, green, blue].join(',');
+                            #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                            #     };
+                            #
+                            #     var rgbToCssColor_ = function(red, green, blue) {
+                            #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                            #       var hexString = rgbNumber.toString(16);
+                            #       var missingZeros = 6 - hexString.length;
+                            #       var resultBuilder = ['#'];
+                            #       for (var i = 0; i < missingZeros; i++) {
+                            #          resultBuilder.push('0');
+                            #       }
+                            #       resultBuilder.push(hexString);
+                            #       return resultBuilder.join('');
+                            #     };
+                            #
+                            #     // ...
+                          "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                          "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                              # the final pixel color is defined by the equation:
+                              #
+                              #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                              #
+                              # This means that a value of 1.0 corresponds to a solid color, whereas
+                              # a value of 0.0 corresponds to a completely transparent color. This
+                              # uses a wrapper message rather than a simple float scalar so that it is
+                              # possible to distinguish between a default value and the value being unset.
+                              # If omitted, this color object is to be rendered as a solid color
+                              # (as if the alpha value had been explicitly given with a value of 1.0).
+                          "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                          "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                        },
+                        "bold": True or False, # True if the text is bold.
+                        "strikethrough": True or False, # True if the text has a strikethrough.
+                        "fontFamily": "A String", # The font family.
+                        "fontSize": 42, # The size of the font.
+                        "italic": True or False, # True if the text is italicized.
+                        "underline": True or False, # True if the text is underlined.
+                      },
+                      "title": "A String", # The title of this axis. If set, this overrides any title inferred
+                          # from headers of the data.
+                    },
+                  ],
+                },
+                "title": "A String", # The title of the chart.
+              },
+            },
+          ],
+          "filterViews": [ # The filter views in this sheet.
+            { # A filter view.
+              "title": "A String", # The name of the filter view.
+              "namedRangeId": "A String", # The named range this filter view is backed by, if any.
+                  #
+                  # When writing, only one of range or namedRangeId
+                  # may be set.
+              "filterViewId": 42, # The ID of the filter view.
+              "range": { # A range on a sheet. # The range this filter view covers.
+                  #
+                  # When writing, only one of range or namedRangeId
+                  # may be set.
+                  # 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 grid 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.
+                "startRowIndex": 42, # The start row (inclusive) 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.
+                "endColumnIndex": 42, # The end column (exclusive) of the range, or not set if unbounded.
+              },
+              "sortSpecs": [ # The sort order per column. Later specifications are used when values
+                  # are equal in the earlier specifications.
+                { # A sort order associated with a specific column or row.
+                  "sortOrder": "A String", # The order data should be sorted.
+                  "dimensionIndex": 42, # The dimension the sort should be applied to.
+                },
+              ],
+              "criteria": { # The criteria for showing/hiding values per column.
+                  # The map's key is the column index, and the value is the criteria for
+                  # that column.
+                "a_key": { # Criteria for showing/hiding rows in a filter, filter view.
+                  "hiddenValues": [ # Values that should be hidden.
+                    "A String",
+                  ],
+                  "condition": { # A condition that can evaluate to true or false. # A condition that must be true for values to be shown.
+                      # (This does not override hiddenValues -- if a value is listed there,
+                      #  it will still be hidden.)
+                      # BooleanConditions are used by conditional formatting,
+                      # data validation, and the criteria in filters.
+                    "type": "A String", # The type of condition.
+                    "values": [ # The values of the condition. The number of supported values depends
+                        # on the condition type.  Some support zero values,
+                        # others one or two values,
+                        # and ConditionType.ONE_OF_LIST supports an arbitrary number of values.
+                      { # The value of the condition.
+                        "relativeDate": "A String", # A relative date (based on the current date).
+                            # Valid only if the type is
+                            # DATE_BEFORE,
+                            # DATE_AFTER,
+                            # DATE_ON_OR_BEFORE or
+                            # DATE_ON_OR_AFTER.
+                            #
+                            # Relative dates are not supported in data validation.
+                            # They are supported only in conditional formatting and
+                            # conditional filters.
+                        "userEnteredValue": "A String", # A value the condition is based on.
+                            # The value will be parsed as if the user typed into a cell.
+                            # Formulas are supported (and must begin with an `=`).
+                      },
+                    ],
+                  },
+                },
+              },
+            },
+          ],
+          "protectedRanges": [ # The protected ranges in this sheet.
+            { # A protected range.
+              "unprotectedRanges": [ # The list of unprotected ranges within a protected sheet.
+                  # Unprotected ranges are only supported on protected sheets.
+                { # A range on a sheet.
+                    # 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 grid 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.
+                  "startRowIndex": 42, # The start row (inclusive) 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.
+                  "endColumnIndex": 42, # The end column (exclusive) of the range, or not set if unbounded.
+                },
+              ],
+              "requestingUserCanEdit": True or False, # True if the user who requested this protected range can edit the
+                  # protected area.
+                  # This field is read-only.
+              "description": "A String", # The description of this protected range.
+              "namedRangeId": "A String", # The named range this protected range is backed by, if any.
+                  #
+                  # When writing, only one of range or namedRangeId
+                  # may be set.
+              "editors": { # The editors of a protected range. # The users and groups with edit access to the protected range.
+                  # This field is only visible to users with edit access to the protected
+                  # range and the document.
+                  # Editors are not supported with warningOnly protection.
+                "domainUsersCanEdit": True or False, # True if anyone in the document's domain has edit access to the protected
+                    # range.  Domain protection is only supported on documents within a domain.
+                "users": [ # The email addresses of users with edit access to the protected range.
+                  "A String",
+                ],
+                "groups": [ # The email addresses of groups with edit access to the protected range.
+                  "A String",
+                ],
+              },
+              "protectedRangeId": 42, # The ID of the protected range.
+                  # This field is read-only.
+              "warningOnly": True or False, # True if this this protected range will show a warning when editing.
+                  # Warning-based protection means that every user can edit data in the
+                  # protected range, except editing will prompt a warning asking the user
+                  # to confirm the edit.
+                  #
+                  # When warning: if this field is true, then editors is ignored.
+                  # Additionally, if this field is changed from true to false and the
+                  # `editors` field is not set (nor included in the field mask), then
+                  # the editors will be set to all the editors in the document.
+              "range": { # A range on a sheet. # The range that is being protected.
+                  # The range may be fully unbounded, in which case this is considered
+                  # a protected sheet.
+                  #
+                  # When writing, only one of range or namedRangeId
+                  # may be set.
+                  # 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 grid 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.
+                "startRowIndex": 42, # The start row (inclusive) 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.
+                "endColumnIndex": 42, # The end column (exclusive) of the range, or not set if unbounded.
+              },
+            },
+          ],
+          "data": [ # Data in the grid, if this is a grid sheet.
+              # The number of GridData objects returned is dependent on the number of
+              # ranges requested on this sheet. For example, if this is representing
+              # `Sheet1`, and the spreadsheet was requested with ranges
+              # `Sheet1!A1:C10` and `Sheet1!D15:E20`, then the first GridData will have a
+              # startRow/startColumn of `0`,
+              # while the second one will have `startRow 14` (zero-based row 15),
+              # and `startColumn 3` (zero-based column D).
+            { # Data in the grid, as well as metadata about the dimensions.
+              "startRow": 42, # The first row this GridData refers to, zero-based.
+              "rowMetadata": [ # Metadata about the requested rows in the grid, starting with the row
+                  # in startRow.
+                { # Properties about a dimension.
+                  "pixelSize": 42, # The height (if a row) or width (if a column) of the dimension in pixels.
+                  "hiddenByUser": True or False, # True if this dimension is explicitly hidden.
+                  "hiddenByFilter": True or False, # True if this dimension is being filtered.
+                      # This field is read-only.
+                },
+              ],
+              "startColumn": 42, # The first column this GridData refers to, zero-based.
+              "columnMetadata": [ # Metadata about the requested columns in the grid, starting with the column
+                  # in startColumn.
+                { # Properties about a dimension.
+                  "pixelSize": 42, # The height (if a row) or width (if a column) of the dimension in pixels.
+                  "hiddenByUser": True or False, # True if this dimension is explicitly hidden.
+                  "hiddenByFilter": True or False, # True if this dimension is being filtered.
+                      # This field is read-only.
+                },
+              ],
+              "rowData": [ # The data in the grid, one entry per row,
+                  # starting with the row in startRow.
+                  # The values in RowData will correspond to columns starting
+                  # at startColumn.
+                { # Data about each cell in a row.
+                  "values": [ # The values in the row, one per column.
+                    { # Data about a specific cell.
+                      "pivotTable": { # A pivot table. # A pivot table anchored at this cell. The size of pivot table itself
+                          # is computed dynamically based on its data, grouping, filters, values,
+                          # etc... Only the top-left cell of the pivot table contains the pivot table
+                          # definition. The other cells will contain the calculated values of the
+                          # results of the pivot in their effectiveValue fields.
+                        "valueLayout": "A String", # Whether values should be listed horizontally (as columns)
+                            # or vertically (as rows).
+                        "rows": [ # Each row grouping in the pivot table.
+                          { # A single grouping (either row or column) in a pivot table.
+                            "showTotals": True or False, # True if the pivot table should include the totals for this grouping.
+                            "valueMetadata": [ # Metadata about values in the grouping.
+                              { # Metadata about a value in a pivot grouping.
+                                "collapsed": True or False, # True if the data corresponding to the value is collapsed.
+                                "value": { # The kinds of value that a cell in a spreadsheet can have. # The calculated value the metadata corresponds to.
+                                    # (Note that formulaValue is not valid,
+                                    #  because the values will be calculated.)
+                                  "numberValue": 3.14, # Represents a double value.
+                                      # Note: Dates, Times and DateTimes are represented as doubles in
+                                      # "serial number" format.
+                                  "boolValue": True or False, # Represents a boolean value.
+                                  "formulaValue": "A String", # Represents a formula.
+                                  "stringValue": "A String", # Represents a string value.
+                                      # Leading single quotes are not included. For example, if the user typed
+                                      # `'123` into the UI, this would be represented as a `stringValue` of
+                                      # `"123"`.
+                                  "errorValue": { # An error in a cell. # Represents an error.
+                                      # This field is read-only.
+                                    "message": "A String", # A message with more information about the error
+                                        # (in the spreadsheet's locale).
+                                    "type": "A String", # The type of error.
+                                  },
+                                },
+                              },
+                            ],
+                            "valueBucket": { # Information about which values in a pivot group should be used for sorting. # The bucket of the opposite pivot group to sort by.
+                                # If not specified, sorting is alphabetical by this group's values.
+                              "buckets": [ # Determines the bucket from which values are chosen to sort.
+                                  #
+                                  # For example, in a pivot table with one row group & two column groups,
+                                  # the row group can list up to two values. The first value corresponds
+                                  # to a value within the first column group, and the second value
+                                  # corresponds to a value in the second column group.  If no values
+                                  # are listed, this would indicate that the row should be sorted according
+                                  # to the "Grand Total" over the column groups. If a single value is listed,
+                                  # this would correspond to using the "Total" of that bucket.
+                                { # The kinds of value that a cell in a spreadsheet can have.
+                                  "numberValue": 3.14, # Represents a double value.
+                                      # Note: Dates, Times and DateTimes are represented as doubles in
+                                      # "serial number" format.
+                                  "boolValue": True or False, # Represents a boolean value.
+                                  "formulaValue": "A String", # Represents a formula.
+                                  "stringValue": "A String", # Represents a string value.
+                                      # Leading single quotes are not included. For example, if the user typed
+                                      # `'123` into the UI, this would be represented as a `stringValue` of
+                                      # `"123"`.
+                                  "errorValue": { # An error in a cell. # Represents an error.
+                                      # This field is read-only.
+                                    "message": "A String", # A message with more information about the error
+                                        # (in the spreadsheet's locale).
+                                    "type": "A String", # The type of error.
+                                  },
+                                },
+                              ],
+                              "valuesIndex": 42, # The offset in the [PivotTable.values] list which the values in this
+                                  # grouping should be sorted by.
+                            },
+                            "sortOrder": "A String", # The order the values in this group should be sorted.
+                            "sourceColumnOffset": 42, # The column offset of the source range that this grouping is based on.
+                                #
+                                # For example, if the source was `C10:E15', a `sourceColumnOffset` of `0`
+                                # means this group refers to column `C`, whereas the offset `1` would refer
+                                # to column `D`.
+                          },
+                        ],
+                        "source": { # A range on a sheet. # The range the pivot table is reading data from.
+                            # 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 grid 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.
+                          "startRowIndex": 42, # The start row (inclusive) 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.
+                          "endColumnIndex": 42, # The end column (exclusive) of the range, or not set if unbounded.
+                        },
+                        "values": [ # A list of values to include in the pivot table.
+                          { # The definition of how a value in a pivot table should be calculated.
+                            "formula": "A String", # A custom formula to calculate the value.  The formula must start
+                                # with an `=` character.
+                            "summarizeFunction": "A String", # A function to summarize the value.
+                                # If formula is set, the only supported values are
+                                # SUM and
+                                # CUSTOM.
+                                # If sourceColumnOffset is set, then `CUSTOM`
+                                # is not supported.
+                            "sourceColumnOffset": 42, # The column offset of the source range that this value reads from.
+                                #
+                                # For example, if the source was `C10:E15', a `sourceColumnOffset` of `0`
+                                # means this value refers to column `C`, whereas the offset `1` would
+                                # refer to column `D`.
+                            "name": "A String", # A name to use for the value. This is only used if formula was set.
+                                # Otherwise, the column name is used.
+                          },
+                        ],
+                        "criteria": { # An optional mapping of filters per source column offset.
+                            #
+                            # The filters will be applied before aggregating data into the pivot table.
+                            # The map's key is the column offset of the source range that you want to
+                            # filter, and the value is the criteria for that column.
+                            #
+                            # For example, if the source was `C10:E15', a key of `0` will have the filter
+                            # for column `C`, whereas the key `1` is for column `D`.
+                          "a_key": { # Criteria for showing/hiding rows in a pivot table.
+                            "visibleValues": [ # Values that should be included.  Values not listed here are excluded.
+                              "A String",
+                            ],
+                          },
+                        },
+                        "columns": [ # Each column grouping in the pivot table.
+                          { # A single grouping (either row or column) in a pivot table.
+                            "showTotals": True or False, # True if the pivot table should include the totals for this grouping.
+                            "valueMetadata": [ # Metadata about values in the grouping.
+                              { # Metadata about a value in a pivot grouping.
+                                "collapsed": True or False, # True if the data corresponding to the value is collapsed.
+                                "value": { # The kinds of value that a cell in a spreadsheet can have. # The calculated value the metadata corresponds to.
+                                    # (Note that formulaValue is not valid,
+                                    #  because the values will be calculated.)
+                                  "numberValue": 3.14, # Represents a double value.
+                                      # Note: Dates, Times and DateTimes are represented as doubles in
+                                      # "serial number" format.
+                                  "boolValue": True or False, # Represents a boolean value.
+                                  "formulaValue": "A String", # Represents a formula.
+                                  "stringValue": "A String", # Represents a string value.
+                                      # Leading single quotes are not included. For example, if the user typed
+                                      # `'123` into the UI, this would be represented as a `stringValue` of
+                                      # `"123"`.
+                                  "errorValue": { # An error in a cell. # Represents an error.
+                                      # This field is read-only.
+                                    "message": "A String", # A message with more information about the error
+                                        # (in the spreadsheet's locale).
+                                    "type": "A String", # The type of error.
+                                  },
+                                },
+                              },
+                            ],
+                            "valueBucket": { # Information about which values in a pivot group should be used for sorting. # The bucket of the opposite pivot group to sort by.
+                                # If not specified, sorting is alphabetical by this group's values.
+                              "buckets": [ # Determines the bucket from which values are chosen to sort.
+                                  #
+                                  # For example, in a pivot table with one row group & two column groups,
+                                  # the row group can list up to two values. The first value corresponds
+                                  # to a value within the first column group, and the second value
+                                  # corresponds to a value in the second column group.  If no values
+                                  # are listed, this would indicate that the row should be sorted according
+                                  # to the "Grand Total" over the column groups. If a single value is listed,
+                                  # this would correspond to using the "Total" of that bucket.
+                                { # The kinds of value that a cell in a spreadsheet can have.
+                                  "numberValue": 3.14, # Represents a double value.
+                                      # Note: Dates, Times and DateTimes are represented as doubles in
+                                      # "serial number" format.
+                                  "boolValue": True or False, # Represents a boolean value.
+                                  "formulaValue": "A String", # Represents a formula.
+                                  "stringValue": "A String", # Represents a string value.
+                                      # Leading single quotes are not included. For example, if the user typed
+                                      # `'123` into the UI, this would be represented as a `stringValue` of
+                                      # `"123"`.
+                                  "errorValue": { # An error in a cell. # Represents an error.
+                                      # This field is read-only.
+                                    "message": "A String", # A message with more information about the error
+                                        # (in the spreadsheet's locale).
+                                    "type": "A String", # The type of error.
+                                  },
+                                },
+                              ],
+                              "valuesIndex": 42, # The offset in the [PivotTable.values] list which the values in this
+                                  # grouping should be sorted by.
+                            },
+                            "sortOrder": "A String", # The order the values in this group should be sorted.
+                            "sourceColumnOffset": 42, # The column offset of the source range that this grouping is based on.
+                                #
+                                # For example, if the source was `C10:E15', a `sourceColumnOffset` of `0`
+                                # means this group refers to column `C`, whereas the offset `1` would refer
+                                # to column `D`.
+                          },
+                        ],
+                      },
+                      "hyperlink": "A String", # A hyperlink this cell points to, if any.
+                          # This field is read-only.  (To set it, use a `=HYPERLINK` formula.)
+                      "effectiveValue": { # The kinds of value that a cell in a spreadsheet can have. # The effective value of the cell. For cells with formulas, this will be
+                          # the calculated value.  For cells with literals, this will be
+                          # the same as the user_entered_value.
+                          # This field is read-only.
+                        "numberValue": 3.14, # Represents a double value.
+                            # Note: Dates, Times and DateTimes are represented as doubles in
+                            # "serial number" format.
+                        "boolValue": True or False, # Represents a boolean value.
+                        "formulaValue": "A String", # Represents a formula.
+                        "stringValue": "A String", # Represents a string value.
+                            # Leading single quotes are not included. For example, if the user typed
+                            # `'123` into the UI, this would be represented as a `stringValue` of
+                            # `"123"`.
+                        "errorValue": { # An error in a cell. # Represents an error.
+                            # This field is read-only.
+                          "message": "A String", # A message with more information about the error
+                              # (in the spreadsheet's locale).
+                          "type": "A String", # The type of error.
+                        },
+                      },
+                      "formattedValue": "A String", # The formatted value of the cell.
+                          # This is the value as it's shown to the user.
+                          # This field is read-only.
+                      "userEnteredValue": { # The kinds of value that a cell in a spreadsheet can have. # The value the user entered in the cell. e.g, `1234`, `'Hello'`, or `=NOW()`
+                          # Note: Dates, Times and DateTimes are represented as doubles in
+                          # serial number format.
+                        "numberValue": 3.14, # Represents a double value.
+                            # Note: Dates, Times and DateTimes are represented as doubles in
+                            # "serial number" format.
+                        "boolValue": True or False, # Represents a boolean value.
+                        "formulaValue": "A String", # Represents a formula.
+                        "stringValue": "A String", # Represents a string value.
+                            # Leading single quotes are not included. For example, if the user typed
+                            # `'123` into the UI, this would be represented as a `stringValue` of
+                            # `"123"`.
+                        "errorValue": { # An error in a cell. # Represents an error.
+                            # This field is read-only.
+                          "message": "A String", # A message with more information about the error
+                              # (in the spreadsheet's locale).
+                          "type": "A String", # The type of error.
+                        },
+                      },
+                      "note": "A String", # Any note on the cell.
+                      "effectiveFormat": { # The format of a cell. # The effective format being used by the cell.
+                          # This includes the results of applying any conditional formatting and,
+                          # if the cell contains a formula, the computed number format.
+                          # If the effective format is the default format, effective format will
+                          # not be written.
+                          # This field is read-only.
+                        "numberFormat": { # The number format of a cell. # A format describing how number values should be represented to the user.
+                            # When updating, all fields must be set.
+                          "pattern": "A String", # Pattern string used for formatting.
+                          "type": "A String", # The type of the number format.
+                        },
+                        "textDirection": "A String", # The direction of the text in the cell.
+                        "padding": { # The amount of padding around the cell, in pixels. # The padding of the cell.
+                            # When updating padding, every field must be specified.
+                          "top": 42, # The top padding of the cell.
+                          "right": 42, # The right padding of the cell.
+                          "bottom": 42, # The bottom padding of the cell.
+                          "left": 42, # The left padding of the cell.
+                        },
+                        "horizontalAlignment": "A String", # The horizontal alignment of the value in cell.
+                        "backgroundColor": { # Represents a color in the RGBA color space. This representation is designed # The background color of the cell.
+                            # for simplicity of conversion to/from color representations in various
+                            # languages over compactness; for example, the fields of this representation
+                            # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                            # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                            # method in iOS; and, with just a little work, it can be easily formatted into
+                            # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                            #
+                            # Example (Java):
+                            #
+                            #      import com.google.type.Color;
+                            #
+                            #      // ...
+                            #      public static java.awt.Color fromProto(Color protocolor) {
+                            #        float alpha = protocolor.hasAlpha()
+                            #            ? protocolor.getAlpha().getValue()
+                            #            : 1.0;
+                            #
+                            #        return new java.awt.Color(
+                            #            protocolor.getRed(),
+                            #            protocolor.getGreen(),
+                            #            protocolor.getBlue(),
+                            #            alpha);
+                            #      }
+                            #
+                            #      public static Color toProto(java.awt.Color color) {
+                            #        float red = (float) color.getRed();
+                            #        float green = (float) color.getGreen();
+                            #        float blue = (float) color.getBlue();
+                            #        float denominator = 255.0;
+                            #        Color.Builder resultBuilder =
+                            #            Color
+                            #                .newBuilder()
+                            #                .setRed(red / denominator)
+                            #                .setGreen(green / denominator)
+                            #                .setBlue(blue / denominator);
+                            #        int alpha = color.getAlpha();
+                            #        if (alpha != 255) {
+                            #          result.setAlpha(
+                            #              FloatValue
+                            #                  .newBuilder()
+                            #                  .setValue(((float) alpha) / denominator)
+                            #                  .build());
+                            #        }
+                            #        return resultBuilder.build();
+                            #      }
+                            #      // ...
+                            #
+                            # Example (iOS / Obj-C):
+                            #
+                            #      // ...
+                            #      static UIColor* fromProto(Color* protocolor) {
+                            #         float red = [protocolor red];
+                            #         float green = [protocolor green];
+                            #         float blue = [protocolor blue];
+                            #         FloatValue* alpha_wrapper = [protocolor alpha];
+                            #         float alpha = 1.0;
+                            #         if (alpha_wrapper != nil) {
+                            #           alpha = [alpha_wrapper value];
+                            #         }
+                            #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                            #      }
+                            #
+                            #      static Color* toProto(UIColor* color) {
+                            #          CGFloat red, green, blue, alpha;
+                            #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                            #            return nil;
+                            #          }
+                            #          Color* result = [Color alloc] init];
+                            #          [result setRed:red];
+                            #          [result setGreen:green];
+                            #          [result setBlue:blue];
+                            #          if (alpha <= 0.9999) {
+                            #            [result setAlpha:floatWrapperWithValue(alpha)];
+                            #          }
+                            #          [result autorelease];
+                            #          return result;
+                            #     }
+                            #     // ...
+                            #
+                            #  Example (JavaScript):
+                            #
+                            #     // ...
+                            #
+                            #     var protoToCssColor = function(rgb_color) {
+                            #        var redFrac = rgb_color.red || 0.0;
+                            #        var greenFrac = rgb_color.green || 0.0;
+                            #        var blueFrac = rgb_color.blue || 0.0;
+                            #        var red = Math.floor(redFrac * 255);
+                            #        var green = Math.floor(greenFrac * 255);
+                            #        var blue = Math.floor(blueFrac * 255);
+                            #
+                            #        if (!('alpha' in rgb_color)) {
+                            #           return rgbToCssColor_(red, green, blue);
+                            #        }
+                            #
+                            #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                            #        var rgbParams = [red, green, blue].join(',');
+                            #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                            #     };
+                            #
+                            #     var rgbToCssColor_ = function(red, green, blue) {
+                            #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                            #       var hexString = rgbNumber.toString(16);
+                            #       var missingZeros = 6 - hexString.length;
+                            #       var resultBuilder = ['#'];
+                            #       for (var i = 0; i < missingZeros; i++) {
+                            #          resultBuilder.push('0');
+                            #       }
+                            #       resultBuilder.push(hexString);
+                            #       return resultBuilder.join('');
+                            #     };
+                            #
+                            #     // ...
+                          "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                          "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                              # the final pixel color is defined by the equation:
+                              #
+                              #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                              #
+                              # This means that a value of 1.0 corresponds to a solid color, whereas
+                              # a value of 0.0 corresponds to a completely transparent color. This
+                              # uses a wrapper message rather than a simple float scalar so that it is
+                              # possible to distinguish between a default value and the value being unset.
+                              # If omitted, this color object is to be rendered as a solid color
+                              # (as if the alpha value had been explicitly given with a value of 1.0).
+                          "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                          "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                        },
+                        "verticalAlignment": "A String", # The vertical alignment of the value in cell.
+                        "textFormat": { # The format of a run of text in a cell. # The format of the text in the cell (unless overridden by a format run).
+                            # Absent values indicate that the field isn't specified.
+                          "foregroundColor": { # Represents a color in the RGBA color space. This representation is designed # The foreground color of the text.
+                              # for simplicity of conversion to/from color representations in various
+                              # languages over compactness; for example, the fields of this representation
+                              # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                              # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                              # method in iOS; and, with just a little work, it can be easily formatted into
+                              # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                              #
+                              # Example (Java):
+                              #
+                              #      import com.google.type.Color;
+                              #
+                              #      // ...
+                              #      public static java.awt.Color fromProto(Color protocolor) {
+                              #        float alpha = protocolor.hasAlpha()
+                              #            ? protocolor.getAlpha().getValue()
+                              #            : 1.0;
+                              #
+                              #        return new java.awt.Color(
+                              #            protocolor.getRed(),
+                              #            protocolor.getGreen(),
+                              #            protocolor.getBlue(),
+                              #            alpha);
+                              #      }
+                              #
+                              #      public static Color toProto(java.awt.Color color) {
+                              #        float red = (float) color.getRed();
+                              #        float green = (float) color.getGreen();
+                              #        float blue = (float) color.getBlue();
+                              #        float denominator = 255.0;
+                              #        Color.Builder resultBuilder =
+                              #            Color
+                              #                .newBuilder()
+                              #                .setRed(red / denominator)
+                              #                .setGreen(green / denominator)
+                              #                .setBlue(blue / denominator);
+                              #        int alpha = color.getAlpha();
+                              #        if (alpha != 255) {
+                              #          result.setAlpha(
+                              #              FloatValue
+                              #                  .newBuilder()
+                              #                  .setValue(((float) alpha) / denominator)
+                              #                  .build());
+                              #        }
+                              #        return resultBuilder.build();
+                              #      }
+                              #      // ...
+                              #
+                              # Example (iOS / Obj-C):
+                              #
+                              #      // ...
+                              #      static UIColor* fromProto(Color* protocolor) {
+                              #         float red = [protocolor red];
+                              #         float green = [protocolor green];
+                              #         float blue = [protocolor blue];
+                              #         FloatValue* alpha_wrapper = [protocolor alpha];
+                              #         float alpha = 1.0;
+                              #         if (alpha_wrapper != nil) {
+                              #           alpha = [alpha_wrapper value];
+                              #         }
+                              #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                              #      }
+                              #
+                              #      static Color* toProto(UIColor* color) {
+                              #          CGFloat red, green, blue, alpha;
+                              #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                              #            return nil;
+                              #          }
+                              #          Color* result = [Color alloc] init];
+                              #          [result setRed:red];
+                              #          [result setGreen:green];
+                              #          [result setBlue:blue];
+                              #          if (alpha <= 0.9999) {
+                              #            [result setAlpha:floatWrapperWithValue(alpha)];
+                              #          }
+                              #          [result autorelease];
+                              #          return result;
+                              #     }
+                              #     // ...
+                              #
+                              #  Example (JavaScript):
+                              #
+                              #     // ...
+                              #
+                              #     var protoToCssColor = function(rgb_color) {
+                              #        var redFrac = rgb_color.red || 0.0;
+                              #        var greenFrac = rgb_color.green || 0.0;
+                              #        var blueFrac = rgb_color.blue || 0.0;
+                              #        var red = Math.floor(redFrac * 255);
+                              #        var green = Math.floor(greenFrac * 255);
+                              #        var blue = Math.floor(blueFrac * 255);
+                              #
+                              #        if (!('alpha' in rgb_color)) {
+                              #           return rgbToCssColor_(red, green, blue);
+                              #        }
+                              #
+                              #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                              #        var rgbParams = [red, green, blue].join(',');
+                              #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                              #     };
+                              #
+                              #     var rgbToCssColor_ = function(red, green, blue) {
+                              #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                              #       var hexString = rgbNumber.toString(16);
+                              #       var missingZeros = 6 - hexString.length;
+                              #       var resultBuilder = ['#'];
+                              #       for (var i = 0; i < missingZeros; i++) {
+                              #          resultBuilder.push('0');
+                              #       }
+                              #       resultBuilder.push(hexString);
+                              #       return resultBuilder.join('');
+                              #     };
+                              #
+                              #     // ...
+                            "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                            "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                                # the final pixel color is defined by the equation:
+                                #
+                                #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                                #
+                                # This means that a value of 1.0 corresponds to a solid color, whereas
+                                # a value of 0.0 corresponds to a completely transparent color. This
+                                # uses a wrapper message rather than a simple float scalar so that it is
+                                # possible to distinguish between a default value and the value being unset.
+                                # If omitted, this color object is to be rendered as a solid color
+                                # (as if the alpha value had been explicitly given with a value of 1.0).
+                            "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                            "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                          },
+                          "bold": True or False, # True if the text is bold.
+                          "strikethrough": True or False, # True if the text has a strikethrough.
+                          "fontFamily": "A String", # The font family.
+                          "fontSize": 42, # The size of the font.
+                          "italic": True or False, # True if the text is italicized.
+                          "underline": True or False, # True if the text is underlined.
+                        },
+                        "hyperlinkDisplayType": "A String", # How a hyperlink, if it exists, should be displayed in the cell.
+                        "borders": { # The borders of the cell. # The borders of the cell.
+                          "top": { # A border along a cell. # The top border of the cell.
+                            "color": { # Represents a color in the RGBA color space. This representation is designed # The color of the border.
+                                # for simplicity of conversion to/from color representations in various
+                                # languages over compactness; for example, the fields of this representation
+                                # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                                # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                                # method in iOS; and, with just a little work, it can be easily formatted into
+                                # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                                #
+                                # Example (Java):
+                                #
+                                #      import com.google.type.Color;
+                                #
+                                #      // ...
+                                #      public static java.awt.Color fromProto(Color protocolor) {
+                                #        float alpha = protocolor.hasAlpha()
+                                #            ? protocolor.getAlpha().getValue()
+                                #            : 1.0;
+                                #
+                                #        return new java.awt.Color(
+                                #            protocolor.getRed(),
+                                #            protocolor.getGreen(),
+                                #            protocolor.getBlue(),
+                                #            alpha);
+                                #      }
+                                #
+                                #      public static Color toProto(java.awt.Color color) {
+                                #        float red = (float) color.getRed();
+                                #        float green = (float) color.getGreen();
+                                #        float blue = (float) color.getBlue();
+                                #        float denominator = 255.0;
+                                #        Color.Builder resultBuilder =
+                                #            Color
+                                #                .newBuilder()
+                                #                .setRed(red / denominator)
+                                #                .setGreen(green / denominator)
+                                #                .setBlue(blue / denominator);
+                                #        int alpha = color.getAlpha();
+                                #        if (alpha != 255) {
+                                #          result.setAlpha(
+                                #              FloatValue
+                                #                  .newBuilder()
+                                #                  .setValue(((float) alpha) / denominator)
+                                #                  .build());
+                                #        }
+                                #        return resultBuilder.build();
+                                #      }
+                                #      // ...
+                                #
+                                # Example (iOS / Obj-C):
+                                #
+                                #      // ...
+                                #      static UIColor* fromProto(Color* protocolor) {
+                                #         float red = [protocolor red];
+                                #         float green = [protocolor green];
+                                #         float blue = [protocolor blue];
+                                #         FloatValue* alpha_wrapper = [protocolor alpha];
+                                #         float alpha = 1.0;
+                                #         if (alpha_wrapper != nil) {
+                                #           alpha = [alpha_wrapper value];
+                                #         }
+                                #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                                #      }
+                                #
+                                #      static Color* toProto(UIColor* color) {
+                                #          CGFloat red, green, blue, alpha;
+                                #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                                #            return nil;
+                                #          }
+                                #          Color* result = [Color alloc] init];
+                                #          [result setRed:red];
+                                #          [result setGreen:green];
+                                #          [result setBlue:blue];
+                                #          if (alpha <= 0.9999) {
+                                #            [result setAlpha:floatWrapperWithValue(alpha)];
+                                #          }
+                                #          [result autorelease];
+                                #          return result;
+                                #     }
+                                #     // ...
+                                #
+                                #  Example (JavaScript):
+                                #
+                                #     // ...
+                                #
+                                #     var protoToCssColor = function(rgb_color) {
+                                #        var redFrac = rgb_color.red || 0.0;
+                                #        var greenFrac = rgb_color.green || 0.0;
+                                #        var blueFrac = rgb_color.blue || 0.0;
+                                #        var red = Math.floor(redFrac * 255);
+                                #        var green = Math.floor(greenFrac * 255);
+                                #        var blue = Math.floor(blueFrac * 255);
+                                #
+                                #        if (!('alpha' in rgb_color)) {
+                                #           return rgbToCssColor_(red, green, blue);
+                                #        }
+                                #
+                                #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                                #        var rgbParams = [red, green, blue].join(',');
+                                #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                                #     };
+                                #
+                                #     var rgbToCssColor_ = function(red, green, blue) {
+                                #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                                #       var hexString = rgbNumber.toString(16);
+                                #       var missingZeros = 6 - hexString.length;
+                                #       var resultBuilder = ['#'];
+                                #       for (var i = 0; i < missingZeros; i++) {
+                                #          resultBuilder.push('0');
+                                #       }
+                                #       resultBuilder.push(hexString);
+                                #       return resultBuilder.join('');
+                                #     };
+                                #
+                                #     // ...
+                              "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                              "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                                  # the final pixel color is defined by the equation:
+                                  #
+                                  #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                                  #
+                                  # This means that a value of 1.0 corresponds to a solid color, whereas
+                                  # a value of 0.0 corresponds to a completely transparent color. This
+                                  # uses a wrapper message rather than a simple float scalar so that it is
+                                  # possible to distinguish between a default value and the value being unset.
+                                  # If omitted, this color object is to be rendered as a solid color
+                                  # (as if the alpha value had been explicitly given with a value of 1.0).
+                              "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                              "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                            },
+                            "width": 42, # The width of the border, in pixels.
+                                # Border widths must be between 0 and 3 pixels.
+                            "style": "A String", # The style of the border.
+                          },
+                          "right": { # A border along a cell. # The right border of the cell.
+                            "color": { # Represents a color in the RGBA color space. This representation is designed # The color of the border.
+                                # for simplicity of conversion to/from color representations in various
+                                # languages over compactness; for example, the fields of this representation
+                                # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                                # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                                # method in iOS; and, with just a little work, it can be easily formatted into
+                                # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                                #
+                                # Example (Java):
+                                #
+                                #      import com.google.type.Color;
+                                #
+                                #      // ...
+                                #      public static java.awt.Color fromProto(Color protocolor) {
+                                #        float alpha = protocolor.hasAlpha()
+                                #            ? protocolor.getAlpha().getValue()
+                                #            : 1.0;
+                                #
+                                #        return new java.awt.Color(
+                                #            protocolor.getRed(),
+                                #            protocolor.getGreen(),
+                                #            protocolor.getBlue(),
+                                #            alpha);
+                                #      }
+                                #
+                                #      public static Color toProto(java.awt.Color color) {
+                                #        float red = (float) color.getRed();
+                                #        float green = (float) color.getGreen();
+                                #        float blue = (float) color.getBlue();
+                                #        float denominator = 255.0;
+                                #        Color.Builder resultBuilder =
+                                #            Color
+                                #                .newBuilder()
+                                #                .setRed(red / denominator)
+                                #                .setGreen(green / denominator)
+                                #                .setBlue(blue / denominator);
+                                #        int alpha = color.getAlpha();
+                                #        if (alpha != 255) {
+                                #          result.setAlpha(
+                                #              FloatValue
+                                #                  .newBuilder()
+                                #                  .setValue(((float) alpha) / denominator)
+                                #                  .build());
+                                #        }
+                                #        return resultBuilder.build();
+                                #      }
+                                #      // ...
+                                #
+                                # Example (iOS / Obj-C):
+                                #
+                                #      // ...
+                                #      static UIColor* fromProto(Color* protocolor) {
+                                #         float red = [protocolor red];
+                                #         float green = [protocolor green];
+                                #         float blue = [protocolor blue];
+                                #         FloatValue* alpha_wrapper = [protocolor alpha];
+                                #         float alpha = 1.0;
+                                #         if (alpha_wrapper != nil) {
+                                #           alpha = [alpha_wrapper value];
+                                #         }
+                                #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                                #      }
+                                #
+                                #      static Color* toProto(UIColor* color) {
+                                #          CGFloat red, green, blue, alpha;
+                                #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                                #            return nil;
+                                #          }
+                                #          Color* result = [Color alloc] init];
+                                #          [result setRed:red];
+                                #          [result setGreen:green];
+                                #          [result setBlue:blue];
+                                #          if (alpha <= 0.9999) {
+                                #            [result setAlpha:floatWrapperWithValue(alpha)];
+                                #          }
+                                #          [result autorelease];
+                                #          return result;
+                                #     }
+                                #     // ...
+                                #
+                                #  Example (JavaScript):
+                                #
+                                #     // ...
+                                #
+                                #     var protoToCssColor = function(rgb_color) {
+                                #        var redFrac = rgb_color.red || 0.0;
+                                #        var greenFrac = rgb_color.green || 0.0;
+                                #        var blueFrac = rgb_color.blue || 0.0;
+                                #        var red = Math.floor(redFrac * 255);
+                                #        var green = Math.floor(greenFrac * 255);
+                                #        var blue = Math.floor(blueFrac * 255);
+                                #
+                                #        if (!('alpha' in rgb_color)) {
+                                #           return rgbToCssColor_(red, green, blue);
+                                #        }
+                                #
+                                #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                                #        var rgbParams = [red, green, blue].join(',');
+                                #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                                #     };
+                                #
+                                #     var rgbToCssColor_ = function(red, green, blue) {
+                                #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                                #       var hexString = rgbNumber.toString(16);
+                                #       var missingZeros = 6 - hexString.length;
+                                #       var resultBuilder = ['#'];
+                                #       for (var i = 0; i < missingZeros; i++) {
+                                #          resultBuilder.push('0');
+                                #       }
+                                #       resultBuilder.push(hexString);
+                                #       return resultBuilder.join('');
+                                #     };
+                                #
+                                #     // ...
+                              "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                              "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                                  # the final pixel color is defined by the equation:
+                                  #
+                                  #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                                  #
+                                  # This means that a value of 1.0 corresponds to a solid color, whereas
+                                  # a value of 0.0 corresponds to a completely transparent color. This
+                                  # uses a wrapper message rather than a simple float scalar so that it is
+                                  # possible to distinguish between a default value and the value being unset.
+                                  # If omitted, this color object is to be rendered as a solid color
+                                  # (as if the alpha value had been explicitly given with a value of 1.0).
+                              "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                              "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                            },
+                            "width": 42, # The width of the border, in pixels.
+                                # Border widths must be between 0 and 3 pixels.
+                            "style": "A String", # The style of the border.
+                          },
+                          "bottom": { # A border along a cell. # The bottom border of the cell.
+                            "color": { # Represents a color in the RGBA color space. This representation is designed # The color of the border.
+                                # for simplicity of conversion to/from color representations in various
+                                # languages over compactness; for example, the fields of this representation
+                                # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                                # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                                # method in iOS; and, with just a little work, it can be easily formatted into
+                                # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                                #
+                                # Example (Java):
+                                #
+                                #      import com.google.type.Color;
+                                #
+                                #      // ...
+                                #      public static java.awt.Color fromProto(Color protocolor) {
+                                #        float alpha = protocolor.hasAlpha()
+                                #            ? protocolor.getAlpha().getValue()
+                                #            : 1.0;
+                                #
+                                #        return new java.awt.Color(
+                                #            protocolor.getRed(),
+                                #            protocolor.getGreen(),
+                                #            protocolor.getBlue(),
+                                #            alpha);
+                                #      }
+                                #
+                                #      public static Color toProto(java.awt.Color color) {
+                                #        float red = (float) color.getRed();
+                                #        float green = (float) color.getGreen();
+                                #        float blue = (float) color.getBlue();
+                                #        float denominator = 255.0;
+                                #        Color.Builder resultBuilder =
+                                #            Color
+                                #                .newBuilder()
+                                #                .setRed(red / denominator)
+                                #                .setGreen(green / denominator)
+                                #                .setBlue(blue / denominator);
+                                #        int alpha = color.getAlpha();
+                                #        if (alpha != 255) {
+                                #          result.setAlpha(
+                                #              FloatValue
+                                #                  .newBuilder()
+                                #                  .setValue(((float) alpha) / denominator)
+                                #                  .build());
+                                #        }
+                                #        return resultBuilder.build();
+                                #      }
+                                #      // ...
+                                #
+                                # Example (iOS / Obj-C):
+                                #
+                                #      // ...
+                                #      static UIColor* fromProto(Color* protocolor) {
+                                #         float red = [protocolor red];
+                                #         float green = [protocolor green];
+                                #         float blue = [protocolor blue];
+                                #         FloatValue* alpha_wrapper = [protocolor alpha];
+                                #         float alpha = 1.0;
+                                #         if (alpha_wrapper != nil) {
+                                #           alpha = [alpha_wrapper value];
+                                #         }
+                                #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                                #      }
+                                #
+                                #      static Color* toProto(UIColor* color) {
+                                #          CGFloat red, green, blue, alpha;
+                                #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                                #            return nil;
+                                #          }
+                                #          Color* result = [Color alloc] init];
+                                #          [result setRed:red];
+                                #          [result setGreen:green];
+                                #          [result setBlue:blue];
+                                #          if (alpha <= 0.9999) {
+                                #            [result setAlpha:floatWrapperWithValue(alpha)];
+                                #          }
+                                #          [result autorelease];
+                                #          return result;
+                                #     }
+                                #     // ...
+                                #
+                                #  Example (JavaScript):
+                                #
+                                #     // ...
+                                #
+                                #     var protoToCssColor = function(rgb_color) {
+                                #        var redFrac = rgb_color.red || 0.0;
+                                #        var greenFrac = rgb_color.green || 0.0;
+                                #        var blueFrac = rgb_color.blue || 0.0;
+                                #        var red = Math.floor(redFrac * 255);
+                                #        var green = Math.floor(greenFrac * 255);
+                                #        var blue = Math.floor(blueFrac * 255);
+                                #
+                                #        if (!('alpha' in rgb_color)) {
+                                #           return rgbToCssColor_(red, green, blue);
+                                #        }
+                                #
+                                #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                                #        var rgbParams = [red, green, blue].join(',');
+                                #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                                #     };
+                                #
+                                #     var rgbToCssColor_ = function(red, green, blue) {
+                                #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                                #       var hexString = rgbNumber.toString(16);
+                                #       var missingZeros = 6 - hexString.length;
+                                #       var resultBuilder = ['#'];
+                                #       for (var i = 0; i < missingZeros; i++) {
+                                #          resultBuilder.push('0');
+                                #       }
+                                #       resultBuilder.push(hexString);
+                                #       return resultBuilder.join('');
+                                #     };
+                                #
+                                #     // ...
+                              "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                              "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                                  # the final pixel color is defined by the equation:
+                                  #
+                                  #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                                  #
+                                  # This means that a value of 1.0 corresponds to a solid color, whereas
+                                  # a value of 0.0 corresponds to a completely transparent color. This
+                                  # uses a wrapper message rather than a simple float scalar so that it is
+                                  # possible to distinguish between a default value and the value being unset.
+                                  # If omitted, this color object is to be rendered as a solid color
+                                  # (as if the alpha value had been explicitly given with a value of 1.0).
+                              "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                              "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                            },
+                            "width": 42, # The width of the border, in pixels.
+                                # Border widths must be between 0 and 3 pixels.
+                            "style": "A String", # The style of the border.
+                          },
+                          "left": { # A border along a cell. # The left border of the cell.
+                            "color": { # Represents a color in the RGBA color space. This representation is designed # The color of the border.
+                                # for simplicity of conversion to/from color representations in various
+                                # languages over compactness; for example, the fields of this representation
+                                # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                                # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                                # method in iOS; and, with just a little work, it can be easily formatted into
+                                # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                                #
+                                # Example (Java):
+                                #
+                                #      import com.google.type.Color;
+                                #
+                                #      // ...
+                                #      public static java.awt.Color fromProto(Color protocolor) {
+                                #        float alpha = protocolor.hasAlpha()
+                                #            ? protocolor.getAlpha().getValue()
+                                #            : 1.0;
+                                #
+                                #        return new java.awt.Color(
+                                #            protocolor.getRed(),
+                                #            protocolor.getGreen(),
+                                #            protocolor.getBlue(),
+                                #            alpha);
+                                #      }
+                                #
+                                #      public static Color toProto(java.awt.Color color) {
+                                #        float red = (float) color.getRed();
+                                #        float green = (float) color.getGreen();
+                                #        float blue = (float) color.getBlue();
+                                #        float denominator = 255.0;
+                                #        Color.Builder resultBuilder =
+                                #            Color
+                                #                .newBuilder()
+                                #                .setRed(red / denominator)
+                                #                .setGreen(green / denominator)
+                                #                .setBlue(blue / denominator);
+                                #        int alpha = color.getAlpha();
+                                #        if (alpha != 255) {
+                                #          result.setAlpha(
+                                #              FloatValue
+                                #                  .newBuilder()
+                                #                  .setValue(((float) alpha) / denominator)
+                                #                  .build());
+                                #        }
+                                #        return resultBuilder.build();
+                                #      }
+                                #      // ...
+                                #
+                                # Example (iOS / Obj-C):
+                                #
+                                #      // ...
+                                #      static UIColor* fromProto(Color* protocolor) {
+                                #         float red = [protocolor red];
+                                #         float green = [protocolor green];
+                                #         float blue = [protocolor blue];
+                                #         FloatValue* alpha_wrapper = [protocolor alpha];
+                                #         float alpha = 1.0;
+                                #         if (alpha_wrapper != nil) {
+                                #           alpha = [alpha_wrapper value];
+                                #         }
+                                #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                                #      }
+                                #
+                                #      static Color* toProto(UIColor* color) {
+                                #          CGFloat red, green, blue, alpha;
+                                #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                                #            return nil;
+                                #          }
+                                #          Color* result = [Color alloc] init];
+                                #          [result setRed:red];
+                                #          [result setGreen:green];
+                                #          [result setBlue:blue];
+                                #          if (alpha <= 0.9999) {
+                                #            [result setAlpha:floatWrapperWithValue(alpha)];
+                                #          }
+                                #          [result autorelease];
+                                #          return result;
+                                #     }
+                                #     // ...
+                                #
+                                #  Example (JavaScript):
+                                #
+                                #     // ...
+                                #
+                                #     var protoToCssColor = function(rgb_color) {
+                                #        var redFrac = rgb_color.red || 0.0;
+                                #        var greenFrac = rgb_color.green || 0.0;
+                                #        var blueFrac = rgb_color.blue || 0.0;
+                                #        var red = Math.floor(redFrac * 255);
+                                #        var green = Math.floor(greenFrac * 255);
+                                #        var blue = Math.floor(blueFrac * 255);
+                                #
+                                #        if (!('alpha' in rgb_color)) {
+                                #           return rgbToCssColor_(red, green, blue);
+                                #        }
+                                #
+                                #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                                #        var rgbParams = [red, green, blue].join(',');
+                                #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                                #     };
+                                #
+                                #     var rgbToCssColor_ = function(red, green, blue) {
+                                #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                                #       var hexString = rgbNumber.toString(16);
+                                #       var missingZeros = 6 - hexString.length;
+                                #       var resultBuilder = ['#'];
+                                #       for (var i = 0; i < missingZeros; i++) {
+                                #          resultBuilder.push('0');
+                                #       }
+                                #       resultBuilder.push(hexString);
+                                #       return resultBuilder.join('');
+                                #     };
+                                #
+                                #     // ...
+                              "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                              "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                                  # the final pixel color is defined by the equation:
+                                  #
+                                  #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                                  #
+                                  # This means that a value of 1.0 corresponds to a solid color, whereas
+                                  # a value of 0.0 corresponds to a completely transparent color. This
+                                  # uses a wrapper message rather than a simple float scalar so that it is
+                                  # possible to distinguish between a default value and the value being unset.
+                                  # If omitted, this color object is to be rendered as a solid color
+                                  # (as if the alpha value had been explicitly given with a value of 1.0).
+                              "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                              "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                            },
+                            "width": 42, # The width of the border, in pixels.
+                                # Border widths must be between 0 and 3 pixels.
+                            "style": "A String", # The style of the border.
+                          },
+                        },
+                        "wrapStrategy": "A String", # The wrap strategy for the value in the cell.
+                      },
+                      "userEnteredFormat": { # The format of a cell. # The format the user entered for the cell.
+                          #
+                          # When writing, the new format will be merged with the existing format.
+                        "numberFormat": { # The number format of a cell. # A format describing how number values should be represented to the user.
+                            # When updating, all fields must be set.
+                          "pattern": "A String", # Pattern string used for formatting.
+                          "type": "A String", # The type of the number format.
+                        },
+                        "textDirection": "A String", # The direction of the text in the cell.
+                        "padding": { # The amount of padding around the cell, in pixels. # The padding of the cell.
+                            # When updating padding, every field must be specified.
+                          "top": 42, # The top padding of the cell.
+                          "right": 42, # The right padding of the cell.
+                          "bottom": 42, # The bottom padding of the cell.
+                          "left": 42, # The left padding of the cell.
+                        },
+                        "horizontalAlignment": "A String", # The horizontal alignment of the value in cell.
+                        "backgroundColor": { # Represents a color in the RGBA color space. This representation is designed # The background color of the cell.
+                            # for simplicity of conversion to/from color representations in various
+                            # languages over compactness; for example, the fields of this representation
+                            # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                            # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                            # method in iOS; and, with just a little work, it can be easily formatted into
+                            # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                            #
+                            # Example (Java):
+                            #
+                            #      import com.google.type.Color;
+                            #
+                            #      // ...
+                            #      public static java.awt.Color fromProto(Color protocolor) {
+                            #        float alpha = protocolor.hasAlpha()
+                            #            ? protocolor.getAlpha().getValue()
+                            #            : 1.0;
+                            #
+                            #        return new java.awt.Color(
+                            #            protocolor.getRed(),
+                            #            protocolor.getGreen(),
+                            #            protocolor.getBlue(),
+                            #            alpha);
+                            #      }
+                            #
+                            #      public static Color toProto(java.awt.Color color) {
+                            #        float red = (float) color.getRed();
+                            #        float green = (float) color.getGreen();
+                            #        float blue = (float) color.getBlue();
+                            #        float denominator = 255.0;
+                            #        Color.Builder resultBuilder =
+                            #            Color
+                            #                .newBuilder()
+                            #                .setRed(red / denominator)
+                            #                .setGreen(green / denominator)
+                            #                .setBlue(blue / denominator);
+                            #        int alpha = color.getAlpha();
+                            #        if (alpha != 255) {
+                            #          result.setAlpha(
+                            #              FloatValue
+                            #                  .newBuilder()
+                            #                  .setValue(((float) alpha) / denominator)
+                            #                  .build());
+                            #        }
+                            #        return resultBuilder.build();
+                            #      }
+                            #      // ...
+                            #
+                            # Example (iOS / Obj-C):
+                            #
+                            #      // ...
+                            #      static UIColor* fromProto(Color* protocolor) {
+                            #         float red = [protocolor red];
+                            #         float green = [protocolor green];
+                            #         float blue = [protocolor blue];
+                            #         FloatValue* alpha_wrapper = [protocolor alpha];
+                            #         float alpha = 1.0;
+                            #         if (alpha_wrapper != nil) {
+                            #           alpha = [alpha_wrapper value];
+                            #         }
+                            #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                            #      }
+                            #
+                            #      static Color* toProto(UIColor* color) {
+                            #          CGFloat red, green, blue, alpha;
+                            #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                            #            return nil;
+                            #          }
+                            #          Color* result = [Color alloc] init];
+                            #          [result setRed:red];
+                            #          [result setGreen:green];
+                            #          [result setBlue:blue];
+                            #          if (alpha <= 0.9999) {
+                            #            [result setAlpha:floatWrapperWithValue(alpha)];
+                            #          }
+                            #          [result autorelease];
+                            #          return result;
+                            #     }
+                            #     // ...
+                            #
+                            #  Example (JavaScript):
+                            #
+                            #     // ...
+                            #
+                            #     var protoToCssColor = function(rgb_color) {
+                            #        var redFrac = rgb_color.red || 0.0;
+                            #        var greenFrac = rgb_color.green || 0.0;
+                            #        var blueFrac = rgb_color.blue || 0.0;
+                            #        var red = Math.floor(redFrac * 255);
+                            #        var green = Math.floor(greenFrac * 255);
+                            #        var blue = Math.floor(blueFrac * 255);
+                            #
+                            #        if (!('alpha' in rgb_color)) {
+                            #           return rgbToCssColor_(red, green, blue);
+                            #        }
+                            #
+                            #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                            #        var rgbParams = [red, green, blue].join(',');
+                            #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                            #     };
+                            #
+                            #     var rgbToCssColor_ = function(red, green, blue) {
+                            #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                            #       var hexString = rgbNumber.toString(16);
+                            #       var missingZeros = 6 - hexString.length;
+                            #       var resultBuilder = ['#'];
+                            #       for (var i = 0; i < missingZeros; i++) {
+                            #          resultBuilder.push('0');
+                            #       }
+                            #       resultBuilder.push(hexString);
+                            #       return resultBuilder.join('');
+                            #     };
+                            #
+                            #     // ...
+                          "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                          "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                              # the final pixel color is defined by the equation:
+                              #
+                              #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                              #
+                              # This means that a value of 1.0 corresponds to a solid color, whereas
+                              # a value of 0.0 corresponds to a completely transparent color. This
+                              # uses a wrapper message rather than a simple float scalar so that it is
+                              # possible to distinguish between a default value and the value being unset.
+                              # If omitted, this color object is to be rendered as a solid color
+                              # (as if the alpha value had been explicitly given with a value of 1.0).
+                          "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                          "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                        },
+                        "verticalAlignment": "A String", # The vertical alignment of the value in cell.
+                        "textFormat": { # The format of a run of text in a cell. # The format of the text in the cell (unless overridden by a format run).
+                            # Absent values indicate that the field isn't specified.
+                          "foregroundColor": { # Represents a color in the RGBA color space. This representation is designed # The foreground color of the text.
+                              # for simplicity of conversion to/from color representations in various
+                              # languages over compactness; for example, the fields of this representation
+                              # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                              # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                              # method in iOS; and, with just a little work, it can be easily formatted into
+                              # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                              #
+                              # Example (Java):
+                              #
+                              #      import com.google.type.Color;
+                              #
+                              #      // ...
+                              #      public static java.awt.Color fromProto(Color protocolor) {
+                              #        float alpha = protocolor.hasAlpha()
+                              #            ? protocolor.getAlpha().getValue()
+                              #            : 1.0;
+                              #
+                              #        return new java.awt.Color(
+                              #            protocolor.getRed(),
+                              #            protocolor.getGreen(),
+                              #            protocolor.getBlue(),
+                              #            alpha);
+                              #      }
+                              #
+                              #      public static Color toProto(java.awt.Color color) {
+                              #        float red = (float) color.getRed();
+                              #        float green = (float) color.getGreen();
+                              #        float blue = (float) color.getBlue();
+                              #        float denominator = 255.0;
+                              #        Color.Builder resultBuilder =
+                              #            Color
+                              #                .newBuilder()
+                              #                .setRed(red / denominator)
+                              #                .setGreen(green / denominator)
+                              #                .setBlue(blue / denominator);
+                              #        int alpha = color.getAlpha();
+                              #        if (alpha != 255) {
+                              #          result.setAlpha(
+                              #              FloatValue
+                              #                  .newBuilder()
+                              #                  .setValue(((float) alpha) / denominator)
+                              #                  .build());
+                              #        }
+                              #        return resultBuilder.build();
+                              #      }
+                              #      // ...
+                              #
+                              # Example (iOS / Obj-C):
+                              #
+                              #      // ...
+                              #      static UIColor* fromProto(Color* protocolor) {
+                              #         float red = [protocolor red];
+                              #         float green = [protocolor green];
+                              #         float blue = [protocolor blue];
+                              #         FloatValue* alpha_wrapper = [protocolor alpha];
+                              #         float alpha = 1.0;
+                              #         if (alpha_wrapper != nil) {
+                              #           alpha = [alpha_wrapper value];
+                              #         }
+                              #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                              #      }
+                              #
+                              #      static Color* toProto(UIColor* color) {
+                              #          CGFloat red, green, blue, alpha;
+                              #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                              #            return nil;
+                              #          }
+                              #          Color* result = [Color alloc] init];
+                              #          [result setRed:red];
+                              #          [result setGreen:green];
+                              #          [result setBlue:blue];
+                              #          if (alpha <= 0.9999) {
+                              #            [result setAlpha:floatWrapperWithValue(alpha)];
+                              #          }
+                              #          [result autorelease];
+                              #          return result;
+                              #     }
+                              #     // ...
+                              #
+                              #  Example (JavaScript):
+                              #
+                              #     // ...
+                              #
+                              #     var protoToCssColor = function(rgb_color) {
+                              #        var redFrac = rgb_color.red || 0.0;
+                              #        var greenFrac = rgb_color.green || 0.0;
+                              #        var blueFrac = rgb_color.blue || 0.0;
+                              #        var red = Math.floor(redFrac * 255);
+                              #        var green = Math.floor(greenFrac * 255);
+                              #        var blue = Math.floor(blueFrac * 255);
+                              #
+                              #        if (!('alpha' in rgb_color)) {
+                              #           return rgbToCssColor_(red, green, blue);
+                              #        }
+                              #
+                              #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                              #        var rgbParams = [red, green, blue].join(',');
+                              #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                              #     };
+                              #
+                              #     var rgbToCssColor_ = function(red, green, blue) {
+                              #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                              #       var hexString = rgbNumber.toString(16);
+                              #       var missingZeros = 6 - hexString.length;
+                              #       var resultBuilder = ['#'];
+                              #       for (var i = 0; i < missingZeros; i++) {
+                              #          resultBuilder.push('0');
+                              #       }
+                              #       resultBuilder.push(hexString);
+                              #       return resultBuilder.join('');
+                              #     };
+                              #
+                              #     // ...
+                            "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                            "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                                # the final pixel color is defined by the equation:
+                                #
+                                #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                                #
+                                # This means that a value of 1.0 corresponds to a solid color, whereas
+                                # a value of 0.0 corresponds to a completely transparent color. This
+                                # uses a wrapper message rather than a simple float scalar so that it is
+                                # possible to distinguish between a default value and the value being unset.
+                                # If omitted, this color object is to be rendered as a solid color
+                                # (as if the alpha value had been explicitly given with a value of 1.0).
+                            "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                            "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                          },
+                          "bold": True or False, # True if the text is bold.
+                          "strikethrough": True or False, # True if the text has a strikethrough.
+                          "fontFamily": "A String", # The font family.
+                          "fontSize": 42, # The size of the font.
+                          "italic": True or False, # True if the text is italicized.
+                          "underline": True or False, # True if the text is underlined.
+                        },
+                        "hyperlinkDisplayType": "A String", # How a hyperlink, if it exists, should be displayed in the cell.
+                        "borders": { # The borders of the cell. # The borders of the cell.
+                          "top": { # A border along a cell. # The top border of the cell.
+                            "color": { # Represents a color in the RGBA color space. This representation is designed # The color of the border.
+                                # for simplicity of conversion to/from color representations in various
+                                # languages over compactness; for example, the fields of this representation
+                                # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                                # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                                # method in iOS; and, with just a little work, it can be easily formatted into
+                                # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                                #
+                                # Example (Java):
+                                #
+                                #      import com.google.type.Color;
+                                #
+                                #      // ...
+                                #      public static java.awt.Color fromProto(Color protocolor) {
+                                #        float alpha = protocolor.hasAlpha()
+                                #            ? protocolor.getAlpha().getValue()
+                                #            : 1.0;
+                                #
+                                #        return new java.awt.Color(
+                                #            protocolor.getRed(),
+                                #            protocolor.getGreen(),
+                                #            protocolor.getBlue(),
+                                #            alpha);
+                                #      }
+                                #
+                                #      public static Color toProto(java.awt.Color color) {
+                                #        float red = (float) color.getRed();
+                                #        float green = (float) color.getGreen();
+                                #        float blue = (float) color.getBlue();
+                                #        float denominator = 255.0;
+                                #        Color.Builder resultBuilder =
+                                #            Color
+                                #                .newBuilder()
+                                #                .setRed(red / denominator)
+                                #                .setGreen(green / denominator)
+                                #                .setBlue(blue / denominator);
+                                #        int alpha = color.getAlpha();
+                                #        if (alpha != 255) {
+                                #          result.setAlpha(
+                                #              FloatValue
+                                #                  .newBuilder()
+                                #                  .setValue(((float) alpha) / denominator)
+                                #                  .build());
+                                #        }
+                                #        return resultBuilder.build();
+                                #      }
+                                #      // ...
+                                #
+                                # Example (iOS / Obj-C):
+                                #
+                                #      // ...
+                                #      static UIColor* fromProto(Color* protocolor) {
+                                #         float red = [protocolor red];
+                                #         float green = [protocolor green];
+                                #         float blue = [protocolor blue];
+                                #         FloatValue* alpha_wrapper = [protocolor alpha];
+                                #         float alpha = 1.0;
+                                #         if (alpha_wrapper != nil) {
+                                #           alpha = [alpha_wrapper value];
+                                #         }
+                                #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                                #      }
+                                #
+                                #      static Color* toProto(UIColor* color) {
+                                #          CGFloat red, green, blue, alpha;
+                                #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                                #            return nil;
+                                #          }
+                                #          Color* result = [Color alloc] init];
+                                #          [result setRed:red];
+                                #          [result setGreen:green];
+                                #          [result setBlue:blue];
+                                #          if (alpha <= 0.9999) {
+                                #            [result setAlpha:floatWrapperWithValue(alpha)];
+                                #          }
+                                #          [result autorelease];
+                                #          return result;
+                                #     }
+                                #     // ...
+                                #
+                                #  Example (JavaScript):
+                                #
+                                #     // ...
+                                #
+                                #     var protoToCssColor = function(rgb_color) {
+                                #        var redFrac = rgb_color.red || 0.0;
+                                #        var greenFrac = rgb_color.green || 0.0;
+                                #        var blueFrac = rgb_color.blue || 0.0;
+                                #        var red = Math.floor(redFrac * 255);
+                                #        var green = Math.floor(greenFrac * 255);
+                                #        var blue = Math.floor(blueFrac * 255);
+                                #
+                                #        if (!('alpha' in rgb_color)) {
+                                #           return rgbToCssColor_(red, green, blue);
+                                #        }
+                                #
+                                #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                                #        var rgbParams = [red, green, blue].join(',');
+                                #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                                #     };
+                                #
+                                #     var rgbToCssColor_ = function(red, green, blue) {
+                                #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                                #       var hexString = rgbNumber.toString(16);
+                                #       var missingZeros = 6 - hexString.length;
+                                #       var resultBuilder = ['#'];
+                                #       for (var i = 0; i < missingZeros; i++) {
+                                #          resultBuilder.push('0');
+                                #       }
+                                #       resultBuilder.push(hexString);
+                                #       return resultBuilder.join('');
+                                #     };
+                                #
+                                #     // ...
+                              "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                              "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                                  # the final pixel color is defined by the equation:
+                                  #
+                                  #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                                  #
+                                  # This means that a value of 1.0 corresponds to a solid color, whereas
+                                  # a value of 0.0 corresponds to a completely transparent color. This
+                                  # uses a wrapper message rather than a simple float scalar so that it is
+                                  # possible to distinguish between a default value and the value being unset.
+                                  # If omitted, this color object is to be rendered as a solid color
+                                  # (as if the alpha value had been explicitly given with a value of 1.0).
+                              "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                              "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                            },
+                            "width": 42, # The width of the border, in pixels.
+                                # Border widths must be between 0 and 3 pixels.
+                            "style": "A String", # The style of the border.
+                          },
+                          "right": { # A border along a cell. # The right border of the cell.
+                            "color": { # Represents a color in the RGBA color space. This representation is designed # The color of the border.
+                                # for simplicity of conversion to/from color representations in various
+                                # languages over compactness; for example, the fields of this representation
+                                # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                                # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                                # method in iOS; and, with just a little work, it can be easily formatted into
+                                # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                                #
+                                # Example (Java):
+                                #
+                                #      import com.google.type.Color;
+                                #
+                                #      // ...
+                                #      public static java.awt.Color fromProto(Color protocolor) {
+                                #        float alpha = protocolor.hasAlpha()
+                                #            ? protocolor.getAlpha().getValue()
+                                #            : 1.0;
+                                #
+                                #        return new java.awt.Color(
+                                #            protocolor.getRed(),
+                                #            protocolor.getGreen(),
+                                #            protocolor.getBlue(),
+                                #            alpha);
+                                #      }
+                                #
+                                #      public static Color toProto(java.awt.Color color) {
+                                #        float red = (float) color.getRed();
+                                #        float green = (float) color.getGreen();
+                                #        float blue = (float) color.getBlue();
+                                #        float denominator = 255.0;
+                                #        Color.Builder resultBuilder =
+                                #            Color
+                                #                .newBuilder()
+                                #                .setRed(red / denominator)
+                                #                .setGreen(green / denominator)
+                                #                .setBlue(blue / denominator);
+                                #        int alpha = color.getAlpha();
+                                #        if (alpha != 255) {
+                                #          result.setAlpha(
+                                #              FloatValue
+                                #                  .newBuilder()
+                                #                  .setValue(((float) alpha) / denominator)
+                                #                  .build());
+                                #        }
+                                #        return resultBuilder.build();
+                                #      }
+                                #      // ...
+                                #
+                                # Example (iOS / Obj-C):
+                                #
+                                #      // ...
+                                #      static UIColor* fromProto(Color* protocolor) {
+                                #         float red = [protocolor red];
+                                #         float green = [protocolor green];
+                                #         float blue = [protocolor blue];
+                                #         FloatValue* alpha_wrapper = [protocolor alpha];
+                                #         float alpha = 1.0;
+                                #         if (alpha_wrapper != nil) {
+                                #           alpha = [alpha_wrapper value];
+                                #         }
+                                #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                                #      }
+                                #
+                                #      static Color* toProto(UIColor* color) {
+                                #          CGFloat red, green, blue, alpha;
+                                #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                                #            return nil;
+                                #          }
+                                #          Color* result = [Color alloc] init];
+                                #          [result setRed:red];
+                                #          [result setGreen:green];
+                                #          [result setBlue:blue];
+                                #          if (alpha <= 0.9999) {
+                                #            [result setAlpha:floatWrapperWithValue(alpha)];
+                                #          }
+                                #          [result autorelease];
+                                #          return result;
+                                #     }
+                                #     // ...
+                                #
+                                #  Example (JavaScript):
+                                #
+                                #     // ...
+                                #
+                                #     var protoToCssColor = function(rgb_color) {
+                                #        var redFrac = rgb_color.red || 0.0;
+                                #        var greenFrac = rgb_color.green || 0.0;
+                                #        var blueFrac = rgb_color.blue || 0.0;
+                                #        var red = Math.floor(redFrac * 255);
+                                #        var green = Math.floor(greenFrac * 255);
+                                #        var blue = Math.floor(blueFrac * 255);
+                                #
+                                #        if (!('alpha' in rgb_color)) {
+                                #           return rgbToCssColor_(red, green, blue);
+                                #        }
+                                #
+                                #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                                #        var rgbParams = [red, green, blue].join(',');
+                                #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                                #     };
+                                #
+                                #     var rgbToCssColor_ = function(red, green, blue) {
+                                #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                                #       var hexString = rgbNumber.toString(16);
+                                #       var missingZeros = 6 - hexString.length;
+                                #       var resultBuilder = ['#'];
+                                #       for (var i = 0; i < missingZeros; i++) {
+                                #          resultBuilder.push('0');
+                                #       }
+                                #       resultBuilder.push(hexString);
+                                #       return resultBuilder.join('');
+                                #     };
+                                #
+                                #     // ...
+                              "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                              "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                                  # the final pixel color is defined by the equation:
+                                  #
+                                  #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                                  #
+                                  # This means that a value of 1.0 corresponds to a solid color, whereas
+                                  # a value of 0.0 corresponds to a completely transparent color. This
+                                  # uses a wrapper message rather than a simple float scalar so that it is
+                                  # possible to distinguish between a default value and the value being unset.
+                                  # If omitted, this color object is to be rendered as a solid color
+                                  # (as if the alpha value had been explicitly given with a value of 1.0).
+                              "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                              "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                            },
+                            "width": 42, # The width of the border, in pixels.
+                                # Border widths must be between 0 and 3 pixels.
+                            "style": "A String", # The style of the border.
+                          },
+                          "bottom": { # A border along a cell. # The bottom border of the cell.
+                            "color": { # Represents a color in the RGBA color space. This representation is designed # The color of the border.
+                                # for simplicity of conversion to/from color representations in various
+                                # languages over compactness; for example, the fields of this representation
+                                # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                                # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                                # method in iOS; and, with just a little work, it can be easily formatted into
+                                # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                                #
+                                # Example (Java):
+                                #
+                                #      import com.google.type.Color;
+                                #
+                                #      // ...
+                                #      public static java.awt.Color fromProto(Color protocolor) {
+                                #        float alpha = protocolor.hasAlpha()
+                                #            ? protocolor.getAlpha().getValue()
+                                #            : 1.0;
+                                #
+                                #        return new java.awt.Color(
+                                #            protocolor.getRed(),
+                                #            protocolor.getGreen(),
+                                #            protocolor.getBlue(),
+                                #            alpha);
+                                #      }
+                                #
+                                #      public static Color toProto(java.awt.Color color) {
+                                #        float red = (float) color.getRed();
+                                #        float green = (float) color.getGreen();
+                                #        float blue = (float) color.getBlue();
+                                #        float denominator = 255.0;
+                                #        Color.Builder resultBuilder =
+                                #            Color
+                                #                .newBuilder()
+                                #                .setRed(red / denominator)
+                                #                .setGreen(green / denominator)
+                                #                .setBlue(blue / denominator);
+                                #        int alpha = color.getAlpha();
+                                #        if (alpha != 255) {
+                                #          result.setAlpha(
+                                #              FloatValue
+                                #                  .newBuilder()
+                                #                  .setValue(((float) alpha) / denominator)
+                                #                  .build());
+                                #        }
+                                #        return resultBuilder.build();
+                                #      }
+                                #      // ...
+                                #
+                                # Example (iOS / Obj-C):
+                                #
+                                #      // ...
+                                #      static UIColor* fromProto(Color* protocolor) {
+                                #         float red = [protocolor red];
+                                #         float green = [protocolor green];
+                                #         float blue = [protocolor blue];
+                                #         FloatValue* alpha_wrapper = [protocolor alpha];
+                                #         float alpha = 1.0;
+                                #         if (alpha_wrapper != nil) {
+                                #           alpha = [alpha_wrapper value];
+                                #         }
+                                #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                                #      }
+                                #
+                                #      static Color* toProto(UIColor* color) {
+                                #          CGFloat red, green, blue, alpha;
+                                #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                                #            return nil;
+                                #          }
+                                #          Color* result = [Color alloc] init];
+                                #          [result setRed:red];
+                                #          [result setGreen:green];
+                                #          [result setBlue:blue];
+                                #          if (alpha <= 0.9999) {
+                                #            [result setAlpha:floatWrapperWithValue(alpha)];
+                                #          }
+                                #          [result autorelease];
+                                #          return result;
+                                #     }
+                                #     // ...
+                                #
+                                #  Example (JavaScript):
+                                #
+                                #     // ...
+                                #
+                                #     var protoToCssColor = function(rgb_color) {
+                                #        var redFrac = rgb_color.red || 0.0;
+                                #        var greenFrac = rgb_color.green || 0.0;
+                                #        var blueFrac = rgb_color.blue || 0.0;
+                                #        var red = Math.floor(redFrac * 255);
+                                #        var green = Math.floor(greenFrac * 255);
+                                #        var blue = Math.floor(blueFrac * 255);
+                                #
+                                #        if (!('alpha' in rgb_color)) {
+                                #           return rgbToCssColor_(red, green, blue);
+                                #        }
+                                #
+                                #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                                #        var rgbParams = [red, green, blue].join(',');
+                                #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                                #     };
+                                #
+                                #     var rgbToCssColor_ = function(red, green, blue) {
+                                #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                                #       var hexString = rgbNumber.toString(16);
+                                #       var missingZeros = 6 - hexString.length;
+                                #       var resultBuilder = ['#'];
+                                #       for (var i = 0; i < missingZeros; i++) {
+                                #          resultBuilder.push('0');
+                                #       }
+                                #       resultBuilder.push(hexString);
+                                #       return resultBuilder.join('');
+                                #     };
+                                #
+                                #     // ...
+                              "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                              "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                                  # the final pixel color is defined by the equation:
+                                  #
+                                  #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                                  #
+                                  # This means that a value of 1.0 corresponds to a solid color, whereas
+                                  # a value of 0.0 corresponds to a completely transparent color. This
+                                  # uses a wrapper message rather than a simple float scalar so that it is
+                                  # possible to distinguish between a default value and the value being unset.
+                                  # If omitted, this color object is to be rendered as a solid color
+                                  # (as if the alpha value had been explicitly given with a value of 1.0).
+                              "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                              "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                            },
+                            "width": 42, # The width of the border, in pixels.
+                                # Border widths must be between 0 and 3 pixels.
+                            "style": "A String", # The style of the border.
+                          },
+                          "left": { # A border along a cell. # The left border of the cell.
+                            "color": { # Represents a color in the RGBA color space. This representation is designed # The color of the border.
+                                # for simplicity of conversion to/from color representations in various
+                                # languages over compactness; for example, the fields of this representation
+                                # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                                # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                                # method in iOS; and, with just a little work, it can be easily formatted into
+                                # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                                #
+                                # Example (Java):
+                                #
+                                #      import com.google.type.Color;
+                                #
+                                #      // ...
+                                #      public static java.awt.Color fromProto(Color protocolor) {
+                                #        float alpha = protocolor.hasAlpha()
+                                #            ? protocolor.getAlpha().getValue()
+                                #            : 1.0;
+                                #
+                                #        return new java.awt.Color(
+                                #            protocolor.getRed(),
+                                #            protocolor.getGreen(),
+                                #            protocolor.getBlue(),
+                                #            alpha);
+                                #      }
+                                #
+                                #      public static Color toProto(java.awt.Color color) {
+                                #        float red = (float) color.getRed();
+                                #        float green = (float) color.getGreen();
+                                #        float blue = (float) color.getBlue();
+                                #        float denominator = 255.0;
+                                #        Color.Builder resultBuilder =
+                                #            Color
+                                #                .newBuilder()
+                                #                .setRed(red / denominator)
+                                #                .setGreen(green / denominator)
+                                #                .setBlue(blue / denominator);
+                                #        int alpha = color.getAlpha();
+                                #        if (alpha != 255) {
+                                #          result.setAlpha(
+                                #              FloatValue
+                                #                  .newBuilder()
+                                #                  .setValue(((float) alpha) / denominator)
+                                #                  .build());
+                                #        }
+                                #        return resultBuilder.build();
+                                #      }
+                                #      // ...
+                                #
+                                # Example (iOS / Obj-C):
+                                #
+                                #      // ...
+                                #      static UIColor* fromProto(Color* protocolor) {
+                                #         float red = [protocolor red];
+                                #         float green = [protocolor green];
+                                #         float blue = [protocolor blue];
+                                #         FloatValue* alpha_wrapper = [protocolor alpha];
+                                #         float alpha = 1.0;
+                                #         if (alpha_wrapper != nil) {
+                                #           alpha = [alpha_wrapper value];
+                                #         }
+                                #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                                #      }
+                                #
+                                #      static Color* toProto(UIColor* color) {
+                                #          CGFloat red, green, blue, alpha;
+                                #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                                #            return nil;
+                                #          }
+                                #          Color* result = [Color alloc] init];
+                                #          [result setRed:red];
+                                #          [result setGreen:green];
+                                #          [result setBlue:blue];
+                                #          if (alpha <= 0.9999) {
+                                #            [result setAlpha:floatWrapperWithValue(alpha)];
+                                #          }
+                                #          [result autorelease];
+                                #          return result;
+                                #     }
+                                #     // ...
+                                #
+                                #  Example (JavaScript):
+                                #
+                                #     // ...
+                                #
+                                #     var protoToCssColor = function(rgb_color) {
+                                #        var redFrac = rgb_color.red || 0.0;
+                                #        var greenFrac = rgb_color.green || 0.0;
+                                #        var blueFrac = rgb_color.blue || 0.0;
+                                #        var red = Math.floor(redFrac * 255);
+                                #        var green = Math.floor(greenFrac * 255);
+                                #        var blue = Math.floor(blueFrac * 255);
+                                #
+                                #        if (!('alpha' in rgb_color)) {
+                                #           return rgbToCssColor_(red, green, blue);
+                                #        }
+                                #
+                                #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                                #        var rgbParams = [red, green, blue].join(',');
+                                #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                                #     };
+                                #
+                                #     var rgbToCssColor_ = function(red, green, blue) {
+                                #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                                #       var hexString = rgbNumber.toString(16);
+                                #       var missingZeros = 6 - hexString.length;
+                                #       var resultBuilder = ['#'];
+                                #       for (var i = 0; i < missingZeros; i++) {
+                                #          resultBuilder.push('0');
+                                #       }
+                                #       resultBuilder.push(hexString);
+                                #       return resultBuilder.join('');
+                                #     };
+                                #
+                                #     // ...
+                              "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                              "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                                  # the final pixel color is defined by the equation:
+                                  #
+                                  #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                                  #
+                                  # This means that a value of 1.0 corresponds to a solid color, whereas
+                                  # a value of 0.0 corresponds to a completely transparent color. This
+                                  # uses a wrapper message rather than a simple float scalar so that it is
+                                  # possible to distinguish between a default value and the value being unset.
+                                  # If omitted, this color object is to be rendered as a solid color
+                                  # (as if the alpha value had been explicitly given with a value of 1.0).
+                              "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                              "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                            },
+                            "width": 42, # The width of the border, in pixels.
+                                # Border widths must be between 0 and 3 pixels.
+                            "style": "A String", # The style of the border.
+                          },
+                        },
+                        "wrapStrategy": "A String", # The wrap strategy for the value in the cell.
+                      },
+                      "dataValidation": { # A data validation rule. # A data validation rule on the cell, if any.
+                          #
+                          # When writing, the new data validation rule will overwrite any prior rule.
+                        "showCustomUi": True or False, # True if the UI should be customized based on the kind of condition.
+                            # If true, "List" conditions will show a dropdown.
+                        "strict": True or False, # True if invalid data should be rejected.
+                        "inputMessage": "A String", # A message to show the user when adding data to the cell.
+                        "condition": { # A condition that can evaluate to true or false. # The condition that data in the cell must match.
+                            # BooleanConditions are used by conditional formatting,
+                            # data validation, and the criteria in filters.
+                          "type": "A String", # The type of condition.
+                          "values": [ # The values of the condition. The number of supported values depends
+                              # on the condition type.  Some support zero values,
+                              # others one or two values,
+                              # and ConditionType.ONE_OF_LIST supports an arbitrary number of values.
+                            { # The value of the condition.
+                              "relativeDate": "A String", # A relative date (based on the current date).
+                                  # Valid only if the type is
+                                  # DATE_BEFORE,
+                                  # DATE_AFTER,
+                                  # DATE_ON_OR_BEFORE or
+                                  # DATE_ON_OR_AFTER.
+                                  #
+                                  # Relative dates are not supported in data validation.
+                                  # They are supported only in conditional formatting and
+                                  # conditional filters.
+                              "userEnteredValue": "A String", # A value the condition is based on.
+                                  # The value will be parsed as if the user typed into a cell.
+                                  # Formulas are supported (and must begin with an `=`).
+                            },
+                          ],
+                        },
+                      },
+                      "textFormatRuns": [ # Runs of rich text applied to subsections of the cell.
+                          # Runs start at specific indexes in the text and continue until the next
+                          # run. Properties of a run will continue unless explicitly changed
+                          # in a subsequent run (and properties of the first run will continue
+                          # the properties of the cell unless explicitly changed).
+                          #
+                          # When writing, the new runs will overwrite any prior runs.
+                        { # A run of a text format. The format of this run continues until explicitly
+                            # overridden in the next run.
+                            # When updating, all fields must be set.
+                          "startIndex": 42, # The character index where this run starts.
+                          "format": { # The format of a run of text in a cell. # The format of this run.  Absent values inherit the cell's format.
+                              # Absent values indicate that the field isn't specified.
+                            "foregroundColor": { # Represents a color in the RGBA color space. This representation is designed # The foreground color of the text.
+                                # for simplicity of conversion to/from color representations in various
+                                # languages over compactness; for example, the fields of this representation
+                                # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                                # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                                # method in iOS; and, with just a little work, it can be easily formatted into
+                                # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                                #
+                                # Example (Java):
+                                #
+                                #      import com.google.type.Color;
+                                #
+                                #      // ...
+                                #      public static java.awt.Color fromProto(Color protocolor) {
+                                #        float alpha = protocolor.hasAlpha()
+                                #            ? protocolor.getAlpha().getValue()
+                                #            : 1.0;
+                                #
+                                #        return new java.awt.Color(
+                                #            protocolor.getRed(),
+                                #            protocolor.getGreen(),
+                                #            protocolor.getBlue(),
+                                #            alpha);
+                                #      }
+                                #
+                                #      public static Color toProto(java.awt.Color color) {
+                                #        float red = (float) color.getRed();
+                                #        float green = (float) color.getGreen();
+                                #        float blue = (float) color.getBlue();
+                                #        float denominator = 255.0;
+                                #        Color.Builder resultBuilder =
+                                #            Color
+                                #                .newBuilder()
+                                #                .setRed(red / denominator)
+                                #                .setGreen(green / denominator)
+                                #                .setBlue(blue / denominator);
+                                #        int alpha = color.getAlpha();
+                                #        if (alpha != 255) {
+                                #          result.setAlpha(
+                                #              FloatValue
+                                #                  .newBuilder()
+                                #                  .setValue(((float) alpha) / denominator)
+                                #                  .build());
+                                #        }
+                                #        return resultBuilder.build();
+                                #      }
+                                #      // ...
+                                #
+                                # Example (iOS / Obj-C):
+                                #
+                                #      // ...
+                                #      static UIColor* fromProto(Color* protocolor) {
+                                #         float red = [protocolor red];
+                                #         float green = [protocolor green];
+                                #         float blue = [protocolor blue];
+                                #         FloatValue* alpha_wrapper = [protocolor alpha];
+                                #         float alpha = 1.0;
+                                #         if (alpha_wrapper != nil) {
+                                #           alpha = [alpha_wrapper value];
+                                #         }
+                                #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                                #      }
+                                #
+                                #      static Color* toProto(UIColor* color) {
+                                #          CGFloat red, green, blue, alpha;
+                                #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                                #            return nil;
+                                #          }
+                                #          Color* result = [Color alloc] init];
+                                #          [result setRed:red];
+                                #          [result setGreen:green];
+                                #          [result setBlue:blue];
+                                #          if (alpha <= 0.9999) {
+                                #            [result setAlpha:floatWrapperWithValue(alpha)];
+                                #          }
+                                #          [result autorelease];
+                                #          return result;
+                                #     }
+                                #     // ...
+                                #
+                                #  Example (JavaScript):
+                                #
+                                #     // ...
+                                #
+                                #     var protoToCssColor = function(rgb_color) {
+                                #        var redFrac = rgb_color.red || 0.0;
+                                #        var greenFrac = rgb_color.green || 0.0;
+                                #        var blueFrac = rgb_color.blue || 0.0;
+                                #        var red = Math.floor(redFrac * 255);
+                                #        var green = Math.floor(greenFrac * 255);
+                                #        var blue = Math.floor(blueFrac * 255);
+                                #
+                                #        if (!('alpha' in rgb_color)) {
+                                #           return rgbToCssColor_(red, green, blue);
+                                #        }
+                                #
+                                #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                                #        var rgbParams = [red, green, blue].join(',');
+                                #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                                #     };
+                                #
+                                #     var rgbToCssColor_ = function(red, green, blue) {
+                                #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                                #       var hexString = rgbNumber.toString(16);
+                                #       var missingZeros = 6 - hexString.length;
+                                #       var resultBuilder = ['#'];
+                                #       for (var i = 0; i < missingZeros; i++) {
+                                #          resultBuilder.push('0');
+                                #       }
+                                #       resultBuilder.push(hexString);
+                                #       return resultBuilder.join('');
+                                #     };
+                                #
+                                #     // ...
+                              "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+                              "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                                  # the final pixel color is defined by the equation:
+                                  #
+                                  #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                                  #
+                                  # This means that a value of 1.0 corresponds to a solid color, whereas
+                                  # a value of 0.0 corresponds to a completely transparent color. This
+                                  # uses a wrapper message rather than a simple float scalar so that it is
+                                  # possible to distinguish between a default value and the value being unset.
+                                  # If omitted, this color object is to be rendered as a solid color
+                                  # (as if the alpha value had been explicitly given with a value of 1.0).
+                              "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+                              "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+                            },
+                            "bold": True or False, # True if the text is bold.
+                            "strikethrough": True or False, # True if the text has a strikethrough.
+                            "fontFamily": "A String", # The font family.
+                            "fontSize": 42, # The size of the font.
+                            "italic": True or False, # True if the text is italicized.
+                            "underline": True or False, # True if the text is underlined.
+                          },
+                        },
+                      ],
+                    },
+                  ],
+                },
+              ],
+            },
+          ],
+          "properties": { # Properties of a sheet. # The properties of the sheet.
+            "sheetType": "A String", # The type of sheet. Defaults to GRID.
+                # This field cannot be changed once set.
+            "index": 42, # The index of the sheet within the spreadsheet.
+                # When adding or updating sheet properties, if this field
+                # is excluded then the sheet will be added or moved to the end
+                # of the sheet list.
+            "title": "A String", # The name of the sheet.
+            "gridProperties": { # Properties of a grid. # Additional properties of the sheet if this sheet is a grid.
+                # (If the sheet is an object sheet, containing a chart or image, then
+                # this field will be absent.)
+                # When writing it is an error to set any grid properties on non-grid sheets.
+              "columnCount": 42, # The number of columns in the grid.
+              "rowCount": 42, # The number of rows in the grid.
+              "frozenColumnCount": 42, # The number of columns that are frozen in the grid.
+              "hideGridlines": True or False, # True if the grid isn't showing gridlines in the UI.
+              "frozenRowCount": 42, # The number of rows that are frozen in the grid.
+            },
+            "rightToLeft": True or False, # True if the sheet is an RTL sheet instead of an LTR sheet.
+            "tabColor": { # Represents a color in the RGBA color space. This representation is designed # The color of the tab in the UI.
+                # for simplicity of conversion to/from color representations in various
+                # languages over compactness; for example, the fields of this representation
+                # can be trivially provided to the constructor of "java.awt.Color" in Java; it
+                # can also be trivially provided to UIColor's "+colorWithRed:green:blue:alpha"
+                # method in iOS; and, with just a little work, it can be easily formatted into
+                # a CSS "rgba()" string in JavaScript, as well. Here are some examples:
+                #
+                # Example (Java):
+                #
+                #      import com.google.type.Color;
+                #
+                #      // ...
+                #      public static java.awt.Color fromProto(Color protocolor) {
+                #        float alpha = protocolor.hasAlpha()
+                #            ? protocolor.getAlpha().getValue()
+                #            : 1.0;
+                #
+                #        return new java.awt.Color(
+                #            protocolor.getRed(),
+                #            protocolor.getGreen(),
+                #            protocolor.getBlue(),
+                #            alpha);
+                #      }
+                #
+                #      public static Color toProto(java.awt.Color color) {
+                #        float red = (float) color.getRed();
+                #        float green = (float) color.getGreen();
+                #        float blue = (float) color.getBlue();
+                #        float denominator = 255.0;
+                #        Color.Builder resultBuilder =
+                #            Color
+                #                .newBuilder()
+                #                .setRed(red / denominator)
+                #                .setGreen(green / denominator)
+                #                .setBlue(blue / denominator);
+                #        int alpha = color.getAlpha();
+                #        if (alpha != 255) {
+                #          result.setAlpha(
+                #              FloatValue
+                #                  .newBuilder()
+                #                  .setValue(((float) alpha) / denominator)
+                #                  .build());
+                #        }
+                #        return resultBuilder.build();
+                #      }
+                #      // ...
+                #
+                # Example (iOS / Obj-C):
+                #
+                #      // ...
+                #      static UIColor* fromProto(Color* protocolor) {
+                #         float red = [protocolor red];
+                #         float green = [protocolor green];
+                #         float blue = [protocolor blue];
+                #         FloatValue* alpha_wrapper = [protocolor alpha];
+                #         float alpha = 1.0;
+                #         if (alpha_wrapper != nil) {
+                #           alpha = [alpha_wrapper value];
+                #         }
+                #         return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
+                #      }
+                #
+                #      static Color* toProto(UIColor* color) {
+                #          CGFloat red, green, blue, alpha;
+                #          if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
+                #            return nil;
+                #          }
+                #          Color* result = [Color alloc] init];
+                #          [result setRed:red];
+                #          [result setGreen:green];
+                #          [result setBlue:blue];
+                #          if (alpha <= 0.9999) {
+                #            [result setAlpha:floatWrapperWithValue(alpha)];
+                #          }
+                #          [result autorelease];
+                #          return result;
+                #     }
+                #     // ...
+                #
+                #  Example (JavaScript):
+                #
+                #     // ...
+                #
+                #     var protoToCssColor = function(rgb_color) {
+                #        var redFrac = rgb_color.red || 0.0;
+                #        var greenFrac = rgb_color.green || 0.0;
+                #        var blueFrac = rgb_color.blue || 0.0;
+                #        var red = Math.floor(redFrac * 255);
+                #        var green = Math.floor(greenFrac * 255);
+                #        var blue = Math.floor(blueFrac * 255);
+                #
+                #        if (!('alpha' in rgb_color)) {
+                #           return rgbToCssColor_(red, green, blue);
+                #        }
+                #
+                #        var alphaFrac = rgb_color.alpha.value || 0.0;
+                #        var rgbParams = [red, green, blue].join(',');
+                #        return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
+                #     };
+                #
+                #     var rgbToCssColor_ = function(red, green, blue) {
+                #       var rgbNumber = new Number((red << 16) | (green << 8) | blue);
+                #       var hexString = rgbNumber.toString(16);
+                #       var missingZeros = 6 - hexString.length;
+                #       var resultBuilder = ['#'];
+                #       for (var i = 0; i < missingZeros; i++) {
+                #          resultBuilder.push('0');
+                #       }
+                #       resultBuilder.push(hexString);
+                #       return resultBuilder.join('');
+                #     };
+                #
+                #     // ...
+              "blue": 3.14, # The amount of blue in the color as a value in the interval [0, 1].
+              "alpha": 3.14, # The fraction of this color that should be applied to the pixel. That is,
+                  # the final pixel color is defined by the equation:
+                  #
+                  #   pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
+                  #
+                  # This means that a value of 1.0 corresponds to a solid color, whereas
+                  # a value of 0.0 corresponds to a completely transparent color. This
+                  # uses a wrapper message rather than a simple float scalar so that it is
+                  # possible to distinguish between a default value and the value being unset.
+                  # If omitted, this color object is to be rendered as a solid color
+                  # (as if the alpha value had been explicitly given with a value of 1.0).
+              "green": 3.14, # The amount of green in the color as a value in the interval [0, 1].
+              "red": 3.14, # The amount of red in the color as a value in the interval [0, 1].
+            },
+            "hidden": True or False, # True if the sheet is hidden in the UI, false if it's visible.
+            "sheetId": 42, # The ID of the sheet. Must be non-negative.
+                # This field cannot be changed once set.
+          },
+        },
+      ],
+    }</pre>
+</div>
+
+</body></html>
\ No newline at end of file