我有过2000+的MS Excel 2010 .XLSX
电子表格的文件夹,我需要执行以下操作:批量重命名的Excel根据每个文件的B4单元格内容2010个文件
- 我需要打开每个单独的文件
- 复制单元格
B4
的内容(+每个文件对细胞B4
独特的内容),以及 - 细胞
B4
的内容附加到原文件名
我在下面使用Ansgar Wiechers的代码,它似乎在工作。
非常感谢。
努力学习和严格的死线是不是一个伟大的比赛:)
我有过2000+的MS Excel 2010 .XLSX
电子表格的文件夹,我需要执行以下操作:批量重命名的Excel根据每个文件的B4单元格内容2010个文件
B4
的内容(+每个文件对细胞B4
独特的内容),以及B4
的内容附加到原文件名我在下面使用Ansgar Wiechers的代码,它似乎在工作。
非常感谢。
努力学习和严格的死线是不是一个伟大的比赛:)
一件事,你要采取的代码被设计为在一个单一的文件进行操作。 Open()
方法不支持路径中的通配符。
$wb = $xl.Workbooks.Open("C:\...") # open the file
# ... # do stuff # ...
$a = Release-Ref($wb) # release the reference to the workbook
所以,你需要做的第一件事就是把环围绕该部分并与Get-ChildItem
输出给它。如果你想Get-ChildItem
在特定的路径上启动,你需要通过-Path
参数指定该路径,否则它将从当前工作目录开始。
$root = 'C:\some\folder'
Get-ChildItem -Path $root -Filter '*.xlsx' -Recurse | ForEach-Object {
$wb = $xl.Workbooks.Open($_.FullName)
# ... # do stuff # ...
$a = Release-Ref($wb)
}
确保离开Excel应用程序对象的处理外循环。
提取细胞B4的值:
$b4 = $wb.Sheets.Item(1).Cells.Item(4, 2).Value
并将它添加到文件名:
$newname = $_.BaseName + $b4 + $_.Extension
如果.Value
在该单元格不返回的实际价值,尽量.Text
代替。
在您可以重命名文件之前,您需要先关闭它。但Release-Ref
函数只能释放对象所需的引用。它不关闭工作簿(或关于此事的应用程序)。你需要自己去做:
$root = 'C:\some\folder'
Get-ChildItem -Path $root -Filter '*.xlsx' -Recurse | ForEach-Object {
$wb = $xl.Workbooks.Open($_.FullName)
# ... # do stuff # ...
$wb.Close() # actually close the file
$a = Release-Ref($wb)
Rename-Item -Path $_.FullName -NewName $newname
}
什么不起作用?你的_real_问题是什么?你对上面的代码做了什么来尝试使它适合你? – Matt 2014-11-08 16:30:29
用适当的问题和示例编辑修改了我的帖子。谢谢Matt – HGtez 2014-11-08 17:23:31