在Google工作表中设置自定义列宽

时间:2017-07-21 06:50:40

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

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

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

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

更新

可能的解决方案:

<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
tools:openDrawer="start">

<include
    layout="@layout/app_bar_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />

<android.support.design.widget.NavigationView
    android:id="@+id/nav_view"
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    android:layout_gravity="start"
    android:fitsSystemWindows="true">
    <ScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent">
        <LinearLayout
            android:orientation="vertical"
            android:layout_width="match_parent"
            android:layout_height="wrap_content">
            <TextView
                android:background="#FFFFAA"
                android:layout_width="match_parent"
                android:layout_height="500dp"
                android:text="500dp"
                android:gravity="center_vertical"
                android:textAlignment="center" />
            <View
                android:background="#FF0000"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_weight="1"/>
            <TextView
                android:background="#AAFF"
                android:layout_width="match_parent"
                android:layout_height="150dp"
                android:text="150dp"
                android:gravity="center_vertical"
                android:textAlignment="center" />
        </LinearLayout>
    </ScrollView>
    </android.support.design.widget.NavigationView>

</android.support.v4.widget.DrawerLayout>

2 个答案:

答案 0 :(得分: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

的其他问题
  

我收到“无效请求1。updateDimensionProperties:没有ID为0的网格”,

如果未正确设置sheetId,您将收到此错误。

来自API v4文档SheetId是;

  

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

因此,您需要设置sheetId对象的DimensionRange。在您的情况下,您需要将sheetId用作randomSheetId(我已更新上述代码)。

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

答案 1 :(得分:1)

请查看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")
        );
}