本次实现技术为.NET Core 3.1

导出的Excel项目中,包含如下的一张图片:

将当前图片导出,代码如下:

控制器代码:

 /// <summary>/// 导出Excel/// </summary>/// <param name="code"></param>/// <returns></returns>[HttpGet]public async Task<ApiResponse> ExportExcelAchemesDataList(string code, string type){PagedList<dynamic> data = _eventRecordServices.GetQRCodeList(code, type, 1, 10000);if (data==null){return ApiResponse.Fail("暂无数据");}//导出excelIWorkbook workbook = new HSSFWorkbook();//创建Workbookworkbook.CreateSheet("巡检二维码");//创建sheetstring FileName = "巡检二维码.xls";string Paths = Path.GetFullPath("..");string path = "";foreach (var item in Paths.Split("\\")){if (item == "PandaSewerage"){break;}path += item + "\\";}string guid = Guid.NewGuid().ToString();string stringPath = path + $"BufFile\\OutFiles\\DownLoadFiles\\ExportExcel\\{guid}\\";string filePath = $"{stringPath}";if (!System.IO.Directory.Exists(filePath)){Directory.CreateDirectory(filePath);}using (FileStream fs = System.IO.File.Create(filePath + FileName)){#region 考核列表ISheet sheet = workbook.GetSheetAt(0);//获取sheetIRow rowHeader = sheet.CreateRow(0);//创建头部rowHeader.CreateCell(0).SetCellValue("污水厂名称");rowHeader.CreateCell(1).SetCellValue("设备编码");rowHeader.CreateCell(2).SetCellValue("二维码名称");rowHeader.CreateCell(3).SetCellValue("二维码类型");rowHeader.CreateCell(4).SetCellValue("二维码");rowHeader.CreateCell(5).SetCellValue("编制人");rowHeader.CreateCell(6).SetCellValue("编制时间");//创建头部样式和列宽度ICellStyle titleStyle = workbook.CreateCellStyle();titleStyle.Alignment = HorizontalAlignment.Center; // 居中IFont titleFont = workbook.CreateFont();titleFont.IsBold = true;titleFont.FontHeightInPoints = 12;titleFont.Color = HSSFColor.Black.Index;//设置字体颜色titleStyle.SetFont(titleFont);sheet.GetRow(0).GetCell(0).CellStyle = titleStyle;sheet.GetRow(0).GetCell(1).CellStyle = titleStyle;sheet.GetRow(0).GetCell(2).CellStyle = titleStyle;sheet.GetRow(0).GetCell(3).CellStyle = titleStyle;sheet.GetRow(0).GetCell(4).CellStyle = titleStyle;sheet.GetRow(0).GetCell(5).CellStyle = titleStyle;sheet.GetRow(0).GetCell(6).CellStyle = titleStyle;short defHeight = sheet.DefaultRowHeight;sheet.SetColumnWidth(0, 5000);sheet.SetColumnWidth(1, 5000);sheet.SetColumnWidth(2, 5000);sheet.SetColumnWidth(3, 5000);sheet.SetColumnWidth(4, 8000);sheet.SetColumnWidth(5, 5000);sheet.SetColumnWidth(6, 6000);//创建内容样式ICellStyle style = workbook.CreateCellStyle();style.Alignment = HorizontalAlignment.Center;style.VerticalAlignment = VerticalAlignment.Center; ;//垂直居中   IFont font = workbook.CreateFont();font.IsBold = false;font.FontHeightInPoints = 12;font.Color = HSSFColor.Black.Index;style.SetFont(font);//赋值int x = 1;for (int i = 0; i < data.list.Count; i++){IRow rowData = sheet.CreateRow(i + 1);rowData.CreateCell(0).SetCellValue(data.list[i].污水厂名称);rowData.GetCell(0).CellStyle = style;rowData.CreateCell(1).SetCellValue(data.list[i].关联编码);rowData.GetCell(1).CellStyle = style;rowData.CreateCell(2).SetCellValue(data.list[i].二维码名称);rowData.GetCell(2).CellStyle = style;rowData.CreateCell(3).SetCellValue(data.list[i].二维码类型);rowData.GetCell(3).CellStyle = style;string picurl = data.list[i].二维码;  //图片存储路径if (ImageExists(picurl)){rowData.Height = 130 * 20;AddPieChart(sheet, workbook, picurl, i + 1, 4);                    //rowData.GetCell(4).CellStyle = style;}else{rowData.Height = defHeight;//rowData.CreateCell(4).SetCellValue(data.list[i].二维码);rowData.CreateCell(4).SetCellValue("未找到二维码");rowData.GetCell(4).CellStyle = style;}                       rowData.CreateCell(5).SetCellValue(data.list[i].编制人);rowData.GetCell(5).CellStyle = style;rowData.CreateCell(6).SetCellValue(data.list[i].编制时间.ToString());rowData.GetCell(6).CellStyle = style;}#endregionworkbook.Write(fs);var relativePositioning = $"\\BufFile\\OutFiles\\DownLoadFiles\\ExportExcel\\{guid}\\" + FileName;return ApiResponse.OK(relativePositioning);//return Ok(new { code = 0, msg = "成功", data = relativePositioning });//return File(ms, "application/vnd.ms-excel", fileName);}}

关键代码导出图片

    private void AddPieChart(ISheet sheet, IWorkbook workbook, string fileurl, int row, int col){try{string Paths = Path.GetFullPath("..");string path = "";foreach (var item in Paths.Split("\\")){if (item == "PandaSewerage"){break;}path += item + "\\";}string stringPath = path.TrimEnd('\\') + $"{fileurl.Replace("/", "\\")}";if (System.IO.File.Exists(stringPath)){string FileName = stringPath;byte[] bytes = System.IO.File.ReadAllBytes(FileName);if (!string.IsNullOrEmpty(FileName)){int pictureIdx = workbook.AddPicture(bytes, NPOI.SS.UserModel.PictureType.JPEG);HSSFPatriarch patriarch = (HSSFPatriarch)sheet.CreateDrawingPatriarch();HSSFClientAnchor anchor = new HSSFClientAnchor(0, 0, 30, 30, col, row, col+1 , row+1 );//##处理照片位置,【图片左上角为(col, row)第row+1行col+1列,右下角为( col +1, row +1)第 col +1+1行row +1+1列,宽为100,高为50HSSFPicture pict = (HSSFPicture)patriarch.CreatePicture(anchor, pictureIdx);// pict.Resize();这句话一定不要,这是用图片原始大小来显示}}}catch (Exception ex){}}

效果图:

代码简单说明:

显示图片核心代码为【HSSFClientAnchor】这个方法,具体说明如下:

dx1 dy1 起始单元格中的x,y坐标.

dx2 dy2 结束单元格中的x,y坐标

col1,row1 指定起始的单元格,下标从0开始

col2,row2 指定结束的单元格 ,下标从0开始

.NET Core导出带图片的Excel相关推荐

  1. 导出带图片的Excel报表

    导出带图片的Excel报表 先引用 Microsoft.Office.Tools.Excel.v4.0.Utilities.dll程序集,然后在后台页面引用using Excel = Microsof ...

  2. 导出带图片的excel

    昨天导excel 发现有带图片的,找到了ruoyi人家说得自己扩展,留了个思路终于放进去了 第一步要把url转为byte[] /*** 从输入流中获取数据** @param inStream 输入流* ...

  3. jxl实现写入excel模板及导出(带图片)

    在上一片博客中我用的是freemarker(操作简单),试了很多种方法就是没有把带图片的excel导出来,没办法就换jxl来实现.好了下面就开始进入正题: 第一步:pom.xml中添加jxl的依赖如下 ...

  4. Excel导出带图片详解

    Excel导出带图片详解 导出模板 一.引入的jar <dependency><groupId>org.apache.poi</groupId><artifa ...

  5. Java带图片的excel数据导入

    带图片的EXCEL数据导入 这里使用的是POI,所以这里使用的很杂,不过方便对它们的了解.模板下载与图片导出到excel都不一样. 下面会把对应连接贴上. 带入依赖:不要使用3.17的版本,直接上代码 ...

  6. 通过Java批量导出带有图片的Excel文件数据

    批量导出带有图片的Excel文件 一.思路解析 二.关键源码 三.总结 Java通过POI或者一些常见的Excel工具类能够轻易导出后台的结构化数据,但是最近面临一个新需求,需要将对应记录数据和图片网 ...

  7. XLSX实现导出带样式的Excel表格的坑

    XLSX导出带样式的Excel表格失败 导入XLSX xlsx-style的使用 项目的要求,需要导出一个结果到Excel表格中,因为所以,没有用Java的方式去实现,而选择了Vue前端直接导出的方式 ...

  8. Obsidian Pandoc导出带图片的word docx

    Obsidian Pandoc导出带图片的docx 总结 因为有时候需要把文档发给别人,用word更方便一点,体验了一下用Obsidian Pandoc插件转docx,体验还可以,基本的内容:图片.标 ...

  9. Java导出带格式的Excel数据到Word表格

    在Word中创建报告时,我们经常会遇到这样的情况:我们需要将数据从Excel中复制和粘贴到Word中,这样读者就可以直接在Word中浏览数据,而不用打开Excel文档.在本文中,您将学习如何使用Spi ...

最新文章

  1. #HTTP协议学习# (二)基本认证
  2. 人民大学提出听音识物AI框架,不用人工标注,嘈杂环境也能Hold住,还可迁移到物体检测...
  3. CV多任务学习笔记 yolop
  4. C++文件操作:fopen / fread / fwrite
  5. VTK:vtkCellArray用法实战
  6. MFC中添加的ID资源号提示找不到声名问题
  7. 独家!币安被盗原因找到了!7074 枚比特币竟是这样丢掉的
  8. PhoneGap跨平台移动应用开发框架体验
  9. Foxit PDF SDK 下载地址
  10. 为什么模板不支持分离编译
  11. IPv6技术精要--第5章 IPv6公网单播地址
  12. php-ftm,FTM/MTF的激素种类
  13. java实现阿里云接口发送短信验证码
  14. [HITSC]哈工大2020春软件构造Lab3实验报告
  15. keep T 不是 KG等级_Lifestyle | 做Keep没有动力?一周的健身计划都在这里了!
  16. 微信小程序点击--实现带字母索引的城市列表
  17. Android合并音频文件
  18. Unable to resolve service for type`***` while attempting to activatre `***`
  19. android 视频大小压缩,Android视频压缩(亲测有效)方便简单易用
  20. UNIX网络编程源码

热门文章

  1. 【人工智能】自动驾驶技术的优势、局限性及未来发展趋势
  2. UnityWebRequest.Post问题
  3. Job for rabbitmq-server.service failed because the control process exited with error code. See “syst
  4. ie如何导入html文件类型,Magicodes.IE: 导入导出通用库,支持Dto导入导出以及动态导出,支持Excel、Word、Pdf和Html。...
  5. 三周速通AWS Certified Solutions Architect - Associate(SAA-C03)经验分享
  6. 机器学习--决策树算法
  7. 锁存器(latch),触发器(flip-flop),寄存器(register)
  8. 一个屌丝程序猿的人生(七十)
  9. 寒门难再出贵子(4),一篇值得思考的文章
  10. 猛虎训练营第二日缩影