2015-05-20 4 views
1

Согласно the documentation из Workbook.Range, вы можете указать запятые в первом аргументе для обеспечения объединения.Excel interop не принимает диапазоны с запятыми

Однако следующий код бросает 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, но я бы очень не хотел его использовать, потому что нет простого способа предоставить переменное количество аргументов.

+1

ли вы проверить, если его проблемы с вашей местности? Точнее, ваш разделитель списков. Перейдите в свои региональные настройки на панели управления и проверьте. Затем запустите код с разделителем заданного списка. Btw. Разве «А1: А2» не сделал бы трюк? –

+0

@ AnalystCave.com Спасибо, вот и все. Глупый я. – dtech

+0

@ AnalystCave.com В этом случае 'A1: A2' действительно будет идентичным, но в случае, например, 'A1, E8, F100', это не так. И именно поэтому мне это нужно :) – dtech

ответ

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(); 
} 
Смежные вопросы