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

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

相关推荐
2301_800256114 小时前
【数据库】查找距离最近的电影院 pgSQL 存储过程片段
大数据·数据库·excel
城数派6 小时前
我国省市县三级逐日、逐月和逐年降水数据(Shp/Excel格式)1960-2024年
大数据·数据分析·excel
WKP94186 小时前
POI操作excel示例
java·开发语言·excel
用一个不重复的昵称6 小时前
excel 去除特殊字符,仅保留中英文字符和数字
excel
fensnote6 小时前
QT使用QtXlsxWriter读取excel文件
开发语言·qt·excel
高山莫衣7 小时前
读取手机通信录vCard文件(后缀vcf)文件并导出为excel表格
智能手机·excel
jogging7 小时前
mysql导出表结构信息到excel【DBeaver】
mysql·oracle·excel·导出·表结构
未来之窗软件服务7 小时前
万象EXCEL应用(二十二) Excel火锅店物资采购自动统计台账报表——东方仙盟炼气期
excel·仙盟创梦ide·东方仙盟·万象excel
缺点内向7 小时前
报表自动化进阶:Java精确操控Excel打印页边距的实战方法
java·开发语言·后端·自动化·excel
蹦蹦跳跳垂耳兔17 小时前
Excel中sumifs函数 #value报错
excel