Как форматировать заголовок в excel/csv с помощью С#

Мой код будет генерировать документ excel, подобный этому

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

Но я хочу, как это...

-----------------------------------------------------
| 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");
}

Нет проблем с этим.

Я хочу сделать заголовок как встроенный в него что-то вроде этого.

Ответ 1

...
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 не поддерживает объединенные ячейки, но все же вы можете упорядочить строку заголовка, как описано выше. Просто замените разделитель на любой разделитель.

Ответ 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

Ответ 3

  • Сначала создайте свой Excel-шаблон в excel и отформатируйте его как хотите.
  • Поместите только одну строку, где будет напечатано множество строк.
  • Поместите метки в строку данных для замены реальными данными.
  • Сохраните его как файл MHT. (стили будут сохранены, также как html)
  • Откройте файл mht с помощью текстового редактора.
  • Положите <! # > в начале и в конце строки данных, чтобы вы могли разделить содержимое файла с вашей программой и динамически заполнять реальные строки данных, заменив ваши метки на реальные свойства.

    <!#>
    <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>
    <!#>
    
  • Сохраните файл из текстового редактора.

  • Из вашей программы вы прочтете содержимое файла mht, вы разделите его на <! # > и умножьте часть строки данных, добавьте все вместе и сохраните в другой файл.. вот оно..

Ответ 4

Вам необходимо установить Microsoft Visual Studio Tools для 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