在使用Javascript Excel API创建Excel加载项时遇到一些麻烦。
第一期: 使用Excel Js library向现有表中添加行:我创建了一个表并添加了一些行;然后用户可以使用来自REST服务的新数据更新表内容(因此,结果表行可以更改:增加/减少或相同)。
tl; dr; 我需要用新行替换表行。
这似乎很简单:表命名空间(reference)中有一个addRows
方法。
但这将无法正常工作:如果表中已经包含行,则会将新行添加到末尾,而不是替换现有行。
代码在这里:
const currentWorksheet = context.workbook.worksheets.getItemOrNullObject(
"Sheet1"
)
let excelTable = currentWorksheet.tables.getItemOrNullObject(tableName)
if (excelTable.isNullObject) {
excelTable = currentWorksheet.tables.add(tableRange, true /* hasHeaders */)
excelTable.name = tableName
excelTable.getHeaderRowRange().values = [excelHeaders]
excelTable.rows.add(null, excelData)
} else {
excelTable.rows.add(0, excelData)
}
我还试图删除旧行,然后添加新行。
if (!excelTable.isNullObject) {
for (let i = tableRows - 1; i >= 0; i--) {
// Deletes all table rows
excelTable.rows.items[i].delete()
}
excelTable.rows.add(0, excelData)
}
但是..如果表的列下方没有内容(没有函数,其他表等),则仅可以正常工作。
我尝试了另一种方法:使用 ranges 。 第一次创建表格时,接下来的我删除所有行,获取新数据范围并插入值:
if (excelTable.isNullObject) {
excelTable = currentWorksheet.tables.add(tableRange, true /* hasHeaders */)
excelTable.name = tableName
excelTable.getHeaderRowRange().values = [excelHeaders]
excelTable.rows.add(null, excelData)
} else {
let actualRange, newDataRange
const tableRows = excelTable.rows.items.length
const tableColumns = excelTable.columns.items.length
const dataRows = excelData.length
const dataColumns = excelData[0].length
actualRange = excelTable.getDataBodyRange()
for (let i = tableRows - 1; i >= 0; i--) {
// Deletes all table rows
excelTable.rows.items[i].delete()
}
newDataRange = actualRange.getAbsoluteResizedRange(dataRows, tableColumns)
newDataRange.values = excelData
}
但是此解决方案仍然存在弊端。
在Excel表中添加/编辑/删除行需要这么难吗?
第二个问题:
使用同一张表,如果用户决定添加一些“额外”列(例如,基于表值的公式),是否需要用null
数据填充新列?
const tableColumns = excelTable.columns.items.length
const dataRows = excelData.length
const dataColumns = excelData[0].length
if (tableColumns > dataColumns) {
let diff = tableColumns - dataColumns
for (let i = 0; i < diff; i++) {
for (let j = 0; j < dataRows; j++) {
excelData[j].push(null)
}
}
}
Excel API无法处理这种情况?
请,你能帮我吗?
先谢谢您。
答案 0 :(得分:0)
感谢您的举报。 添加表行API只是将行添加到表行中,而不是替换它。 更重要的是。我无法通过删除行来解决这个问题。你能告诉我更多细节吗?