【问题标题】:Set custom column width size in google sheets在谷歌表格中设置自定义列宽大小
【发布时间】:2017-07-21 06:50:40
【问题描述】:

我正在使用此 Java 代码从 Java 应用程序生成 Google 表格数据。

List < RowData > rowDataValues = new ArrayList < > ();

List < CellData > headerValues = new ArrayList < > ();
headerValues.add(new CellData().setNote("ID")
    .setUserEnteredValue(new ExtendedValue()
        .setStringValue("#")).setUserEnteredFormat(myFormat));
.setStringValue("Environment")).setUserEnteredFormat(myFormat));

.........

headerValues.add(new CellData()
    .setUserEnteredValue(new ExtendedValue()
        .setStringValue("Name")).setUserEnteredFormat(myFormat));
RowData setHeaderValues = new RowData();
setHeaderValues.setValues(headerValues);
rowDataValues.add(setHeaderValues);

requests.add(new Request()
    .setUpdateCells(new UpdateCellsRequest()
        .setStart(new GridCoordinate()
            .setSheetId(randomSheetId)
            .setRowIndex(0)
            .setColumnIndex(0))
        .setRows(rowDataValues)
        .setFields("*")));

BatchUpdateSpreadsheetRequest body = new BatchUpdateSpreadsheetRequest().setRequests(requests);

BatchUpdateSpreadsheetResponse response = service.spreadsheets().batchUpdate(spreadsheetId, body).execute();

如何为每列设置自定义宽度?

更新:

这是我迄今为止尝试过的:

new UpdateDimensionPropertiesRequest().setRange(
        new DimensionRange()
        .setDimension("COLUMNS")
        .setStartIndex(0).setEndIndex(1)
    )
    .setProperties(new DimensionProperties().setPixelSize(400)).setFields("pixelSize"));

【问题讨论】:

  • 到目前为止,您对 UpdateDimensionPropertiesRequest 做了什么?
  • 不幸的是我没有找到如何实现它的解决方案。
  • 目前无法访问我的环境,能否链接我之前发给您的代码sn-p?
  • 您是否将这个添加到请求列表中并带有包装请求对象? ( new Request().setUpdateDimensionProperties( new UpdateDimensionProp...
  • 我更新了我测试过的代码。这是我不知道如何实现的确切部分。你能给我一些代码 sn-p 我需要在我的代码中设置 setUpdateDimensionProperties 吗?

标签: java google-sheets google-sheets-api


【解决方案1】:

您需要创建UpdateDimensionPropertiesRequest。在您的情况下,您可以使用此示例代码,它会增加第一列 (startIndex = 0, endIndex = 1) 的大小。

requests.add(new Request().setUpdateDimensionProperties(
    new UpdateDimensionPropertiesRequest()
    .setRange(
        new DimensionRange()
        .setSheetId(randomSheetId)
        .setDimension("COLUMNS")
        .setStartIndex(0)
        .setEndIndex(1)
)
.setProperties(new DimensionProperties().setPixelSize(400)).setFields("pixelSize"))));

在这里我使用setDimension("COLUMNS") 更改列宽,可以使用setDimension("ROWS") 更改行高。


来自 @PeterPenzov 's comment 的其他问题:

我得到“无效的requests.updateDimensionProperties:没有ID为0的网格”,

当您的 sheetId 设置不正确时,您会收到此错误。

来自 API v4 文档 SheetId 是 ;

电子表格中的各个工作表都有标题(必须是唯一的)和 ID。 sheetId 经常在 Sheets API 中用于指定正在读取或更新的工作表

所以你需要设置sheetIdDimensionRange 对象。在您的情况下,您需要将sheetId 用作randomSheetId(我已经更新了上面的代码)。

Spreadsheet spreadsheet = service.spreadsheets().get(spreadsheetId).execute();
spreadsheet.getSheets().stream()
                       .map(s->s.getProperties().getSheetId())
                       .forEach(System.out::println);

【讨论】:

  • 我得到“无效的请求[1].updateDimensionProperties:没有ID为0的网格”,
  • @PeterPenzov 最后我有时间检查你的错误,我更新了我的答案祝你好运。
【解决方案2】:

请查看dev documentation:

{
  "requests": [
    {
      "updateDimensionProperties": {
        "range": {
          "sheetId": sheetId,
          "dimension": "COLUMNS",
          "startIndex": 0,
          "endIndex": 1
        },
        "properties": {
          "pixelSize": 160
        },
        "fields": "pixelSize"
      }
    }
  ]
}

列宽示例中的请求正文可以转换为下一个 Java 代码:

public void updateFirstColumnWidth(Sheets sheetService, String sheetId) throws IOException {
    final Spreadsheet spreadsheet = sheetService.spreadsheets()
        .get(sheetId)
        .execute();
    final var sheets = spreadsheet.getSheets();
    final var sheet = sheets.get(0); // get your specific sheet
    final int sheetUuid = sheet.getProperties().getSheetId();
    final var batchRequest = new BatchUpdateSpreadsheetRequest();
    List<Request> requests = List.of(getColumnWidthRequest(sheetUuid, 160));
    batchRequest.setRequests(requests);
    final BatchUpdateSpreadsheetResponse response = sheetService.spreadsheets()
        .batchUpdate(sheetId, batchRequest)
        .execute();
}

private Request getColumnWidthRequest(int sheetUuid, int width) {
    return new Request()
        .setUpdateDimensionProperties(
            new UpdateDimensionPropertiesRequest()
                .setRange(
                    new DimensionRange()
                        .setSheetId(sheetUuid)
                        .setDimension("COLUMNS")
                        .setStartIndex(0)
                        .setEndIndex(1)
                )
                .setProperties(new DimensionProperties().setPixelSize(width))
                .setFields("pixelSize")
        );
}

【讨论】:

    猜你喜欢
    • 2012-11-28
    • 2012-07-21
    • 2012-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多