Как форматировать заголовок в 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