【问题标题】:How to preserve a formula's reference to a worksheet when the worksheet is deleted and replaced using C#?使用 C# 删除和替换工作表时,如何保留公式对工作表的引用?
【发布时间】:2015-06-02 02:06:24
【问题描述】:

如何在更换工作表后保持公式正常工作? 我是说 How to preserve a formula's reference to a worksheet when the worksheet is deleted and replaced? 但在 C# 中

using Excel = Microsoft.Office.Interop.Excel;

 Excel.Application excelApp = new Excel.ApplicationClass();
 Excel.Workbook excelWorkbook = excelApp.Workbooks.Open(connection.DataSource, 0, false, 5, "", "", false, Excel.XlPlatform.xlWindows, "", true, false, 0, true, false, false);
    foreach (Excel.Worksheet sh in excelWorkbook.Sheets)
    {
        if (sh.Name == SheetName || sh.Name == "_"+SheetName)
        {
            sh.Application.DisplayAlerts = false;
            sh.Delete();
        }
    }
    excelWorkbook.Save();
    excelWorkbook.Close(true, excelWorkbook.FullName, null);
    excelApp.Quit();

稍后我将调用同名的 SQL 命令“创建表”。所有公式都不起作用

【问题讨论】:

  • 您是否在删除发生后验证了相关公式的实际内容?您是否尝试过手动执行这些步骤来验证它们?
  • 我不确定你的意思。 fromulas的实际内容:=#ADR!B3+#ADR!C3 应该是=Sheet1!B3+Sheet1!C3

标签: c# excel excel-interop


【解决方案1】:

您需要做的是,在包含公式的工作表中,首先将它们从公式中转换出来(当您删除这些公式所引用的工作表时,这将阻止 Excel 在您的公式中创建错误)。

因此,例如,执行查找/替换并将“=”替换为例如“#”(或您确定未在该工作表中使用的任何其他字符或字符集)。 这将阻止公式创建错误的引用。

然后删除工作表,在新工作表中添加

然后将公式表中的值从“#”重新替换为“=”。

只要您的新工作表与旧工作表同名,就可以继续使用。

希望这会有所帮助。

【讨论】:

  • 这个想法还不错。我只是不确定替换所有单元格中的所有字符需要多长时间。如果不多,那就太好了。
  • 它实际上非常快 - 特别是如果您在替换之前关闭计算
猜你喜欢
  • 2011-05-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-31
  • 2020-10-16
  • 1970-01-01
  • 2017-07-12
  • 1970-01-01
相关资源
最近更新 更多