Очень простое решение — указать разные области через запятую:
sheet.get_Range( "A1:B1,E1:G1");
Для программных комбинаций диапазонов существуют также методы Union
и Intersection
объекта ExcelApplication. Их немного неуклюже использовать в C# из-за множества необязательных параметров. Посмотреть здесь
http://codeidol.com/csharp/c-sharp-in-office/Working-with-Excel-Objects/Working-with-the-Range-Object/
Например.
РЕДАКТИРОВАТЬ: некоторые дополнительные подсказки:
В вашем случае вы сначала должны преобразовать «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);
}
person
Doc Brown
schedule
27.05.2011