如何解决具有多个区域的Excel Get_Range
| 我正在尝试从Excel获得一个范围,该范围指定了多个区域,实际上我已经... int StartColumn int EndColumn int [] ColumnsToSkip 当您将这些结合使用时,可能会产生具有不连续区域的范围。不幸的是,我不能完全弄清楚获得此请求的电话... MSDN不是很有用... 工作表;sheet.get_Range( what goes in here??? );
有人提供帮助吗?干杯。
解决方法
一个非常简单的解决方案是以逗号分隔的形式指定不同的区域:
sheet.get_Range( \"A1:B1,E1:G1\");
对于编程范围组合,还存在ExcelApplication对象的Union
和Intersection
方法。由于许多可选参数,这些在C#中使用时有点笨拙。看这里
http://codeidol.com/csharp/c-sharp-in-office/Working-with-Excel-Objects/Working-with-the-Range-Object/
举些例子。
编辑:一些其他提示:
对于您的情况,首先应在\“ ColumnsToKeep \”中转换\“ ColumnsToSkip \”,因为这是任何类型的单元格合并所需要的。这是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);
}
, 使用非连续范围的另一种方法是使用命名范围在Excel中将它们组合在一起,例如:
=CHOOSE({1;2;3},RANGE1,RANGE2,RANGE3)
这将产生一个数组,该数组由相互重叠的范围“ stacked”组成。将此公式分配给一个命名范围,您就可以像其他任何“ 8”对象一样以编程方式使用它。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。