2017-11-07 13 views
0

각 행에 100 개의 새 셀을 추가해야하는 매우 큰 Excel 파일이 있습니다. OpenXML DOM 접근 방식이 나에게 OutOfMemory 예외를 제공하기 때문에 프로젝트에 OpenXmlWriter를 사용해야합니다.C# OpenXmlWriter (OpenXML SDK 2.5)를 사용하여 Excel 시트의 모든 행에 셀을 추가하는 방법

OpenXmlWriter를 사용하여 셀을 어떻게 추가 할 수 있는지 알려주는 사람이 있습니까?

이것은 DOM 접근 방식을 사용하여 내 코드입니다 :

   int nRowCounter = 0; 
       foreach (Row row in sheetData.Elements<Row>()) 
       { 
        // skip first row 
        nRowCounter++; 
        if (nRowCounter == 1) 
         continue; 


        string uniqueID = row.Elements<Cell>().First().InnerText; 


        string[] branchenOfId = crmConnector.GetBranchenFromCrm(uniqueID, ""); 

        if (listSelectedBranchen.Any() && !branchenOfId.Intersect(listSelectedBranchen).Any() && nBranchenIndex == 1) 
        { 
         rowsToRemove.Add(row.RowIndex.Value); 
         continue; 
        } 

        string cellValue = ""; 

        if (branchenOfId.Contains(strName)) 
         cellValue = strName; 

        row.Append(new Cell() { DataType = CellValues.String, CellValue = new CellValue(cellValue) }); 
       } 

답변

0
using (SpreadsheetDocument spreadsheetDocument = SpreadsheetDocument.Open(filename, true)) 
{ 

WorkbookPart workBookPart = spreadsheetDocument.WorkbookPart; 

WorkbookPart workbookPart = spreadsheetDocument.WorkbookPart; 
WorksheetPart worksheetPart = workbookPart.WorksheetParts.First(); 
SheetData sheetData = worksheetPart.Worksheet.Elements<SheetData>().First(); 

//You can retrieve a specific sheet also by the following code 
IEnumerable<Sheet> sheets = workbookPart.Workbook.Descendants<Sheet>().Where(s => s.Name == "Sheet Name"); 

//find the first row in the sheet data 
Row row1 = sheetData.GetFirstChild<Row>(); 

//create a new cell 
//I is the column and 1 is the Row Index 
// I assume you know how to get the last column of any row. 
//Just get the next alphabet letter and add the row index to make a CellReference. 
//e.g. If last cell of the Row is H, you can get the next letter i-e I 
Cell cell = new Cell() { CellReference = "I1" }; 
CellFormula cellformula = new CellFormula(); 
cellformula.Text = "IF(A2 = A1,1,0)"; 
cell.Append(cellformula); 

//append the cell to the row 
row1.Append(cell); 
} 

는 또한 this 문서 링크

+0

이것은 DOM의 접근 방식을 살펴 있습니다. 하지만 OpenXmlWriter를 사용해야합니다. – Blouflash

+0

다음 링크에서 큰 파일에 OpenXmlWriter를 사용하는 방법을 살펴보십시오. http://polymathprogrammer.com/2012/08/06/how-to-properly-use-openxmlwriter-to-write-large-excel-files/ 예를 들어 설명합니다. –