【问题标题】:Adding formula to cell Exception from HRESULT: 0x800A03EC从 HRESULT 向单元格异常添加公式:0x800A03EC
【发布时间】:2013-12-23 17:09:42
【问题描述】:

我正在尝试向单元格添加公式,但出现错误 HRESULT 异常:0x800A03EC 有很多类似问题的帖子,但是没有一个可以帮助我,而且我没有做任何花哨的公式是我做错了什么?

 Thread.CurrentThread.CurrentCulture =
 new System.Globalization.CultureInfo("en-US");
 workbook = application.Workbooks.Open(Helper.GetLocalInstalationFolder() +
             @"\IMC.xltx", 0, false, 5, "", "", true, XlPlatform.xlWindows, "\t", false,
                                                       false, 0, true, 1, 0);
 worksheet = workbook.Worksheets["Report"];
 var rowValue = 0;
 for (int i = 2; i <= LastRow; i++)
 {
     rowValue = i - 1;
     for (int j = 1; j <= 37; j++)
     {
          worksheet.Cells[i, j] = MyArray[rowValue, j];

     }
     // I tried all the following all give the same exception:
     worksheet.Range[i, 38].Formula = "=3+4"; 
     worksheet.get_Range("R" + i + "C38").FormulaR1C1 = "=3+4";
     worksheet.Range[i, 38].FormulaR1C1 = "=3+4";
     worksheet.get_Range("R" + i + "C38").Formula = "=3+4";
   }

【问题讨论】:

    标签: c# excel vsto


    【解决方案1】:

    这是一个糟糕的例外,除了你用它无法跟上的速度处理请求来猛烈抨击 Excel 之外,没有任何意义。您的程序本质上看起来像一个超级活跃的用户,它以每微秒一个的速度输入公式。

    解决方法是通过故意休眠或强制 Excel 减少工作来减慢速度。在这种情况下,您很可能会通过分配 Application.Calculation 属性来修复它。在开始将公式放入单元格之前将其设置为手动。完成后返回自动。

    更多好的建议在this blog post

    【讨论】:

      【解决方案2】:

      【讨论】:

      • 避免仅链接的答案。不过链接很好。
      【解决方案3】:

      在我的情况下,我在 HYPERLINK 公式参数中缺少双引号,即公式本身是错误的。我尝试了一个有效的公式,例如 ..Cell(x,y).Formula = "=MIN(2)" 并且它有效,因此就是这样..

      【讨论】:

        【解决方案4】:

        Hans Passant 是正确的,但可能需要其他设置才能使 Excel 能够处理代码操作的节奏。

        这里有一组很好的选项可以让 Excel 更快地处理请求:Turn Automatic Calculations Off/On

        对我有用的总结:

            using Excel = Microsoft.Office.Interop.Excel;
        
            public class ExcelAppWrapper : IDisposable
            {
                private Excel.Application _application;
        
                public ExcelAppWrapper()
                {
                    _application = new Excel.Application { Visible = true };
                    _application.Workbooks.Add(Missing.Value);
                    //there must be a workbook before setting Application.Calculation
                    ConfigureApplication(false);
                }
        
                public void Dispose()
                {
                    ConfigureApplication(true);
                }
        
                private void ConfigureApplication(bool enable)
                {
                    _application.Calculation = enable ? XlCalculation.xlCalculationAutomatic : XlCalculation.xlCalculationManual;
                    _application.EnableEvents = enable;
                    _application.ScreenUpdating = enable;
                    _application.DisplayStatusBar = enable;
                }
            }
        
        

        【讨论】:

          猜你喜欢
          • 2011-03-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多