ExcelJS-如何使用addRowsAsync处理“计算列”

时间:2018-11-21 08:12:29

标签: excel excel-addins exceljs

我正在将ExcelJs API与addRowsAsync()deleteAllDataValuesAsync()一起使用。 (reference

如果用户要在表中添加新数据,则用户在Excel工作表中创建了一些“计算列”,从而扩大了表的大小(例如:新列的值与第一列的值+ 1)。 ,我应该如何处理“计算”列?

let excelTable = currentWorksheet.tables.getItemOrNullObject(tableName)
  excelTable.rows.load("values")
  excelTable.columns.load("values")

  return context.sync().then(() => {
    if (excelTable.isNullObject) {
      excelTable = currentWorksheet.tables.add(tableRange, true)
      excelTable.name = tableName
      excelTable.getHeaderRowRange().values = [excelHeaders]

      return context.sync().then(() => {
        Office.context.document.bindings.addFromNamedItemAsync(
          tableName,
          Office.BindingType.Table,
          { id: tableName },
          function(result) {
            if (result.status === Office.AsyncResultStatus.Succeeded) {
              Office.context.document.bindings.getByIdAsync(
                tableName,
                null,
                (asyncResult: any) => {
                  var binding = asyncResult.value
                  binding.addRowsAsync(_excelData)
                }
              )
            } else {
              Debug.error("Error:", result.error.message)
            }
          }
        )
      })
    } else {
      const tableRows = excelTable.rows.items.length
      const tableColumns = excelTable.columns.items.length
      const dataRows = _excelData.length
      const dataColumns = _excelData[0].length

      Office.context.document.bindings.getByIdAsync(
        tableName,
        null,
        (asyncResult: any) => {
          var binding = asyncResult.value
          binding.deleteAllDataValuesAsync()
          binding.addRowsAsync(_excelData)
        }
      )
    }

    excelTable.getRange().format.autofitColumns()
    excelTable.getRange().format.autofitRows()

    return context.sync()
  })

使用 Excel for Windows ,不会将新行添加到表中。

如果我使用 Excel Online ,会发生不同的情况:添加行并且计算出的列正确地保持不变。

这是API的错误吗? 你能帮我吗?

预先感谢, 安德里亚

0 个答案:

没有答案