.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博客
如果您喜欢此文章,请收藏、点赞、评论,谢谢,祝您快乐每一天。
相关文章:
.NET Core NPOI 导出图片到Excel指定单元格并自适应宽度
NPOI:支持xlsx,.xls,版本>2.5.3 XLS:HSSFWorkbook,主要前缀HSS, XLSX:XSSFWorkbook,主要前缀XSS,using NPOI.XSSF.UserModel; 1、导出Excel添加图片效果࿰…...
python bs4 selenium 查找a href=javascript:();的实际点击事件和url
在使用 BeautifulSoup 和 Selenium 时,处理 href"javascript:;" 的链接需要一些额外的步骤,因为这些链接不直接指向一个 URL,而是通过 JavaScript 代码来执行某些操作。这可能包括导航到另一个页面、触发模态窗口、显示/隐藏内容等…...
三 BH1750 光感驱动调试1
一 扫描设备 查看手册 BH1750 光感模块 寄存器地址为 0x23 官方手册 : http://rohmfs.rohm.com/en/products/databook/datasheet/ic/sensor/light/bh1750fvi-e.pdf su 然后用 i2cdetect 扫描设备: 拨,插 对比, 探测设备挂载在 /dev/i2c-5 上, 从设备地址为 0x23 二 …...
UE材质节点Fresnel
Fresnel节点 ExponentIn 控制边缘透明度 BaseReflectFractionIn 控制中心透明度...
linux的大内核锁与顺序锁
大内核锁 Linux大内核锁(Big Kernel Lock,BKL)是Linux内核中的一种锁机制,用于保护内核资源,以下是关于它的详细介绍: 概念与作用 大内核锁是一种全局的互斥锁,在同一时刻只允许一个进程访问…...
用户注册模块用户校验(头条项目-05)
1 用户注册后端逻辑 1.1 接收参数 username request.POST.get(username) password request.POST.get(password) phone request.POST.get(phone) 1.2 校验参数 前端校验过的后端也要校验,后端的校验和前端的校验是⼀致的 # 判断参数是否⻬全 # 判断⽤户名是否…...
面向对象的基本概念
本篇,来介绍面向对象的基本概念。 1 面向过程与面向对象 面向过程与面向对象,是两种不同的编程思想。 1.1 面向过程 面向过程的思路,是按照问题的解决步骤,将程序分解为一个个具体的函数或过程,然后依次调用这些函数来实现程序的功能。 面向对象的程序设计,程序的执行…...
深度学习每周学习总结R4(LSTM-实现糖尿病探索与预测)
🍨 本文为🔗365天深度学习训练营 中的学习记录博客R6中的内容,为了便于自己整理总结起名为R4🍖 原作者:K同学啊 | 接辅导、项目定制 目录 0. 总结1. LSTM介绍LSTM的基本组成部分如何理解与应用LSTM 2. 数据预处理3. 数…...
如何使用 PHP 操作亚马逊 S3 对象云存储
以下是使用PHP与亚马逊S3对象云存储(也有其他支持S3协议的云存储服务,原理类似)进行交互的常见文档接口使用示例,涵盖了基本的操作如上传文件、下载文件、删除文件、列举文件等内容。 ### 前提条件 1. 首先,你需要获取…...
26_Redis RDB持久化
从这个模块开始带领大家来学习Redis分布式缓存的相关内容,主要学习目标见下: 数据丢失问题:实现Redis数据持久化(RDB和AOF)并发能力问题:搭建Redis主从集群,实现读写分离故障恢复问题:利用Redis哨兵模式,实现健康检测和自动恢复存储能力问题:搭建Redis分片集群,利用…...
标准Android开发jdk和gradle和gradle AGP和AndroidStudio对应版本
还在为用什么gradle版本烦恼吗?编译不过IDE不开始下载第三方库吗?是时候匹配下你的gradle编译版本了: 1.Gradle 各版本支持的 JDK 版本范围如下: Gradle 版本最低支持 JDK最高支持 JDK7.0 - 7.6JDK 8JDK 178.0 - 8.2JDK 11JDK 1…...
太速科技-628-基于VU3P的双路100G光纤加速计算卡
基于VU3P的双路100G光纤加速计算卡 一、板卡概述 基于Xilinx UltraScale16 nm VU3P芯片方案基础上研发的一款双口100 G FPGA光纤以太网PCI-Express v3.0 x16智能加速计算卡,该智能卡拥有高吞吐量、低延时的网络处理能力以及辅助CPU进行网络功能卸载的能力…...
潜力巨大但道路曲折的量子计算
近一年来,由于工作的原因参观访问了一些量子产业园,接触了量子加密计算机、量子云计算等非常炫酷的概念性产品,这与自己一直认为的“量子技术仍然处于实验室研究阶段”的基本判断与认知产生了强烈的冲突,一刹那间,心中…...
LabVIEW驱动电机实现样品自动搜索
利用LabVIEW控制电机驱动相机在XY平面上进行扫描,以检测样品位置。样品最初可能位于相机视野范围之外,需要实现自动搜索样品位置并完成精确定位扫描的功能。该系统需具有以下特点: 高效搜索:能够快速确定样品位置,缩短…...
React Native Hooks开发指南
一、什么是Hooks Hooks 是 React 16.8 的新增特性。在不编写 class 的情况下使用 state 以及其他的 React 特性。Hooks 是一种在函数式组件中使用有状态函数的方法。 二、类组件 componentDidMount、componentDidUpdate 和 componentWillUnmount 这三个函数的组合。 三、常用…...
腾讯云AI代码助手编程挑战赛-厨房助手之AI大厨
腾讯云AI代码助手编程挑战赛-厨房助手之AI大厨 作品简介 身处当今如火箭般迅猛发展的互联网时代,智能聊天助手已然化身成为提升用户体验的关键利器,全方位渗透至人们的数字生活。 紧紧跟随着这股汹涌澎湃的时代浪潮,我毅然投身于极具挑战性…...
ubuntu22.04 gcc,g++从10.5切换到低版本9.5
一、安装gcc-9.5 mkdir gcc cd gcc sudo apt-get download $(apt-cache depends --recurse --no-recommends --no-suggests --no-conflicts --no-breaks --no-replaces --no-enhances --no-pre-depends gcc-9 | grep -v i386 | grep "^\w") sudo dpkg -i *.deb sudo…...
在 WSL 中使用 Jupyter Notebook 的 TensorBoard 启动问题与解决方法
在 WSL(Windows Subsystem for Linux)环境中,通过 Jupyter Notebook 使用 %tensorboard --logdir outputs有时会出现 “Timed out waiting for TensorBoard to start” 错误。常见原因通常是先前的 TensorBoard 进程尚未结束,占用…...
Spring Boot 2 学习全攻略
Spring Boot 2 学习资料 Spring Boot 2 学习资料 Spring Boot 2 学习资料 在当今快速发展的 Java 后端开发领域,Spring Boot 2 已然成为一股不可忽视的强大力量。它简化了 Spring 应用的初始搭建以及开发过程,让开发者能够更加专注于业务逻辑的实现&am…...
海豚调度DolphinScheduler-3.1.9配置windows本地开发环境
源代码下载地址https://dolphinscheduler.apache.org/zh-cn/docs/3.1.9 1.Zookeeper安装与使用 如图下载解压zookeeper安装包,并创建data和log目录 下载地址 https://archive.apache.org/dist/zookeeper/zookeeper-3.6.4/apache-zookeeper-3.6.4-bin.tar.gz 进入…...
变量 varablie 声明- Rust 变量 let mut 声明与 C/C++ 变量声明对比分析
一、变量声明设计:let 与 mut 的哲学解析 Rust 采用 let 声明变量并通过 mut 显式标记可变性,这种设计体现了语言的核心哲学。以下是深度解析: 1.1 设计理念剖析 安全优先原则:默认不可变强制开发者明确声明意图 let x 5; …...
DIY|Mac 搭建 ESP-IDF 开发环境及编译小智 AI
前一阵子在百度 AI 开发者大会上,看到基于小智 AI DIY 玩具的演示,感觉有点意思,想着自己也来试试。 如果只是想烧录现成的固件,乐鑫官方除了提供了 Windows 版本的 Flash 下载工具 之外,还提供了基于网页版的 ESP LA…...
ServerTrust 并非唯一
NSURLAuthenticationMethodServerTrust 只是 authenticationMethod 的冰山一角 要理解 NSURLAuthenticationMethodServerTrust, 首先要明白它只是 authenticationMethod 的选项之一, 并非唯一 1 先厘清概念 点说明authenticationMethodURLAuthenticationChallenge.protectionS…...
深入解析C++中的extern关键字:跨文件共享变量与函数的终极指南
🚀 C extern 关键字深度解析:跨文件编程的终极指南 📅 更新时间:2025年6月5日 🏷️ 标签:C | extern关键字 | 多文件编程 | 链接与声明 | 现代C 文章目录 前言🔥一、extern 是什么?&…...
Java面试专项一-准备篇
一、企业简历筛选规则 一般企业的简历筛选流程:首先由HR先筛选一部分简历后,在将简历给到对应的项目负责人后再进行下一步的操作。 HR如何筛选简历 例如:Boss直聘(招聘方平台) 直接按照条件进行筛选 例如:…...
Swagger和OpenApi的前世今生
Swagger与OpenAPI的关系演进是API标准化进程中的重要篇章,二者共同塑造了现代RESTful API的开发范式。 本期就扒一扒其技术演进的关键节点与核心逻辑: 🔄 一、起源与初创期:Swagger的诞生(2010-2014) 核心…...
大语言模型(LLM)中的KV缓存压缩与动态稀疏注意力机制设计
随着大语言模型(LLM)参数规模的增长,推理阶段的内存占用和计算复杂度成为核心挑战。传统注意力机制的计算复杂度随序列长度呈二次方增长,而KV缓存的内存消耗可能高达数十GB(例如Llama2-7B处理100K token时需50GB内存&a…...
USB Over IP专用硬件的5个特点
USB over IP技术通过将USB协议数据封装在标准TCP/IP网络数据包中,从根本上改变了USB连接。这允许客户端通过局域网或广域网远程访问和控制物理连接到服务器的USB设备(如专用硬件设备),从而消除了直接物理连接的需要。USB over IP的…...
Mysql8 忘记密码重置,以及问题解决
1.使用免密登录 找到配置MySQL文件,我的文件路径是/etc/mysql/my.cnf,有的人的是/etc/mysql/mysql.cnf 在里最后加入 skip-grant-tables重启MySQL服务 service mysql restartShutting down MySQL… SUCCESS! Starting MySQL… SUCCESS! 重启成功 2.登…...
基于IDIG-GAN的小样本电机轴承故障诊断
目录 🔍 核心问题 一、IDIG-GAN模型原理 1. 整体架构 2. 核心创新点 (1) 梯度归一化(Gradient Normalization) (2) 判别器梯度间隙正则化(Discriminator Gradient Gap Regularization) (3) 自注意力机制(Self-Attention) 3. 完整损失函数 二…...
