在最后一行之前添加值的行,并保留最后一行的格式

时间:2018-08-01 06:21:49

标签: node.js google-sheets-api

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

看起来像这样:

.getStr

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

到目前为止,我尝试过values.update,它确实插入了新行,但没有降低最后一行的颜色。这样一来,我就可以根据需要在电子表格中获得数据,但是使用了错误的颜色格式(基本上第三行始终具有彩色背景,而最后一行则没有)。

我想做的伪代码:

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

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

2 个答案:

答案 0 :(得分:1)

您可以将条件格式设置为始终与最终单元格的数据匹配,而不是对单元格应用格式设置。

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

  

= Arrayformula(Row($ A2:$ A)= Max((Row($ A2:$ A))*((($ A2:$ A <>“)))))

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

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

答案 1 :(得分:0)

因此,最后我决定使用spreadsheet.get来检索模板。

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

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

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

最后,我将这些新行放回get返回的rows对象中(不包含模板行),然后使用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);
}

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