首页 > 编程语言 >C#使用npoi生成excel流

C#使用npoi生成excel流

时间:2024-01-19 10:34:31浏览次数:30  
标签:source C# HSSFWorkbook excel ++ npoi cs ms var

using System.Collections.Generic;
using System.Data;
using System.Dynamic;
using System.IO;
using System.Linq;

namespace Tools {
    public static class ExcelHelper {
        public static Stream ToExcel(object a, IDictionary<string, object> cs = default) {
            return a is IQueryable q ? ToExcel(q, cs) : a is List<IDictionary<string, object>> dd ? ToExcel(dd, cs) : a is DataTable t ? ToExcel(t) : default;
        }
        private static Stream ToExcel(IQueryable source, dynamic HSSFWorkbook, IDictionary<string, object> cs) {
            MemoryStream ms = new();
            var s = HSSFWorkbook.CreateSheet();
            var r0 = s.CreateRow(0);
            var ci = 0;
            cs ??= new ExpandoObject();
            if (cs.Count is 0) {
                source.ElementType.GetProperties().ToList().ForEach(g => cs[g.Name] = g.Name);
            }
            cs.ToList().ForEach(g => r0.CreateCell(ci++).SetCellValue(g.Value + ""));
            var i = 1;
            var ps = source.ElementType.GetProperties().ToList();
            foreach (var item in source) {
                var r = s.CreateRow(i++);
                var j = 0;
                foreach (var ite in cs) {
                    r.CreateCell(j++).SetCellValue(source.ElementType.GetProperty(ite.Key).GetValue(item) + "");
                }
            }
            HSSFWorkbook.Write(ms);
            ms.Position = 0;
            return ms;
        }
        private static Stream ToExcel(List<IDictionary<string, object>> source, dynamic HSSFWorkbook, IDictionary<string, object> cs) {
            MemoryStream ms = new();
            var s = HSSFWorkbook.CreateSheet();
            var r0 = s.CreateRow(0);
            var ci = 0;
            cs.ToList().ForEach(g => r0.CreateCell(ci++).SetCellValue(g.Value + ""));
            var i = 1;
            foreach (var item in source) {
                var r = s.CreateRow(i++);
                var j = 0;
                foreach (var ite in cs) {
                    r.CreateCell(j++).SetCellValue(item[ite.Key] + "");
                }
            }
            HSSFWorkbook.Write(ms);
            ms.Position = 0;
            return ms;
        }
        private static MemoryStream ToExcel(DataTable source, dynamic HSSFWorkbook) {
            MemoryStream ms = new();
            var s = HSSFWorkbook.CreateSheet(source.TableName);
            var r0 = s.CreateRow(0);
            var ci = 0;
            source.Columns.OfType<DataColumn>().ToList().ForEach(g => r0.CreateCell(ci++).SetCellValue(g.ColumnName));
            var i = 1;
            foreach (DataRow row in source.Rows) {
                var r = s.CreateRow(i++);
                foreach (DataColumn column in source.Columns) {
                    r.CreateCell(column.Ordinal).SetCellValue(row[column].ToString());
                }
            }
            HSSFWorkbook.Write(ms);
            ms.Position = 0;
            return ms;
        }
    }
}

参数HSSFWorkbook在从外界new(),免得在没引用NPOI的情况下无法通过编译。

标签:source,C#,HSSFWorkbook,excel,++,npoi,cs,ms,var
From: https://www.cnblogs.com/ly45/p/17974077

相关文章

  • 数独Sudoku游戏解题C语言和Golang(Go语言)实现
    Go语言实现packagemainimport( "fmt" "os")const( N=9 EmptyCell='0')funcmain(){ iflen(os.Args)!=2||len(os.Args[1])!=81{ fmt.Println("错误:程序需要一个正好包含81位数字的参数。") os.Exit(1) } boa......
  • SQL Server Profiler的trc文件生成阻止
    很奇葩,sqlserver自动生成trc文件,每分钟一个,重启服务器也没用。解决思路:查询现在正在跑的trace进程select*fromsys.fn_trace_getinfo(0);关闭C2审计功能EXECsp_configure'c2auditmode','0';重启数据库服务再次查看,已经没了。然后删除数据盘所有的trc文件。EXECsp_configure......
  • STM32CubeMX教程18 DAC - DMA输出自定义波形
    1、准备材料开发板(正点原子stm32f407探索者开发板V2.4)STM32CubeMX软件(Version6.10.0)野火DAP仿真器keilµVision5IDE(MDK-Arm)ST-LINK/V2驱动一台示波器逻辑分析仪nanoDLA2、实验目标使用STM32CubeMX软件配置STM32F407开发板的DACOUT1实现输出0-3.3V周期为12.8ms的正弦......
  • Nginx基础配置详解(main、events、http、server、location)
    Nginx基础配置详解(main、events、http、server、location):https://blog.csdn.net/weixin_43834401/article/details/130562289?ops_request_misc=&request_id=&biz_id=102&utm_term=nginx%20server%20%E7%9A%84%E6%A0%B9%E7%9B%AE%E5%BD%95&utm_medium=distribute.pc_......
  • oracle查找字符串中指定字符的位置
    INSTR(string,search_string,start_position,nth_appearance)其中:string是要查找的字符串。search_string是要查找的字符或字符串。start_position是开始查找的位置,默认为1。nth_appearance是要查找的字符或字符串在string中出现的次数,可以省略,默认为1......
  • C++简史
    喜欢本篇文章速速点赞评论⭐收藏MISRAC++:2023,MISRA®C++标准的下一个版本,来了!为了帮助您做好准备,我们介绍了Perforce首席技术支持工程师FrankvandenBeuken博士撰写的MISRAC++:2023博客系列的第二部分。在这篇博客中,我们将深入探讨C++的历史、编程语言多年来的发展历......
  • gitlab账号密码忘记(docker部署)
    1.进入容器dockerexec-itgitlabexec 2.修改密码sugitgitlab-railsconsole-eproduction//可以带上-e参数查看版本,不同版本修改用户密码有细微差别u=User.where(id:1).firstu.password='Qwer@1234'u.save[root@DevOPS~]#dockerexec-itgitlabbashroot@a3674......
  • 西门子PLC+国产远程IO的通讯组合的应用优势
    目前,市面上最常见的PLC+远程IO的配置是西门子PLC+国产PROFINET从站。这样做既保证了整个系统的稳定性,又保证了整个系统的性价比。国产远程IO的优势是性价比高,适配性广,可以兼容市面上常见的PLC品牌,国产IO集成了EtherCAT、PROFINET、EtherNETIP、CCLINK,总线种类丰富,经过多年的深耕,国......
  • 实现modbus plc设备数据转发到环保HJ212平台的方案
    标题:实现modbusplc设备数据转发到环保HJ212平台的方案摘要:通过vfbox网关实现modbus协议转换成HJ212协议,把数据发送到环保平台。此应用方案操作简单,不需要编程,轻松实现设备之间的互联互通。关键词:ModbusHJ212协议转换网关1 需求背景现在大部分省市都建有环保平台用来监控......
  • C语言爬虫采集图书网站百万数据
    最近需要查阅一些资料,只给到相关项目名称以及关键词,想通过图书文库找到对应书籍,那么怎么才能在百万数据库中找到自己需要的文献呢?今天我依然用C语言写个爬虫程序,从百万数据库中查找到适合的文章,能节省很多事情。下面是一个简单的C#爬虫程序,它使用了HttpWebRequest和HttpWebResponse......