【问题标题】:Adding a formula to Excel worksheet results in HRESULT: 0x800A03EC将公式添加到 Excel 工作表会导致 HRESULT:0x800A03EC
【发布时间】:2017-01-30 14:27:03
【问题描述】:

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

在 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、... 列中的每个使用的单元格添加一个公式 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)";

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

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

HRESULT: 0x800A03EC

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

我错过了什么?

【问题讨论】:

  • 是 numberOfRows > 65536?
  • @cyboashu 不,只有 146 个。

标签: c# excel excel-formula


【解决方案1】:

我发现了问题。我不得不将.Formula 更改为.FormulaLocal

MSDN description for .FormulaLocal:

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

MSDN description for .Formula:

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

【讨论】:

  • 感谢您的回答,唯一一位处理“双引号公式 C# to excel”这一问题的人。你拯救了我的一天。
猜你喜欢
  • 1970-01-01
  • 2013-06-01
  • 2013-05-05
  • 1970-01-01
  • 2013-12-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多