2

次の Powershell スクリプトを使用してNumberFormat、多くのファイルの列のセルを削除しているため、すべての分数が表示されます。列には、10 進数、テキスト、または日付などを含めることができます。これらの小数/通貨形式 (0*またはの形式*#*) のセルのみを適用する必要があります

ただし、遅いです (毎秒 2 つまたは 3 つのセルをチェック/更新します)。それを行うためのより良い/より速い方法はありますか?

    $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?

4

1 に答える 1

1

コメントを読んで速度を改善しました。皆さんありがとう。

  1. セルへのアクセスをできるだけ減らすようにしてください。出力行を削除して"$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時間の短縮にも役立ちました。
于 2013-01-17T17:56:06.030 に答える