Powershell 缓慢的Excel自动化?

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.

我正在使用下面的Powershell脚本删除许多文件列中单元格的
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++
    }
更新:

.Net
Microsoft.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秒!