我正在将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的错误吗? 你能帮我吗?
预先感谢, 安德里亚