【办公软件】C# NPOI 操作Excel 案例

文章目录

    • 1、加入NPOI 程序集,使用nuget添加程序集
    • 2、引用NPOI程序集
    • 3、设置表格样式
    • 4、excel加载图片
    • 5、导出excel


1、加入NPOI 程序集,使用nuget添加程序集

在这里插入图片描述

2、引用NPOI程序集

private IWorkbook ExportExcel(PrintQuotationOrderViewModel model){//if (model == null) return string.Empty;string tempDirPath = Server.MapPath("/Templates/Excel/");if (!Directory.Exists(tempDirPath)){Directory.CreateDirectory(tempDirPath);}IWorkbook workbook;string excelTempPath = tempDirPath + "quotaExcelTemp-new.xls";//加载excel模板using (FileStream fs = new FileStream(excelTempPath, FileMode.Open, FileAccess.Read)){//XSSFWorkbook 适用XLSX格式,HSSFWorkbook 适用XLS格式workbook = new HSSFWorkbook(fs);}ISheet sheet = workbook.GetSheetAt(0);sheet.GetRow(7).GetCell(1).SetCellValue(model.QuotationOrder.QuotedOn.ToString("yyyy-MM-dd"));sheet.GetRow(7).GetCell(6).SetCellValue(model.QuotationOrder.Number);sheet.GetRow(7).GetCell(9).SetCellValue(model.QuotationOrder.CustomerPurchaseNumber);//甲方sheet.GetRow(8).GetCell(1).SetCellValue(model.QuotationOrder.Buyer.Company.Name);sheet.GetRow(9).GetCell(1).SetCellValue(model.QuotationOrder.Buyer.Name);sheet.GetRow(10).GetCell(1).SetCellValue(model.QuotationOrder.Buyer.Email);sheet.GetRow(11).GetCell(1).SetCellValue(model.QuotationOrder.Receiver.Mobile);sheet.GetRow(12).GetCell(1).SetCellValue(model.QuotationOrder.Receiver.Address);//乙方sheet.GetRow(8).GetCell(8).SetCellValue("XXXXX有限公司");ICellStyle cstyle = workbook.CreateCellStyle();cstyle.Alignment = HorizontalAlignment.Left;sheet.GetRow(8).GetCell(8).CellStyle = cstyle;sheet.GetRow(9).GetCell(8).SetCellValue(model.QuotationOrder.SalesmanName);sheet.GetRow(9).GetCell(8).CellStyle = cstyle;sheet.GetRow(10).GetCell(8).SetCellValue(model.QuotationOrder.Salesman.Mobile);sheet.GetRow(10).GetCell(8).CellStyle = cstyle;sheet.GetRow(11).GetCell(8).SetCellValue(model.QuotationOrder.Salesman.Email);sheet.GetRow(11).GetCell(8).CellStyle = cstyle;int count = model.QuotationItems.Count;for (int i = 0; i < count; i++){//设置列头的单元格样式HSSFCellStyle cellStyle = workbook.CreateCellStyle() as HSSFCellStyle;IRow row = sheet.CopyRow(1, 15 + i);ICell cell = row.CreateCell(0);cell.SetCellValue((i + 1));ICellStyle style1 = SetCellStyle((HSSFWorkbook)workbook, HorizontalAlignment.Left);cell.CellStyle = style1;cell = row.CreateCell(1);cell.SetCellValue(model.QuotationItems[i].Product.Name);cell.CellStyle = style1;cell = row.CreateCell(2);cell.CellStyle = style1;//合并单元格CellRangeAddress region = new CellRangeAddress(15 + i, 15 + i, 1, 2);sheet.AddMergedRegion(region);cell = row.CreateCell(3);cell.CellStyle = style1;cell.SetCellValue(model.QuotationItems[i].CustomCode);cell = row.CreateCell(4);cell.CellStyle = style1;cell.SetCellValue(model.QuotationItems[i].Product.Code);cell = row.CreateCell(5);cell.CellStyle = style1;cell.SetCellValue("PCS");cell = row.CreateCell(6);cell.CellStyle = style1;cell.SetCellValue(model.QuotationItems[i].Quantity);cell = row.CreateCell(7);cell.CellStyle = style1;cell.SetCellValue(model.QuotationItems[i].Quotation.DispatchDays >= 0 ? ((int)model.QuotationItems[i].Quotation.DispatchDays).ToString() : "");cell = row.CreateCell(8);cell.CellStyle = style1;cell.SetCellValue(model.QuotationItems[i].Quotation.UnitPriceWithTax >= 0 ? ((decimal)model.QuotationItems[i].Quotation.UnitPriceWithTax).ToString("f2") : "");cell = row.CreateCell(9);cell.CellStyle = style1;cell.SetCellValue(model.QuotationItems[i].Quotation.SubtotalWithTax.ToString("f2"));cell = row.CreateCell(10);cell.CellStyle = style1;cell.SetCellValue(model.QuotationItems[i].Remark);}sheet.GetRow(15 + count).GetCell(1).SetCellValue(model.QuotationOrder.Shipping.Amount.ToString("f2"));sheet.GetRow(15 + count).GetCell(4).SetCellValue(model.QuotationOrder.TotalWithTax.ToString("f2"));sheet.GetRow(15 + count).GetCell(7).SetCellValue(model.QuotationOrder.TotalWithTaxInChinese);sheet.GetRow(20 + count).GetCell(2).SetCellValue(model.Payment);return workbook;}

3、设置表格样式

/// <summary>/// 给Excel添加边框/// </summary>private  ICellStyle SetCellStyle(HSSFWorkbook hssfworkbook, HorizontalAlignment ha){ICellStyle cellstyle = hssfworkbook.CreateCellStyle();cellstyle.Alignment = ha;//有边框cellstyle.BorderBottom = BorderStyle.Thin;cellstyle.BorderLeft = BorderStyle.Thin;cellstyle.BorderRight = BorderStyle.Thin;cellstyle.BorderTop = BorderStyle.Thin;return cellstyle;}

4、excel加载图片

  HSSFPatriarch patriarch = (HSSFPatriarch)sheet.DrawingPatriarch;HSSFClientAnchor anchor = new HSSFClientAnchor(10, 10, 0, 60, 7, 26 + count, 11, 38 + count);HSSFPicture picture = (HSSFPicture)patriarch.CreatePicture(anchor, LoadImage(tempDirPath + "1.png", (HSSFWorkbook)workbook));

LoadImage 方法

private int LoadImage(string path, HSSFWorkbook wb){FileStream file = new FileStream(path, FileMode.Open, FileAccess.Read);byte[] buffer = new byte[file.Length];file.Read(buffer, 0, (int)file.Length);return wb.AddPicture(buffer, PictureType.PNG);}

5、导出excel

var stream = new MemoryStream();
var work = ExportExcel(printQuotationOrderViewModel);work.Write(stream);//mvc代码return File(stream.GetBuffer(), "application/vnd.ms-excel", quotedOrderModel.Number + ".xls");    

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

redis基本用法学习(字符串类型基本操作)

字符串类型是redis支持的最简单的数据类型&#xff0c;同时最简单的键值对类型也是key和value都是单个字符串&#xff0c;本质上就是字符串之间的相互映射&#xff0c;redis官网String类型简介页面提到可以用于缓存HTML片段或页面内容。   redis支持设置/获取单个键值对&…

企业微信无法给Gmail发邮件问题

问题说明 在使用企业微信给国外客户的Gmail邮箱发信件的时候&#xff0c;邮件一直被退信&#xff0c;退信内容如下&#xff1a; 发件人&#xff08;*******.cn&#xff09;域名的DNS记录未设置或设置错误导致对方拒收此邮件。 host gmail-smtp-in.l.google.com[142.251.175.2…

GLTF/GLB模型在线预览、编辑、动画查看以及材质修改

在线工具推荐&#xff1a; 3D数字孪生场景编辑器 - GLTF/GLB材质纹理编辑器 - 3D模型在线转换 - Three.js AI自动纹理开发包 - YOLO 虚幻合成数据生成器 - 三维模型预览图生成器 - 3D模型语义搜索引擎 GLTF在线编辑器提供了一个内置的模型查看器&#xff0c;可以加载和预…

【沁恒蓝牙MESH】解决部分CH582单板无法正常启动的过程

本文主要记录了【沁恒蓝牙MESH】CH582单板无法正常启动的原因&#xff0c; 由于开发疏忽&#xff0c;注释了中断服务函数的代码&#xff0c;是入门嵌入式开发经常忽视的错误&#xff0c;用以记录&#xff0c;共勉&#xff01;&#xff01; 友情提示&#xff1a; 千万不要随便注…

Ubuntu 常用命令之 gunzip 命令用法介绍

&#x1f4d1;Linux/Ubuntu 常用命令归类整理 gunzip是一个在Ubuntu系统下用于解压缩文件的命令。它主要用于解压.gz格式的文件。这个命令是gzip命令的反向操作&#xff0c;gzip用于压缩文件&#xff0c;而gunzip则用于解压缩文件。 gunzip命令的参数有 -c 或 --stdout 或 -…

JAVA 中的 SPI 机制,从原理、现有框架中的使用以及自定义实现 SPI 机制使用来深入了解 SPI 机制

首先介绍 SPI 是什么 SPI 机制在框架中的使用 SPI 机制使用约定MySQL 驱动实现 SPI 机制示例 最后自己动手实现 SPI 机制使用示例 文章链接&#xff0c;点击跳转

基于Vue的汽车服务商城系统设计与实现论文

摘 要 本课题是根据用户的需要以及网络的优势建立的一个基于Vue的汽车服务商城系统&#xff0c;来更好的为用户提供服务。 本基于Vue的汽车服务商城系统应用Java技术&#xff0c;MYSQL数据库存储数据&#xff0c;基于SSMVue框架开发。在网站的整个开发过程中&#xff0c;首先对…

CSS设计器的使用

目录 css的概念 css的优势 css的基本语法 html中引入css样式 CSS基本选择器 选择器的使用 初级选择器&#xff1a; 标签选择器 类选择器 id选择器 高级选择器(结构选择器&#xff09; ①后代选择器(E F) ②子选择器(E>F) ③相邻兄弟选择器(EF) ④通用兄弟选择器(…

动态内存分配(malloc和free​、calloc和realloc​)

目录 一、为什么要有动态内存分配​ 二、C/C中程序内存区域划分​ 三、malloc和free​ 2.1、malloc 2.2、free​ 四、calloc和realloc​ 3.1、calloc​ 3.2、realloc​ 3.3realloc在调整内存空间的是存在两种情况&#xff1a; 3.4realloc有malloc的功能 五、常见的动…

【STM32】STM32学习笔记-对射式红外传感器计次 旋转编码器计次(12)

00. 目录 文章目录 00. 目录01. NVIC相关函数1.1 NVIC_PriorityGroupConfig函数1.2 NVIC_PriorityGroup类型1.3 NVIC_Init函数1.4 NVIC_InitTypeDef类型 02. 外部中断相关API2.1 GPIO_EXTILineConfig2.2 EXTI_Init2.3 EXTI_GetITStatus2.4 EXTI_ClearITPendingBit2.5 中断回调函…

传输层协议分析--第4关:UDP 包分析

任务描述 本关任务&#xff1a;能够掌握简单的 UDP 包分析。 相关知识 为了更好掌握本章内容&#xff0c;你需要了解的有&#xff1a; UDP 报文的简介&#xff1b;UDP 报文格式&#xff1b;Wireshark 软件中的 UDP 抓包分析。 UDP 简介 UDP&#xff08;User Datagram Pro…

proxysql读写分离组件部署

一、前言 在mysql一主两从架构的前提下&#xff0c;引入读写分离组件&#xff0c;可以极大的提高mysql性能&#xff0c;proxysql可以在高可用mysql架构发生主从故障时&#xff0c;进行自动的主从读写节点切换&#xff0c;即当mysql其他从节点当选新的主节点时&#xff0c;proxy…

vscode开发python环境配置

前言 vscode作为一款好用的轻量级代码编辑器&#xff0c;不仅支持代码调试&#xff0c;而且还有丰富的插件库&#xff0c;可以说是免费好用&#xff0c;对于初学者来说用来写写python是再合适不过了。下面就推荐几款个人觉得还不错的插件&#xff0c;希望可以帮助大家更好地写…

Python游戏编程 – 猜数字游戏

Python游戏编程 – 猜数字游戏 Python Game Programming – Guessing Number Game By JacksonML 对Python有一定了解&#xff0c;并且熟知变量、数据类型、循环与分支、函数功能后&#xff0c;我们可以尝试来编写简单的游戏代码。 本文简要介绍如何编写猜数字游戏的Python代码…

研发管理-代码管理篇

前言&#xff1a; 工作了这些年&#xff0c;工作了三家公司&#xff0c;也用过主流的代码管理平台&#xff0c;比如SVN&#xff0c;git系列&#xff08;gitlib,gitee&#xff09;,各有优点&#xff0c;我个人比较喜欢SVN&#xff0c;多人协作的代码管理难免会有代码冲突&#…

MaBatis使用`ResultMap`标签手动映射详解使用

文章目录 MaBatis使用ResultMap标签手动映射详解使用1、MyBatis只能自动维护库表”列名“与”属性名“相同时的对应关系&#xff0c;二者不同时无法自动ORM&#xff0c;如下&#xff1a;2、在SQL中使用 as 为查询字段添加列别名&#xff0c;以匹配属性名&#xff1a;但是如果我…

TCAX特效字幕保姆入门教程+效果演示+软件源码自取

目录 介绍 下载链接 初步使用 软件使用 tcc文件介绍 tcc文件版本 模式设置 ​编辑 k值提供方式举例 特效脚本设置 主要设置 ass全局风格设置 额外设置 常见问题 编码使用 使用其他tcax博主的进行编码测试 介绍 TCAX是一款专门用于制作特效字幕的软件。通过TCAX…

【中小型企业网络实战案例 一】规划、需求和基本配置

热门IT技术【视频教程】https://xmws-it.blog.csdn.net/article/details/134398330?spm1001.2014.3001.5502 案例拓扑图 案例需求 在中小园区中&#xff0c;S5735通常部署在网络的接入层&#xff0c;S8700通常部署在网络的核心&#xff0c;出口路由器一般选用AR系列路由器。 …

使用Windows批处理命令行和ImageMagick批量将文件夹中的图片转换为PDF文档的方法

目录 应用场景 实现思路 实现过程 1.下载安装imageMagick 2.遍历源文件夹 3.转换图片为pdf文档 4.最终执行的命令 5.结果验证 6.将以上命令改写为windows批处理文件 应用场景 图像是一种常见的数据。图片几乎是一个信息系统中必不可少的组成部分。为了方便阅读&…

Redis一些常用的技术

文章目录 第1关&#xff1a;Redis 事务与锁机制第2关&#xff1a;流水线第3关&#xff1a;发布订阅第4关&#xff1a;超时命令第5关&#xff1a;使用Lua语言 第1关&#xff1a;Redis 事务与锁机制 编程要求 根据提示&#xff0c;在右侧编辑器Begin-End补充代码&#xff0c;根据…