.NET Core导出带图片的Excel
本次实现技术为.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相关推荐
- 导出带图片的Excel报表
导出带图片的Excel报表 先引用 Microsoft.Office.Tools.Excel.v4.0.Utilities.dll程序集,然后在后台页面引用using Excel = Microsof ...
- 导出带图片的excel
昨天导excel 发现有带图片的,找到了ruoyi人家说得自己扩展,留了个思路终于放进去了 第一步要把url转为byte[] /*** 从输入流中获取数据** @param inStream 输入流* ...
- jxl实现写入excel模板及导出(带图片)
在上一片博客中我用的是freemarker(操作简单),试了很多种方法就是没有把带图片的excel导出来,没办法就换jxl来实现.好了下面就开始进入正题: 第一步:pom.xml中添加jxl的依赖如下 ...
- Excel导出带图片详解
Excel导出带图片详解 导出模板 一.引入的jar <dependency><groupId>org.apache.poi</groupId><artifa ...
- Java带图片的excel数据导入
带图片的EXCEL数据导入 这里使用的是POI,所以这里使用的很杂,不过方便对它们的了解.模板下载与图片导出到excel都不一样. 下面会把对应连接贴上. 带入依赖:不要使用3.17的版本,直接上代码 ...
- 通过Java批量导出带有图片的Excel文件数据
批量导出带有图片的Excel文件 一.思路解析 二.关键源码 三.总结 Java通过POI或者一些常见的Excel工具类能够轻易导出后台的结构化数据,但是最近面临一个新需求,需要将对应记录数据和图片网 ...
- XLSX实现导出带样式的Excel表格的坑
XLSX导出带样式的Excel表格失败 导入XLSX xlsx-style的使用 项目的要求,需要导出一个结果到Excel表格中,因为所以,没有用Java的方式去实现,而选择了Vue前端直接导出的方式 ...
- Obsidian Pandoc导出带图片的word docx
Obsidian Pandoc导出带图片的docx 总结 因为有时候需要把文档发给别人,用word更方便一点,体验了一下用Obsidian Pandoc插件转docx,体验还可以,基本的内容:图片.标 ...
- Java导出带格式的Excel数据到Word表格
在Word中创建报告时,我们经常会遇到这样的情况:我们需要将数据从Excel中复制和粘贴到Word中,这样读者就可以直接在Word中浏览数据,而不用打开Excel文档.在本文中,您将学习如何使用Spi ...
最新文章
- #HTTP协议学习# (二)基本认证
- 人民大学提出听音识物AI框架,不用人工标注,嘈杂环境也能Hold住,还可迁移到物体检测...
- CV多任务学习笔记 yolop
- C++文件操作:fopen / fread / fwrite
- VTK:vtkCellArray用法实战
- MFC中添加的ID资源号提示找不到声名问题
- 独家!币安被盗原因找到了!7074 枚比特币竟是这样丢掉的
- PhoneGap跨平台移动应用开发框架体验
- Foxit PDF SDK 下载地址
- 为什么模板不支持分离编译
- IPv6技术精要--第5章 IPv6公网单播地址
- php-ftm,FTM/MTF的激素种类
- java实现阿里云接口发送短信验证码
- [HITSC]哈工大2020春软件构造Lab3实验报告
- keep T 不是 KG等级_Lifestyle | 做Keep没有动力?一周的健身计划都在这里了!
- 微信小程序点击--实现带字母索引的城市列表
- Android合并音频文件
- Unable to resolve service for type`***` while attempting to activatre `***`
- android 视频大小压缩,Android视频压缩(亲测有效)方便简单易用
- UNIX网络编程源码
热门文章
- 【人工智能】自动驾驶技术的优势、局限性及未来发展趋势
- UnityWebRequest.Post问题
- Job for rabbitmq-server.service failed because the control process exited with error code. See “syst
- ie如何导入html文件类型,Magicodes.IE: 导入导出通用库,支持Dto导入导出以及动态导出,支持Excel、Word、Pdf和Html。...
- 三周速通AWS Certified Solutions Architect - Associate(SAA-C03)经验分享
- 机器学习--决策树算法
- 锁存器(latch),触发器(flip-flop),寄存器(register)
- 一个屌丝程序猿的人生(七十)
- 寒门难再出贵子(4),一篇值得思考的文章
- 猛虎训练营第二日缩影