2013-10-11 40 views
12

我的代碼會產生這樣的如何格式化使用C#在Excel/CSV標題

|id | Name | Address | company_Name | Destination| 
|----|-------|----------|--------------|------------| 
|##1 | xxx | xxxx  | xxx   | xxxxx  | 

Excel文檔,但我想是這樣的...

----------------------------------------------------- 
| Personal Information | Working INFO   | 
----------------------------------------------------- 
|id | Name | Address | company_Name | Destination| 
|----|-------|----------|--------------|------------| 
|##1 | xxx | xxxx  | xxx   | xxxxx  | 
----------------------------------------------------- 

我從數據API和我將使用它保存它SaveFileDialog

SaveFileDialog dialog = new SaveFileDialog(); 
dialog.Title = "Save file as..."; 
dialog.Filter = "Text files (*.csv)|*.csv"; 
dialog.RestoreDirectory = true; 

if (dialog.ShowDialog() == DialogResult.OK) 
{ 
    System.IO.StreamWriter writer = new System.IO.StreamWriter(dialog.FileName); //open the file for writing. 
    writer.Write(report); //write the current date to the file. change this with your date or something. 
    writer.Close(); //remember to close the file again. 
    writer.Dispose(); //remember to dispose it from the memory. 

    program.ShowInformationMessage("File Save successfully"); 
} 

它沒有問題。

我想使標題爲內聯的東西。

+4

你知道爲什麼你是從別人收到downvote?由於這個原因:「你寫的代碼的問題必須在問題本身中描述具體問題 - 幷包含有效的代碼以再現它。」所以,展示你現在擁有的東西。 –

+0

你在使用Interop嗎?如果是,請參閱[這](http://www.siddharthrout.com/vb-dot-net-and-excel/)檢查「合併/取消合併單元格」部分代碼在vb中。淨,但可以輕鬆移植到C# –

+0

忽略我上面的評論。我剛看到你的編輯。 –

回答

2
... 
System.IO.StreamWriter writer = new System.IO.StreamWriter(dialog.FileName); //open the file for writing. 
writer.Write("Personal Information" + delimiter + delimiter + "Working INFO" + delimiter); 
writer.Write(report); //write the current date to the file. change this with your date or something. 
... 

CSV格式不支持合併單元格,但像上面描述你仍然可以安排標題行。只需用您的單元格分隔符替換分隔符即可。

-3
  1. 首先在excel中創建您的excel文件模板,並根據需要進行格式化。
  2. 只放置一行,將打印大量行。
  3. 將標籤放入數據行以替換實際數據。
  4. 將其另存爲MHT文件。 (樣式也將被保存,如html)
  5. 用文本編輯器打開mht文件。
  6. 將<!#>放在數據行的開頭和末尾,以便您可以從程序中拆分文件內容,並通過用真實屬性替換標籤來動態填充實際數據行。

    <!#> 
    <tr height=3D20 style=3D'height:15.0pt'> 
    <td height=3D20 class=3Dxl67 style=3D'height:15.0pt;border-top:none'>[id]=</td> 
    <td class=3Dxl67 style=3D'border-top:none;border-left:none'>[name]</td> 
    <td class=3Dxl67 style=3D'border-top:none;border-left:none'>[company<span  style=3D'display:none'>]</span></td> 
    <td class=3Dxl67 style=3D'border-top:none;border-left:none'>[destination]=</td> 
    </tr> 
    <!#> 
    
  7. 從文本編輯器保存該文件。

  8. 從你的程序,你會讀到的MHT文件的內容,你將與<#!它拆分>和繁殖的數據行的一部分,追加一起,保存到另一個file..thats它..

-5

您需要安裝Microsoft Visual Studio Tools for Office。

之後,創建通用的.NET項目,並通過「添加引用..」對話框添加對COM對象Microsoft.Office.Interop.Excel.dll的引用。

Application excel = new Application(); 
Workbook wb = excel.Workbooks.Open(path); 

//Get All available worksheets 
//Excel.Sheets excelSheets = wb.Worksheets; 

//Get Specific WorkSheet 
string currentSheet = "Sheet1"; 
Excel.Worksheet newSheet = (Excel.Worksheet)wb.get_Item(currentSheet); 
newSheet.Cells[i, j].HorizontalAlignment = ExcelAlignment.xlLeft; //or Excel.XlHAlign.xlHAlignLeft 
+0

這個回答有問題嗎? – Fedor

+0

這告訴你,Microsoft Visual Studio Tools for Office中有很多內置功能,因此您可以使用合併屬性來執行所需的格式設置。 – KhanZeeshan

2

你有沒有考慮過使用closedxml(https://closedxml.codeplex.com/)。

var wb = new XLWorkbook(report); //open spreadsheet 
IXLWorksheet ws = wb.Worksheets.First(); //get first sheet 
ws.Row(1).InsertRowsAbove(1); //insert row 
ws.Cell("A1").Value = "Personal Information"; 
ws.Cell("A4").Value = " Working INFO"; 
ws.Range("A1:A3").Row(1).Merge(); // merge first title 
ws.Range("A4:A6").Row(1).Merge(); // merge second 
wb.SaveAs(writer); 

也可以打開CSV的,並保存爲CSV