.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博客

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

相关推荐
不讲废话的小白2 小时前
给 Excel 整列空格文字内容加上前缀:像给文字穿衣服一样简单!
c语言·excel
时光追逐者9 小时前
C#/.NET/.NET Core技术前沿周刊 | 第 46 期(2025年7.7-7.13)
c#·.net·.netcore
王柏龙10 小时前
aspnetcore Mvc配置选项中的ModelMetadataDetailsProviders
mvc·.netcore
weixin_4432906919 小时前
【脚本系列】如何使用 Python 脚本对同一文件夹中表头相同的 Excel 文件进行合并
开发语言·python·excel
谢尔登20 小时前
office-ai整合excel
人工智能·excel
djk888820 小时前
.net winfrom 获取上传的Excel文件 单元格的背景色
excel
水...琥珀1 天前
【日常技能】excel的vlookup 匹配#N/A
excel
江沉晚呤时1 天前
在 C# 中调用 Python 脚本:实现跨语言功能集成
python·microsoft·c#·.net·.netcore·.net core
喵叔哟1 天前
3. 【Blazor全栈开发实战指南】--Blazor是什么?为什么选择Blazor?
c#·.netcore
流形填表2 天前
AI 助力:如何批量提取 Word 表格字段并导出至 Excel
开发语言·人工智能·word·excel·办公自动化