首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >C#在将Range .Formula设置为Range .Value2时出现Microsoft.Office.Interop.Excel错误

C#在将Range .Formula设置为Range .Value2时出现Microsoft.Office.Interop.Excel错误
EN

Stack Overflow用户
提问于 2019-12-20 05:40:51
回答 1查看 406关注 0票数 0

我将C#代码写入到Excel中。下面的代码可以工作:

代码语言:javascript
运行
复制
var probForExcel = new string[profileSize, 1];

Range range3 = worksheet.Range["C5", "C" + (startRow + profileSize - 1)];

range3.Value = probForExcel;

range3.NumberFormat = "0.00000000000E+0";

range3.Formula = range3.Value2; //NEEDED FOR ACTUAL FORMULAS otherwise writes in xls as string

现在我尝试使用Type Range列表:

代码语言:javascript
运行
复制
 var formulaForExcel = new List<string[,]>();
            var formularange1 = new List<Range>();

            for (var i = 0; i < profileSize; i++)
            {
                var count = formulas[i].Count();
                formularange1.Add(worksheet.Range[worksheet.Cells[rowTracker, 2], worksheet.Cells[rowTracker, count]]);
                formulaForExcel.Add(new string[1, count]);
                var j = 0;
                foreach (var formula in formulas[i])
                {
                    formulaForExcel[i][0, j] = formula;
                    j++;
                }

                formularange1[i].Value = formulaForExcel[i];
                formularange1[i].Formula = formularange1[i].Value2;//CRASHES HERE
                rowTracker++;
            }

该程序运行时不需要以下代码行:

代码语言:javascript
运行
复制
formularange1[i].Formula = formularange1[i].Value2;//CRASHES HERE

System.Runtime.InteropServices.COMException:‘来自HRESULT的异常: 0x800A03EC’

但它将公式打印为字符串,而不是一行代码,我必须进入每个单元格并按enter键才能将其计算为公式。为什么语法可以工作,没有编译错误。它在代码的第一部分运行,在那里它不在列表中。我把Range放在一个列表中,它就崩溃了。不确定是.Formula还是.Value2导致崩溃。

如果我这样做,我会得到同样的错误

代码语言:javascript
运行
复制
Range temp = formularange1[i];

temp.Formula = temp.Value2; //CRASHES HERE
EN

回答 1

Stack Overflow用户

发布于 2019-12-20 07:31:36

我找到了另一篇关于Excel的文章,帮助我找到了我的bug。因为我的excel公式是自动构建的,并且非常大,所以我没有意识到我的一些公式以+号结尾。因为我在添加内容并检查长度,所以有些以+结尾。所以我做了一个查找并将"=“替换为"=”,这将导致所有公式求值。除了末尾有+的那些,excel抛出了一个错误。一旦我找到了这个并更新了我的公式生成器,现在它就可以工作了:

代码语言:javascript
运行
复制
        for (var i = 0; i < profileSize; i++)
        {
            var count = formulas[i].Count();

            sumrangeForExcel[i, 0] = "=sum(C" + rowTracker + ":c"     + rowTracker + ")";

            formularange1.Add(worksheet.Range[worksheet.Cells[rowTracker, 3], worksheet.Cells[rowTracker,3+ count-1]]);
            formulaForExcel.Add(new string[1, count]);
            var j = 0;
            foreach (var formula in formulas[i])
            {
                formulaForExcel[i][0, j] = formula;
                //formularange1[i][0, j].Formula = formularange1[i][0, j].Value2; Erased my formulas
                j++;
            }

            formularange1[i].Value = formulaForExcel[i];
            formularange1[i].Formula = formularange1[i].Value2;//NO CRASHING

            formularange1[i].NumberFormat = "###,###,##0";
            rowTracker++;
        }

因此,使用互操作并不容易,并且没有最好的错误检查。我所犯的错误与我的实际问题无关。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59417206

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档