【问题标题】:Add rows of values before last row and preserve last row format在最后一行之前添加值行并保留最后一行格式
【发布时间】:2018-08-01 06:21:49
【问题描述】:

我对 Google Sheets API 还很陌生,所以请耐心等待。
我有一个用作模板的电子表格,最后两行以某种特定方式(颜色和字体)格式化。

看起来像这样:

| header 1     | header 2     | header 3     |
| placeholder1 | placeholder2 | placeholder3 |
| color footer1|color footer2 | color footer2|

我想做的是根据需要插入尽可能多的“占位符”行,然后让最后一行“滑动”下来。

到目前为止,我尝试了values.update,它确实插入了新行,但没有向下移动最后一行的颜色。这样我就可以根据需要得到电子表格中的数据,但颜色格式错误(基本上第三行总是有彩色背景,而最后一行没有)。

我想做的伪代码:

  1. 计算我需要添加多少占位符行,
  2. 获取电子表格
  3. 剪切+粘贴最后两行到新位置
  4. 获取电子表格的值
  5. 更新值(替换占位符、插入新行、更新总数)

我不确定这是最好的方法(似乎有点复杂)。谁能指出我正确的方向?

【问题讨论】:

  • 分享你尝试过的不同请求。
  • 我实际上最终使用了batchUpdate 并发送了一个updateCells 请求
  • 好建议,谢谢。我很快就会给出一个简短的回答

标签: node.js google-sheets-api


【解决方案1】:

您可以应用条件格式,而不是将格式应用于单元格,并使其始终与最终单元格的数据匹配。

例如,根据this link,您可以应用以下条件格式,通过将其应用于 A2:Z999 来始终应用于最后一行

=Arrayformula(Row($A2:$A) = Max((Row($A2:$A))*(($A2:$A""))))

或者有一些总是只会在最后一行中的数据,并根据它与该数据匹配的格式。

但是,请注意,如果您要创建全新的行,则条件格式可能会超过 Z 行,在这种情况下,您的条件格式将不再适用(无需手动更新它适用于哪些行,从而扩大其范围)。根据您的需要,这可能会限制此方法的可用性。

【讨论】:

    【解决方案2】:

    所以最后我决定使用spreadsheet.get 来检索模板。

    我将标志 includeGridData 设置为 true,这会将每个单元格的所有信息发回。

    这是一个很大的对象,但它拥有我所需要的一切。

    然后我克隆模板行,根据需要生成尽可能多的副本。

    最后,我将这些新行放回 get 返回的行对象中(没有模板行),然后使用 batchUpdate 更新电子表格。

    类似这样的:

    async updateSpreadsheetCells(clone, data, spreadSheetDataRows) {
      const request = {
        spreadsheetId: clone.id,
        resource: {
          requests: [
            {
              updateCells: {
                fields: '*',
                range: {
                  sheetId: 0,
                  startRowIndex: 0,
                  endRowIndex: endRow // value dynamically calculated
                  startColumnIndex: 0,
                  endColumnIndex: this.endColumnIndex
                },
                rows: spreadSheetDataRows //this will replace all the rows
              }
            }
          ]
        }
      };
      await this.googleSheetService.batchUpdateSpreadSheet(request);
    }
    

    这是一个快速的概述,代码有点复杂,没有必要在这里发布。希望这对其他人有所帮助。

    【讨论】:

    • 考虑在您的 spreadsheet.get 请求中提供 fields 参数 - 您可以将检索到的数据限制为您需要的数据:交互式字段构建器位于 Google APIs Explorer 页面上。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-03-06
    • 1970-01-01
    • 1970-01-01
    • 2020-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多