.NET Core NPOI 导出图片到Excel指定单元格并自适应宽度

news2025/1/11 8:23:30

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2274812.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

NS2202X 系列 40V 输入 OVP 保护 IC

1 特性  最大输入电压&#xff1a; 40V  内部预设 2.1A 负载过流 OCP 保护  外置过流保护阈值可调节引脚&#xff0c;可悬空  外置 EN 使能控制引脚  内部预设 6V 输入过压 OVP 保护  输入 OVP 保护响应时间 20ns  内置 150 ℃过温…

Web前端基础知识(七)

要在JS中获取元素节点&#xff0c;需要使用DOM API提供的方法。 innerHTML&#xff1a;不仅会返回一个纯文本&#xff0c;还可以解析一下这个文本中的语意。 innerText: 忽略HTML标记。 举例&#xff1a; <body> <div id"box1">这是一个ID选择器标签…

[Transformer] The Structure of GPT, Generative Pretrained Transformer

The Structure of Generative Pretrained Transformer Reference: The Transformer architecture of GPT models How GPT Models Work

欧拉公式和傅里叶变换

注&#xff1a;英文引文机翻&#xff0c;未校。 中文引文未整理去重&#xff0c;如有异常&#xff0c;请看原文。 Euler’s Formula and Fourier Transform Posted byczxttkl October 7, 2018 Euler’s formula states that e i x cos ⁡ x i sin ⁡ x e^{ix} \cos{x} i …

【python基础——异常BUG】

什么是异常(BUG) 检测到错误,py编译器无法继续执行,反而出现错误提示 如果遇到错误能继续执行,那么就捕获(try) 1.得到异常:try的执行,try内只可以捕获一个异常 2.预案执行:except后面的语句 3.传入异常:except … as uestcprint(uestc) 4.没有异常:else… 5.鉴定完毕,收尾的语…

Python 模块 Uvicorn 实战指南

文章目录 1. 介绍和安装1.1 介绍1.2 安装 2. 创建基础应用2.1 简单的 HTTP 应用2.2 添加日志 3. 实现高级功能3.1 支持 WebSocket3.2 优化运行性能 4. Nginx 配置反向代理4.1 安装与配置 Nginx4.2 启用 SSL 支持4.3 性能优化建议 5. 常见问题与解决方案5.1 高并发问题5.2 WebSo…

音频数据增强:提升音频信号质量的多种技术

在音频处理和机器学习领域&#xff0c;音频数据增强是一种常用的技术&#xff0c;旨在通过对原始音频信号进行各种变换和处理&#xff0c;生成更多样化的训练数据。   这不仅可以提高模型的鲁棒性&#xff0c;还能改善其在真实世界应用中的表现。本文将介绍几种常用的音频数据…

uniapp vue2版本如何设置i18n

如何设置i18n在该软件设置过语言的情况下优先选择所设置语言&#xff0c;在没有设置的情况下&#xff0c;获取本系统默认语言就&#xff0c;将系统默认语言设置为当前选择语言。 1、下载依赖&#xff1a; npm install vue-i18n --save 2、创建相关文件&#xff08;在最外层&…

vulnhub靶场【DC系列】之9 the final 结束篇

前言 靶机&#xff1a;DC-8&#xff0c;IP地址为192.168.10.11&#xff0c;后续因为靶机重装&#xff0c;IP地址变为192.168.10.13 攻击&#xff1a;kali&#xff0c;IP地址为192.168.10.2 都采用VMWare&#xff0c;网卡为桥接模式 对于文章中涉及到的靶场以及工具&#xf…

网络安全 | 网络安全法规:GDPR、CCPA与中国网络安全法

网络安全 | 网络安全法规&#xff1a;GDPR、CCPA与中国网络安全法 一、前言二、欧盟《通用数据保护条例》&#xff08;GDPR&#xff09;2.1 背景2.2 主要内容2.3 特点2.4 实施效果与影响 三、美国《加利福尼亚州消费者隐私法案》&#xff08;CCPA&#xff09;3.1 背景3.2 主要内…

基于QT和C++的实时日期和时间显示

一、显示在右下角 1、timer.cpp #include "timer.h" #include "ui_timer.h" #include <QStatusBar> #include <QDateTime> #include <QMenuBar> Timer::Timer(QWidget *parent) :QMainWindow(parent),ui(new Ui::Timer) {ui->setup…

STM32小实验2

定时器实验 TIM介绍 TIM&#xff08;Timer&#xff09;定时器 定时器可以对输入的时钟进行计数&#xff0c;并在计数值达到设定值时触发中断 16位计数器、预分频器、自动重装寄存器的时基单元&#xff0c;在72MHz计数时钟下可以实现最大59.65s的定时 不仅具备基本的定时中断…

【软考】软件设计师

「学习路线」&#xff08;推荐该顺序学习&#xff0c;按照先易后难排序&#xff09; 1、上午题—计算机系统&#xff08;5~6分&#xff09;[1.8; ] 2、上午题—程序设计语言&#xff08;固定6分&#xff09;[1.9; ] 3、下午题—试题一&#xff08;15分&#xff09; 4、上午题—…

2030年中国AI人才缺口或达400万,近屿智能助力AI人才储备增长

在当今数字化浪潮下&#xff0c;人工智能&#xff08;AI&#xff09;已成为推动各行业发展的关键力量。然而&#xff0c;吸引和留住 AI 人才正成为全球性难题&#xff0c;中国亦不例外。据麦肯锡 2022 年全球人工智能商业高管调查&#xff0c;75% 的中国受访者在招聘数据科学家…

一块钱的RISC-V 32位芯片

‍‍ ‍‍之前跟一个朋友聊天&#xff0c;说以后的芯片一定是越来越趋向于定制化&#xff0c;比如我们需要一个ADC芯片&#xff0c;这颗ADC芯片需要有串口功能&#xff0c;那就只开发一颗这样的芯片就好了&#xff0c;其他的功能都可以裁剪掉。 ➵➵➵➵➵➵➵➵➵➵➵➵➵➵➵…

rk3568平台Buildroot编译实践:内核rootfs定制 及常见编译问题

目录 编译前准备常规编译流程定制内核修改内核 参数并增量 保存修改rootfs并增量 保存修改rootfs包下载源rootfs软件包增删refBuildroot 是一个用于自动化构建嵌入式 Linux 系统的工具。它通过使用简单的配置文件和 Makefile,能够从源代码开始交叉编译出一个完整的、可以运行在…

机器翻译优缺点

随着科技的飞速发展&#xff0c;机器翻译是近年来翻译行业的热门话题&#xff0c;在人们的生活和工作中日益普及&#xff0c;使用机器能够提高翻译效率&#xff0c;降低成本。尽管关于机器翻译为跨语言交流带来了诸多便利&#xff0c;但在译文的正确率和局限性方面存在一定争议…

R 语言科研绘图 --- 折线图-汇总

在发表科研论文的过程中&#xff0c;科研绘图是必不可少的&#xff0c;一张好看的图形会是文章很大的加分项。 为了便于使用&#xff0c;本系列文章介绍的所有绘图都已收录到了 sciRplot 项目中&#xff0c;获取方式&#xff1a; R 语言科研绘图模板 --- sciRplothttps://mp.…

30天开发操作系统 第 12 天 -- 定时器 v1.0

前言 定时器(Timer)对于操作系统非常重要。它在原理上却很简单&#xff0c;只是每隔一段时间(比如0.01秒)就发送一个中断信号给CPU。幸亏有了定时器&#xff0c;CPU才不用辛苦地去计量时间。……如果没有定时器会怎么样呢?让我们想象一下吧。 假如CPU看不到定时器而仍想计量时…

自动化测试:6大关键脚本类型及使用要点

测试脚本在自动化测试中扮演着至关重要的角色&#xff0c;特别是常见的六种关键脚本类型及其使用范围和注意事项&#xff0c;它们能够确保系统在不同负载和环境下稳定运行&#xff0c;保障接口交互的准确性和安全性&#xff0c;从而节省时间和人力成本&#xff0c;推动项目高效…