2016-05-31 11 views
3

Excelファイルの統計情報を提供するマルチスレッドのC#アプリケーションでコーディングしています。 私は、次のコードでファイルを開く:C#Excelファイルのマルチスレッドアクセス

private static Excel.Application excelApp = new Excel.Application(); 
    private static Excel.Workbook workbook = excelApp.Workbooks.Open(path); 
    private static Excel.Worksheet worksheet = workbook.ActiveSheet; 
    private static Excel.Range range = worksheet.UsedRange; 
    private static int totalColumns = worksheet.UsedRange.Columns.Count; 

は、私は、列ごとに1つのスレッドを使用していた列のうち、データを収集します。私は、各スレッドに新しいExcelアプリケーションを起動していない場合は0x800A01A8エラー:

for (int columnCount = 1; columnCount <= /*range.Columns.Count*/totalColumns; columnCount++) 
{ 
    Thread worker = new Thread(printSpread); 
    worker.Start(columnCount); 
} 

私はHRESULTを得ました。 私の質問は、これを行う必要があるのですか、それとも1つのExcelアプリケーションだけを使用する機会ですか? COM例外を説明するmulitpleスレッドによって、1つのアプリケーションからデータにアクセスする際に問題があると思います。 あなたの時間と助けてくれてありがとう。

答えて

1

あなたは単一のテーブルのようにExcelファイルを読み込んで、簡単なデータテーブルでメモリにデータを保存できます。 したがって、Excelファイルを閉じた後にマルチスレッドで作業できます。

sConnection = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Test.xls;Extended Properties=""Excel 12.0;HDR=No;IMEX=1""" 
using (var conn = new OleDbConnection(sConnection) 
{ 
    conn.Open(); 
    string query = "SELECT * FROM [" + mySheetName + "]"; 
    var adapter = new OleDbAdapter(query, conn); 
    var table = new DataTable(); 
    adapter.Fill(table); 
    //or you can use datareader 

    //Now you can close excel and dbConnection 
    //and work in memory with datatable and threads 
} 
+0

ありがとう!実装を助けるためにこれを見つけた[リンク](http://stackoverflow.com/questions/14261655/best-fastest-way-to-read-an-excel-sheet-into-a-datatable) –

+0

。私は完了のために私の答えを編集するつもりです –

0

エクセルファイルを(一時的な)データベーステーブルに解析するオプションはありません。なぜならデータベースは単純なエクセルファイルオンディスクに比べて多元接続の方がはるかに優れているからです。

現在のコードは主に行の列数をカウントしているようですが、単純なデータベースでは各データ変更時にそのデータが更新される可能性があります。それを考える。優れたデータベースモデルを構築する場合、エクセルファイルを解析すると、使用したいデータがデータベースに自動的に埋め尽くされます。

これは実際の目標がわからないため、これは複雑すぎるアプローチかもしれません。

+0

長期的な目標は、Excelファイルのデータを既存のデータベースに解析するアプリケーションを構築することです。輸入のように。問題は、ファイルが正規化に関するデータベース標準に適合していないなどです。 –

関連する問題