Excel互操作不接受带逗号的范围

时间:2015-05-20 13:39:29

标签: c# excel excel-interop

根据Workbook.Range的{​​{3}},您可以在第一个参数中提供逗号以提供联合。

但是,以下代码会在获取范围的行上引发COMException HRESULT 0x800A03EC

using Microsoft.Office.Interop.Excel;

public void RangeWithCommas() {
    var excel = new Application();
    var wb = excel.Workbooks.Add(xlWBATemplate.xlWBATWorksheet);
    var ws = (Worksheet)wb.Worksheets[1];

    var range = ws.Range["A1,A2"]; // this throws an exception
    Console.WriteLine(range.Address[false,false]);

    ws.Delete();
    wb.Close(false);
    excel.Quit();
}

我该怎么做或解决这个问题?

P.S。我知道the documentation但我更不愿意使用它,因为没有简单的方法来提供可变数量的参数。

1 个答案:

答案 0 :(得分:3)

正如 AnalystCave.com 所指出的,某些Excel COM方法是特定于语言环境的。访问COM方法时需要使用区域列表分隔符。

此代码应在所有语言环境中正常运行:

using Microsoft.Office.Interop.Excel;

public void RangeWithCommas() {
    var excel = new Application();
    var wb = excel.Workbooks.Add(xlWBATemplate.xlWBATWorksheet);
    var ws = (Worksheet)wb.Worksheets[1];

    var rangestring = String.Join((string)excel.International[XlApplicationInternational.xlListSeparator], new [] {"A1","A2"});

    var range = ws.Range[rangestring];
    Console.WriteLine(range.Address[false,false]);

    ws.Delete();
    wb.Close(false);
    excel.Quit();
}