Excel 互操作不接受带逗号的范围
Excel interop doesn't accept ranges with commas
根据 Workbook.Range
的 the documentation,您可以在第一个参数中提供逗号以提供并集。
但是,以下代码在获取范围的行上抛出一个 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。我知道 Application.Union 但我非常不想使用它,因为没有简单的方法来提供可变数量的参数。
正如 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();
}
根据 Workbook.Range
的 the documentation,您可以在第一个参数中提供逗号以提供并集。
但是,以下代码在获取范围的行上抛出一个 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。我知道 Application.Union 但我非常不想使用它,因为没有简单的方法来提供可变数量的参数。
正如 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();
}