.NET Core NPOI 导出图片到Excel指定单元格并自适应宽度

NPOI:支持xlsx,.xls,版本=>2.5.3

XLS:HSSFWorkbook,主要前缀HSS,

XLSX:XSSFWorkbook,主要前缀XSS,using NPOI.XSSF.UserModel;

1、导出Excel添加图片效果,以及可自适应(以下有调整过宽度)

2、Nuget安装NPOI

直接安装最新版本 - 2.5.3

3、最新版本数据类型大小写有改动

之前版本是全部大小,现在的是首字母大写

#region 程序集 NPOI, Version=2.5.3.0, Culture=neutral, PublicKeyToken=0df73ec7942b34e1

// C:\Users\DELL\.nuget\packages\npoi\2.5.3\lib\netstandard2.0\NPOI.dll

#endregion

namespace NPOI.SS.UserModel

{

public enum CellType

{

Unknown = -1,

Numeric = 0,

String = 1,

Formula = 2,

Blank = 3,

Boolean = 4,

Error = 5

}

}

4、JSON数据

{ "id": 1, "productNum": 10, "addTime": "2021-07-15T08:59:49.997", "updateTime": "0001-01-01T00:00:00", "productCover": "AmazonProduct/20210715/bc21aee9-b35b-49e6-a50c-7d95178ff487.jpg", "productName": "DEERC DE22 GPS Drone with 4K Camera 2-axis Gimbal, EIS Anti-Shake, 5G FPV Live Video Brushless Motor, Auto Return Home, Selfie, Follow Me, Waypoints, Circle Fly 52Min Flight with Carrycase", "productPrice": 123.00 }, { "id": 2, "productNum": 66, "addTime": "2021-07-15T08:58:59.257", "updateTime": "0001-01-01T00:00:00", "productCover": "AmazonProduct/20210715/cea4ff1b-6d5f-46fa-9bea-3745cd80a7d5.jpg", "productName": "Neleus Men's Lightweight Workout Running Athletic Shorts with Pockets", "productPrice": 26.89 }

5、导出xls格式代码

#region version=2021.07.15 导出 - Excel - xls - 例子

HttpPost

public IActionResult ExcelXls(Model_Request requestModel)

{

try

{

HSSFWorkbook workbook = new HSSFWorkbook(); //创建一个工作簿

ISheet sheet = workbook.CreateSheet("labelName"); //创建一个sheet

//设置excel列宽,像素是1/256

sheet.SetColumnWidth(0, 18 * 256);

sheet.SetColumnWidth(1, 18 * 256);

IRow rowTitle = sheet.CreateRow(0);//创建表头行

rowTitle.CreateCell(0, CellType.String).SetCellValue("编号");

rowTitle.CreateCell(1, CellType.String).SetCellValue("产品封面");

rowTitle.CreateCell(2, CellType.String).SetCellValue("产品名称");

rowTitle.CreateCell(3, CellType.String).SetCellValue("产品价格");

rowTitle.CreateCell(4, CellType.String).SetCellValue("产品状态");

rowTitle.CreateCell(5, CellType.String).SetCellValue("产品数量");

rowTitle.CreateCell(6, CellType.String).SetCellValue("添加时间");

List<Model_Response> list = new List<Model_Response>();

list = new Data().List(requestModel);

if (list.Count > 0)

{

int rowline = 1; //从第二行开始(索引从0开始)

foreach (AmazonProductApplyModel_Response item in list)

{

IRow row = sheet.CreateRow(rowline);

row.Height = 80 * 20; //设置excel行高,像素点是1/20

row.CreateCell(0, CellType.String).SetCellValue(item.id); //编号

//===产品封面===

//将图片文件读入一个字符串

byte[] bytes = System.IO.File.ReadAllBytes(PathHelper.BaseDirectory() + item.productCover); //路径(加载图片完整路径)

int pictureIdx = workbook.AddPicture(bytes, PictureType.JPEG);

//把图片添加到相应的位置

HSSFPatriarch patriarch = (HSSFPatriarch)sheet.CreateDrawingPatriarch();

HSSFClientAnchor anchor = new HSSFClientAnchor(70, 10, 0, 0, 1, rowline, 2, rowline + 1);

HSSFPicture pict = (HSSFPicture)patriarch.CreatePicture(anchor, pictureIdx);

//===/产品封面===

row.CreateCell(2, CellType.String).SetCellValue(item.productName); //产品名称

row.CreateCell(3, CellType.String).SetCellValue(item.productPrice.ToString()); //产品价格

row.CreateCell(4, CellType.String).SetCellValue(item.productStatus); //产品状态

row.CreateCell(5, CellType.String).SetCellValue(item.productNum.ToString()); //补货数量

row.CreateCell(6, CellType.String).SetCellValue(item.addTime.ToString()); //添加时间

rowline++;

}

//设置自适应宽度

for (int columnNum = 0; columnNum < 7; columnNum++)

{

int columnWidth = sheet.GetColumnWidth(columnNum) / 256;

for (int rowNum = 1; rowNum <= sheet.LastRowNum; rowNum++)

{

IRow currentRow = sheet.GetRow(rowNum);

if (currentRow.GetCell(columnNum) != null)

{

ICell currentCell = currentRow.GetCell(columnNum);

int length = Encoding.Default.GetBytes(currentCell.ToString()).Length;

if (columnWidth < length)

{

columnWidth = length;

}

}

}

sheet.SetColumnWidth(columnNum, columnWidth * 256);

}

}

//保存文件

string name = Guid.NewGuid().ToString() + ".xls";

string path = AppDomain.CurrentDomain.BaseDirectory + "\\" + name;

using (Stream stream = System.IO.File.Create(path))

{

workbook.Write(stream);

}

return Json(new { c = 200, m = "导出成功", path = path });

}

catch (Exception ex)

{

}

finally

{

}

return Json(new { c = 200, m = "导出成功", path = path });

}

#endregion

6、导出xlsx格式代码

#region version=2021.07.15 导出 - Excel - xls - 例子

HttpPost

public IActionResult ExcelXls(Model_Request requestModel)

{

try

{

XSSFWorkbook workbook = new XSSFWorkbook(); //创建一个工作簿

ISheet sheet = workbook.CreateSheet("labelName"); //创建一个sheet

//设置excel列宽,像素是1/256

sheet.SetColumnWidth(0, 18 * 256);

sheet.SetColumnWidth(1, 18 * 256);

IRow rowTitle = sheet.CreateRow(0);//创建表头行

rowTitle.CreateCell(0, CellType.String).SetCellValue("编号");

rowTitle.CreateCell(1, CellType.String).SetCellValue("产品封面");

rowTitle.CreateCell(2, CellType.String).SetCellValue("产品名称");

rowTitle.CreateCell(3, CellType.String).SetCellValue("产品价格");

rowTitle.CreateCell(4, CellType.String).SetCellValue("产品状态");

rowTitle.CreateCell(5, CellType.String).SetCellValue("产品数量");

rowTitle.CreateCell(6, CellType.String).SetCellValue("添加时间");

List<Model_Response> list = new List<Model_Response>();

list = new Data().List(requestModel);

if (list.Count > 0)

{

int rowline = 1; //从第二行开始(索引从0开始)

foreach (AmazonProductApplyModel_Response item in list)

{

IRow row = sheet.CreateRow(rowline);

row.Height = 80 * 20; //设置excel行高,像素点是1/20

row.CreateCell(0, CellType.String).SetCellValue(item.id); //编号

//===产品封面===

//将图片文件读入一个字符串

byte[] bytes = System.IO.File.ReadAllBytes(PathHelper.BaseDirectory() + item.productCover); //路径(加载图片完整路径)

int pictureIdx = workbook.AddPicture(bytes, PictureType.JPEG);

//把图片添加到相应的位置

XSSFDrawing patriarch = (XSSFDrawing)sheet.CreateDrawingPatriarch();

XSSFClientAnchor anchor = new XSSFClientAnchor(70, 10, 0, 0, 1, rowline, 2, rowline + 1);

XSSFPicture pict = (XSSFPicture)patriarch.CreatePicture(anchor, pictureIdx);

//===/产品封面===

row.CreateCell(2, CellType.String).SetCellValue(item.productName); //产品名称

row.CreateCell(3, CellType.String).SetCellValue(item.productPrice.ToString()); //产品价格

row.CreateCell(4, CellType.String).SetCellValue(item.productStatus); //产品状态

row.CreateCell(5, CellType.String).SetCellValue(item.productNum.ToString()); //补货数量

row.CreateCell(6, CellType.String).SetCellValue(item.addTime.ToString()); //添加时间

rowline++;

}

//设置自适应宽度

for (int columnNum = 0; columnNum < 7; columnNum++)

{

int columnWidth = sheet.GetColumnWidth(columnNum) / 256;

for (int rowNum = 1; rowNum <= sheet.LastRowNum; rowNum++)

{

IRow currentRow = sheet.GetRow(rowNum);

if (currentRow.GetCell(columnNum) != null)

{

ICell currentCell = currentRow.GetCell(columnNum);

int length = Encoding.Default.GetBytes(currentCell.ToString()).Length;

if (columnWidth < length)

{

columnWidth = length;

}

}

}

sheet.SetColumnWidth(columnNum, columnWidth * 256);

}

}

//保存文件

string name = Guid.NewGuid().ToString() + ".xls";

string path = AppDomain.CurrentDomain.BaseDirectory + "\\" + name;

using (Stream stream = System.IO.File.Create(path))

{

workbook.Write(stream);

}

return Json(new { c = 200, m = "导出成功", path = path });

}

catch (Exception ex)

{

}

finally

{

}

return Json(new { c = 200, m = "导出成功", path = path });

}

#endregion

参考文章:【小5聊】C# NPOI添加图片到Excel指定单元格并自适应宽度_npoi excle 插入图片-CSDN博客

如果您喜欢此文章,请收藏、点赞、评论,谢谢,祝您快乐每一天。

相关推荐
CHENFU_JAVA9 小时前
使用EasyExcel实现Excel单元格保护:自由锁定表头和数据行
java·excel
葡萄城技术团队11 小时前
借助 LAMBDA 公式,实现单元格区域高效转换
excel
切糕师学AI15 小时前
.Net Core Web 架构(管道机制)的底层实现
中间件·系统架构·kestrel·mvc·.netcore·路由·请求管道
mudtools1 天前
使用二次封装的Excel COM 组件操作Excel\WPS ET中的区域、行和列
excel
揭老师高效办公3 天前
在Excel和WPS表格中拼接同行列对称的不连续数据
excel·wps表格
用户0332126663673 天前
Java 设置 Excel 行高列宽:告别手动调整,拥抱自动化高效!
java·excel
专注VB编程开发20年3 天前
.NET组件读取压缩包中的内存数据电子表格XLSX文件和图片,不需要解压
linux·服务器·windows·c#·.net·excel·zip
菌王3 天前
EXCEL自动调整列宽适应A4 A3 A2
excel
专注VB编程开发20年4 天前
对excel xlsx文件格式当成压缩包ZIP添加新的目录和文件后,OpenXml、NPOI、EPPlus、Spire.Office组件还能读出来吗
数据库·c#·excel
时光追逐者4 天前
C#/.NET/.NET Core技术前沿周刊 | 第 51 期(2025年8.18-8.24)
c#·.net·.netcore·.net core