C# NOPI导出Excel 设置计算公式,多行表头

article/2025/10/22 0:53:44

说明

现需要导出Excel,统计每个人的工作量,计算方式为:项目分值*项目数量

效果

效果图

c#代码

//创建工作簿
MemoryStream MStream = new MemoryStream();XSSFWorkbook WBook = new XSSFWorkbook();
//创建sheet
ISheet sheet = WBook.CreateSheet(DateTime.Now.ToString("yyyy-MM"));
//创建行 --表头
IRow headItemRow = sheet.CreateRow(0);
IRow headValueRow = sheet.CreateRow(1);//定义2个数组,存放分值和数量的坐标,用于excel公式计算 C2*C3+D2*D3+E2*E3
ArrayList itemXB = new ArrayList(); //存放项目数量的坐标  C2 D2 E2 F2 G2....
ArrayList valueXB = new ArrayList(); //存放项目分值的坐标 C3 D3 E3 F3 G3....
// 测试项目用固定的数据 后续改为动态获取
string[] headerItem = new string[] { "日期","姓名","CCCA", "PH值", "检测", "百度", "含量", "电导", "含体", "可含量", "耐化指数(C)", "耐电数(I)", "电化数(P)", "耐试验", "有机剂", "黏度", "熔点", "粘度","总计","备注" }; 
// 创建第一行的单元格,并赋值
for (int i = 0; i < headerItem.Length; i++)
{headItemRow.CreateCell(i).SetCellValue(headerItem[i]);               
}// 测试分值用固定的数据 后续改为动态获取
string[] headerValue = new string[] { DateTime.Now.Year+"年", "分值", "5", "", "", "10", "10", "", "3", "", "", "", "", "", "", "", "8", "30","","" };
// 创建第二行的单元格,并赋值
for (int i = 0; i < headerValue.Length; i++)
{headValueRow.CreateCell(i).SetCellValue(headerValue[i]); // 获取每一个分值的坐标,存入之前的数组中         if (i >= 2 && i< headerValue.Length -2){var cr = new CellReference(1, i);var xb = cr.CellRefParts[2] + cr.CellRefParts[1];valueXB.Add(xb);}               
}// 创建第三行数据 后续改为动态获取
IRow testValueRow = sheet.CreateRow(2);
string[] testValue = new string[] {"2023-04-12", "张三", "1", "2", "3", "4", "5", "", "3", "", "8", "10", "20", "", "", "", "5", "20", "", "" };
// 创建第二行的单元格,并赋值           
for (int i = 0; i < testValue.Length; i++)
{testValueRow.CreateCell(i).SetCellValue(testValue[i]);// 获取每一个分值的坐标,存入之前的数组中   if (i >= 2 && i < testValue.Length - 2){var cr = new CellReference(2, i);var xb = cr.CellRefParts[2] + cr.CellRefParts[1];itemXB.Add(xb);}
}
//Excel计算公式 Sumcell是存放计算公式的单元格 
var formulaString = "";
ICell Sumcell = testValueRow.GetCell(headerItem.Length-2);
for (int i = 0; i < valueXB.Count; i++)
{//拼接公式格式 C2*C3+D2*D3+E2*E3.....formulaString += valueXB[i] + "*" +itemXB[i]+"+";
}
formulaString=formulaString.Substring(0, formulaString.Length - 1);
//为单元格添加计算公式
Sumcell.SetCellFormula(formulaString);//Excel默认高度
sheet.DefaultRowHeight = 30 * 20;
// 设置单元格 字体 样式
ICellStyle style = WBook.CreateCellStyle();
style.WrapText = true;           
IFont font = WBook.CreateFont();
font.FontName = "等线";
font.FontHeightInPoints = 11;
font.IsBold = true;
font.Boldweight = (short)FontBoldWeight.Bold;
style.SetFont(font);for (int i = 0; i < headerItem.Length; i++)
{sheet.AutoSizeColumn(i, true); // 自动换行headItemRow.GetCell(i).CellStyle = style;headValueRow.GetCell(i).CellStyle = style;
}// sheet.ProtectSheet("password"); //密码
WBook.Write(MStream);
byte[] FBytes = MStream.ToArray();
HttpContext.Response.Headers.Add("Content-disposition", "attachment");
HttpContext.Response.Headers.Add("filename", $"{ HttpUtility.UrlEncode($"工作记录表.xlsx") }");
HttpContext.Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
HttpContext.Response.BinaryWrite(FBytes);
HttpContext.Response.Flush();
HttpContext.Response.Close();

http://chatgpt.dhexx.cn/article/8t6j0MHV.shtml

相关文章

vb.net读取写入EXCEl的终极方法-NOPI。

据我浅薄的知识&#xff0c;之前只知道两种操作excel的方法&#xff1a; 一。ODBC操作excel 看下图&#xff1a; 1.ODBC 由于初期连接不同的数据库通过各种不同的API&#xff0c;ODBC就是将各种不同的API封装成统一的接口。当sql语句进入接口时驱动器管理器会判断将他们送入对…

unity NOPI 创建word文档

unity NOPI 创建word文档 导入NOPI 所需要的DLL ICSharpCode.SharpZipLib.dll&#xff0c;NPOI.dll&#xff0c;NPOI.OOXML.dll&#xff0c;NPOI.OpenXml4Net.dll&#xff0c;NPOI.OpenXmlFormats.dll 打包还需导入I18N.CJK.dll,I18N.dll,I18N.West.dll 如果导入Dll出错,设…

pnpm — Monorepo

1、安装 pnpm npm i pnpm -g 2、创建Monorepo管理文件夹&#xff0c;这里命名 Monorepo&#xff0c;并创建packages文件夹 3、创建用于定义工作空间的根目录的yaml文件&#xff1a; pnpm-workspace.yaml&#xff0c;并添加 packages:- packages/ ** 4、 pnpm init 5、pn…

NOPI用法之自定义单元格背景色(3)

NPOI针对office2003使用HSSFWorkbook&#xff0c;对于offce2007及以上使用XSSFWorkbook&#xff1b;今天我以HSSFWorkbook自定义颜色为例说明&#xff0c;Office2007的未研究呢 在NPOI中默认的颜色类是HSSFColor&#xff0c;它内置的颜色有几十种供我们选择&#xff0c;如果不…

c# 使用NOPI 操作Excel

最近项目需要导出Excel,找来找去,微软有自己的Excel组件 using Microsoft.Office.Core;using Microsoft.Office.Interop.Excel;,但是有一个毛病,就是程序所在电脑安装Office,这个问题简直是致命的,因为导出服务我们要做在服务端,程序直接生成Excel,然后客户端路径去下载,…

C# NOPI 项目实战(经典)(可下载项目源码)

1 -.首先说明下项目目的: 之前我有写过一篇 "NPOI操作EXCEL" 这篇文章主要介绍了如何安装NPOI&#xff0c;以及NPOI具体如何c#教程使用&#xff0c;并且用具体实例介绍了excel导入到datagridview以及 datagridview如何导出到excel并保存。如果不清楚这块的去我公众…

NOPI将数据导出至EXCEL表格

文章目录 前言一、NPOI优势二、运行逻辑三、安装NOPI组件四、导出Excel---实现代码五、最终效果六、总结 前言 NPOI,就是POI的.NET版本。POI是一套用Java写成的库&#xff0c;能够帮助开发者在没有安装微软Office的情况下读写Office 97-2003的文件&#xff0c;支持的文件格式包…

RabbitMQ原理、集群、基本操作及常见故障处理

本次学习主要针对运维人员&#xff0c;和对rabbitmq不熟悉的开发人员。通过本次学习你将掌握rabbitmq 的基本原理、集群、基本运维操作、常见故障处理。 1、原理与概念 简介 AMQP&#xff0c;即Advanced Message Queuing Protocol&#xff0c;高级消息队列协议&#xff0c;是…

RabbitMQ简易原理及使用

黑马程序员RabbitMQ全套教程&#xff0c;rabbitmq消息中间件到实战_哔哩哔哩_bilibili 尚硅谷RabbitMQ教程丨快速掌握MQ消息中间件_哔哩哔哩_bilibili 安装&#xff1a;CentOS8安装RabbitMQ 3.8.9_wcybaonier的博客-CSDN博客 // config改为conf&#xff0c;rabbitmq以后缀识别&…

RabbitMQ-详细讲解原理到使用

这里写目录标题 1.初识MQ1.1.同步和异步通讯1.1.1.同步通讯1.1.2.异步通讯1.2.技术对比&#xff1a; 2.快速入门2.1.安装RabbitMQ1.单机部署1.1.下载镜像1.2.安装MQ 2.2.RabbitMQ消息模型2.3.创建一个Demo工程2.4.入门案例2.4.1.publisher实现2.4.2.consumer实现2.5.总结 3.Spr…

rabbitmq基本原理

AMQP(高级消息队列协议) 是一个异步消息传递所使用的应用层协议规范&#xff0c;作为线路层协议&#xff0c;而不是API&#xff08;例如JMS&#xff09;&#xff0c;AMQP 客户端能够无视消息的来源任意发送和接受信息。 AMQP当中有四个概念非常重要 1. virtual host&#xff…

RabbitMQ 内部结构原理介绍

RabbitMQ简介 RabbitMQ是一个用Erlang语言开发的、实现了AMQP协议的消息中间件。 AMQP :&#xff08;Advanced Message Queue&#xff0c;高级消息队列协议&#xff09;它是应用层协议的一个开放标准&#xff0c;为面向消息的中间件设计&#xff0c;基于此协议的客户端与消息中…

Rabbitmq机制

1.发布与订阅 publish and subscribe 短信发送&#xff0c;消息订阅的功能一般会用到这个模式。 这个模式是通过路由器绑定消息队列来实现的&#xff0c;只要有队列绑定到这个路由器&#xff0c;就会接受改路由器的通知。 2.routing模式 路由模式 在发布订阅模式的基础增加了…

RabbitMQ 架构原理

1.RabbitMQ 架构原理 由于 RabbitMQ 实现了 AMQP 协议&#xff0c;所以 RabbitMQ 的工作模型也是基于 AMQP 的。理解这张图片至关重要。 1.1 Broker 中介 我们要使用 RabbitMQ 来收发消息&#xff0c;必须要安装一个 RabbitMQ 的服务&#xff0c;可以安 装在 Windows 上面也可以…

RabbitMq底层原理分析

RabbitMq消息中间件介绍&为什么要使用消息中间件&什么时候使用消息中间件 我们用java来举例子&#xff0c; 打个比方 我们客户端发送一个下单请求给订单系统&#xff08;order&#xff09;订单系统发送了 一个请求给我们的库存系统告诉他需要更改库存了&#xff0c; 我…

RabbitMQ集群原理介绍

文章目录 一、RabbitMQ默认集群原理1. RabbitMQ集群元数据的同步2. 为何RabbitMQ集群仅采用元数据同步的方式3. RabbitMQ集群发送/订阅消息的基本原理4. 客户端直接连接队列所在节点5. 客户端连接的是非队列数据所在节点7. 集群节点类型磁盘节点内存节点 8. 总结 二、RabbitMQ镜…

RabbitMQ的基本架构与实现原理

目录 1.RabbitMQ Exchange类型 2.RabbitMQ的数据存储 RabbitMQ整体逻辑架构 1.RabbitMQ Exchange类型 常用的交换器类型分为&#xff1a;Direct、Topic、 Fanout、Header 四种。 Fanout fanout类型的交换器会把所有发送到该交换器的消息路由到所有与该交换器绑定的队列中&…

Rabbit Mq 底层原理

为什么要用MQ&#xff1f;MQ有什么好处&#xff1f; 1、异步通信&#xff1a;通过异步通信&#xff0c;可以减少客户端等待时间&#xff0c;实现接口快速响应 2、系统解耦&#xff1a;对于复杂的系统&#xff0c;减小系统与系统之间的依赖 3、流量削峰&#xff1a;对于瞬时访问…

RabbitMQ工作原理以及常见面试题【2022版】

RabbitMQ工作原理图&#xff1a; Broker&#xff1a;接收和分发消息的应用&#xff0c;RabbitMQ Server 就是 Message Broker Virtual host&#xff1a;出于多租户和安全因素设计的&#xff0c;把 AMQP 的基本组件划分到一个虚拟的分组中&#xff0c;类似 于网络中的 namespac…

RabbitMQ原理简单介绍

其实这篇博客&#xff0c;也算不上是什么原理&#xff0c;只是将我知道的一些RabbitMQ的知识简单罗列下&#xff0c;自从我来公司到现在&#xff0c;虽然一直都在用RabbitMQ&#xff0c;也一直想着把这块总结下&#xff0c;却一直在给自己找借口&#xff0c;最近一段时间&#…