ExcelにCSVまたはTSVを読み込もうとしていますが、小さなファイルの場合はうまく動作します。小さなファイルは< 5kbです。問題は、大きなファイルをExcelに読み込もうとすると処理に時間がかかることです。アプリケーションをロードするために必要なファイルには、5〜100行のどこからでも5〜20,000行までの任意の場所を含めることができます。すぐにテキストをExcelに読み込みます
私は、BackgroundWorker、Threadpools、Parallel.For、Parallel.ForEachを使用しようとしましたが、すべてこのタスクで同じパフォーマンスを持つようです。
アプリケーション自体は、別のテキストファイルからヘッダーのリストを取得し、Excelに読み込んでフォーマットを適用し、実際のCSV/TSVファイルをExcelに読み込むように設計されています。
ここで私はこれまでのところ、このサブバックグラウンドワーカーで開幕しますしているものです。ここで
Private Sub LoadTextFile(ByVal xlApp As Excel.Application, ByVal xlWb As Excel.Workbook, ByVal xlWs As Excel.Worksheet, ByVal xlRange As Excel.Range)
Dim SheetName As String = "Sheet1"
If xlWs Is Nothing Then
xlWs = DirectCast(xlWb.Sheets.Add(After:=xlWb.Sheets(xlWb.Sheets.Count), Count:=1, Type:=Excel.XlSheetType.xlWorksheet), Excel.Worksheet)
End If
'Read lines and store in a string array
Dim lines() As String = File.ReadAllLines(FileToLoad)
'Parse and write lines to Excel
For i As Integer = 0 To lines.Length - 1
'Set new row range
xlRange = xlWs.Range(startCol + (i + 2).ToString + ":" + endCol + (i + 2).ToString)
'Parse the line to load
Dim lineDetail() As String = lines(i).Split(fileDelimiter)
'Load into Excel
xlRange.Value = lineDetail
Next
End Sub
は、いくつかのパフォーマンス時間は以下のとおりです。
89列 - 2000行:平均ロード時間= 7秒。
89列数:4,000行平均負荷時間= 12秒
91カラム - 10,000行:平均ロード時間= 28秒。
91列 - 24,000行:平均読み込み時間= 70秒
107列 - 8,732行:平均負荷時間= 17秒。
「Excelはこれらのファイルをどのように即座に読み込むのですか?とにかく、私はこれを最適化するのを助けることができる誰にも感謝していますので、Excelにデータを取得するのにはあまり時間がかかりません。前もって感謝します。
「Excelはこれらのファイルをどのように即座に読み込みますか? ' - Excelのマクロレコーダーを使ってファイルを読み込むコマンドを取得することを考えましたか? – TnTinMn
@TnTinMn私は持っているが、私はそれが十分柔軟であるとは思わない。私は必要なさまざまなフォーマットごとに48種類のマクロを作成する必要があります。また、ユーザーが使いやすいようにする必要があります。私が持っているユーザベースには、Excelマクロの使い方が分かりません。最後に、毎年2倍のカラムを更新する方法が必要で、毎年48マクロを2回再作成したくありません。現在の動作は、テキストファイルからヘッダーを取得し、簡単に更新できることです。 –
私はVB.NetアプリケーションをExcelマクロのセットに変換することを提案していません。私はあなたが知らないかもしれないExcel Object Modelコマンドを発見するためにマクロレコーダーを使用するように教えようとしています。 VBA Interopステートメントを.Net Interopステートメントに変換するのは、少しの労力を要します。 – TnTinMn