2017-02-09 9 views
0

指定列DataType的字符串,數字Datetime在Excel/SpreadSheet中。我將提供一個示例圖像,以更好地瞭解我需要什麼。如何使用以下代碼將數據導出到Excel中的c#時使用c#

對於單個列,我們不能說這種類型只能在excel的特定列中出現。不同勢數據

代碼的導出過程中現在用的就是

  SpreadsheetDocument spreadsheetDocument = SpreadsheetDocument. 
        Create(savingFileName, SpreadsheetDocumentType.Workbook); 

       // Add a WorkbookPart to the document. 
       WorkbookPart workbookpart = spreadsheetDocument.AddWorkbookPart(); 
       workbookpart.Workbook = new DocumentFormat.OpenXml.Spreadsheet.Workbook(); 

       // Add a WorksheetPart to the WorkbookPart. 
       var worksheetPart = workbookpart.AddNewPart<WorksheetPart>(); 
       var sheetData = new SheetData(); 
       worksheetPart.Worksheet = new DocumentFormat.OpenXml.Spreadsheet.Worksheet(sheetData); 
       var bold1 = new System.Windows.Documents.Bold(); 
       DocumentFormat.OpenXml.Spreadsheet.CellFormat cf = new DocumentFormat.OpenXml.Spreadsheet.CellFormat(); 

       // Add Sheets to the Workbook. 
       DocumentFormat.OpenXml.Spreadsheet.Sheets sheets; 
       sheets = spreadsheetDocument.WorkbookPart.Workbook. 
        AppendChild<DocumentFormat.OpenXml.Spreadsheet.Sheets>(new DocumentFormat.OpenXml.Spreadsheet.Sheets()); 

       // Append a new worksheet and associate it with the workbook. 
       var sheet = new Sheet() 
       { 
        Id = spreadsheetDocument.WorkbookPart. 
         GetIdOfPart(worksheetPart), 
        SheetId = sheetId, 
        Name = "Sheet" + sheetId 
       }; 
       sheets.Append(sheet); 

       //Add Header Row. 
       var headerRow = new Row(); 
       headerRow.RowIndex = 10; 
       var cell=new Cell(); 
       foreach (DataColumn column in dtCollection.Columns) 
       { 
        cell = new Cell 
        { 
         DataType = CellValues.String, CellValue = new CellValue(column.ColumnName.ToUpper()) 
        }; 
        headerRow.AppendChild(cell); 

       } 
       sheetData.AppendChild(headerRow); 

       foreach (DataRow row in dtCollection.Rows) 
       { 
        var newRow = new Row(); 
        foreach (DataColumn col in dtCollection.Columns) 
        { 
         cell = new Cell 
         { 
          DataType = CellValues.String, 
          CellValue = new CellValue(row[col].ToString()) 
         }; 
         newRow.AppendChild(cell); 
        } 
        sheetData.AppendChild(newRow); 
       } 

       workbookpart.Workbook.Save(); 
       spreadsheetDocument.Close(); 

的圖像是在這上面PIC,您可以看到借記卡和信用卡柱應當號碼,但與遵循 enter image description here

我代碼也可以是隻串
列類型

  1. 信貸編號
  2. 借記數
  3. 日期 - 日期 - 時間
  4. 代碼串
  5. 期初餘額 - 數字

上述要求,我需要導出的數據表在Excel中每列練成應是不同的數據類型。我怎麼能做到這一點,任何一個可以幫助我完成我的工作

+0

的可能的複製【如何寫數據時到Excel做正確的日期格式(http://stackoverflow.com/問題/ 3310800/how-to-make-correct-date-format-when-writing-data-to-excel) – stratovarius

+0

我不僅需要在單個Excel中記錄所有需要的類型。在這裏我們不能指定每次以不同的方法導出時哪一種類型的列。 –

+0

NumberFormat屬性是您的實際問題的解決方案。它涵蓋了所有類型的格式,數字等等。但是現在你又問了另一個問題,'如何在導出時動態地映射原始列類型',我是對嗎?由於每個導出的請求列可能有所不同? – stratovarius

回答

0

好吧然後這裏有兩個選項,我可以快速上來。

  1. 如果你有欄選擇幾個選項,然後映射COLUMNNAME < - > NumberFormat的
  2. 如果你有太多的可能性欄,然後映射primitiveType < - > NumberFormat的(但是你只能有一個浮動無論特定列的業務需求如何)

下面是第一個選項的示例:使用字典來查找應該在每列中注入哪種數字格式。

var headerFormatMap = new Dictionary<string, string>(); // <columnHeader, NumberFormat> 
// i.e fill it like this 
headerFormatMap.Add("TransactionDate", "MM/DD/YYYY"); 
headerFormatMap.Add("Debit", "##.000"); // Display 37.75 as 37.750. 

給這個所有可​​能的列格式化。並在時機成熟時輸出,得到正確的NUMBERFORMAT,並將它注入到其列:

// Assuming your first row is header. (I remember excel indexes start from 1) 
// Do this foreach column 
Range range = (Excel.Range)worksheetobject.Cells[1,1]; 
var header = (string)range.Value; 
range.EntireColumn.NumberFormat = headerFormatMap[header];  
相關問題