Powershell 缓慢的Excel自动化?
我正在使用下面的Powershell脚本删除许多文件列中单元格的Powershell 缓慢的Excel自动化?,powershell,excel,automation,office-interop,vba,Powershell,Excel,Automation,Office Interop,Vba,我正在使用下面的Powershell脚本删除许多文件列中单元格的NumberFormat,以便显示所有分数。列可以有小数、文本或日期等;只需应用这些十进制/货币格式(格式为0*或*.\*)单元格 但是速度很慢(每秒检查/更新两到三个单元格)。有更好/更快的方法吗 $WorkBook = $Excel.Workbooks.Open($fileName) $WorkSheet = $WorkBook.Worksheets.Item(1) $cell = $WorkSheet.
NumberFormat
,以便显示所有分数。列可以有小数、文本或日期等;只需应用这些十进制/货币格式(格式为0*
或*.\*
)单元格
但是速度很慢(每秒检查/更新两到三个单元格)。有更好/更快的方法吗
$WorkBook = $Excel.Workbooks.Open($fileName)
$WorkSheet = $WorkBook.Worksheets.Item(1)
$cell = $WorkSheet.Cells
$ColumnIndex = 10 # The column may have decimal, text or date, etc.
$i = 2
while ($cell.Item($i, 1).value2 -ne $Null)
# Replace it to find the last row# of column 1 may cut the time in half? How?
{
$c = $cell.Item($i, $ColumnIndex)
if (($c.NumberFormat -like "0*") -or $c.NumberFormat -like "*#*")
{
"$i : $($c.NumberFormat) $($c.value2) "
$c.NumberFormat = $Null
}
$i++
}
更新:
.NetMicrosoft.Office.Interop.Excel
会更快吗?
或者将文件转换为xlsx格式,并使用
System.IO.Package.IO
?阅读评论后,我提高了速度。谢谢大家
“$I:$($c.NumberFormat)$($c.value2)”
并进行了更改
if($c.NumberFormat-like“0*”)或$c.NumberFormat-like“*#*”
到
$f=$c.NumberFormat
if($f-like“0*”-或$f-like“*#*”)
$lastRow=$cell.SpecialCells(11,1).Row
获取最后一行编号,并将循环更改为,而($I-le$lastRow)
$Excel.screenUpdate=False
也有助于减少一些时间李>
你能量化它的运行速度吗?有没有可以上传的示例文件供我们测试?处理12个Excel文件需要半小时。Excel文件的大小通常为60KB,每个文件中有几百到几千行。从我自己的角度来看,我需要一个示例文件,以及您使用脚本处理该文件所需的时间,以便真正提供更多帮助,或者看看我是否可以提高执行速度。您可以将代码封装在Measure命令中,以查看运行某项操作所需的时间。因为您的调用已经在使用互操作(尽管您可能没有意识到)从早期绑定到
Microsoft.Office.Interop.Excel
,您不太可能看到性能的提高。您可以进行一些筛选,这样就不必循环每个单元格(这非常缓慢)。如果(且仅当)您可以保证数字字段中的值永远不会与日期冲突(以数字形式存储,如41284为1/1/2000),则可以排除任何高于该值的内容,这也会删除文本单元格。如果我有机会,我会制作一个样品谢谢,谢谢,谢谢!!!!添加ScreenUpdate=false将我的边框绘制时间从70秒减少到3秒!