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

时间:2017-01-30 14:27:03

标签: 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];

到目前为止一切顺利。现在我遇到了我的问题。我需要为列B2中的每个已使用单元格的单元格B3A,...添加公式。困难在于我希望使用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)";

numberOfRowsBMyOtherWorksheet列中的行数(它在调试器中返回正确的数字,因此不是问题)。

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

  

HRESULT:0x800A03EC

我尝试将.Range["B" + counter]更改为.Cells[counter, 2],甚至尝试使用.FormulaR1C1代替.Formula,但我也遇到了相同的例外情况。

我错过了什么?

1 个答案:

答案 0 :(得分:7)

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

MSDN description for .FormulaLocal

  

使用用户语言的A1样式引用返回或设置对象的公式。读/写Variant。

MSDN description for .Formula

  

返回或设置一个Variant值,该值表示A1风格表示法和宏语言中的对象公式。