2013-05-17 27 views
6

DataTableからデータシートにNumbersを書き込もうとしています - 残念ながら、これは期待どおりに動作しません。 g。データシートが破損しています。これが失敗した理由をOffice Open XMl SDKシートに数値を書き込む

private void AddDataToSheet(ExcelViewData data, SheetData sheetData) 
      { 
       var excelData = data.WriteableDataTable; 
//// this returns a datatable 
////the numbers have a format like "8,1" "8,0" etc. 
       for (int i = 0; i < excelData.Rows.Count; i++) 
       { 
        Row row = new Row(); 
        //row.RowIndex = (UInt32)i; 
        for (int c = 0; c < excelData.Columns.Count; c++) 
        { 
         Cell cell = new Cell(); 
         CellValue cellvalue = new CellValue(); 
         //cell.CellReference = SharedMethods.GetExcelColumnName(i + 1) + (c + 1).ToString(); 
         cell.DataType = DocumentFormat.OpenXml.Spreadsheet.CellValues.Number; 
         cellvalue.Text = excelData.Rows[i][c].ToString().Replace(",","."); 
         cell.Append(cellvalue); 
         row.Append(cell); 
        } 

        sheetData.Append(row); 
       } 
      } 

任意のアイデア:

私は、次のコードを使用していますか?私は同じアプローチで複数のチュートリアルを見てきました。

答えて

4

この方法試してみてください:

public void InsertDataTableIntoExcel(SpreadsheetDocument _excelDoc, SheetData SheetData, DataTable excelData, int rowIndex = 1) 
    { 
     if (_excelDoc != null && SheetData != null) 
     { 
      if (excelData.Rows.Count > 0) 
      { 
       try 
       { 
        uint lastRowIndex = (uint)rowIndex; 
        for (int row = 0; row < excelData.Rows.Count; row++) 
        { 
         Row dataRow = GetRow(lastRowIndex, true); 
         for (int col = 0; col < excelData.Columns.Count; col++) 
         { 
          Cell cell = GetCell(dataRow, col + 1, lastRowIndex); 

          string objDataType = excelData.Rows[row][col].GetType().ToString(); 
          //Add text to text cell 
          if (objDataType.Contains(TypeCode.Int32.ToString()) || objDataType.Contains(TypeCode.Int64.ToString()) || objDataType.Contains(TypeCode.Decimal.ToString())) 
          { 
           cell.DataType = new EnumValue<CellValues>(CellValues.Number); 
           cell.CellValue = new CellValue(objData.ToString()); 
          } 
          else 
          { 
           cell.CellValue = new CellValue(objData.ToString()); 
           cell.DataType = new EnumValue<CellValues>(CellValues.String); 
          } 
         } 
         lastRowIndex++; 
        } 
       } 
       catch (OpenXmlPackageException ex) 
       { 
        throw ex; 
       } 
       catch (Exception ex) 
       { 
        throw ex; 
       } 
      } 
      else 
      { 
       OpenXmlPackageException openEx = new OpenXmlPackageException("No data from datatable"); 
       throw openEx; 
      } 
     } 
     else 
     { 
      OpenXmlPackageException openEx = new OpenXmlPackageException("Workbook not found"); 
      throw openEx; 
     } 
    } 
+0

は、コードをありがとう - unfortuanetly、私は完全に白紙で始めています、に書き込むための行がありません。 私は内部コードを試してみます - 非常に有望です! –

+0

これはうまくいきました。セルを作成してセルの値とCellTypeを追加するコードを使用することができます。これはCellの書式設定だけです。これがあなたの答えを与えることを願っています。 – KirtiSagar

+0

それは働いて、ありがとう! :) –

関連する問題