2017-01-26 1 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 행이있을 때 Interops에서 제한을 사용하는 이유는 무엇인지 이해할 수 없습니다. 내가 다음으로 위의 "작동하지 LINE"를 대체 할 경우 반면에

은, Excel 2007의 행 제한을 사용하는 것, 그리고 예외가 사라 :

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

참고 " Workbook1.xlsx "는 이전에"Excel 통합 문서 (* .xlsx) "로 저장된 빈 통합 문서입니다

Excel Interop 개체가 Excel을 사용하도록 구성하려면 어떤 종류의 마법 작업을 수행해야하는지 알려주실 수 있습니까? 이전에 저장 한 빈 .xlsx 파일을 저장하지 않고도 기본적으로 2007 제한이 있습니까?

+0

엑셀 파일을 생성하고 싶습니다. 처리가 훨씬 쉬워지는 .csv 파일을 생성 할 수 있습니다. Excel에서 행 제한을 피할 수 있습니다. – user3501749

+0

파일 .xls를 사용하고 있습니까? 그렇다면 문제가 될 수 있습니다. –

+0

Interop (예 : Excel Add-in을 대화식으로 사용하는 경우)를 사용해야하는 특별한 이유가 없다면 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 통합 문서 (* .xlsx)'로 변경하면 코드가 작동합니다.

관련 문제