我在网上搜索了合适的解决方案,但找不到任何有用的东西......
在 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
, B3
, ...对于列中每个使用的单元格A
。困难在于我想用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)";
numberOfRows
是列中的行数B
in MyOtherWorksheet
(它在调试器中返回正确的数字,所以这不是问题)。
但是,当我像这样分配公式时,我收到以下异常,但没有任何有用的消息:
H结果:0x800A03EC
我尝试改变.Range["B" + counter]
to .Cells[counter, 2]
甚至尝试使用.FormulaR1C1
代替.Formula
但我也遇到了同样的例外。
我缺少什么?