Excel получить диапазон с несколькими областями
Я пытаюсь получить диапазон из Excel, в котором указано несколько областей, по существу, у меня есть...
int StartColumn
int EndColumn
инт[] ColumnsToSkip
когда вы объединяете их, можно создать диапазон с несмежными областями. К сожалению, я не могу понять, как это сделать... MSDN не очень полезен...
оцинкованный лист;
sheet.get_Range( what goes in here??? );
кто-нибудь помочь? Овации.
2 ответов
очень простое решение-указать различные области в форме, разделенной запятыми:
sheet.get_Range( "A1:B1,E1:G1");
для программных комбинаций диапазонов также есть Union
и Intersection
методы объекта ExcelApplication. Они немного неуклюжи в использовании в C# из-за многих дополнительных параметров. Смотрите здесь
для образцы.
EDIT: некоторые дополнительные подсказки:
в вашем случае вы сначала должны преобразовать "ColumnsToSkip" в "ColumnsToKeep", так как это то, что вам нужно для любого вида объединения клеток. Вот решение Linq:
int[] ColumnsToKeep = Enumerable.Range(StartColumn, EndColumn -StartColumn + 1)
.Except(ColumnsToSkip)
.ToArray();
затем, вы можете создать что-то вроде этого примера:
Excel.Range totalRange = null;
foreach(int col in ColumnsToKeep)
{
totalRange = Union(excelApp,totalRange,(Excel.Range)sh.Cells[row, col]);
}
где "Союз" определяется, например, так:
static Excel.Range Union(Excel.Application app, Excel.Range r1, Excel.Range r2)
{
if (r1 == null && r2 == null)
return null;
if (r1 == null)
return r2;
if (r2 == null)
return r1;
return app.Union(r1, r2,
null, null, null, null, null, null,
null, null, null, null, null, null,
null, null, null, null, null, null,
null, null, null, null, null, null,
null, null, null, null);
}
другой способ работы с несмежными диапазонами - просто объединить их вместе в Excel, используя именованный диапазон, например:
=CHOOSE({1;2;3},RANGE1,RANGE2,RANGE3)
это создаст массив, состоящий из диапазонов, "уложенных" друг на друга. Назначьте эту формулу именованному диапазону, и вы можете использовать ее программно, как и любой другой