【问题标题】:Delete and replace sheet without destroying references to it in Excel Javascript在 Excel Javascript 中删除和替换工作表而不破坏对它的引用
【发布时间】:2020-07-31 18:25:12
【问题描述】:

这是我尝试使用 Excel Javascript API 完成的任务:

  1. 我的工作簿中有Sheet1Sheet2。在Sheet2 中可能有一些对Sheet2 中单元格的引用,但我不知道它们在哪里,甚至不知道它们是否存在。
  2. 我想将 Sheet1 替换为不同的工作表(例如 Sheet3),但我不希望 Sheet2 上对 Sheet1 的单元格的引用中断。
  3. Sheet1Sheet2 都具有任意数量的数据,并且数量不限。

我的问题:我怎样才能以有效的方式仅使用 Excel Javascript API 执行上述操作?

以下是我考虑过的一些解决方案(一些我已经尝试过):

  1. 删除Sheet1。将Sheet3 重命名为Sheet1。这不起作用,因为它会导致 Sheet2 中对 Sheet1 的引用变得未定义。
  2. 在删除和重命名之前,在Sheet2 中查找Sheet1 的所有实例并将其替换为Sheet3。我担心这将不够有效,因为它必须查看所有单元格。
  3. 暂停计算,然后删除,然后重命名,然后恢复计算。这不起作用,因为暂停计算显然不会暂停这种引用更新,因此Sheet2Sheet1 中的引用仍然中断。
  4. 将所有单元格数据从Sheet3 复制到Sheet1。但是,因为我们还需要复制格式,据我所知,这不能批量完成。我认为我们不能足够有效地做到这一点,因为可能存在任意数量的数据。

任何反馈将不胜感激。如果没有解决方案,我担心它可能会在我们的插件上花费一个月左右的时间:(

【问题讨论】:

  • 如果您能在回答问题之前分享更多关于您的场景的信息,那就太好了。你认为你可以从 sheet3 复制内容并覆盖 sheet1 中的内容吗?
  • 感谢您的反馈。我在场景中添加了更多细节,并扩展了解决方案以及复制数据似乎不起作用的原因。

标签: javascript excel office365 office-js excel-addins


【解决方案1】:

您可以将range.copyFrom API 用于选项 4,使用此 API,您可以选择复制格式、公式、值。默认情况下它会全部复制。

  await Excel.run(async (context) => {
    const sheet = context.workbook.worksheets.getItem("Sheet3");
    const sheet2 = context.workbook.worksheets.getItem("Sheet1");

    // copy a range from another sheet
    sheet2.getRange("A1").copyFrom("Sheet3!A1:E1");

    await context.sync();
  });

文档可以在https://docs.microsoft.com/en-us/javascript/api/excel/excel.range?view=excel-js-preview#copyfrom-sourcerange--copytype--skipblanks--transpose-找到

【讨论】:

    猜你喜欢
    • 2011-05-03
    • 2010-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-25
    • 1970-01-01
    • 2016-02-05
    相关资源
    最近更新 更多