如何使用 Office 脚本删除 table 中的所有行

How to delete all rows in a table using Office Scripts

我在电子表格中有一个 table,我想删除所有现有数据。我使用下面的代码,除非 table 已经为空。

// Get the row count
let rowCount = table.getRangeBetweenHeaderAndTotal().getRowCount();

// Delete all the rows
table.deleteRowsAt(0,rowCount);

问题是即使 table 为空,rowCount 也会 return 1。当 deleteRowsAt 尝试删除空 table 中的行时,它 return 是一个错误。

在 VBA 中我们可以使用 table.ListRows.Count 如果 table 为空,这将 return 0。

示例:我在 table 中有 3 行

如果我 select 所有行并将它们从 Table 中删除,我得到这个:

此 table 现在没有行,但我无法获得此结果。正如我所说,在 VBA 中我们将使用 table.ListRows.Count 而这将是 return 0 但我似乎找不到 Office 脚本的等效项。

更新:

我们现在在 table 上有 getRowCount API,您可以使用它来解决这个问题。它将 return 实际行(不计算 header 或扩展行)。

    // Assuming there's a table in the workbook named Table1
    let rowCount = workbook.getTable('Table1').getRowCount(); // Table1
    // Assuming there's a table in the workbook
    let rowCount = workbook.getTables()[0].getRowCount(); // First table

====

旧答案

我认为我们缺少可以提供行数的 API。我们会将其添加到积压工作中。 解决方法是 -

function main(workbook: ExcelScript.Workbook) {
  let table = workbook.getTable("Table26");
  let rowCount = table.getRangeBetweenHeaderAndTotal().getRowCount();
  try { 
    table.deleteRowsAt(0, rowCount);
  } catch (e) {
    if (rowCount === 1 && e.code === 'InvalidArgument') {
       console.log("This error means there's no row to delete.")
    }
  }
}

如果行数为 1,并且错误代码是我们删除 'insert-row' 时 return 编辑的特定代码,那么我们可以忽略该错误。 同样,更好的方法是在 table object 上使用 API 来获取行数并仅在行数 >= 1 时删除行。我们将进一步调查以改进经验。

我 运行 一些使用 deleteRowsAt() 删除 5,000 行(5 列,不同数据类型)的快速测试,它始终需要 20 到 30 秒。但是大约 10,000 行或更多,我每次都超时,脚本从未完成。从 Flow 调用脚本也让我在失败前多次重新尝试网关超时。

table.deleteRowsAt(0, rowCount);

但是使用getRangeBetweenHeaderAndTotal()引用一个运行ge进行删除效果很好,200,000行相同的测试数据在大约2秒内完成。文档提到 运行ges 更快,它们肯定在我的测试中。

table.getRangeBetweenHeaderAndTotal().delete(0);