Ian*_*Ian 8 c# excel excel-interop
我正在尝试从Excel中获取一个范围,其中指定了多个区域,基本上我已经...
int StartColumn
int EndColumn
int [] ColumnsToSkip
组合这些时,可以生成具有非连续区域的范围.不幸的是,我无法弄清楚要得到这个... MSDN不是很有用......
工作表单;
sheet.get_Range( what goes in here??? );
Run Code Online (Sandbox Code Playgroud)
有人提供任何帮助吗?干杯.
Doc*_*own 10
一个非常简单的解决方案是以逗号分隔的形式指定不同的区域:
sheet.get_Range( "A1:B1,E1:G1");
Run Code Online (Sandbox Code Playgroud)
对于程序化范围组合,还有ExcelApplication对象的Union
和Intersection
方法.由于许多可选参数,在C#中使用它们有点笨拙.看这里
举些例子.
编辑:一些额外的提示:
在您的情况下,您首先应该转换"ColumnsToKeep"中的"ColumnsToSkip",因为这是您需要的任何类型的细胞联合.这是一个Linq解决方案:
int[] ColumnsToKeep = Enumerable.Range(StartColumn, EndColumn -StartColumn + 1)
.Except(ColumnsToSkip)
.ToArray();
Run Code Online (Sandbox Code Playgroud)
然后,您可以按照此示例的行创建一些内容:
Excel.Range totalRange = null;
foreach(int col in ColumnsToKeep)
{
totalRange = Union(excelApp,totalRange,(Excel.Range)sh.Cells[row, col]);
}
Run Code Online (Sandbox Code Playgroud)
其中"Union"的定义,例如,像这样:
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);
}
Run Code Online (Sandbox Code Playgroud)