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

我在网上search了一个合适的解决scheme,但找不到有用的东西…

在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]; 

到现在为止还挺好。 现在我遇到了我的问题。 我需要为列A每个使用的单元格的单元格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)"; 

numberOfRowsMyOtherWorksheet中列B中的行数(它在debugging器中返回正确的数字,所以这不是问题)。

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

HRESULT:0x800A03EC

我试图改变.Range["B" + counter] .Cells[counter, 2]甚至尝试使用.FormulaR1C1而不是.Formula但我有同样的例外。

我错过了什么?

我发现了这个问题。 我不得不改变。 .Formula.FormulaLocal

.FormulaLocal MSDN描述 :

返回或设置对象的公式,使用用户的语言中的A1样式引用。 读取/写入变式。

.Formula MSDN描述 :

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