从C#在Excel中编写函数

时间:2017-05-29 17:13:16

标签: c# excel function

将C#中的函数写入Excel文件时遇到问题。

private void AddDemandFunctions()
{
    Func<string, string, string> function = (range, shift) =>
    {
        var builder = new StringBuilder();
        builder.Append("=LICZ.JEŻELI(");
        builder.Append(range);
        builder.Append("; \"");
        builder.Append(shift);
        builder.Append("\")");
        return builder.ToString();
    };

    int startRow = 5;
    int endRow = 20;
    string [] columns = { "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "AA", "AB", "AC", "AD", "AE", "AF", "AG", "AH", "AI", "AJ", "AK", "AL", "AM" };

    foreach (var column in columns)
    {
        string range = column + startRow + ":" + column + endRow;
        worksheet.Range[column + 21].Formula = function(range, "D"); // HERE I GET AN EXCEPTION RIGHT IN MY FACE :(
        worksheet.Range[column + 22].Formula = function(range, "E");
        worksheet.Range[column + 23].Formula = function(range, "L");
        worksheet.Range[column + 24].Formula = function(range, "N");
    }
}

例外是:

An unhandled exception of type 'System.Runtime.InteropServices.COMException' occurred in mscorlib.dll
Additional information: Wyjątek od HRESULT: 0x800A03EC.

我的Excel(2010)是波兰语版本。当我尝试删除“=”时,它可以工作,但它只写入文本。然后,如果我在excel文件中添加“=”,一切正常。函数字符串里面没有错误。

我也试过非抛光功能:COUNTIF我也有同样的例外......

有什么想法吗?

来自PL的问候:)

1 个答案:

答案 0 :(得分:1)

手动输入公式时,您必须检查单元格内部的内容。 Excel显示&#34; = COUNTIF(E5:E20;&#34; D&#34;)&#34;在公式栏中,但如果您阅读真实内容,您将看到&#34; = COUNTIF(E5:E20,&#34; D&#34;)&#34; &lt; - 请注意逗号而不是分号中的分号。

怎么做? 手动将公式写入单元格,打开VBA编辑器(Alt + F11或Ctrl + G)并输入立即窗口即? Worksheet.range(&#34; G1&#34;)。公式 - 取决于你当然输入公式的位置。

如果您根据显示的内容格式化您的公式,则不会在您的脸上抛出任何东西; - )

我想还有逗号和分号问题。

编辑: 抱歉,工作表是我的本地变量。你必须使用语法:

? ActiveWorkbook.ActiveSheet.range(&#34; G1&#34)。式