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

饭宝  金牌会员 | 2024-11-23 19:06:18 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 891|帖子 891|积分 2673

前言

在工作中经常会去导入或者导出Excel,那么我在工作中用的是NPOI库,很方便。不过在用的时候不免会出现问题,在这里记载一下这次需求碰到的问题。
不过现在用的NPOI库的版本很老,不知道最新版本是否有其他实现方式,注意甄别。
问题一,自动换行

如图所示:

需要设置WrapText = true才气让单元格中的内容自动换行
  1. IFont fontfp = wb.CreateFont();
  2. ICellStyle FontStyle = wb.CreateCellStyle();
  3. FontStyle.WrapText = true; // 设置自动换行
复制代码
问题二,函数问题

如图所示:

如果导出Excel是根据模版导出,模版中的函数可能会因为各种缘故原由酿成上图的样子,那么为了避免这种情况这里利用SetCellFormula为单元格设置函数,这里以SUM函数为例
  1. IWorkbook workbook = new XSSFWorkbook();  
  2. ISheet sheet = workbook.CreateSheet("Sheet1");
  3. sheet.GetRow(1).CreateCell(1).SetCellFormula("SUM(A1:A2)")
复制代码
问题三,插入行但图片位置不跟随

如图所示:

如果利用Office操纵Excel插入行图片是会移动的,我插入一行,图片就会往下移动一行。但是如果利用代码操纵,即使你插入行利用了ShiftRows移动行,但是图片就是不动。
那么,我的解决方案是图片不放到模版中,而是在进行模版导出的时候进行插入操纵,当Excel数据插入后,再对图片进行插入,如许图片就可以在想要的位置中显示。
这里用GPT写了个函数,可以参考一下。当完成插入行的操纵后再调用这个函数就行了。
  1. /// <summary>  
  2. /// 将图片插入到Excel的指定sheet中  
  3. /// </summary>  
  4. /// <param name="workbook">Excel工作簿</param>  
  5. /// <param name="sheet">目标sheet</param>  
  6. /// <param name="imagePath">图片路径</param>  
  7. /// <param name="rowStart">起始行索引</param>  
  8. /// <param name="rowEnd">结束行索引</param>  
  9. /// <param name="colStart">起始列索引</param>  
  10. /// <param name="colEnd">结束列索引</param>  
  11. public void InsertImage(IWorkbook workbook, ISheet sheet, string imagePath, int rowStart, int rowEnd, int colStart, int colEnd, double scaleSize)
  12. {
  13.         // 读取图片文件  
  14.         byte[] imageBytes = System.IO.File.ReadAllBytes(Server.MapPath(imagePath));
  15.         // 添加图片到工作簿  
  16.         int pictureIndex = workbook.AddPicture(imageBytes, PictureType.PNG);
  17.         // 创建图形和锚定  
  18.         IDrawing drawing = sheet.CreateDrawingPatriarch();
  19.         IClientAnchor anchor = new XSSFClientAnchor (0, 0, 0, 0, co        lStart, rowStart, colEnd, rowEnd);
  20.         // 创建并调整图片  
  21.         IPicture picture = drawing.CreatePicture(anchor, pictureIndex);
  22.         // 设置图片的新尺寸  
  23.         picture.Resize(scaleSize);
  24. }
复制代码
总结

记载了

  • 换行处置处罚
  • 函数处置处罚
  • 图片位置处置处罚
3个问题,虽然都不是很难的问题,但是这里还是分享一下~,如果有问题欢迎指出。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

饭宝

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表