.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 进入…...
MTK NV数据损坏 刷机、串号修复、串号修改 ,基带调试 工具教程
MTK 机型刷机工具 SP Flash Tool 最常用的 MTK 芯片刷机工具,支持通过 USB 线刷固件(ROM)。需下载与机型匹配的 Scatter 文件(MTxxxx_Android_scatter.txt)和固件包。操作时需进入设备的 BROM 模式(通常通…...
UML/结构/创建/行为—计算机等级考试—软件设计师考前备忘录—东方仙盟
UML → 创建型 5 种 → 结构型 7 种 → 行为型 11 种每种:定义(教材版) 1 道真题选择题你直接复制进 Word,考前背这一篇就够。一、UML 核心考点(上午选择 下午应用题)1. 用例图(Use Case&#…...
实战指南:基于快马平台构建企业级openclaw启动框架,涵盖多任务与监控
实战指南:基于快马平台构建企业级openclaw启动框架,涵盖多任务与监控 在实际项目中,openclaw作为一款强大的数据抓取工具,其启动过程往往需要适配复杂的业务场景。传统的单任务启动方式已经无法满足企业级需求,我们需…...
CH32V003实战:PWM+DMA高效驱动WS2812B全彩灯带
1. 为什么选择PWMDMA驱动WS2812B? 第一次接触WS2812B灯带时,我尝试用最基础的GPIO翻转配合延时函数来控制,结果灯带要么不亮,要么颜色错乱。后来才明白,这种智能灯带对时序要求极其严格,普通MCU用软件延时…...
提升餐饮运营效率:用快马AI快速生成小龙虾库存与销售数据看板
最近在帮朋友优化他的小龙虾餐饮店运营流程,发现传统的手工记录库存和销售数据实在太费时费力了。于是尝试用InsCode(快马)平台快速搭建了一个数据管理工具,效果出乎意料的好。这里分享下具体实现思路和实际使用体验。 为什么需要这个工具 小龙虾餐饮店每…...
威纶通MT8102iE触摸屏中文用户名显示不全?手把手教你用EasyBuilder Pro V6.09.01.357s搞定
威纶通MT8102iE触摸屏中文用户名显示异常的深度解决方案 在工业自动化控制系统中,人机界面(HMI)作为操作人员与设备交互的重要窗口,其用户体验直接影响着生产效率。威纶通(Weintek)MT8102iE作为一款广泛应用于工业场景的触摸屏,其用户管理功能…...
Whisper.cpp 跨平台编译与语音识别实战指南
1. Whisper.cpp 是什么?能做什么? 第一次接触 Whisper.cpp 是在一个语音转文字的需求场景中。当时需要处理大量会议录音,但发现主流的语音识别工具要么需要联网,要么对硬件要求极高。直到发现了这个基于 C 实现的轻量级解决方案&a…...
解锁AI绘图效率工具:ComfyUI插件优化创意工作流指南
解锁AI绘图效率工具:ComfyUI插件优化创意工作流指南 【免费下载链接】ComfyUI_essentials 项目地址: https://gitcode.com/gh_mirrors/co/ComfyUI_essentials 在AI绘图领域,创作者常常面临工作流效率低下、细节控制不足等问题。ComfyUI作为强大的…...
gallery性能分析工具:找出本地AI平台的性能瓶颈
gallery性能分析工具:找出本地AI平台的性能瓶颈 【免费下载链接】gallery A gallery that showcases on-device ML/GenAI use cases and allows people to try and use models locally. 项目地址: https://gitcode.com/GitHub_Trending/gallery44/gallery 在…...
终极指南:raylib轻量级游戏开发库的快速上手与实战应用
终极指南:raylib轻量级游戏开发库的快速上手与实战应用 【免费下载链接】raylib A simple and easy-to-use library to enjoy videogames programming 项目地址: https://gitcode.com/GitHub_Trending/ra/raylib raylib是一个简单易用的游戏编程库࿰…...
