C#使用NPOI实现Excel数据透视

NOPI使用手册   因为大部分用户没有积分,所以,我帮作者免费供应下。如果损害本文作者利益,请及时通知我,我将及时删除此文档。   NOPI使用手册 目录 1. 认识NPOI   2. 使用NPOI生成xls文件 2.1 创建基本内容 2.1.1 创建Workbook和Sheet 2.1.2 创建DocumentSummaryInformation和SummaryInformation 2.... 阅读详情

在无尽的追寻中,你会有一个又一个巧合和偶然,也会有一个又一个意外和错过。现实的城市犹如雾中的风景,隐隐地散发着忧郁的美,承载着没有承诺的梦


Form1.cs代码:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using NPOI.HSSF.UserModel;
using System.IO;
using NPOI.SS.UserModel;

namespace NPOIdemo
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        private DataTable ProductInfo;
        private void createDataTable() {

            ProductInfo = new DataTable();

            ProductInfo.Clear();
            ProductInfo.Columns.Add("_Product");
            ProductInfo.Columns.Add("_WH");
            ProductInfo.Columns.Add("_Qty");

            DataRow ProductRow = ProductInfo.NewRow();
            ProductRow["_Product"] = "AS133";
            ProductRow["_WH"] = "W101";
            ProductRow["_Qty"] = "10";
            ProductInfo.Rows.Add(ProductRow);

            ProductRow = ProductInfo.NewRow();
            ProductRow["_Product"] = "AS133";
            ProductRow["_WH"] = "W102";
            ProductRow["_Qty"] = "7";
            ProductInfo.Rows.Add(ProductRow);

            ProductRow = ProductInfo.NewRow();
            ProductRow["_Product"] = "AS133";
            ProductRow["_WH"] = "W103";
            ProductRow["_Qty"] = "5";
            ProductInfo.Rows.Add(ProductRow);

            ProductRow = ProductInfo.NewRow();
            ProductRow["_Product"] = "AS156";
            ProductRow["_WH"] = "W101";
            ProductRow["_Qty"] = "6";
            ProductInfo.Rows.Add(ProductRow);

            ProductRow = ProductInfo.NewRow();
            ProductRow["_Product"] = "TS156";
            ProductRow["_WH"] = "W101";
            ProductRow["_Qty"] = "8";
            ProductInfo.Rows.Add(ProductRow);

            ProductRow = ProductInfo.NewRow();
            ProductRow["_Product"] = "TS156";
            ProductRow["_WH"] = "W102";
            ProductRow["_Qty"] = "8";
            ProductInfo.Rows.Add(ProductRow);
        }
        private void button1_Click(object sender, EventArgs e)
        {
            createDataTable();

            string strFilePath = string.Format("template.xlt");
            HSSFWorkbook workbook;
            using (FileStream fs = new FileStream(strFilePath, FileMode.Open, FileAccess.ReadWrite))
            {
                workbook = new HSSFWorkbook(fs);
                fs.Close();
            }

            if (workbook != null)
            {
                //加载模板
                HSSFSheet RawData = (HSSFSheet)workbook.GetSheet("RawData");

                //数据到新的Sheet
                HSSFCell hc;
                HSSFRow hr;
                HSSFSheet hst = RawData;

                for (int i = 0; i < ProductInfo.Rows.Count; i++)
                {
                    hr = (HSSFRow)hst.CreateRow(i + 1);
                    for (int j = 0; j < ProductInfo.Columns.Count; j++)
                    {
                        hc = (HSSFCell)hr.CreateCell(j);
                        //.注意! 数量是整型而不是字符串。
                        if (ProductInfo.Columns[j].Caption == "_Qty")
                        {
                            hc.SetCellType(CellType.Numeric);
                            if (!string.IsNullOrEmpty(ProductInfo.Rows[i][j].ToString()))
                            {
                                int number = Convert.ToInt32(ProductInfo.Rows[i][j].ToString());
                                hc.SetCellValue(number);
                            }
                            else
                            {
                                hc.SetCellValue(ProductInfo.Rows[i][j].ToString());
                            }
                        }
                        else
                        {
                            hc.SetCellValue(ProductInfo.Rows[i][j].ToString());
                        }
                    }
                }

                //导出新的EXCEL文件
                String filename = "P_" + DateTime.Now.ToString("yyyyMMdd_HHmmss") + ".xls";
                FileStream fsExcelNew = new FileStream(filename, FileMode.Create);
                workbook.Write(fsExcelNew);

                //删除工作表
                workbook.RemoveSheetAt(0);
                workbook = null;

                fsExcelNew.Close();

                //打开excel
                //System.Windows.Forms.Application.StartupPath + "\\" + filename;
                 //string file = @"C:\Windows\explorer.exe";
                 //System.Diagnostics.Process.Start(file, filename);
            }
        }
    }
}

template.xlt内容:

这里写图片描述


这里写图片描述

运行效果如图:

这里写图片描述


这里写图片描述


这里写图片描述

C#用NPOI将Excel转为DataTable:完整实现与踩坑指南 在工业信息化与管理系统开发中,Excel作为最通用的数据交换格式,常需被程序解析为结构化数据集。DataTable作为ADO.NET的核心内存表结构,能高效支持数据绑定、LINQ查询与批量入库,是C#后端处理表格数据的关键载体。而NPOI作为纯托管的Excel读写库,无需安装Office即可读写.xls/.xlsx,相比COM互操作更稳定、轻量且跨平台。掌握Excel到DataTable的转换原理,可提升数据导入功能的开发效率,广泛应用于MES/ERP数据导入、上位机参数配置及报表统计等场景。本文基于NPO 阅读详情

相关推荐

C#操作Excel四大主流方案深度对比:OpenXml、NPOI、EPPlus与Spire.XLS

在.NET开发中,数据处理与报表生成是常见的业务需求,而Excel作为广泛使用的数据交换格式,其高效读写成为关键技术点。其原理在于通过解析或构建Office Open XML文件结构(.xlsx实为ZIP压缩的XML集合)来实现跨平台、无Office依赖的操作。这项技术的核心价值在于提升后端服务的自动化能力与数据处理效率,广泛应用于金融报表、业务数据导出、数据分析等场景。针对C#开发者,主流方案包括微软官方的底层OpenXml SDK、支持双格式的Apache NPOI、以API优雅著称的EPPlus,以及

weixin_30814329的博客 858

NPOI 数据透视

http://www.cnblogs.com/atao/archive/2009/10/25/1589606.html

yinjianjing的专栏 967

C# Winform 用 NPOI 做 Excel 导入导出:选型、实战与避坑指南

在 C# Winform 桌面应用开发中,Excel 文件的导入导出是常见需求。从数据交换的通用视角看,开发者需要在 COM 组件、EPPlus 与 NPOI 等方案间做出选型。COM 组件依赖 Office 环境,部署维护成本高;EPPlus 5.0 后转为商业授权模式,需谨慎评估合规风险。NPOI 作为 Apache 2.0 协议的开源库,支持 .xls 与 .xlsx 双格式解析,无需安装 Office,在稳定性和自由度上表现均衡,因此广泛应用于报表导出、数据备份、批量导入等业务场景。本文将从 Dat

weixin_33600816的博客 268

3.5 用NPOI操作EXCEL--巧妙使用Excel Chart

在NPOI中,本身并不支持Chart等高级对象的创建,但通过l模板的方式可以巧妙地利用Excel强大的透视和图表功能,请看以下例子。 首先建立模板文件,定义两列以及指向此区域的名称“sales”: 创建数据表,数据来源填入刚才定义的区域: 最后生成的数据透视表所在Sheet的样式如下: 至此,模板已经建好,另存为“D:\MyProject\NPOIDemo\Chart...

diaozhuochuan9223的博客 325

C#操作Excel六种主流方案深度解析:从COM到EPPlus/NPOI实战选型指南

在.NET开发中,数据交换与报表生成是核心需求,而Excel文件处理则是实现这一需求的关键技术环节。其原理在于通过程序化方式读写Excel文件的结构化数据,这涉及到对文件格式(如.xls的二进制格式与.xlsx的Open XML格式)的解析与构建。掌握高效的Excel操作技术,能极大提升数据处理自动化水平与系统集成能力,其价值体现在简化工作流、保证数据一致性和支持复杂业务报表生成。应用场景广泛覆盖从服务器端批量数据导出、Web应用中的文件上传解析,到桌面客户端的报表设计。针对C#开发者,面对COM互操作、O

weixin_33709590的博客 426

C#语言实现快速Excel导出教程

本文还有配套的精品资源,点击获取 简介:本文详细介绍了使用C#结合NPOI库来实现Excel文件快速导出的步骤。NPOI是一个.NET平台上的开源库,支持读写Microsoft Office文件格式,尤其适用于不需要安装Office的服务器端环境。文章提供了一个基本流程,涵盖创建Excel工作簿、添加工作表、设置数据、读取DataTable以及写入文件等操作。同时,提及了在...

weixin_34535286的博客 1201

Excel透视表与python实现

1)选择要分析的字段,左侧为要对其进行汇总的数据,右侧为要汇总的具体值项。依据 “求和项:近一个月销售额” 对ID的top5进行选择。1)按照近一个销售额对每个品类的top5进行分析。数字格式:数字的表示方式(如小数点个数等)1)四个类目,每类50条数据。值汇总方式:数据计算方式。值显示方式:数据的百分比。

weixin_42567027的博客 4589

C#在.NET环境下操作Excel文件的类与示例

C#(发音为 “看”)是一种由微软开发的现代、类型安全的面向对象的编程语言。它是.NET平台的核心语言之一,因其简洁、直观和强大的功能,已经成为许多开发者的选择。C#支持多种编程范式,包括过程化、面向对象和泛型编程,使其适用于各种不同的开发场景,从桌面应用程序到网络服务,再到游戏开发。.NET是一个软件框架,由微软开发,旨在为不同平台上的多种编程语言提供运行时环境。.NET开发环境包括公共语言运行时(CLR)和一个庞大的类库,涵盖了文件系统操作、数据库访问、网络通信等各个方面的功能。

weixin_42168902的博客 1175

利用excel与Pandas完成实现数据透视表(文末赠书)

文末赠书 数据透视表是一种分类汇总数据的方法。本文章将会介绍如何用Pandas完成数据透视表的制作和常用操作。1,制作数据透视表制作数据透视表的时候,要确定这几个部分:行字段、列字段、数据区,汇总函数。数据透视表的结构如图1所示。图1数据透视表的结构Excel制作数据透视表很简单,选中表格数据,并点击工具栏上的“数据透视表”菜单即可,如图2所示。图2 Excel制作数据透视表...

Python数据之道 1327

C#操作Excel实战:从COM到NPOI/EPPlus的踩坑指南

在.NET开发中,Excel文件的读写与报表导出是高频需求,但许多开发者仍依赖于Microsoft.Office.Interop.Excel,这种方案既要求服务器装有Office,又面临DCOM权限配置和进程回收等隐患。为解决这些痛点,第三方开源库应运而生。xlsx本质上是一个zip压缩包,内部由多个XML部件组成,NPOI与EPPlus正是通过解析这些XML节点来实现纯托管环境的Excel操作。二者各有侧重:NPOI兼容老旧的.xls格式,支持更宽松的开源协议;EPPlus功能丰富,模板填充与样式处理体验

weixin_33842304的博客 374

基于asp.net,用datatable做数据源的透视表效果

/*网上看到一个透视表,就用它提供的数据, *Sales Person和Produc 可以用来做标题,另外两个都是数字,聚合时候用的。 *你要是把行标题和大列标题换了,就实现行列转换了 *没用他提供的控件,随手自己写了一下,主要思想就是, * 先把要用的数弄成一个datatable, * 把datatable的字段找出来, * 然后选择行啊,列啊什么的, * 然后做一个数组,数组包含大列标题,小列标题,行标题这么几个内容。 * 然后把做个循环计算,把对应的数算出来填数组里 * 然后写个表就ok了 * 其实有这个数组现在想想直接用一个新的datatable写也行, * 但还是用数组方便点,不知道数组有没有数量限制,三维数组能写的数我想大概够用了吧。 * 有了数组在写成表的时候横着放竖着放就怎么都行了, * 其他的还可以灵活些的就是那些运算方法了, * 聚合时候我只写了sum,其实可以写更多,还有条件选择,我也只写了等于,这部分可以做个扩展,感觉没有难度了 * 挺草的一个范例,别笑话我啊!!! */

NPOI操作EXCEL文件 ——CAD C# 二次开发

若预算有限,迁移到NPOI是明智选择,尽管可能需要调整部分高级功能实现方式。报表导出、数据导入导出、简单格式操作等基础需求。:不依赖Office,适合服务器端使用。格式转换(PDF/HTML/CSV等):完全免费,Apache 2.0许可。:支持从Excel 97到最新格式。:完美支持xls/xlsx格式。:官方文档较简略,依赖社区示例。:100% Excel功能兼容。:NuGet包仅5-10MB。完美支持数据透视表、高级图表。:内存操作,处理速度快。:可直接转换VBA代码。:优化的大数据量处理。

山水CAD 二次开发 1102

C#如何操作Excel数据透视表

主要为大家详细介绍了C#如何操作Excel数据透视表, 创建透视表、设置行折叠、展开等操作,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

NPOI使用手册

NPOI使用手册目录1.认识NPOI2. 使用NPOI生成xls文件2.1 创建基本内容2.1.1创建Workbook和Sheet2.1.2创建DocumentSummaryInformation和SummaryInformation2.1.3创建单元格2.1.5创建批注2.1.6创建页眉和页脚2.2 单元格操作2.2.1设置格式2.2.2合并单元格2.2.3对齐相关设置2.2.4使用边框...

李赛赛的专栏 3225

PID调参避坑手册:用APM/PX4飞控让无人机稳如老狗

本文提供了一份针对APM/PX4飞控的PID调参实战指南。文章从理解PID控制原理出发,详细解析了级联控制结构,并给出了从内环到外环的五步调参流程与数据日志分析方法,帮助无人机爱好者避开常见误区,实现稳定飞行。

red88的博客 873

紫光PG2L100H平台DDR3 IP核调试实战:从AXI接口到状态机设计的避坑指南

本文详细介绍了在紫光PG2L100H FPGA平台上调试DDR3 IP核的实战经验,重点解析了AXI接口的特殊行为和状态机设计的关键技巧。通过具体代码示例和调试方法,帮助开发者规避常见陷阱,实现高性能DDR3控制器设计,达到1.2GB/s的稳定带宽。

weixin_28717969的博客 218

C#编程,使用EPPlus操作Excel文件的一种方法

1、EPPlus与NPOI的选择 1、在桌面程序中导入导出数据时会操作Excel文件,常用的第三方控件有NPOI与EPPlus。 2、相对于NPOI来说,EPPlus的API更加友好,导出数据的能力也比NPOI更强大点。但在操作Excel的功能上还是NPOI强一点(C# NPOI导出Excel和EPPlus导出Excel比较): 20列,NPOI能导出4万数据,导出5万数据时报内存溢出。EPPlus能导出20万以上数据,导出23万测试时内存溢出。 3、如果想导出比较复杂的Excel的话可以使用NPOI,但

君一席 7025

IPD流程中CBB管理的5个致命误区,第3个坑了80%的团队

本文深入剖析了IPD流程中CBB管理的五个致命误区,尤其指出缺乏有效的度量与激励机制是影响80%团队的核心陷阱。文章强调CBB的核心在于前瞻性设计,而非简单归档,并需平衡通用性与产品竞争力,同时建立持续运营机制,确保CBB与市场需求对齐,从而真正实现缩短开发周期、降低成本的目标。

weixin_29234423的博客 568

C# 【通过NPIO读写Excel表】

文章摘要: 本文介绍了NPOI在Excel操作中的优势及使用方法。针对Microsoft.Office.Interop.Excel接口存在的兼容性、稳定性等问题,作者推荐使用NPOI替代方案。文章通过对比表格展示了NPOI在环境依赖、性能、并发处理等方面的优势。具体实现部分详细说明了如何在.NET项目中安装NPOI库,并提供了两个核心功能代码示例:1)读取Excel全部数据到字符串数组;2)读取指定列数据到结构体数组。这些代码示例展示了NPOI通过文件流操作Excel的基本方法,包括获取表单、行列数据等关键

C/C#、Android driver、STM32、Linux等等。 726

Android SystemUI——初始化流程(三)

1、Android 系统在启动之后,首先会Zygote进程,Zygote进程又会进一步启动 SystemServer进程,它会启动各种系统所需要的服务,在监听AMS启动完毕之后,还会启动SystemUIService。2、在启动SystemUIService服务之前,系统首先会创建SystemUI对应的进程,获取SystemUIAppComponentFactory实例对象,调用instantiateApplicationCompat创建SystemUIApplication实例对象并设置回调方法。

小旭的专栏 1156

STM32 实现 4*4 矩阵键盘扫描(HAL库、标准库 都适用)

本文实现的代码是基于STM32HAL库的基础上的,不过标准库也可以用,只是调用的库函数不同,逻辑跟配置是一样的,按我这里的逻辑来配置即可。 1、键盘原理图: 原理举例:先把 F0-F7 内部拉高,这样这个8个引脚都是高电平,然后就进行列扫描。例如:假如按下3按钮,Y3 列扫描,把F4先拉低,然后读取F0-F3的状态,就会读出为1110,这就可 以知道是F3行拉低了,同时这时候是程序控制F4拉低的,这样就可以知道是F4列导致它转态变化了的,这样就可以定位出是F4列F3行的按键按下了;其他的列也是这样子扫描

lhh_qrsly的博客 7058

C#用NPOI把Excel转DataTable的完整实践指南

在C#开发中,Excel与DataTable的数据转换是数据导入、报表处理、系统对接等环节的高频需求。Excel本质上是带格式、多工作表、单元格类型混合的结构化文件,而DataTable则是.NET中支持动态列、行筛选、约束绑定的内存数据容器。二者转换需要经历文件定位、工作表选择、表头识别、单元格类型映射、合并单元格处理等一系列动作。NPOI作为不依赖Office的开源库,通过直接解析xls/xlsx的二进制与XML结构,成为实现该转换的主流方案。文章横向对比COM、EPPlus、OleDb/ACE等路径的

weixin_29574585的博客 218

JMeter压力测试全攻略:从入门到精通

本文系统讲解JMeter压力测试的完整流程与结果评估方法。开篇介绍压力测试的核心概念及JMeter工具特性,随后从环境搭建入手,详细说明JDK配置、JMeter安装及中文界面设置。主体部分围绕测试流程展开,涵盖测试计划创建、线程组参数调优、HTTP请求配置、断言与监听器添加等实操步骤;结果评估环节深入解析聚合报告指标、结果树分析及性能瓶颈定位方法,并通过电商接口测试案例演示全流程应用。文末总结关键要点,为读者提供从基础操作到分布式压测、性能调优的进阶学习方向,助力掌握JMeter在系统性能评估中的核心应用。

邓邓子的博客 2414

C#操作Excel全方案解析:从OLE到EPPlus/NPOI选型与实战

在.NET企业级开发中,数据导入导出是高频刚需,而Excel作为通用数据交换格式,其处理能力直接影响系统稳定性和开发效率。其核心原理在于通过不同技术栈解析或生成Excel文件格式,技术价值在于实现自动化、提升数据处理准确性与效率。应用场景广泛覆盖后台报表生成、数据中台ETL、办公自动化工具等。本文聚焦C#生态,深入剖析包括OLE/COM Interop、Open XML SDK、EPPlus及NPOI在内的六种主流方案,针对**大数据量**处理和**服务器环境**部署等关键需求,提供清晰的选型指南与避坑实践

weixin_34116110的博客 398

SiC MOSFET 失效机制详解

TDDB 指在相对较低电场(通常接近或略高于器件工作电压)下,长时间施加电压导致介电层(如栅氧化物)逐渐退化并最终击穿的现象。与即时击穿(Immediate Breakdown,由强电场直接引起)不同,TDDB 是时间相关的渐进过程,通常发生在数小时、几天甚至数年之后。核心过程:在 MOSFET 中,栅极与衬底之间施加电压时,电子通过量子隧道效应(Tunneling)注入介电层,形成缺陷或陷阱。这些缺陷积累,最终在介电层中形成导电路径(Conductive Path),导致短路和器件失效。统计特性。

专注于前沿技术的探索与实践,热衷于从代码逻辑、架构设计到行业应用等多维度深挖技术本质。期待在技术之路上与你共同成长~ 381

基于MATLAB的PDT DMR物理层仿真

PDT DMR物理层仿真的目标是评估系统的误码率(Bit Error Rate,BER),以及验证和优化各种调制方案、编码方案和信道模型。下面将介绍如何进行PDT DMR物理层的仿真,并提供相应的MATLAB源代码。通过上述步骤,我们可以进行基于MATLAB的PDT DMR物理层仿真,并评估系统的性能。根据实际需求,我们可以修改仿真参数和添加更复杂的信道模型,以更全面地评估系统性能。最后,我们可以将仿真结果进行可视化和分析。首先,我们需要设置仿真的参数,包括调制方案、编码方案、信道模型和信噪比等。

TechPulseZ的博客 456
上一篇: X509从证书验证和创建Base64字符串
下一篇: 玩转安卓 Android系统文件夹结构解析(绝对有用)
.NET跨平台
博客等级 码龄15年 6066粉丝 738原创
评论 5
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值