具有多个区域的Excel Get_Range

我试图从Excel,其中有多个领域指定的范围,本质上我有…

int StartColumn
int EndColumn
int [] ColumnsToSkip

当你把这些结合在一起时,就有可能产生一个非连续区域的范围。 不幸的是,我不能完全弄清楚这个呼叫… MSDN不是很有用…

工作表单;

sheet.get_Range( what goes in here??? ); 

任何人提供任何帮助? 干杯。

一个非常简单的解决scheme是以逗号分隔的forms指定不同的区域:

 sheet.get_Range( "A1:B1,E1:G1"); 

对于编程范围组合,还有ExcelApplication对象的UnionIntersection方法。 这些在C#中使用有点笨拙,因为有许多可选的参数。 看这里

http://codeidol.com/csharp/c-sharp-in-office/Working-with-Excel-Objects/Working-with-the-Range-Object/

举些例子。

编辑:一些额外的提示:

在你的情况,你首先应该转换“ColumnsToSkip”在“ColumnsToKeep”,因为这是你将需要的任何types的单元格联合。 这是一个Linq解决scheme:

 int[] ColumnsToKeep = Enumerable.Range(StartColumn, EndColumn -StartColumn + 1) .Except(ColumnsToSkip) .ToArray(); 

然后,你可以按照这个例子创build一些东西:

  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)

这将产生一个由“堆叠”在另一个顶部的范围组成的数组。 将这个公式分配给一个命名的范围,你可以像编程的任何其他Range对象一样使用它。