<html><body>
<style>

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

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

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

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

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

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

pre {
  margin-top: 0.5em;
}

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

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

.toc_element {
  margin-top: 0.5em;
}

.firstline {
  margin-left: 2 em;
}

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

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

</style>

<h1><a href="sheets_v4.html">Google Sheets API</a> . <a href="sheets_v4.spreadsheets.html">spreadsheets</a> . <a href="sheets_v4.spreadsheets.sheets.html">sheets</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="#copyTo">copyTo(spreadsheetId, sheetId, body, x__xgafv=None)</a></code></p>
<p class="firstline">Copies a single sheet from a spreadsheet to another spreadsheet.</p>
<h3>Method Details</h3>
<div class="method">
    <code class="details" id="copyTo">copyTo(spreadsheetId, sheetId, body, x__xgafv=None)</code>
  <pre>Copies a single sheet from a spreadsheet to another spreadsheet.
Returns the properties of the newly created sheet.

Args:
  spreadsheetId: string, The ID of the spreadsheet containing the sheet to copy. (required)
  sheetId: integer, The ID of the sheet to copy. (required)
  body: object, The request body. (required)
    The object takes the form of:

{ # The request to copy a sheet across spreadsheets.
    "destinationSpreadsheetId": "A String", # The ID of the spreadsheet to copy the sheet to.
  }

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

Returns:
  An object of the form:

    { # Properties of a 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 is added or moved to the end
        # of the sheet list. When updating sheet indices or inserting
        # sheets, movement is considered in "before the move" indexes.
        # For example, if there were 3 sheets (S1, S2, S3) in order to
        # move S1 ahead of S2 the index would have to be set to 2. A sheet
        # index update request is ignored if the requested index is
        # identical to the sheets current index or if the requested new
        # index is equal to the current sheet index + 1.
    "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.
      "rowGroupControlAfter": True or False, # True if the row grouping control toggle is shown after the group.
      "columnGroupControlAfter": True or False, # True if the column grouping control toggle is shown after the group.
      "frozenRowCount": 42, # The number of rows that are frozen in the grid.
      "frozenColumnCount": 42, # The number of columns that are frozen in the grid.
      "rowCount": 42, # The number of rows in the grid.
      "hideGridlines": True or False, # True if the grid isn't showing gridlines in the UI.
    },
    "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.
        #
        # Note: this proto does not carry information about the absolute color space
        # that should be used to interpret the RGB value (e.g. sRGB, Adobe RGB,
        # DCI-P3, BT.2020, etc.). By default, applications SHOULD assume the sRGB color
        # space.
        #
        # 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>