我有一个大型VBA脚本文件,它引用了Excel工作表的单元格。问题是我水平放置的应用程序属性的数量变得大于256,因此我必须更改存储属性的方向。
因此,我不想通过.Cells(行,列).Value访问值,而是通过交换上一次调用中的行和列来访问所有内容。
我可以从所有代码中取出并手动更改所有内容,但我更喜欢使用正则表达式。我找到了这个以找到我需要的所有参考文献:
Worksheets\(\"xxx\.DAT\"\)\.Cells\([\w +-]{1,15}, [\w +-]{1,15}\)
结果看起来像这样工作表(“xxx.DAT”)。单元格(SystemNr + 1,21 + Row1)
我想将行与调用 Cells 属性的列交换,因此最终结果应该看起来像工作表(“xxx.DAT”)。单元格(21 + Row1,SystemNr + 1)
我制作了一个小型.NET应用程序并使用下面的代码来获取所有匹配项,但是如何将这些行与匹配项中的列交换?
string input = tbContent.Text;
foreach (Match match in Regex.Matches(input, tbRegex.Text, RegexOptions.IgnorePatternWhitespace))
{
tbResult.AppendText(match + Environment.NewLine);
}
现在,对于每个匹配,我想获得行索引和列索引之一的引用,以便我可以交换它们并替换原始文本。
谢谢, 阿德里安。
答案 0 :(得分:2)
我不确定你如何获取数据,但这里有一个关于如何交换两件事的简短c#示例:
String s = "A:B";
Regex r = new Regex(@"(\w):(\w)");
Console.WriteLine(r.Replace(s, "$2:$1"));
如果创建捕获组,则通过将子模式放入括号中,可以访问替换字符串中这些子模式的匹配项。第一组(由第一个开始圆括号定义)由$1
访问,第二组由$2
访问。因此,在这个基本示例中,只需替换为第二组,第二组替换为第一组,这样就改变了子匹配的顺序。