慢Excel自动化?
我正在使用下面的Powershell脚本删除列中的单元格的NumberFormat
大量的文件,所以所有的分数将被显示。 该列可能有小数,文本或date等; 只有这些十进制/货币格式(格式为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++ }
更新:
请问.Net的Microsoft.Office.Interop.Excel
快多快? 或者将文件转换为xlsx格式并使用System.IO.Package.IO
?
阅读评论后,我提高了速度。 谢谢大家。
-
尽量减less细胞的访问。 我删除了输出行
"$i : $($c.NumberFormat) $($c.value2) "
并更改if (($c.NumberFormat -like "0*") -or $c.NumberFormat -like "*#*")
至
$f = $c.NumberFormat
if ($f -like "0*" -or $f -like "*#*")
-
我还使用
$lastRow = $cell.SpecialCells(11, 1).Row
获取最后一行的数字,并将循环更改为while ($i -le $lastRow)
。 -
$Excel.ScreenUpdating = False
也有助于减less一些时间。