使用 C# 从不连续地址字符串创建 Excel 范围

本文关键字:创建 Excel 范围 字符串 地址 不连续 使用 | 更新日期: 2023-09-27 18:36:28

我正在开发一个 Excel 插件!我想在不使用 Xlapp.Union(递归方式)的情况下创建一个单元格(范围)的联合,只需在一个字符串中给出一对 (x,y) 个单元格!

尝试使用XLapp.Union,但它真的很慢,然后我正在寻找一种新方法,只需将cellAaddress作为字符串即可完成同样的事情。

我正在寻找一个函数,它可以接受参数中的字符串:像这样的东西("A1,B3,C5...")并重新运行一个范围!

我试过了:范围 RE = ExcelWorkbook.ActiveSheet.get_Range(RgEvenString, Type.Missing);其中 RgEvenString 是一个字符串,例如:"A1,B3,C5..."抛出异常!!

谁能帮忙!

使用 C# 从不连续地址字符串创建 Excel 范围

http://social.msdn.microsoft.com/Forums/en-US/abf5a953-caa2-44c1-9723-fb7b1d99f2fc/how-to-reference-noncontiguous-selected-rows-in-excel?forum=isvvba

查看此链接,了解在Excel中引用不连续单元格的方法。该链接位于 VBA 中,但您应该能够将其应用于 C#。考虑通过解析包含单元格地址的字符串来创建自己的"选择"来模仿该帖子中的"选择"。

顺便问一下,联盟有多慢?您能否发布一个示例,说明您在与其他代码的上下文中使用 Union 函数的方式?也许还有其他可以优化的东西。

public static Range OldUnionRange(List<System.Drawing.Point> list,Range range, Boolean Even){
Range RgEven = null;
Boolean RgEvenBool = false;
Range RgOdd = null;
Boolean RgOddBool = false;
for (int j = 0; j < list.Count; j++){
System.Drawing.Point p = list[j];
int x = p.X;
int y = p.Y;
if (x % 2 == 0 && Even)
{Range rng = range.Cells[x + 1, y + 1];
if (!RgEvenBool){
RgEven = range.Cells[x + 1, y + 1];
RgEvenBool = true;
}
RgEven = Shuttle_add_in_Loader.XlApp.Union(RgEven, rng);
}
else if (x % 2 != 0 && !Even)
{Range rng = range.Cells[x + 1, y + 1];
if (!RgOddBool)
{
RgOdd = range.Cells[x + 1, y + 1];
RgOddBool = true;
}
RgOdd = Shuttle_add_in_Loader.XlApp.Union(RgOdd, rng);
}
}
if (Even)
{
return RgEven;
}
else
{return RgOdd;}
}