Я создаю файл Excel, используя NPOI.
Я объявляю лист следующим образом:
var workbook = new XSSFWorkbook();
var sheet = workbook.CreateSheet(title);
Эксель заполняется данными. Соответствующая часть - это когда я устанавливаю значение даты и времени:
if (data is DateTime)
{
cell.CellStyle = GetDateTimeStyle(workbook, true, GetCustomFormatForColumn(column));
cell.SetCellValue(Convert.ToDateTime(data));
}
где ячейка ICell cell = row.CreateCell(column);
, а метод GetDateTimeStyle
:
private ICellStyle GetDateTimeStyle(XSSFWorkbook wb, bool useBorder, string customFormat)
{
if (!_styles.TryGetValue("DATETIME", out ICellStyle style))
{
style = wb.CreateCellStyle();
style.SetFont(GetItemFont(wb));
style.Alignment = HorizontalAlignment.Center;
if (useBorder)
SetBorder(style);
if (!String.IsNullOrEmpty(customFormat))
style.DataFormat = wb.CreateDataFormat().GetFormat(customFormat);
else
style.DataFormat = wb.CreateDataFormat().GetFormat("dd/MM/yyyy HH:mm:ss");
_styles.Add("DATETIME", style);
}
return style;
}
После заполнения всех ячеек я запускаю этот цикл for
:
column = 0;
foreach (string header in columnNames)
sheet.AutoSizeColumn(column++);
После этого в результирующем Excel будут автоматически изменены все столбцы, кроме столбца, содержащего значения даты и времени.
Ячейки, содержащие значения даты и времени, расширяются по ширине, но остается несколько пикселей, которые необходимо расширить, чтобы отображать дату и время полностью, а не только #########
.
Есть ли способ решить эту проблему?
С уважением Хайме
AutoFit
вместоAutoSize
? Я думаю, что он обрабатывает перенос слов и усечение по-разному, но я не проверял. - person Automate This   schedule 18.05.2020myRng.EntireColumn.AutoFit();
Вот другие примеры в шаге 4. - person Automate This   schedule 18.05.2020