C# NPOI操作execl

上一篇介绍了Java操作execl用的是POI,这一篇介绍c#操作execl,采用NPOI,
所需引用:NPOI
NPOI.OOXML
NPOI.OpenXml4Net
NPOI.OpenXmlFormats
下载地址:http://download.youkuaiyun.com/download/qq_37791764/10173729

代码部分:


            //读取excel文件的路径
            string filePath = @"" + Server.MapPath("~/") + "PBTable\\execl\\排班表.xls";

            FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read);
            //创建workbook
            HSSFWorkbook wk = new HSSFWorkbook(fs);
            //在第一个sheet写入操作
            NPOI.SS.UserModel.Sheet sheet = (HSSFSheet)wk.GetSheetAt(0);

            //创建
            Row row0 = sheet.CreateRow(0);
            Row row1 = sheet.CreateRow(1);
            Row row2 = sheet.CreateRow(2);
            Row row3 = sheet.CreateRow(3);
            Row row4 = sheet.CreateRow(4);

            HSSFPalette Salepalette = wk.GetCustomPalette();
            CellStyle SalecolorStyle = wk.CreateCellStyle();

            //设置边框格式  
            SalecolorStyle.BorderBottom = NPOI.SS.UserModel.CellBorderType.THIN;

            SalecolorStyle.BorderLeft = NPOI.SS.UserModel.CellBorderType.THIN;

            SalecolorStyle.BorderRight = NPOI.SS.UserModel.CellBorderType.THIN;

            SalecolorStyle.BorderTop = NPOI.SS.UserModel.CellBorderType.THIN;
            //垂直对齐
            SalecolorStyle.VerticalAlignment = NPOI.SS.UserModel.VerticalAlignment.CENTER;
            //水平对齐
            SalecolorStyle.Alignment = NPOI.SS.UserModel.HorizontalAlignment.CENTER;


            for (int i = 0; i < 35; i++)
            {

                Cell cell0 = row0.CreateCell(i);
                Cell cell1 = row1.CreateCell(i);
                Cell cell2 = row2.CreateCell(i);
                Cell cell3 = row3.CreateCell(i);
                Cell cell4 = row4.CreateCell(i);

                if(i==2){
                 row1.GetCell(i).SetCellValue("/日期");
                 row2.GetCell(i).SetCellValue("节日/活动");
                 row3.GetCell(i).SetCellValue("营业展开计划");
                 row4.GetCell(i).SetCellValue("事项");

                }
                if(i==(34)){
                    row0.GetCell(i).SetCellValue("工时");
                }
                if (i >= 3 && i < (MonthDayCount+3
### C# 使用 NPOI 操作 Excel 模板文件 当使用 C#NPOI 库来操作 Excel 模板文件时,主要步骤涉及加载现有的模板文件、修改其中的内容并保存更改后的文档。下面是一个详细的示例说明如何实现这一过程。 #### 加载现有模板文件 为了读取已有的 `.xlsx` 或者 `.xls` 文件作为模板,可以通过 `FileStream` 打开该文件,并创建相应的 Workbook 对象: ```csharp using (var fs = new FileStream(templatePath, FileMode.Open, FileAccess.Read)) { IWorkbook templateWorkbook; if (templatePath.EndsWith(".xlsx")) templateWorkbook = new XSSFWorkbook(fs); else templateWorkbook = new HSSFWorkbook(fs); // 继续后续的操作... } ``` 此处判断了文件扩展名以决定实例化哪种类型的 WorkBook 类型对象[^1]。 #### 修改模板中的数据 一旦获得了工作簿对象之后就可以访问其内部的工作表以及单元格来进行编辑。假设要向第一个 sheet 的 A1 单元格写入新值,则可按如下方式执行: ```csharp ISheet sheet = templateWorkbook.GetSheetAt(0); // 获取第一页 IRow row = sheet.GetRow(0) ?? sheet.CreateRow(0); // 如果不存在则新建一行 ICell cell = row.GetCell(0) ?? row.CreateCell(0); // 同样地获取或创建指定位置的cell cell.SetCellValue("新的内容"); // 设置新的字符串值给这个cell ``` 这段代码展示了怎样定位到特定的位置并对之赋值[^2]。 #### 将更新后的内容写出至响应流或其他存储介质 完成所有的变更以后,需要把最终的结果输出成一个新的 Excel 文件或者直接返回给客户端浏览器下载。这里展示了一个简单的例子用于通过 ASP.NET Core 控制器方法发送文件给用户端: ```csharp public IActionResult ExportFromTemplate() { string templateFilePath = Path.Combine(Directory.GetCurrentDirectory(), "wwwroot", "templates", "example_template.xlsx"); using var stream = System.IO.File.OpenRead(templateFilePath); using var workbookStream = new MemoryStream(); { IWorkbook wb; try { wb = new XSSFWorkbook(stream); ISheet sheet = wb.GetSheetAt(0); IRow row = sheet.GetRow(0) ?? sheet.CreateRow(0); ICell cell = row.GetCell(0) ?? row.CreateRow(0).CreateCell(0); cell.SetCellValue(DateTime.Now.ToString()); wb.Write(workbookStream); } finally { stream.Close(); } byte[] byteArray = workbookStream.ToArray(); return File(byteArray, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", $"exported_{DateTime.Now:yyyyMMddHHmmss}.xlsx"); } } ``` 此段代码实现了从服务器上的某个路径加载模板文件,在内存中对其进行必要的调整后再将其转换为字节数组形式供 HTTP 响应体传输[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值