Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 让我的注意力集中在字符串操作上_C#_Excel_Excel Dna - Fatal编程技术网

C# 让我的注意力集中在字符串操作上

C# 让我的注意力集中在字符串操作上,c#,excel,excel-dna,C#,Excel,Excel Dna,我已经做了一段时间ExcelDNA/C#add-in,现在我已经到了最后一个关口 我可以获得一个选择地址,我首先需要检查该选择中的行是否仅为两行,例如,在Excel中,它们将是8+9、两行相邻或任意两个连续数字 然后我需要检查是否有两个以上的列,等等C到J(字母表中有两个以上的空格) 这一切都需要从这样的字符串完成:Sheet1$加元8:$J$9 我想做的是,将一个选择像这样分割,它返回上面的字符串,分成两个字符串,在本例中,期望的最终结果是 第1张$C$8:$J$8+张1$C$9:$J$9在两

我已经做了一段时间ExcelDNA/C#add-in,现在我已经到了最后一个关口

我可以获得一个选择地址,我首先需要检查该选择中的行是否仅为两行,例如,在Excel中,它们将是8+9、两行相邻或任意两个连续数字

然后我需要检查是否有两个以上的列,等等C到J(字母表中有两个以上的空格)

这一切都需要从这样的字符串完成:Sheet1$加元8:$J$9

我想做的是,将一个选择像这样分割,它返回上面的字符串,分成两个字符串,在本例中,期望的最终结果是


第1张$C$8:$J$8+张1$C$9:$J$9在两个不同的字符串中,也许我需要更多的咖啡,但如果有人有一种比我计划的更少的无用方式,我将永远欠你的债

您是否有对
范围
对象的引用?如果是这样,
range.Rows.Count==2
将告诉您是否有两行,
range.Columns.Count>2
将告诉您是否有两列以上

然后,要独立获取两行的地址,可以执行以下操作:-

var address1 = range.Rows[1].Address(external:true);
var address2 = range.Rows[2].Address(external:true);

我假定这是从CommandBar或Ribbon事件处理程序调用的宏运行的。 在这种情况下,您最好从一开始就使用COM自动化接口,而不要使用C API(XlCall和ExcelReference)

要获得当前选择,您只需说

Application xlApp = (Application)ExcelDnaUtil.Application;
Range selectedRange = xlApp.Selection as Range;
if (selectedRange != null)
{ .... do you further checking here ...}

如果您正在生成用户定义的函数,或者您想要高性能的数据传输,那么C API的内容就更为重要。但对于常规宏,COM API更容易。

不幸的是,我没有对范围对象的引用,我使用以下命令获取选择://在Excel Excel上获取对当前选定范围的引用ExcelReference selection=(ExcelReference)XlCall.Excel(XlCall.xlfSelection);strSelectAddress=(字符串)XlCall.Excel(XlCall.xlfReftext,selection,true);此外,我并没有尝试对单元格求和,我只是尝试将所选内容的两行拆分为单独的字符串,以供不同的使用。我将相应地编辑我的答案。关于范围对象-我现在手头没有ExcelDNA,但根据地址是否不可能构造范围对象?我可以这样做,但这段特殊代码是精心编制的“如果”语句的一部分,我需要一种查看原始字符串的方法,并能够识别选择的格式,你的回答解决了我的后半个问题!因此,我非常感激,我认为,一般来说,如果您尽早将字符串地址转换为一个范围对象,并且从那时起,专门处理范围对象,事情会容易得多。您根本不必进行任何类型的字符串地址解析/操作。