gpt4 book ai didi

java - 在单个请求中清除并使用数据填充多个工作表

转载 作者:太空宇宙 更新时间:2023-11-04 10:09:11 25 4
gpt4 key购买 nike

我需要定期清除多个工作表中的数据并用数据重新填充它们(通过 Google Sheets API v4)。为此,我对每张工作表执行 2 个单独的请求(1 个清除和 1 个更新)。当用户坐在那里等待时,这是一个缓慢的过程。在我看来,每个新请求都会显着增加完成时间。如果我可以将所有这些包装到一个批处理命令请求中,可能会有很大帮助。

我目前正在对每张纸执行此操作...

service.spreadsheets()
.values()
.clear(idSpreadsheet, sheetTitle + "!$A$1:$Y", new ClearValuesRequest())
.execute();

service.spreadsheets()
.values()
.update(idSpreadsheet, range, new ValueRange().setValues(values))
.setValueInputOption("USER_ENTERED")
.execute();

我没有找到将一堆通用命令包装到单个批处理请求中的方法。我看到 DeleteDimensionRequestAppendCellsRequest 可以包装到一个批处理中,但我真的找不到一个好的 AppendCellsRequest 示例(而且似乎人们无论如何都推荐我当前的 values().update() 方法)。

任何人都可以推荐一种简化此操作的好方法吗?或者我已经以最好的方式做到了?

最佳答案

仍然不知道我是否以最好的方式这样做,但我能够实现在单个批量请求中使用数据清除和填充多个工作表的目标。诀窍是不使用 clear() 方法,而是使用 RepeatCellRequest 用空白数据覆盖工作表。另外,现在使用 AppendCellsRequest 而不是 update()。这两个请求可以包装在一个批处理请求中。我的早期测试显示 3 张纸的性能提高了约 25%。并不引人注目,但有帮助。

List<Request> requests = new ArrayList<Request>();
for (SheetData mySheet : sheetDatas)
{
List<List<Object>> values = mySheet.getValues();
Request clearSheetRequest = new Request()
.setRepeatCell(new RepeatCellRequest()
.setRange(new GridRange()
.setSheetId(mySheet.getSheetId())
)
.setFields("*")
.setCell(new CellData())
);

List<RowData> preppedRows = new ArrayList<RowData>();
for (List<Object> row : values)
{
RowData preppedRow = new RowData();
List<CellData> cells = new ArrayList<CellData>();
for (Object value : row)
{
CellData cell = new CellData();
ExtendedValue userEnteredValue = new ExtendedValue();
if (value instanceof String)
{
userEnteredValue.setStringValue((String) value);
}
else if (value instanceof Double)
{
userEnteredValue.setNumberValue((Double) value);
}
else if (value instanceof Integer)
{
userEnteredValue.setNumberValue(Double.valueOf((Integer) value).doubleValue());
}
else if (value instanceof Boolean)
{
userEnteredValue.setBoolValue((Boolean) value);
}
cell.setUserEnteredValue(userEnteredValue);
cells.add(cell);
}
preppedRow.setValues(cells);
preppedRows.add(preppedRow);
}

Request appendCellsRequest = new Request().setAppendCells(
new AppendCellsRequest()
.setSheetId(mySheet.getSheetId())
.setRows(preppedRows)
.setFields("*")
);

requests.add(clearSheetRequest);
requests.add(appendCellsRequest);
}

BatchUpdateSpreadsheetRequest batch = new BatchUpdateSpreadsheetRequest().setRequests(requests);
BatchUpdateSpreadsheetResponse batchResponse = service.spreadsheets().batchUpdate(idSpreadsheet, batch).execute();

关于java - 在单个请求中清除并使用数据填充多个工作表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52541093/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com