记录一次NPOI库导出Excel遇到的小问题解决方案

前言

在工作中经常会去导入或者导出Excel,那么我在工作中用的是NPOI库,很方便。不过在用的时候难免会出现问题,在这里记录一下这次需求遇到的问题。

不过目前用的NPOI库的版本很老,不知道最新版本是否有其他实现方式,注意甄别。

问题一,自动换行

如图所示:

image

需要设置WrapText = true才能让单元格中的内容自动换行

IFont fontfp = wb.CreateFont();
ICellStyle FontStyle = wb.CreateCellStyle();
FontStyle.WrapText = true; // 设置自动换行

问题二,函数问题

如图所示:

image

如果导出Excel是根据模版导出,模版中的函数可能会因为各种原因变成上图的样子,那么为了避免这种情况这里使用SetCellFormula为单元格设置函数,这里以SUM函数为例

IWorkbook workbook = new XSSFWorkbook();  
ISheet sheet = workbook.CreateSheet("Sheet1"); 
sheet.GetRow(1).CreateCell(1).SetCellFormula("SUM(A1:A2)")

问题三,插入行但图片位置不跟随

如图所示:

image

如果使用Office操作Excel插入行图片是会移动的,我插入一行,图片就会往下移动一行。但是如果使用代码操作,即使你插入行使用了ShiftRows移动行,但是图片就是不动。

那么,我的解决方案是图片不放到模版中,而是在进行模版导出的时候进行插入操作,当Excel数据插入后,再对图片进行插入,这样图片就可以在想要的位置中显示。

这里用GPT写了个函数,可以参考一下。当完成插入行的操作后再调用这个函数就行了。

/// <summary>  
/// 将图片插入到Excel的指定sheet中  
/// </summary>  
/// <param name="workbook">Excel工作簿</param>  
/// <param name="sheet">目标sheet</param>  
/// <param name="imagePath">图片路径</param>  
/// <param name="rowStart">起始行索引</param>  
/// <param name="rowEnd">结束行索引</param>  
/// <param name="colStart">起始列索引</param>  
/// <param name="colEnd">结束列索引</param>  
public void InsertImage(IWorkbook workbook, ISheet sheet, string imagePath, int rowStart, int rowEnd, int colStart, int colEnd, double scaleSize)
{
	// 读取图片文件  
	byte[] imageBytes = System.IO.File.ReadAllBytes(Server.MapPath(imagePath));

	// 添加图片到工作簿  
	int pictureIndex = workbook.AddPicture(imageBytes, PictureType.PNG);

	// 创建图形和锚定  
	IDrawing drawing = sheet.CreateDrawingPatriarch();
	IClientAnchor anchor = new XSSFClientAnchor (0, 0, 0, 0, co	lStart, rowStart, colEnd, rowEnd);

	// 创建并调整图片  
	IPicture picture = drawing.CreatePicture(anchor, pictureIndex);
	// 设置图片的新尺寸  
	picture.Resize(scaleSize);
}

总结

记录了

  • 换行处理
  • 函数处理
  • 图片位置处理

3个问题,虽然都不是很难的问题,但是这里还是分享一下~,如果有问题欢迎指出。

posted @   妙妙屋(zy)  阅读(228)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· 实操Deepseek接入个人知识库
· 易语言 —— 开山篇
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
  1. 1 够爱(翻自 曾沛慈) 是我呀卡司宝贝
  2. 2 老人と海 ヨルシカ
  3. 3 生生世世爱 黄霄雲
  4. 4 希望有羽毛和翅膀 imzat
生生世世爱 - 黄霄雲
00:00 / 00:00
An audio error has occurred, player will skip forward in 2 seconds.

作词 : 杨漩予

作曲 : 林毅

爱 还没来

天地间风云忽然变

有情有义的人都要回来

爱 总会来

生死注定的来世再爱

都等了太久哭尽无奈

rap

是谁站在三清山门外

回首看桃溪花正开

一入岁月江湖中来

再随之去追星辰山海

到底是那恩怨过往

或是爱恨情长 怎么收场

这些年的故事和秘密

都在逆水寒里珍藏

爱恨纠缠的生生世世

爱恨纠缠的生生世世

心底执着的信念为你存在

多遥远的路都阻挡不住

再次拥有没距离的温度

失去自由的生生世世

有爱不懂相拥错过了最爱

送一剑祝福再默默相助

恐怕没以后不自觉留退路

爱 还没来

爱 还没来

天地间风云忽然变

有情有义的人都要回来

爱 总会来

生死注定的来世再爱

都等了太久哭尽无奈

rap

遇过金风细雨楼的刀太快

也遇过六分半堂惊雷开

身处这江湖风雨事

却不知可曾有故人来

轻挥一剑千山过

再回望轻舟多澎湃

我欲乘风逍遥去

纵览天地入我怀

从此我心自在

爱恨纠缠的生生世世

爱恨纠缠的生生世世

心底执着的信念为你存在

多遥远的路都阻挡不住

再次拥有没距离的温度

失去自由的生生世世

有爱不懂相拥错过了最爱

送一剑祝福再默默相助

恐怕没以后不自觉留退路

为情所困的生生世世

为情所困的生生世世

伤也被伤命中成双的伤害

等不到日出一个人孤独

让星光代替我伴你远途

黑白轮回的生生世世

彻底放开成全永远的依赖

是乱世英雄或凡间俗梦

爱不离爱是把这感动留住

爱不离爱是把这感动留住

原唱 : 吴雨霏

OP原始版权人:北京大石音乐版权有限公司、CHANCES CREATIVE MUSIC LTD

SP代理权利人:北京大石音乐版权有限公司、百代音乐版权代理(北京)有限公司

编曲改编:1AN孙毅然

改编词(Rap词):焦糖

Rapper:阿茹汗

笛子实录:水玥儿

混音&母带工程师:王嘉屏

和声:曾雪祁

配唱制作人:沈小力

录音师:邢铜

录音棚:55TEC Studio

出品:逆水寒

企划营销:微梦传媒

点击右上角即可分享
微信分享提示