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

embedded/2025/1/15 21:17:03/

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.ppmy.cn/embedded/154201.html

相关文章

线程间通信

线程间通信&#xff08;Inter-Thread Communication, 简称ITC&#xff09;是指在多线程编程中&#xff0c;不同线程之间如何交换信息或协调彼此的行为。良好的线程间通信机制是构建高效、可靠的并发程序的关键。Java语言提供了多种内置工具和库来支持线程间的通信&#xff0c;包…

基于mediapipe的手势游戏控制

基于mediapipe的手势游戏控制 ​ 玩游戏&#xff0c;那不是有手就行!!! mediapipe介绍 ​ Mediapipe是Google在2019年开发并提出的一款开源的跨平台多媒体处理框架&#xff0c;用于构建基于机器学习的应用程序&#xff0c;特别是涉及到计算机视觉、音频处理、姿势估计等领域。…

汽车故障码U007388 PCAN Bus OFF 解析和处理方法

一、故障码解析 含义&#xff1a; U007388 是一个汽车故障码&#xff0c;“U” 开头的故障码一般涉及网络通信故障。PCAN&#xff08;Power Control Area Network&#xff09;通常是指动力控制局域网。“Bus OFF” 表明该网络处于离线状态&#xff0c;意味着 PCAN 网络中的某些…

leetcode 87. 扰乱字符串

题目&#xff1a;87. 扰乱字符串 - 力扣&#xff08;LeetCode&#xff09; dfs状态记录。 dfs&#xff1a;以两个字符串 [a1,a2,a3,a4] 和 [b1,b2,b3,b4]为例&#xff0c;可以往下搜以下几种情况&#xff0c;一种情况为true就能返回true F([a1],[b1]) && F([a2,a3,a4…

Linux 常见运营维护,从安装软件开始,到mysql,php,redis,tomcat等软件安装,配置,优化,持续更新中。。。

下载centos7 CentOS 7 完整版&#xff08;DVD&#xff09;&#xff1a; https://mirrors.aliyun.com/centos/7/isos/x86_64/CentOS-7-x86_64-DVD-2009.isoCentOS 7 最小化版&#xff08;Minimal&#xff09;&#xff1a; https://mirrors.aliyun.com/centos/7/isos/x86_64/C…

[ComfyUI]接入Google的Whisk,巨物融合玩法介绍

一、介紹​ 前段时间&#xff0c;谷歌推出了一个图像生成工具whisk&#xff0c;有一个很好玩的图片融合玩法&#xff0c;分别提供三张图片,就可以任何组合来生成图片。​ ​ 最近我发现有人开发了对应的ComfyUI插件&#xff0c;对whisk做了支持&#xff0c;就来体验了下&#…

微信小程序:实现首页权限菜单效果

一、效果 二、数据库表 1、菜单表 包含权限名称,模块名称,图标名称,页面跳转的方法,菜单是否显示栏位 2、角色对应权限表 包含角色id和权限id,这个表将角色和菜单角色连接,给角色赋予权限功能 3、 账户表 用于绑定账号隶属于什么角色,绑定的角色表 4、角色表 菜单的…

【机器学习】数学知识:指数函数(exp)

在数学和编程中&#xff0c;exp 表示指数函数&#xff0c;即自然常数 e 为底的幂函数。 其数学表达式为&#xff1a; 其中&#xff1a; e 是一个常数&#xff0c;称为自然对数的底数&#xff0c;其值约为 2.718。x 是指数。 性质 基本性质&#xff1a; 与自然对数的关系&…