2016-10-26 5 views
0

셀 참조가 변경된 셀이있는 Excel 시트가 있습니다. 내 코드와C# 특정 셀 참조에서 XML SDK 쓰기 데이터

enter image description here

, 난 엑셀 시트를로드하고 그것으로 내 데이터를로드 할 수 있습니다. 하지만 내 데이터가 특정 셀 "int_startdok"에 삽입되기를 원합니다.

내 코드 :

private byte[] LoadDataToFile([NotNull] DataTable dataTable) 
    { 
     if (dataTable == null) throw new ArgumentNullException(nameof(dataTable)); 

     var memoryStream = new MemoryStream(); 
     var byteArray = File.ReadAllBytes(TemplateFilePath); 
     memoryStream.Write(byteArray, 0, byteArray.Length); 

     using (var spreadsheetDocument = SpreadsheetDocument.Open(memoryStream, true)) 
     { 
      var workbookPart = spreadsheetDocument.WorkbookPart; 
      var worksheetPart = workbookPart.WorksheetParts.First(); 
      var sheetData = worksheetPart.Worksheet.Elements<SheetData>().First(); 

      var headerRow = new Row(); 

      var columns = new List<string>(); 
      foreach (DataColumn column in dataTable.Columns) 
      { 
       columns.Add(column.ColumnName); 

       var cell = new Cell(); 
       cell.DataType = CellValues.String; 
       cell.CellValue = new CellValue(column.ColumnName); 
       headerRow.AppendChild(cell); 
      } 

      foreach (DataRow dsrow in dataTable.Rows) 
      { 
       var newRow = new Row(); 
       foreach (var col in columns) 
       { 
        var cell = new Cell(); 
        cell.DataType = CellValues.String; 
        cell.CellValue = new CellValue(dsrow[col].ToString()); 
        newRow.AppendChild(cell); 
       } 

       sheetData.AppendChild(newRow); 
      } 
     } 

     return memoryStream.ToArray(); 
    } 

내가 어떻게 할 수 있습니까?

답변

0

내 문제의 해결책이 있습니다. ClosedXML으로 트릭을 아주 쉽게 할 수 있었고 코드를 줄일 수있었습니다. ClosedXML의 경우 Open XML SDK이 필요합니다. ClosedXML Wiki 페이지에서 가져올 수 있습니다.

private byte[] InsertDataToTemplate([NotNull] DataTable dataTable) 
    { 
     if (dataTable == null) throw new ArgumentNullException(nameof(dataTable)); 

     // Create a memorystream from the template 
     var memoryStream = new MemoryStream(); 
     var byteArray = File.ReadAllBytes(TemplateFilePath); 
     memoryStream.Write(byteArray, 0, byteArray.Length); 

     using (var workbook = new XLWorkbook(memoryStream)) 
     { 
      var sheetData = workbook.Worksheets.First(); 
      sheetData.Cell("int_startdok").InsertData(dataTable.Rows); 
      workbook.Save(); 
     } 

     return memoryStream.ToArray(); 
    } 
: 여기

내 솔루션입니다