首页 > 编程语言 >C#NPOI示例

C#NPOI示例

时间:2025-01-16 15:00:24浏览次数:1  
标签:cellStyle sheet 示例 C# NPOI cell CreateCell SetCellValue row

主程序要添加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("");
            //被占跨行合并的第二行第一第二列
            #endregion

            row2.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;
                    }
                }
            }
        }

 

标签:cellStyle,sheet,示例,C#,NPOI,cell,CreateCell,SetCellValue,row
From: https://www.cnblogs.com/wangjian110520/p/18674983

相关文章

  • 深入探索Vue.js 3中基于Composition API的动态组件开发
    在前端开发中,组件是构建用户界面的基础,而Vue.js作为一种流行的前端框架,也提供了灵活强大的组件机制。在本文中,我们将深入探索基于Vue.js3的CompositionAPI,开发一个动态组件加载的技术方案。这项技术对于那些需要高可维护性和按需加载的应用来说尤其重要。什么是动态组件加......
  • c++基础算法讲解(写了ccf考试中可能出现的各种算法)
    枚举法枚举法是一种基本的问题解决策略,它尝试所有可能的情况以找到解决方案。这种方法通常用于问题规模较小且可以接受一定时间复杂度的情况。例子:找出三个数中最大的数#include<iostream>usingnamespacestd;intfindMax(inta,intb,intc){returnmax(a,......
  • c语言随机数rand与srand用法详解
    源文件test.c:#include<stdio.h>#include<stdlib.h>#include<time.h>intmain(){//生成并打印5个随机数for(inti=0;i<5;i++){//生成随机数并打印printf("第%d个随机数:%d\n",i+1,rand());}return0;}注意点:1)当不用srand()函数设置种子时,系统......
  • SpringBoot+Redis+消息队列 技术的抢购方案【附有图文+示例代码】
    文章目录SpringBoot+Redis+消息队列技术的抢购方案13.1简单抢购13.2模拟高并下发抢购jmeter工具使用实现13.3数据安全问题加锁synchronized分布式锁13.4消息队列完成抢购【yml配置文件】【实体类】【redis工具类】【队列配置类】【controller】【队列监听器RabbitQM......
  • Cesium结合html2canvas进行截图
    按照html2canvas正常操作是可以进行截图操作的,但是发现没有截取到地球,发现cesium内也需要进行设置需要先安装html2canvas引入cesium创建视图时也需要添加对应参数preserveDrawingBuffer上代码!!constviewer=newCesium.Viewer("cesiumContainer",{contextOptio......
  • C# NAudio 获取控制系统音量
    https://github.com/naudio/NAudioNAudio是一个开源的.NET音频库,由MarkHeath开发,开源地址:https://github.com/naudio/NAudio支持多种音频操作,可实现多种API播放与录制、多种不同音频格式、音频格式转换(重采样、位深、声道等)、音频编码、多通道播放、音频效果处理等等。NA......
  • 倍增求lca
    非常重要的东西我甚至模拟赛都不打了来打笔记很简单啊,朴素lca是这样,两个节点,先令深度相等,然后一个一个往上跳直到跳到相同的位置则那个点为两点的lca但是令深度相等与往上跳的过程都要一个一个慢慢跳所以时间复杂度拉满了那么我们能以什么方式优化呢我们可以发现,每个数都可以......
  • elasticsearch之DSL查询结果处理
    搜索的结果可以按照用户指定的方式去处理或展示。排序分页搜索关键词高亮排序elasticsearch默认是根据相关度算分(_score)来排序,但是也支持自定义方式对搜索结果排序。可以排序字段类型有:keyword类型、数值类型、地理坐标类型、日期类型等。普通字段排序keyword、数值、日......
  • JavaScript防抖与节流的运用
    防抖(Debounce)概念:防抖是指在事件被触发n秒后再执行回调,如果在这n秒内又被触发,则重新计时。防抖的主要目的是将多次连续触发的事件合并为一次执行,适用于例如输入框输入搜索内容时,避免频繁发送请求,只在用户停止输入一段时间后才发送请求。实现思路:创建一个定时器。......
  • Nacos: 一个动态服务发现与配置管理平台
    Nacos:一个动态服务发现与配置管理平台引言在微服务架构日益普及的今天,服务之间的调用和配置管理变得越来越复杂。为了简化这一过程并提高开发效率,阿里巴巴推出了Nacos——一个易于使用的动态服务发现、配置管理和服务管理平台。Nacos是什么?Nacos(DynamicNamingandCo......