2009-08-14 6 views
0

大規模なExcelファイルが入力されているC#アプリケーションを作成しました。C#アプリケーションの実行中に外部からExcelファイルを開く際の問題

私のコードでは、開いて処理してから閉じます。全体のプロセスには15〜20分かかります。この間、他のExcelファイル(1)を外部から開くと、現在処理中の入力Excelファイル(2)の誰もがこれと共にオープンします。これを閉じようとすると(2)、例外が発生し、ツールはプロセスを中止します。

Excelファイルが同じインスタンスで開かれているため、この問題が発生すると考えられます。どうすればこれを避けることができますか?

+1

あなたはExcelが開いているプロセスを提出開始するために使用したコードを投稿することができますか? – rahul

+0

evrが第三者コンポーネントの1つをExcelから読み込もうとしましたか? http://blog.functionalfun.net/2008/06/reading-and-writing-excel-files-with.htmlを参照してください。 ExcelのAPIは素晴らしいですが、それはまた非常にメモリ/プロセッサ消費のアプローチ –

+0

次のコードです:ApplicationClass objApp = new Excel.ApplicationClass();ワークブックobjWb = objApp .Workbooks.Open( "ファイル名"、0、true、1、 ""、 ""、true、Excel.XlPlatform.xlWindows、Type.Missing、false、false、0、true);ワークシートobjWs =(ワークシート)objWb.Worksheets.get_Item(1); // GC.Collect()を処理します。 objWb.Close(false、strDictFile、false); objApp.Workbooks.Close(); objApp.Quit(); ReleaseComObject(objWs); ReleaseComObject(objWb); ReleaseComObject(objApp); objWs = null; objWb = null; objApp = null; GC.Collect(); GC.WaitForPendingFinalizers(); –

答えて

0

次のコードです:

Excel.ApplicationClass objExcelApp = new Excel.ApplicationClass(); 
Excel.Workbook objWorkbook = objExcelApp.Workbooks.Open("File Name",0, true, 1, "", "", true, Excel.XlPlatform.xlWindows,Type.Missing, false, false, 0,true); 
Excel.Worksheet objWorksheet = (Excel.Worksheet) objWorkbook.Worksheets.get_Item(1); 
Excel.Range objRangeData =objWorksheet.UsedRange; 
// Some proces 
GC.Collect(); 
objRangeData.Clear(); 
objWorkbook.Close(false, strDictFile, false); 
objExcelApp.Workbooks.Close(); 
objExcelApp.Quit();    
System.Runtime.InteropServices.Marshal.ReleaseComObject(objRangeData); 
System.Runtime.InteropServices.Marshal.ReleaseComObject(objWorksheet);   
System.Runtime.InteropServices.Marshal.ReleaseComObject(objWorkbook); System.Runtime.InteropServices.Marshal.ReleaseComObject(objExcelApp); 
objWorksheet = null; 
objWorkbook = null; 
objExcelApp = null; 
GC.Collect(); 
GC.WaitForPendingFinalizers(); 
+0

申し訳ありませんが、これは答えではありません。私はフェニックスの質問に答えようとしていました。 –

0

あなたはそれを開きたいだけワークブックを開くと、ほとんどの場合になりますが、.NETからExcelのCOM相互運用機能のAPIを使用するよりもはるかに高速に実行されます。

サンプルhereが表示され、自分で試してみたい場合は無料トライアルhereをダウンロードできます。

免責事項:私は自分のスプレッドシートギア社

関連する問題