write open net library create crear cargar and c# .net csv export-to-excel

open - Cómo formatear el encabezado en excel/csv usando C#



csv.net library (4)

Mi código generará el documento de Excel como este

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

Pero quiero así ...

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

Obtengo los datos de la API y los SaveFileDialog usando 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"); }

No hay problema con eso

Quiero hacer que el encabezado sea algo así como en línea.


  1. En primer lugar, cree su plantilla de archivo Excel en Excel y formatéelo como desee.
  2. Coloque solo una línea donde se imprimirán muchas filas.
  3. Coloque etiquetas en la fila de datos para reemplazar con datos reales.
  4. Guárdelo como archivo MHT. (los estilos se guardarán, también como html)
  5. Abra el archivo mht con el editor de texto.
  6. Coloque <! #> Al principio y al final de la fila de datos para que pueda dividir el contenido del archivo de su programa y rellenar dinámicamente las líneas de datos reales reemplazando sus etiquetas con propiedades reales.

    <!#> <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. Guarde el archivo del editor de texto.

  8. Desde tu programa, leerás el contenido del archivo mht, lo dividirás con el <! #> Y multiplicarás la parte de la fila de datos, anexar todos juntos y guardar en otro archivo ... eso es lo que ...


Debe haber instalado Microsoft Visual Studio Tools para Office.

Después de eso, cree un proyecto .NET común y agregue la referencia al objeto COM Microsoft.Office.Interop.Excel.dll a través del cuadro de diálogo ''Agregar referencia ...''.

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


... 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. ...

El formato Csv no es compatible con las celdas combinadas, pero aún puede organizar la línea de encabezado como se describe arriba. Simplemente reemplace el delimitador con el delimitador de su celda.


¿Ha considerado usar 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);

También puede abrir csv y guardar como csv