2016-10-26 13 views
0

変更されたセル参照を持つセルを持つExcelシートがあります。私のコードでC#特定のセル参照でデータを書き込むXML SDK

enter image description here

、私は、Excelシートをロードし、そこに自分のデータをロードすることができます。しかし、私は自分のデータが特定のセル "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(); 
    } 
関連する問題