2017-01-26 39 views
0

大量のデータを格納する目的のC#アプリケーションがあります。私はこれを達成するためにMicrosoft.Office.Interop.Excel(Microsoft.Office.Interop.Excel.dllバージョン14.0.0.0)を使用しています。 Excel 2007がインストールされています。オブジェクトの大きなリストをその後、繰り返し処理をC#Excel Interop行の制限 - > HRESULT:0x800A03ECの例外がスローされました

excelApp = new Microsoft.Office.Interop.Excel.Application(); 
    excelWorkBook = excelApp.Workbooks.Add(misValue);//*--------> LINE NOT WORKING */ 
    excelWorksheetBeingWritten = (Excel.Worksheet)excelWorkBook.Worksheets.get_Item(1); 

私のコード、および行を記述する必要がありますたびに、私は次のように実行します:

は、私は次の行を使用し

var startCell = excelWorksheetBeingWritten.Cells[excelLineCounter, 1]; 
    var endCell = excelWorksheetBeingWritten.Cells[excelLineCounter, 2]; 
    string[] tmpArray = new string[2] { stringVar1, stringVar2 }; 
    tmpRange = excelWorksheetBeingWritten.Range[startCell, endCell]; 
    tmpRange.Value = tmpArray; 

excelLineCounter 65536を超えると、「HRESULT:0x800A03EC例外」がスローされます。 Excel2007以前の有名な行制限(正確には65536)を完全に認識しています。私が理解できないのは、Excel 2007(私のバージョン)が1.048.576行の文書化された制限を持っているときに、その制限がその制限を使用している理由です。

一方、私は次のことで、上記の「動作していないLINE」を交換する場合、Excel 2007の行の制限を使用しているようだ、と例外が消滅:

excelWorkBook = excelApp.Workbooks.Open(@"H:\Workbook1.xlsx");//*--------> LINE WORKING */

注: " Excel Workbook(* .xlsx)として保存されている空のワークブックです。

Excelを使用するようにExcel Interopオブジェクトを設定するには、どのような習慣が必要か教えてください。デフォルトでは、以前に保存された空の.xlsxファイルを置くことなく、2007年の制限を満たすことができます。

+0

Excelファイルを生成する必要がありますか?処理がはるかに簡単な.csvファイルを生成できます。行の制限をExcelで回避することができます。 – user3501749

+0

ファイル.xlsを使用していますか?もしそうなら、それはあなたの問題です。 –

+0

Interop(具体的にはExcelアドインなど)を使用する特別な理由がなく、対話的にこれをやっている場合を除き、Excelファイルをこのように作成しないことを強くお勧めします。それは非常に遅く、[いくつかのシナリオではサポートされません](https://support.microsoft.com/en-gb/help/257757/considerations-for-server-side-automation-of-office)。 [ClosedXML](https://github.com/ClosedXML/ClosedXML)のような管理されたコードでは、より適切なものかもしれません。 –

答えて

0

昨日同様の問題が発生しました。解決策は、デフォルトでxlsxファイルを作成するようにExcelの設定を変更することです。 Excelで

:ファイル - >オプション - >保存 - >

あなたのデフォルトは、おそらく 'エクセル97-2003(* .XLS)' です。この形式でファイルを保存鉱山がようでした。 「Excel Workbook(* .xlsx)」に変更すると、コードが機能します。

関連する問題