当前位置: 首页 > news >正文

.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&#xff1a;支持xlsx&#xff0c;.xls&#xff0c;版本>2.5.3 XLS&#xff1a;HSSFWorkbook&#xff0c;主要前缀HSS&#xff0c; XLSX&#xff1a;XSSFWorkbook&#xff0c;主要前缀XSS&#xff0c;using NPOI.XSSF.UserModel; 1、导出Excel添加图片效果&#xff0…...

python bs4 selenium 查找a href=javascript:();的实际点击事件和url

在使用 BeautifulSoup 和 Selenium 时&#xff0c;处理 href"javascript:;" 的链接需要一些额外的步骤&#xff0c;因为这些链接不直接指向一个 URL&#xff0c;而是通过 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大内核锁&#xff08;Big Kernel Lock&#xff0c;BKL&#xff09;是Linux内核中的一种锁机制&#xff0c;用于保护内核资源&#xff0c;以下是关于它的详细介绍&#xff1a; 概念与作用 大内核锁是一种全局的互斥锁&#xff0c;在同一时刻只允许一个进程访问…...

用户注册模块用户校验(头条项目-05)

1 用户注册后端逻辑 1.1 接收参数 username request.POST.get(username) password request.POST.get(password) phone request.POST.get(phone) 1.2 校验参数 前端校验过的后端也要校验&#xff0c;后端的校验和前端的校验是⼀致的 # 判断参数是否⻬全 # 判断⽤户名是否…...

面向对象的基本概念

本篇,来介绍面向对象的基本概念。 1 面向过程与面向对象 面向过程与面向对象,是两种不同的编程思想。 1.1 面向过程 面向过程的思路,是按照问题的解决步骤,将程序分解为一个个具体的函数或过程,然后依次调用这些函数来实现程序的功能。 面向对象的程序设计,程序的执行…...

深度学习每周学习总结R4(LSTM-实现糖尿病探索与预测)

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客R6中的内容&#xff0c;为了便于自己整理总结起名为R4&#x1f356; 原作者&#xff1a;K同学啊 | 接辅导、项目定制 目录 0. 总结1. LSTM介绍LSTM的基本组成部分如何理解与应用LSTM 2. 数据预处理3. 数…...

如何使用 PHP 操作亚马逊 S3 对象云存储

以下是使用PHP与亚马逊S3对象云存储&#xff08;也有其他支持S3协议的云存储服务&#xff0c;原理类似&#xff09;进行交互的常见文档接口使用示例&#xff0c;涵盖了基本的操作如上传文件、下载文件、删除文件、列举文件等内容。 ### 前提条件 1. 首先&#xff0c;你需要获取…...

26_Redis RDB持久化

从这个模块开始带领大家来学习Redis分布式缓存的相关内容,主要学习目标见下: 数据丢失问题:实现Redis数据持久化(RDB和AOF)并发能力问题:搭建Redis主从集群,实现读写分离故障恢复问题:利用Redis哨兵模式,实现健康检测和自动恢复存储能力问题:搭建Redis分片集群,利用…...

标准Android开发jdk和gradle和gradle AGP和AndroidStudio对应版本

还在为用什么gradle版本烦恼吗&#xff1f;编译不过IDE不开始下载第三方库吗&#xff1f;是时候匹配下你的gradle编译版本了&#xff1a; 1.Gradle 各版本支持的 JDK 版本范围如下&#xff1a; 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智能加速计算卡&#xff0c;该智能卡拥有高吞吐量、低延时的网络处理能力以及辅助CPU进行网络功能卸载的能力…...

潜力巨大但道路曲折的量子计算

近一年来&#xff0c;由于工作的原因参观访问了一些量子产业园&#xff0c;接触了量子加密计算机、量子云计算等非常炫酷的概念性产品&#xff0c;这与自己一直认为的“量子技术仍然处于实验室研究阶段”的基本判断与认知产生了强烈的冲突&#xff0c;一刹那间&#xff0c;心中…...

LabVIEW驱动电机实现样品自动搜索

利用LabVIEW控制电机驱动相机在XY平面上进行扫描&#xff0c;以检测样品位置。样品最初可能位于相机视野范围之外&#xff0c;需要实现自动搜索样品位置并完成精确定位扫描的功能。该系统需具有以下特点&#xff1a; 高效搜索&#xff1a;能够快速确定样品位置&#xff0c;缩短…...

React Native Hooks开发指南

一、什么是Hooks Hooks 是 React 16.8 的新增特性。在不编写 class 的情况下使用 state 以及其他的 React 特性。Hooks 是一种在函数式组件中使用有状态函数的方法。 二、类组件 componentDidMount、componentDidUpdate 和 componentWillUnmount 这三个函数的组合。 三、常用…...

腾讯云AI代码助手编程挑战赛-厨房助手之AI大厨

腾讯云AI代码助手编程挑战赛-厨房助手之AI大厨 作品简介 身处当今如火箭般迅猛发展的互联网时代&#xff0c;智能聊天助手已然化身成为提升用户体验的关键利器&#xff0c;全方位渗透至人们的数字生活。 紧紧跟随着这股汹涌澎湃的时代浪潮&#xff0c;我毅然投身于极具挑战性…...

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&#xff08;Windows Subsystem for Linux&#xff09;环境中&#xff0c;通过 Jupyter Notebook 使用 %tensorboard --logdir outputs有时会出现 “Timed out waiting for TensorBoard to start” 错误。常见原因通常是先前的 TensorBoard 进程尚未结束&#xff0c;占用…...

Spring Boot 2 学习全攻略

Spring Boot 2 学习资料 Spring Boot 2 学习资料 Spring Boot 2 学习资料 在当今快速发展的 Java 后端开发领域&#xff0c;Spring Boot 2 已然成为一股不可忽视的强大力量。它简化了 Spring 应用的初始搭建以及开发过程&#xff0c;让开发者能够更加专注于业务逻辑的实现&am…...

海豚调度DolphinScheduler-3.1.9配置windows本地开发环境

源代码下载地址https://dolphinscheduler.apache.org/zh-cn/docs/3.1.9 1.Zookeeper安装与使用 如图下载解压zookeeper安装包&#xff0c;并创建data和log目录 下载地址 https://archive.apache.org/dist/zookeeper/zookeeper-3.6.4/apache-zookeeper-3.6.4-bin.tar.gz 进入…...

Spring Cloud AWS 实战教程:构建高可用 SQS 消息队列应用 [特殊字符]

Spring Cloud AWS 实战教程&#xff1a;构建高可用 SQS 消息队列应用 &#x1f680; 【免费下载链接】spring-cloud-aws The New Home for Spring Cloud AWS 项目地址: https://gitcode.com/gh_mirrors/sp/spring-cloud-aws Spring Cloud AWS 是一个强大的开源框架&…...

智能检索新范式,让AIAgent自主决策,提升RAG效率100%!

市面上的 RAG 系统&#xff0c;不管叫什么名字&#xff0c;本质上只有两种做法&#xff1a; 第一种&#xff0c;一次性检索。把用户的 query 向量化&#xff0c;从语料库里捞出 Top-K 个文档片段&#xff0c;拼成一个大 prompt 塞给模型。GraphRAG、HippoRAG、LightRAG 都属于…...

从Gamma函数到泊松分布:一个概率论中的含参量积分实用案例解析

Gamma函数与泊松分布&#xff1a;概率论中的数学之美 在数据科学和机器学习的实践中&#xff0c;概率分布构成了建模的基石。当我们深入探究这些分布背后的数学原理时&#xff0c;Gamma函数以其优雅的性质和广泛的应用脱颖而出。它不仅连接了离散与连续概率世界&#xff0c;更在…...

自制射频功率计:基于AD8317芯片,成本43欧元实现1MHz-10GHz测量

1. 项目概述&#xff1a;为什么我要亲手打造一台射频功率计在无人机和模型飞行器的圈子里&#xff0c;尤其是在我们荷兰FMS Spaarnwoude俱乐部&#xff0c;合规飞行是头等大事。我给我的八轴飞行器加装了云台相机和图传系统&#xff0c;工作在5.8GHz频段。根据本地法规&#xf…...

Onekey终极指南:如何5分钟快速获取Steam游戏清单的免费神器

Onekey终极指南&#xff1a;如何5分钟快速获取Steam游戏清单的免费神器 【免费下载链接】Onekey Onekey Steam Depot Manifest Downloader 项目地址: https://gitcode.com/gh_mirrors/one/Onekey 还在为复杂的Steam游戏清单下载而头疼吗&#xff1f;想要备份游戏资源却不…...

炉石传说自动对战助手:5分钟上手,彻底解放双手的终极指南

炉石传说自动对战助手&#xff1a;5分钟上手&#xff0c;彻底解放双手的终极指南 【免费下载链接】Hearthstone-Script Hearthstone script&#xff08;炉石传说脚本&#xff09; 项目地址: https://gitcode.com/gh_mirrors/he/Hearthstone-Script 还在为每天重复的炉石…...

如何让Rhino 3D模型在Blender中保持完整数据:import_3dm插件深度解析

如何让Rhino 3D模型在Blender中保持完整数据&#xff1a;import_3dm插件深度解析 【免费下载链接】import_3dm Blender importer script for Rhinoceros 3D files 项目地址: https://gitcode.com/gh_mirrors/im/import_3dm 当建筑师需要在Blender中渲染Rhino设计的建筑模…...

告别CAJ格式困扰:3分钟学会用开源工具将知网文献转为PDF

告别CAJ格式困扰&#xff1a;3分钟学会用开源工具将知网文献转为PDF 【免费下载链接】caj2pdf Convert CAJ (China Academic Journals) files to PDF. 转换中国知网 CAJ 格式文献为 PDF。佛系转换&#xff0c;成功与否&#xff0c;皆是玄学。 项目地址: https://gitcode.com/…...

DS4Windows终极指南:3步让PS手柄在PC上完美运行游戏

DS4Windows终极指南&#xff1a;3步让PS手柄在PC上完美运行游戏 【免费下载链接】DS4Windows Like those other ds4tools, but sexier 项目地址: https://gitcode.com/gh_mirrors/ds/DS4Windows 还在为PS手柄连接Windows电脑后无法识别而烦恼吗&#xff1f;&#x1f3ae…...

Windows开机自动全屏打开指定网页?一个快捷方式参数就搞定(Chrome/Edge/Firefox教程)

Windows开机自动全屏展示网页的终极方案每次开机都要手动打开浏览器、输入网址、切换全屏模式&#xff1f;这种重复操作不仅浪费时间&#xff0c;还容易在重要演示时手忙脚乱。想象一下&#xff1a;电脑启动后自动全屏显示你的仪表盘、会议日程或是监控大屏&#xff0c;整个过程…...