使用Google表格API v4将新数据插入Google电子表格的顶部

时间:2018-05-03 04:03:32

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

我使用Google表格跟踪我网站上的最近订单。我想将每个新订单的详细信息添加到Google电子表格中,并将最新的订单详细信息显示在工作表的顶部,而较旧的条目显示在底部。

我知道我可以在最后一行之后添加新行而不知道/使用以下代码向Google提供行号:

// INSERTS NEW DATA AFTER LAST ROW
ValueRange body = new ValueRange().setValues(writeData);
AppendValuesResponse appendValuesResponse =
        service.spreadsheets().values().append(spreadsheetId, range, body)
                .setValueInputOption(valueInputOption)
                .execute();

但是,这意味着较新的条目会添加到工作表的底部而不是顶部。我的要求恰恰相反。我需要在工作表顶部添加/附加较新的条目,并将较旧的条目移到底部。

有没有办法使用API​​本地完成此操作?

2 个答案:

答案 0 :(得分:0)

没有直接的方法。您最接近操作工作表中数据顺序的机会是Sort a range with multiple sorting specifications或者使数据从底部添加到工作表(如A + ctr到A + ctr)使用递减变量计数器10-1 )。

答案 1 :(得分:0)

我有一个非常相似的需求,我正在分享我是如何解决它的。

我知道要在顶部插入的行数。我在标题下方的顶部插入了空白行。我根据行数设置 startIndexendIndex,并在电子表格上请求 BatchUpdate。然后用值更新范围(在这次调用之后现在是空白的)。

    log.trace("Inserting Blank Row At the Top of Sheet");

    DimensionRange dimensionRange = new DimensionRange();
    dimensionRange.setDimension("ROWS");
    dimensionRange.setStartIndex(1); // depends on your requirement
    dimensionRange.setEndIndex(10);  // depends on your requirement

    InsertDimensionRequest insertDimension = new InsertDimensionRequest();
    insertDimension.setRange(dimensionRange);

    Request insertionRequest = new Request();
    insertionRequest.setInsertDimension(insertDimension);

    BatchUpdateSpreadsheetRequest batchUpdateSpreadsheetRequest = new BatchUpdateSpreadsheetRequest();
    batchUpdateSpreadsheetRequest.setRequests(Arrays.asList(insertionRequest));

    try {
        BatchUpdateSpreadsheetResponse execute = sheets.spreadsheets()
                .batchUpdate(spreadsheetId, batchUpdateSpreadsheetRequest)
                .execute();
    } catch (IOException e) {
        log.error("Exception Occurred While Inserting Blank Row - Details: {}", e.getMessage());
        e.printStackTrace();
    }

Google 参考文档:InsertDimensionRequest - Sheets API Reference

注意:C# 的这个答案帮助我找到了这个 Java 解决方案:https://stackoverflow.com/a/53587428/7878602