如何使用Office.js在Excel中删除工作表中的工作表行

时间:2018-10-30 17:43:51

标签: office-js

我的目的是清除所有数据表。

我尝试了 worksheet.getusedRange()。clear()方法,但是它只清除数据和格式,但隐藏的行仍然保持隐藏状态。即使 worksheet.getUsedRange()。delete('up')也不会删除行的取消隐藏属性。

我发现的唯一解决方法是执行 worksheet.getUsedRange.rowHidden = False ,然后执行 worksheet.getUsedRange()。delete(),这将取消隐藏行工作范围,但不会取消隐藏超出范围的行(即,如果数据/格式存在于row10之前,但行100被隐藏,则此方法不会取消隐藏第100行)

当我尝试 worksheet.getRange()。rowHidden = false 时,它将引发错误->“错误:InvalidOperation:当前对象不允许执行此操作。”

有什么方法可以像在excel UI中那样删除工作表行,以便甚至删除行的hidden属性。

我正在使用Excel Online

1 个答案:

答案 0 :(得分:1)

您已经发现,getUsedRange方法仅返回包含数据或格式的单元格范围。如果工作表包含超出包含数据/格式的单元格范围的隐藏/空行,则这些隐藏/空行将不包含在getUsedRange方法返回的范围内。

要实现清除所有数据表(包括任何空但隐藏的行)的目标,您可以考虑执行以下操作:

  1. 使用getRange方法检索您确信足够大的范围以容纳工作表上的任何数据(和/或空的,隐藏的行)。

  2. 取消隐藏该范围内的所有行。

  3. 删除该范围。

下面的代码示例说明了这种方法。请注意,它指定了范围A1:KK20000,但是您可以将其设置为您认为足够大的值,以容纳工作表上的数据(和/或空的,隐藏的行)。

await Excel.run(async (context) => {
    const sheet = context.workbook.worksheets.getItem("Sample");
    const range = sheet.getRange('A1:KK20000');
    range.rowHidden = false;
    range.delete(Excel.DeleteShiftDirection.up);
    context.sync();
});

或者,您可以使用API​​删除工作表,然后立即在其位置创建一个新的(空的)名称相同的表...尽管这可能比我在第一种方法上对用户的视觉干扰更大描述。