慢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

阅读评论后,我提高了速度。 谢谢大家。

  1. 尽量减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 "*#*")

  2. 我还使用$lastRow = $cell.SpecialCells(11, 1).Row获取最后一行的数字,并将循环更改为while ($i -le $lastRow)

  3. $Excel.ScreenUpdating = False也有助于减less一些时间。