使用NPOI如何设置默认单元格样式?

网络孤魂 2021-05-18 11:19:02
使用NPOI已经有一段时间了,一直用着很好,但最近遇到了这样一个问题:使用NPOI创建的xlsx文件在WPS中打开并使用打印预览一切正常,使用Excel 2019打印预览则会出现宽度不足,打印页数增加的情况,且设置好的行高也对不上。

经过反复检查,发现问题是出在两个软件的默认字体上面。通过打开文件后修改“常规”单元格样式可以解决。使用WPS打开后“常规”单元格样式的字体为“宋体”,而Excel2019打开是“等线”,所有未设置过的字体的单元格字体默认均为“等线”。如果使用WPS打开并保存后再使用Excel2019打开则会一切正常。

不知道有没有什么办法解决这一问题。在创建xlsx文件时设置每个单元格的默认字体。
...全文
22079 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
网络孤魂 2021-05-24
  • 打赏
  • 举报
回复 1
经过反复查找资料,终于找到了解决办法,代码如下,感谢各位回复: IFont font = workbook.GetFontAt(0);//默认的字体 font.FontName = "宋体"; ((XSSFFont)font).SetFamily(NPOI.SS.UserModel.FontFamily.MODERN); ((XSSFFont)font).SetScheme(FontScheme.NONE); 参考:https://www.freesion.com/article/6410674446/ https://stackoverflow.com/questions/39686790/apache-poi-default-style-for-workbook
网络孤魂 2021-05-21
  • 打赏
  • 举报
回复
引用 2 楼 HttpCookie 的回复:
统一下字体就行了吧
所有有内容的格式都已经统一字体了,但其他没内容的单元格字体依然是“等线”,然后打印预览行高和列宽就会不一样
网络孤魂 2021-05-21
  • 打赏
  • 举报
回复
引用 1 楼 shawn xia 的回复:
 var newFile = @"newbook.core.xlsx";

            using (var fs = new FileStream(newFile, FileMode.Create, FileAccess.Write))
            {
                IWorkbook workbook = new XSSFWorkbook();

                //创建字体
                XSSFFont ffont = (XSSFFont)workbook.CreateFont();
                ffont.FontName="宋体";

                var style1 = workbook.CreateCellStyle();
                style1.SetFont(ffont); //设置字体

                var sheet1 = workbook.CreateSheet("Sheet1");

                var cell1 = sheet1.CreateRow(0).CreateCell(0);
                cell1.CellStyle = style1;
                cell1.SetCellValue("测试");

                workbook.Write(fs);
            }
这个只对当前设置的单元格有效,其他未选中的无效
HttpCookie 2021-05-21
  • 打赏
  • 举报
回复
统一下字体就行了吧
shawn xia 2021-05-20
  • 打赏
  • 举报
回复
 var newFile = @"newbook.core.xlsx";

            using (var fs = new FileStream(newFile, FileMode.Create, FileAccess.Write))
            {
                IWorkbook workbook = new XSSFWorkbook();

                //创建字体
                XSSFFont ffont = (XSSFFont)workbook.CreateFont();
                ffont.FontName="宋体";

                var style1 = workbook.CreateCellStyle();
                style1.SetFont(ffont); //设置字体

                var sheet1 = workbook.CreateSheet("Sheet1");

                var cell1 = sheet1.CreateRow(0).CreateCell(0);
                cell1.CellStyle = style1;
                cell1.SetCellValue("测试");

                workbook.Write(fs);
            }

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧