当前位置: 首页 > article >正文

C#中使用MiniExcel 快速入门:读写 .xlsx 文件

背景介绍报表绕不开 Excel。传统方案用 Microsoft.Office.Interop需要安装 Office且进程管理复杂。MiniExcel是一个轻量级库 1MB通过直接操作 ZIP 压缩包.xlsx 本质是 ZIP实现读写无需 Office 环境支持 .NET Core / .NET Framework。本篇覆盖基本读写DataTable / List ⇄ Excel写入优化避免内存膨胀样式设置列宽、行高、背景色代码实现1. 安装与基础读写dotnetaddpackage MiniExcelusingMiniExcelLibs;// 读 Excel publicvoidReadExcel(){// 读取整个 sheetvarrowsMiniExcel.Query(report.xlsx).ToList();// 读取指定 sheetvarrows2MiniExcel.Query(report.xlsx,sheetName:Sheet2).ToList();// 读取为 DataTable便于筛选vardtMiniExcel.QueryAsDataTable(report.xlsx);foreach(DataRowrowindt.Rows){Console.WriteLine(${row[DeviceId]}-{row[Value]});}}// 写 Excel publicvoidWriteSimpleExcel(){vardevicesnew[]{new{DeviceIdINJ001,Temperature85.5,Pressure1.2},new{DeviceIdINJ002,Temperature82.3,Pressure1.1}};// 最简单写法List 直接写MiniExcel.SaveAs(output.xlsx,devices);// 指定 sheet 名MiniExcel.SaveAs(output.xlsx,devices,sheetName:生产数据);}2. 写入优化分批写入大文件publicvoidWriteLargeFile(stringfilePath,IEnumerableReportRowrows){// MiniExcel 默认会把所有数据加载到内存// 大数据量时需要分批处理varbatchSize5000;varbatchnewListReportRow();using(varstreamFile.Create(filePath)){boolfirstBatchtrue;foreach(varrowinrows){batch.Add(row);if(batch.CountbatchSize){if(firstBatch){// 第一批创建文件 写入表头stream.Seek(0,SeekOrigin.Begin);MiniExcel.SaveAs(stream,batch,printHeader:true);firstBatchfalse;}else{// 后续批次追加到已有 sheet通过 sheetNameMiniExcel.AppendExcel(stream,batch,sheetName:Data);}batch.Clear();}}// 处理剩余数据if(batch.Count0){if(firstBatch)MiniExcel.SaveAs(stream,batch,printHeader:true);elseMiniExcel.AppendExcel(stream,batch,sheetName:Data);}}}publicclassReportRow{publicstringDeviceId{get;set;}publicDateTimeTimestamp{get;set;}publicdoubleTemperature{get;set;}publicdoublePressure{get;set;}}3. 使用模板生成报表// 报表模板template.xlsx包含// - A1: 标题已合并单元格// - A3: 列头DeviceId, Timestamp, Temperature...// - A4 以下数据区空着等我们填充publicvoidGenerateFromTemplate(){stringtemplatePathtemplate.xlsx;stringoutputPathreport_20240421.xlsx;// 1. 复制模板File.Copy(templatePath,outputPath,overwrite:true);// 2. 读取模板内容不覆盖格式vartemplateMiniExcel.QueryAsDataTable(outputPath);// 3. 准备数据vardataGetProductionData();// ListReportRow// 4. 写入数据从 A4 开始MiniExcel.SaveAsByTemplate(outputPath,new{Title2024年4月21日 生产报表,GenerateDateDateTime.Now.ToString(yyyy-MM-dd HH:mm),Datadata// 这个 key 会对应模板中的 Data 区域});}4. 样式设置publicvoidWriteWithStyle(){varrowsnewListDictionarystring,object{newDictionarystring,object{[DeviceId]INJ001,[Value]85.5},newDictionarystring,object{[DeviceId]INJ002,[Value]82.3}};// 设置列配置varcolumnsnewDictionarystring,MiniExcelColumnAttribute{[DeviceId]newMiniExcelColumnAttribute{Name设备编号,Width15},[Value]newMiniExcelColumnAttribute{Name测量值,Width12,Format0.00}};// 写入并设置列宽MiniExcel.SaveAs(styled.xlsx,rows,configurations:columns);}// 自定义样式需要底层操作publicvoidWriteWithCustomStyle(stringfilePath){varconfignewMiniExcelConfiguration{SheetNameReport};usingvarstreamFile.Create(filePath);stream.Seek(0,SeekOrigin.Begin);// MiniExcel 支持通过 .xlsx 的 shared strings 和 styles.xml// 完整样式控制建议用 ClosedXML 或 EPPlus}5. 读取时处理合并单元格publicvoidReadMergedCells(){// MiniExcel 默认会返回合并单元格的值到每一行// 如果需要识别合并区域手动解析varcellsMiniExcel.GetCells(merged.xlsx).ToList();varmergedRangescells.Where(cc.MergeCount0).Select(cnew{c.Value,StartRowc.Row,EndRowc.Rowc.MergeCount-1,StartColc.Column,EndColc.Column1// 简化默认横向合并}).ToList();foreach(varminmergedRanges){Console.WriteLine($合并区域:{m.Value}({m.StartRow}-{m.EndRow}));}}

相关文章:

C#中使用MiniExcel 快速入门:读写 .xlsx 文件

背景介绍 报表绕不开 Excel。传统方案用 Microsoft.Office.Interop&#xff0c;需要安装 Office&#xff0c;且进程管理复杂。MiniExcel 是一个轻量级库&#xff08;< 1MB&#xff09;&#xff0c;通过直接操作 ZIP 压缩包&#xff08;.xlsx 本质是 ZIP&#xff09;实现读写…...

设计工程化实践:将设计思维转化为开发者技能的工具探索

1. 项目概述&#xff1a;当设计思维遇上代码技能最近在GitHub上看到一个挺有意思的项目&#xff0c;叫Arthurescc/design-fusion.skill。光看这个名字&#xff0c;就让我这个在设计和开发交叉领域摸爬滚打了十来年的老手眼前一亮。“Design Fusion”直译是“设计融合”&#xf…...

Spring Boot安全脚手架实战:快速集成认证授权与API防护

1. 项目概述&#xff1a;一个面向开发者的安全脚手架如果你是一名后端或全栈开发者&#xff0c;最近在启动一个新项目时&#xff0c;是不是总感觉有些“重复劳动”&#xff1f;比如&#xff0c;每次都要手动集成用户认证、权限管理、API安全防护、日志审计这些基础但至关重要的…...

基于SpringBoot+Vue的CRM客户管理系统毕设

博主介绍&#xff1a;✌ 专注于Java,python,✌关注✌私信我✌具体的问题&#xff0c;我会尽力帮助你。一、研究目的本研究旨在构建一个基于Spring Boot与Vue框架的CRM客户管理系统以解决传统客户关系管理中存在的信息孤岛现象与业务流程低效问题。当前企业客户管理普遍面临数据…...

DevChat:无缝集成IDE的开源AI编程助手,提升开发效率

1. 项目概述&#xff1a;一个真正融入工作流的AI编程伙伴如果你和我一样&#xff0c;每天大部分时间都花在代码编辑器里&#xff0c;那你肯定也经历过这样的场景&#xff1a;想重构一段代码&#xff0c;却卡在命名上&#xff1b;写一个复杂的函数&#xff0c;需要反复查阅文档&…...

AI驱动的工业预测性维护技术实践:AI驱动的预测性维护系统通过多传感器融合(振动、温度、电流等)实时监测设备健康状态,结合TSN网络实现毫秒级数据传输

标签:预测性维护 PHM 工业AI 振动分析 TSN 设备管理 引言:设备算命先生的时代来了 “老张,你这台风机轴承怕是撑不过两周了。” 如果有个"设备算命先生"能掐指一算就说出这句话,工厂的设备经理们大概会把他供起来。但在2024年,这个"算命先生"真的出…...

Boss-Key:Windows下一键隐藏窗口的终极隐私保护工具

Boss-Key&#xff1a;Windows下一键隐藏窗口的终极隐私保护工具 【免费下载链接】Boss-Key 老板来了&#xff1f;快用Boss-Key老板键一键隐藏静音当前窗口&#xff01;上班摸鱼必备神器 项目地址: https://gitcode.com/gh_mirrors/bo/Boss-Key 在数字化办公时代&#xf…...

4. 大型场馆大空间挡烟垂壁选型与布设

大型场馆、商业综合体、中庭展厅这类大空间建筑&#xff0c;空间跨度大、层高较高&#xff0c;传统隔断无法满足排烟分区要求&#xff0c;合理选用与布设挡烟垂壁&#xff0c;是解决大空间防排烟难题的核心途径。大空间场景在挡烟垂壁选型上&#xff0c;需优先适配大跨度、高空…...

Steam Deck Windows控制器驱动深度配置指南

Steam Deck Windows控制器驱动深度配置指南 【免费下载链接】steam-deck-windows-usermode-driver A windows usermode controller driver for the steam deck internal controller. 项目地址: https://gitcode.com/gh_mirrors/st/steam-deck-windows-usermode-driver 想…...

如何用BilibiliDown实现跨平台B站视频高效下载?3个核心优势解析

如何用BilibiliDown实现跨平台B站视频高效下载&#xff1f;3个核心优势解析 【免费下载链接】BilibiliDown (GUI-多平台支持) B站 哔哩哔哩 视频下载器。支持稍后再看、收藏夹、UP主视频批量下载|Bilibili Video Downloader &#x1f633; 项目地址: https://gitcode.com/gh_…...

工程定制丙级管道井门 物业机房通用款式

工程定制丙级管道井门&#xff0c;作为高层住宅、商业楼宇、物业机房强弱电井的专用消防配套设施&#xff0c;严格遵循国标消防规范生产&#xff0c;是建筑管井防火分隔、安全防护的核心产品。这款丙级管道井门采用钢制一体成型工艺&#xff0c;结构扎实不易变形&#xff0c;具…...

MPLAB Harmony框架实战:从驱动抽象到复杂嵌入式系统开发

1. 项目概述&#xff1a;为什么我们需要 Harmony&#xff1f;如果你在嵌入式开发领域摸爬滚打超过五年&#xff0c;尤其是深度使用过 Microchip 的 PIC32 系列 MCU&#xff0c;那你一定对“从零开始搭驱动”这件事深恶痛绝。我还记得十年前&#xff0c;为了在 PIC32MX 上跑通一…...

Boss-Key:办公隐私保护神器,一键隐藏敏感窗口的智能解决方案

Boss-Key&#xff1a;办公隐私保护神器&#xff0c;一键隐藏敏感窗口的智能解决方案 【免费下载链接】Boss-Key 老板来了&#xff1f;快用Boss-Key老板键一键隐藏静音当前窗口&#xff01;上班摸鱼必备神器 项目地址: https://gitcode.com/gh_mirrors/bo/Boss-Key 在当今…...

英雄联盟本地自动化工具完整指南:10分钟精通LeagueAkari终极教程

英雄联盟本地自动化工具完整指南&#xff1a;10分钟精通LeagueAkari终极教程 【免费下载链接】League-Toolkit An all-in-one toolkit for LeagueClient. Gathering power &#x1f680;. 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit 还在为英雄联盟排…...

突破性创新:Midscene.js如何用AI视觉驱动重塑跨平台自动化测试

突破性创新&#xff1a;Midscene.js如何用AI视觉驱动重塑跨平台自动化测试 【免费下载链接】midscene AI-powered, vision-driven UI automation for every platform. 项目地址: https://gitcode.com/GitHub_Trending/mid/midscene 在当今复杂的软件生态中&#xff0c;跨…...

RK3588平台IMX415摄像头驱动调试全流程与实战指南

1. 项目概述与核心挑战最近在基于瑞芯微RK3588平台调试索尼IMX415摄像头&#xff0c;整个过程可以说是既典型又充满细节。对于嵌入式Linux开发&#xff0c;尤其是多媒体应用&#xff0c;摄像头驱动调试往往是硬件适配中最关键也最磨人的一环。RK3588作为一款高性能的AIoT SoC&a…...

嘎嘎降AI和笔灵AI哪个更适合毕业论文:2026年达标率改写质量售后完整测评对比报告

嘎嘎降AI和笔灵AI哪个更适合毕业论文&#xff1a;2026年达标率改写质量售后完整测评对比报告 帮几个不同专业的同学处理过论文AI率&#xff0c;用过的工具加起来也有六七款了。 综合看&#xff0c;嘎嘎降AI&#xff08;www.aigcleaner.com&#xff09;是最稳的选择&#xff0…...

S19|MCP 与插件:多 Agent 平台 —— 外部能力总线,让外部工具安全接入

在前十八章&#xff0c;我们的 Agent 已经拥有完整的内部能力体系&#xff1a;循环、工具、计划、子代理、技能、压缩、权限、Hook、记忆、提示词流水线、错误恢复、任务系统、后台任务、定时调度、多 Agent 团队、团队协议、自主代理、Worktree 隔离&#xff0c;所有工具都写在…...

嘎嘎降AI全平台综合评测:2026年知网维普万方Turnitin达标率完整深度分析报告

嘎嘎降AI全平台综合评测&#xff1a;2026年知网维普万方Turnitin达标率完整深度分析报告 总有人问我选哪个降AI工具&#xff0c;这篇文章把主流的几款对比清楚。 综合推荐嘎嘎降AI&#xff08;www.aigcleaner.com&#xff09;&#xff0c;4.8元&#xff0c;99.26%达标率。不同…...

各高校论文AI率标准差异解读:从10%到30%不同学校标准差距2026年免费达标方案

各高校论文AI率标准差异解读&#xff1a;从10%到30%不同学校标准差距2026年免费达标方案 关于高校论文AI率标准解读&#xff0c;我系统研究过一段时间&#xff0c;也实际验证过各种说法。 这篇文章把关键的逻辑理清楚——知道了原理&#xff0c;遇到问题就知道该怎么处理了。…...

S18|Worktree 隔离:多 Agent 平台 —— 独立目录,独立车道,让并行工作互不干扰

在前十七章&#xff0c;我们的 Agent 已经拥有循环、工具、计划、子代理、技能、压缩、权限、Hook、记忆、提示词流水线、错误恢复、任务系统、后台任务、定时调度、多 Agent 团队、团队协议、自主代理十七大核心能力&#xff0c;能拆任务、认领任务、让多个 Agent 并行推进不同…...

Python量化交易框架解析:从数据到实盘的完整实现

1. 项目概述与核心价值最近在GitHub上看到一个挺有意思的项目&#xff0c;叫“ZJHuang915/PythonQuantTrading”。光看名字&#xff0c;很多朋友可能就明白了&#xff0c;这是一个用Python做量化交易的代码仓库。我花了点时间把整个项目翻了一遍&#xff0c;发现它不是一个简单…...

GaussDB定时任务管理:从基础到高级实践

一、定时任务体系架构1.1 双引擎调度架构GaussDB采用​​内置调度器外部集成​​的混合架构&#xff1a;​​内置调度器​​&#xff1a;基于PostgreSQL的pgAgent增强实现 ​​外部集成​​&#xff1a;支持与Linux cron、Kubernetes CronJob联动 ​​分布式调度​​&#xff1…...

别再手动导数据了!用Python的pandas+pyarrow,3行代码搞定Parquet转JSON

3行代码解锁数据自由&#xff1a;用Python极简实现Parquet到JSON的优雅转换 数据工程师的日常总是与格式转换纠缠不清。当你在凌晨两点收到紧急需求&#xff1a;"立刻把数据仓库里50GB的用户行为Parquet文件转成JSON供下游系统调用"&#xff0c;是选择打开文档逐行编…...

叶绿体注释翻车实录:Geseq vs. NCBI格式差异与特殊基因处理实战

叶绿体注释翻车实录&#xff1a;Geseq vs. NCBI格式差异与特殊基因处理实战 当两个权威工具对同一段叶绿体DNA给出不同注释时&#xff0c;该相信谁&#xff1f;这个问题困扰过每一位从事基因组注释的研究者。去年在完成水稻叶绿体项目时&#xff0c;我同时用Geseq和NCBI标准流程…...

【技术底稿 35】低配单机混跑 Dev/Test 微服务环境,Jenkins 部署包错乱踩坑全复盘

一、核心背景在不新增服务器、沿用现有 7G 低配开发机前提下&#xff0c;同时承载&#xff1a;开发环境&#xff08;2 个 admin 节点&#xff09;测试环境&#xff08;1 个 admin 节点&#xff09;Jenkins 打包编译MySQL / Redis / Zookeeper / Milvus 等全套中间件机器硬件资源…...

告别网盘下载烦恼:3步解锁9大网盘高效下载新体验

告别网盘下载烦恼&#xff1a;3步解锁9大网盘高效下载新体验 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 &#xff0c;支持 百度网盘 / 阿里云盘 / 中国移动云盘 / 天翼云盘 …...

弹球打砖块

<!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0, user-scalableno"><title>弹球打砖块</title><…...

国产多模态新星:mPLUG-Owl全解析,从原理到落地

国产多模态新星&#xff1a;mPLUG-Owl全解析&#xff0c;从原理到落地 引言 在ChatGPT引爆文本大模型之后&#xff0c;多模态大模型正成为AI领域的下一个主战场。在这场全球竞赛中&#xff0c;国产模型的表现尤为引人注目。由阿里通义实验室推出的 mPLUG-Owl&#xff0c;凭借…...

oracle 大表(1亿以上)迁移笔记一

作者:蓝鸟 1974 CSDN:https://blog.csdn.net/weixin_42767242 关键字 大表迁移、存储过程批量归档、定时 JOB、索引维护、统计信息收集、NOLOGGING、BULK COLLECT、FORALL 一、场景概述 在医院 HIS/EMR 系统中,业务流水表、病历明细表数据增长极快,单表数据量轻松突破…...