c# - AutoSizeColumn 适用于所有列,但包含日期时间值的列除外
问题描述
我正在使用 NPOI 创建一个 Excel 文件。
我以这种方式声明工作表:
var workbook = new XSSFWorkbook();
var sheet = workbook.CreateSheet(title);
Excel 中填充了数据。相关部分是当我设置日期和时间值时:
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 将自动调整所有列,但列包含日期和时间值。
包含日期和时间值的单元格的宽度会扩大,但还有一些像素需要扩大,以便显示整个日期和时间,而不仅仅是#########
.
有没有办法解决这个问题?
问候詹姆
解决方案
推荐阅读
- java - 如何在 Java 中使用 ScheduledThreadpoolExecutor 重新启动终止的线程?
- laravel - 如何使用 Laravel Passport 通过 API 测试身份验证?
- java - Raspan:从 Java/Tomcat 执行 Python 脚本,tomcat8 用户不接受
- swift - RLMException', reason: '试图在写事务之外修改对象
- angular - Angular Universal:我需要在服务器上安装 npm 包吗?
- node.js - Angular 5 - 使用 websockets 时检测变化
- ruby-on-rails - has_many 通过查询未返回预期结果
- ruby-on-rails - 打印字符串中给定的字符次数
- javascript - 根据特定属性过滤对象数组
- c - 对已经为 NULL 的指针使用 free() 是否有意义?