2017-06-06 7 views
0

次のコードを使用してExcelの行フォーマット(テンプレート行)をデータで満たされた行の範囲にコピーしますが、それ以上の行では非常に遅くなります(現在のテストでは約33000行目標範囲として)。Excelのセルフォーマットを非常に遅い範囲にコピー

プロセス全体を遅くする行はRange.PasteSpecial(...);です。行は数秒かかるでしょう。それには数分かかります。

range = worksheet.Range[worksheet.Cells[9, 1], worksheet.Cells[9, 44]]; 
range.Copy(); 
range = worksheet.Range[worksheet.Cells[10, 1], worksheet.Cells[iRow + 8, 44]]; 
range.PasteSpecial(XlPasteType.xlPasteFormats, XlPasteSpecialOperation.xlPasteSpecialOperationNone, false, false); 
excel.CutCopyMode = 0; 

範囲形式を盗んと高速(も秒以内)、おそらく、別の範囲に設定する別のアプローチがありますか?

+0

はinterop excelですか?または、他の何か? –

+1

があなたの問題に関連している可能性があります。https://stackoverflow.com/questions/24029822/excel-range-copy-works-very-slowly/33178551#33178551 –

+0

@DanielTshuvaはい、それは相互運用性に優れています。 – DrNachtschatten

答えて

0

Interopは複数のレイヤーがあるため本質的に遅いですが、フォーマット操作を高速化するというトリックはできるだけ大きなブロックで行います。フォーマットコピーを1回実行してからPasteSpecialを使って大きな範囲に適用します可能な限り細胞の数を減らす。

+0

これは私がやったことだと思いますが、暗黙のうちにセルフォーマットのみをコピーする方法はありますか? – DrNachtschatten

+0

あなたのコードをもっと見ると良いでしょう:私はiRowがループ変数であると仮定しました。画面の更新を無効にしましたか? –

+0

iRowは以前のループで使用されました。その文脈では、それはフォーマットコピーの対象範囲の最後の行です。 はい、おそらく数秒かかりましたが、全体のプロセスはまだ30分かかります。 – DrNachtschatten

関連する問題