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