PowerShell中使用变量访问Excel表格区域内单元格的问题
PowerShell中使用变量访问Excel表格区域内单元格的问题
我来帮你解决这个问题!你遇到的核心问题其实不是逗号的锅,而是参数传递方式加上代码结构的小失误导致的。
先给你理清关键逻辑:Excel的Cells()方法在PowerShell里调用时,需要传入两个独立的整数参数(行索引和列索引),绝对不能把两个值拼成带逗号的字符串传进去——你之前试的"$x, $y"这种方式,本质是把两个参数合并成了一个字符串参数,完全不符合方法的要求,所以肯定会失败。
再看你的代码,其实你写的$srcWorksheet.Range( $table ).Cells( $x, $y ).text(也就是你的test02)本身是正确的写法,但你的代码缩进/括号位置错了,导致这行之后的逻辑都跑到内层foreach循环外面去了,变量$x和$y的作用域不对,所以你没得到预期结果。
下面是修正后的完整代码:
$myData.Add( "`n" ) foreach( $table in $tablesData.keys ) { foreach( $index in $tablesData.$table.keys ) { # 获取行、列索引值 $x = $tablesData.$table.$index.x $y = $tablesData.$table.$index.y # 正确调用:给Cells()传递两个独立的整数参数 $cellContent = $srcWorksheet.Range($table).Cells($x, $y).Text # 将单元格文本添加到集合中 $myData.Add($cellContent) } } $myData | Out-File -FilePath $dstFile
额外补充几个关键点:
- 为什么你之前用
Cells($x, 1)或Cells(2, $y)能成功?因为这两种方式都是传递了两个独立参数(一个变量+一个固定值),符合Cells()的参数要求,所以能正常工作。 - 要注意
Range($table).Cells()里的行/列索引是相对于当前表格区域的,不是整个工作表的行号列号。比如如果你的表格从工作表第3行开始,那Cells(1,1)对应的就是工作表的第3行第1列,这点如果表格不是从A1开始的话要留意。
备注:内容来源于stack exchange,提问作者Slawowid
相关产品推荐
相关产品推荐

