gpt4 book ai didi

c# - 非连续范围的 Excel get_Range 错误

转载 作者:太空宇宙 更新时间:2023-11-03 15:33:37 25 4
gpt4 key购买 nike

我有以下一段 VSTO 代码,它的行为很奇怪。

string s = "E6:N6,E8:N12,E14:N16,E18:N20,E23:N26,E28:N31,E33:N33,E35:N35,E37:N38,E40:N41,E43:N43,E45:N45,E47:N49,E52:N52,E55:N55,E58:N62,E64:N68,E70:N70,E72:N73,E76:N78,E80:N81,E83:N83,E86:N87";

Excel.Range r = worksheet.get_Range[s];

当我检查 r.Address 现在是:

"E6:N6,E8:N12,E14:N16,E18:N20,E23:N26,E28:N31,E33:N33,E35:N35,E37:N38,E40:N41,E43:N43,E45:N45,E47:N49,E52:N52,E55:N55,E58:N62,E64:N68,E70:N70,E72:N73,E76:N78,E80:N81"

请注意最后两个区域丢失了!

get_Range 可以处理的区域数量有限制吗?

最佳答案

是的,在可与 Excel 范围函数一起使用的字符串大小方面似乎确实存在限制。

例如sheet.Range() 将接受最多 255 个字符的范围,之后将引发错误。

评估现有范围的地址时也是如此。

例如range.Address 将返回长度最多为 255 个字符的字符串,即使该范围包含更多值也是如此。

在选择大量不连续的单元格时,这通常是一个问题。

Jeeped 建议的解决方案只能让您到此为止,因为它会返回不带 $ 的单元格地址,为地址定义留下更多可用字符,但最终会达到字符限制。

我想到的解决方案是使用 Range 类的 Areas 属性并循环遍历这些以构造最终地址。

由于上述字符限制,此地址无法直接与 sheet.Range 一起使用,因此必须将其合并在一起才能转换回可用范围。

请参阅以下有关如何在 C# 中执行此操作的方法:

    public static string GetRangeAddress( Range range )
{
string rangeAddress = string.Empty;

int areaCount = 1;
foreach (Range inputArea in range.Areas)
{
rangeAddress += inputArea.Address[0, 0];

if (areaCount < range.Areas.Count)
rangeAddress += ",";

areaCount++;
}

return rangeAddress;
}

public static Range GetRangeFromAddress(Excel.Application app, Worksheet sheet, string address)
{
Range IR = null;

string[] rangeAreas = address.Split(',');

foreach (string area in rangeAreas)
{
if (IR != null)
IR = app.Union(IR, sheet.Range[area]);
else
IR = sheet.Range[area];
}

return IR;
}

关于c# - 非连续范围的 Excel get_Range 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32716700/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com