【问题标题】:Sort range based on a column using a google sheets API in Java使用 Java 中的谷歌表格 API 基于列对范围进行排序
【发布时间】:2020-08-10 15:01:59
【问题描述】:

我的 Java 代码在检索数据并将数据更新到我的 Google 表格电子表格时运行良好。

我正在尝试在更新后对数据进行排序,并收到 500 内部服务器错误,我想知道我发送的错误是什么。我正在尝试升序排序范围“E1:I1000”

这是我的代码:

        Sheets sheetsService = GoogleAuthorizeUtil.getSheetsService("worktest");
    BatchUpdateSpreadsheetRequest busReq = new BatchUpdateSpreadsheetRequest();
    SortRangeRequest srr = new SortRangeRequest();
    GridRange gr = new GridRange();
    SortSpec ss = new SortSpec();
    Request req = new Request();
    
    gr.setSheetId(0);
    gr.setStartRowIndex(1);
    gr.setEndRowIndex(1000);
    gr.setStartColumnIndex(5);
    gr.setEndColumnIndex(10);
    
    srr.setRange(gr);
    
    ss.setSortOrder("ASCENDING");
    ss.setDimensionIndex(1);
    
    srr.setSortSpecs(Arrays.asList(ss));
    
    req.setSortRange(srr);
    
    busReq.setRequests(Arrays.asList(req));
    
    sheetsService.spreadsheets().batchUpdate(googleID, busReq).execute();

我尝试排序的方式有什么问题吗?

【问题讨论】:

  • 澄清一下,在提供的代码中,如果您注释掉ss.setSortOrderss.setDimensionIndex,它可以正常工作吗?你可以在这里查看教程:developers.google.com/sheets/api/guides/filters.
  • 我确实注释掉了 ss 部分,它还在继续,但看起来并没有对我的数据进行排序。
  • 你有基于零索引的列吗?我相信一切都应该从零开始。至少,维度索引 = 1 根据指南引用数据的第二列。
  • 是的,我已经仔细检查过,它们都是从零开始的。我已合并 A 列中的行,但已将其删除,但仍然出现 500 错误。我的维度是正确的,因为在这种情况下,我确实想在我的范围的第二列进行排序。谢谢!

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


【解决方案1】:

答案:

您正在尝试按列 E:I 对列进行排序 B - 这是不可能的!

更多信息:

在您的代码中,您将作为数据排序依据的dimensionIndex 设置为1 的值。这不是您要排序的数据的第二列,而是整个电子表格的第二列

这在SortSpec 文档中并不清楚,但可以从谷歌在Data Operations documentation 中提供的示例中推断出来

代码修复:

你需要做的就是改变传递给setDimensionIndex的值:

ss.setDimensionIndex(1)

改为:

ss.setDimensionIndex(6)

参考资料:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-26
    • 1970-01-01
    • 2016-09-11
    相关资源
    最近更新 更多