C#NPOI示例

主程序要添加NPOI的库。代码如下

        static void Main(string[] args){Export();  }
        public static void Export(){// 创建新的Excel工作簿IWorkbook workbook = new XSSFWorkbook();// 创建一个工作表ISheet sheet = workbook.CreateSheet("Sheet1");// 创建合并单元格的样式ICellStyle cellStyle = workbook.CreateCellStyle();cellStyle.Alignment = HorizontalAlignment.Center;cellStyle.VerticalAlignment = VerticalAlignment.Center;//设置字体IFont font = workbook.CreateFont();font.FontHeightInPoints = 12;font.FontHeight = 4 * 60;font.FontName = "宋体";font.IsBold = true;cellStyle.SetFont(font);// 设置边框样式为实线cellStyle.BorderTop = BorderStyle.Thin;cellStyle.BorderBottom = BorderStyle.Thin;cellStyle.BorderLeft = BorderStyle.Thin;cellStyle.BorderRight = BorderStyle.Thin;// 创建合并单元格int row = 0; // 指定的行号int cell = 0;// 在合并后的单元格中设置值和样式IRow row1 = sheet.CreateRow(row);IRow row2 = sheet.CreateRow(row + 1);row1.Height = 20 * 20;row2.Height = 20 * 20;// 创建合并单元格CellRangeAddress cellRangeAddress = new CellRangeAddress(row, row + 1, cell, cell);sheet.AddMergedRegion(cellRangeAddress);ICell cell0 = row1.CreateCell(row);cell0.SetCellValue("机器编号");cell0.CellStyle = cellStyle;//自定义行宽sheet.SetColumnWidth(row, 20 * 256);cellRangeAddress = new CellRangeAddress(row, row + 1, cell + 1, cell + 1);sheet.AddMergedRegion(cellRangeAddress);ICell cell1 = row1.CreateCell(cell + 1);cell1.SetCellValue("位置");cell1.CellStyle = cellStyle;//自定义行宽sheet.SetColumnWidth(row + 1, 30 * 256);cellRangeAddress = new CellRangeAddress(row, row, cell + 2, cell + 3);sheet.AddMergedRegion(cellRangeAddress);ICell cell2 = row1.CreateCell(cell + 2);cell2.SetCellValue("自费结算");cellRangeAddress = new CellRangeAddress(row, row, cell + 4, cell + 9);sheet.AddMergedRegion(cellRangeAddress);ICell cell3 = row1.CreateCell(cell + 4);cell3.SetCellValue("医保结算");cell3.CellStyle = cellStyle;#region 如果创建这个列,会导致实线边框样式无法呈现row1.CreateCell(cell + 9).SetCellValue("");//被占跨行合并的第二行第一第二列row2.CreateCell(cell + 0).SetCellValue("");row2.CreateCell(cell + 1).SetCellValue("");//被占跨行合并的第二行第一第二列#endregionrow2.CreateCell(cell + 2).SetCellValue("自费结算笔数");row2.CreateCell(cell + 3).SetCellValue("自费结算金额(元)");row2.CreateCell(cell + 4).SetCellValue("医保卡笔数");row2.CreateCell(cell + 5).SetCellValue("医保卡个账金额(元)");row2.CreateCell(cell + 6).SetCellValue("医保电子凭证笔数");row2.CreateCell(cell + 7).SetCellValue("医保电子凭证个账金额(元)");row2.CreateCell(cell + 8).SetCellValue("人脸医保笔数");row2.CreateCell(cell + 9).SetCellValue("人脸医保个账金额(元)");cell2.CellStyle = cellStyle;var irow = sheet.GetRow(1);SetColumnWidth(sheet, row + 2, row + 9, 22 * 256);SetCellStyle(sheet, 0, 1, 0, 9, cellStyle);// 写入到文件using (FileStream file = new FileStream("merged_cells.xlsx", FileMode.Create, FileAccess.Write)){workbook.Write(file);}}/// <summary>/// 设置列宽宽度/// </summary>public static void SetColumnWidth(ISheet sheet, int fristSolumn, int endSolumn, int intWidth){for (int i = fristSolumn; i <= endSolumn; i++){sheet.SetColumnWidth(i, intWidth);}}/// <summary>/// 给单元格四周加黑色边框/// </summary>/// <param name="sheet">单元格所在的sheet</param>/// <param name="rowstart">开始行的索引</param>/// <param name="rowend">结束行的索引</param>/// <param name="colstart">开始列的索引</param>/// <param name="colend">结束列的索引</param>public static void SetCellStyle(ISheet sheet, int rowstart, int rowend, int colstart, int colend, ICellStyle cellStyle){for (int i = rowstart; i <= rowend; i++){var irow = sheet.GetRow(i);if (irow != null && irow.Cells != null && irow.Cells.Count > 0){for (int j = 0; j < irow.Cells.Count; j++){irow.Cells[j].CellStyle = cellStyle;}}}}

 

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

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

相关文章

小红书已被TikTok“难民”攻占!谁能接住这泼天富贵?

谁都不会想到,美国即将对Tiktok发出的禁令会让故事发生这样的转向,小红书竟成最后“赢家”。 小红书首页的“国际范” 一夜之间,小红书的首页被大量英文帖子“攻占”。中国网友纷纷表示:“一觉醒来,我成外国人了?”。这些新用户自称“TikTok难民”,并迅速在小红书上开设…

elasticsearch之DSL查询结果处理

搜索的结果可以按照用户指定的方式去处理或展示。排序 分页 搜索关键词高亮排序 elasticsearch默认是根据相关度算分(_score)来排序,但是也支持自定义方式对搜索结果排序。可以排序字段类型有:keyword类型、数值类型、地理坐标类型、日期类型等。 普通字段排序 keyword、数…

倍增求lca

非常重要的东西 我甚至模拟赛都不打了来打笔记 很简单啊,朴素lca是这样,两个节点,先令深度相等,然后一个一个往上跳直到跳到相同的位置则那个点为两点的lca 但是令深度相等与往上跳的过程都要一个一个慢慢跳所以时间复杂度拉满了 那么我们能以什么方式优化呢 我们可以发现,…

可视化管理:并行开发的必备工具

随着软件开发复杂度的提升,如何在并行开发模式中有效管理资源与进度成为团队面临的重要挑战。而看板工具以其对瓶颈的直观展示与管理能力,成为解决这一问题的关键手段。一、并行开发中的典型瓶颈问题 并行开发是一种高效但复杂的模式,其主要瓶颈包括: 1. 资源分配不均:各模…

C# NAudio 获取控制系统音量

https://github.com/naudio/NAudio NAudio 是一个开源的 .NET 音频库,由 Mark Heath 开发,开源地址:https://github.com/naudio/NAudio 支持多种音频操作,可实现多种API播放与录制、多种不同音频格式、音频格式转换(重采样、位深、声道等)、音频编码、多通道播放、音频效…

DBeaver随笔(1)——如何生成改表sql语句

用习惯了Navicat,非常喜欢改完表之后点击SQL预览直接查看改表sql的功能一图看懂,只需要新增或修改字段后点击保存就弹出改表sql了。

初识ES ---倒排索引

正向索引: mysql 倒排索引: elasticsearch采用倒排索引:文档(document):每条数据就是一个文档。 词条(term): 文档按照语义分成的词语(中文按照中文语义分)。词条不能重复。 eg: 会对用户输入的关键字数据进行分词 华为手机-》分词: 华为 手机 可以看出: 正向索引:…

构造刷题记录

[AGC001D] Arrays and Palindrome 首先观察发现奇数的个数看起来很重要,然后手玩一会发现最多只能有两个奇数,然后再分讨构造就可以了。[AT_hitachi2020_c] ThREE 观察到 \(3\mid a\times b\) 要求 \(a,b\) 中至少一个 3 的倍数。 发现如果两个点的距离为 3 的话他们的深度的…

【Python安全】Python .pth 文件作为后门持久化机制的分析

引言 update.py 脚本的目的是在以下路径部署后门:/usr/lib/python3.6/site-packages/system.pth。这个用 Python 编写的后门从一个导入语句开始,其主要内容以 base64 编码的 blob 形式存储。.pth 扩展名用于向 Python 模块添加额外的路径。从 Python 3.5 版本开始,在.pth 文件…

如何禁止外网通过IP和端口访问特定站点?

当您希望禁止外网通过IP和端口直接访问某个特定站点时,可以通过配置服务器的安全组规则和防火墙设置来实现。以下是详细的步骤和注意事项:理解安全组和防火墙的区别:安全组规则主要作用于云服务器层面,控制进出服务器的流量;而防火墙则是在操作系统级别进行流量过滤。两者…

如何解决宝塔面板升级后无法访问的问题?

您好,根据您的描述,宝塔面板在升级后无法正常访问。以下是详细的分析和解决方案:确认升级过程:确保升级过程中没有中断或异常,所有文件均已正确下载并安装。有时网络不稳定可能导致升级失败。 检查宝塔面板的日志文件(通常位于/www/server/panel/logs),查看是否有报错信…

如何重置宝塔账户密码为默认密码?

您好,根据您的描述,您希望将宝塔账户密码重置为默认密码。以下是详细的步骤和注意事项:确认重置需求:确认确实需要重置宝塔账户密码,并了解重置后的影响。重置密码将覆盖现有密码,确保记录下新的默认密码。 如果不确定是否需要重置,请先尝试找回密码功能,避免不必要的麻…