c# - 将公式添加到 Excel 工作表会导致 HRESULT : 0x800A03EC

标签 c# excel excel-formula

我已经在网上搜索了合适的解决方案,但找不到任何有用的...

在 Excel 工作表中,我需要从数据库表中分配一些值,然后在每个值旁边添加一个公式(取决于同一工作簿中的另一个 Excel 工作表)。添加数据完美无缺,但添加公式会导致错误。

我正在获取数据并将其添加到工作表中,如下所示:

using (SqlConnection conn = new SqlConnection("MyConnectionString"))
using (SqlCommand comm = new SqlCommand("SELECT DISTINCT [MyField] FROM [MyTable]", conn)
{
    conn.Open();
    using (SqlDataReader reader = comm.ExecuteReader())
    {
        myStringList.Add("MyField");
        if (reader.HasRows)
            while (reader.Read())
                myStringList.Add(reader.GetString(reader.GetOrdinal("MyField")));
    }
}

workbook.Worksheets.Add(After: workbook.Worksheets[workbook.Sheets.Count]);

for (int counter = 1; counter <= myStringList.Count(); counter++)
    ((Excel.Worksheet)workbook.ActiveSheet).Cells[counter, 1] = myStringList[counter-1];

到目前为止一切顺利。现在我开始解决我的问题了。我需要为 B2B3 列中的每个使用的单元格添加公式 ...困难在于我想用 for 循环来完成它,因为公式取决于 A 列。

for (int counter = 2; counter <= myStringList.Count(); counter++)
    ((Excel.Worksheet)workbook.ActiveSheet).Range["B" + counter].Formula
        = $"=VLOOKUP(A{counter};MyOtherWorksheet!$B$2:$B${numberOfRows};1;FALSE)";

numberOfRowsMyOtherWorksheetB 列的行数(它在调试器中返回正确的数字,所以这不是问题所在) .

但是当我像这样分配公式时,我得到了以下没有任何有用消息的异常:

HRESULT: 0x800A03EC

我尝试将 .Range["B"+ counter] 更改为 .Cells[counter, 2] 甚至尝试使用 .FormulaR1C1而不是 .Formula 但我遇到了同样的异常。

我错过了什么?

最佳答案

我发现了问题。我必须将 .Formula 更改为 .FormulaLocal

MSDN description for .FormulaLocal :

Returns or sets the formula for the object, using A1-style references in the language of the user. Read/write Variant.

MSDN description for .Formula :

Returns or sets a Variant value that represents the object's formula in A1-style notation and in the macro language.

关于c# - 将公式添加到 Excel 工作表会导致 HRESULT : 0x800A03EC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41938296/

相关文章:

mysql - 将复杂数据从csv导入到mysql表

arrays - VBA展平分层数组

excel - 在具有多种条件的excel工作表中格式化单元格

vba - 从单行到列表(循环)

excel - 引用在公式中使用的工作表和单元格

excel - excel中如何按组统计数据

c# - 如何强调功能区按钮标签的字符?

c# - 静态方法不能实现接口(interface)方法,为什么?

c# - 部署到 prod 后没有 MediaTypeFormatter 可供读取

c# - 将所有文件从源文件夹复制到目标文件夹重命名所有文件,同时在 asp.net c# 中处理