从HRESULT:0x800A03EC向单元格Exception添加公式

时间:2013-12-06 11:09:55

标签: c# excel vsto

我正在尝试向单元格添加公式但是我收到了错误 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";
   }

4 个答案:

答案 0 :(得分:1)

也许这会带你进入正确的方向 - &gt;

[链接](http://www.codeproject.com/Questions/470089/Exception-from-HRESULT-0x800A03EC-Error

答案 1 :(得分:1)

这是一个蹩脚的例外,并不意味着只有你以一种无法跟上的速度处理Excel处理请求。您的程序基本上看起来像一个超活跃用户,以每微秒一个的速率输入公式。

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

this blog post中的更多好建议。

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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;
        }
    }