【办公软件】C# NPOI 操作Excel 案例

文章目录


1、加入NPOI 程序集,使用nuget添加程序集

2、引用NPOI程序集

csharp 复制代码
private IWorkbook ExportExcel(PrintQuotationOrderViewModel model)
        {
            //if (model == null) return string.Empty;
            string tempDirPath = Server.MapPath("/Templates/Excel/");
            if (!Directory.Exists(tempDirPath))
            {
                Directory.CreateDirectory(tempDirPath);
            }
            IWorkbook workbook;
            string excelTempPath = tempDirPath + "quotaExcelTemp-new.xls";
            //加载excel模板
            using (FileStream fs = new FileStream(excelTempPath, FileMode.Open, FileAccess.Read))
            {
                //XSSFWorkbook 适用XLSX格式,HSSFWorkbook 适用XLS格式
                workbook = new HSSFWorkbook(fs);
            }

            ISheet sheet = workbook.GetSheetAt(0);
            sheet.GetRow(7).GetCell(1).SetCellValue(model.QuotationOrder.QuotedOn.ToString("yyyy-MM-dd"));

            sheet.GetRow(7).GetCell(6).SetCellValue(model.QuotationOrder.Number);

            sheet.GetRow(7).GetCell(9).SetCellValue(model.QuotationOrder.CustomerPurchaseNumber);
            //甲方
            sheet.GetRow(8).GetCell(1).SetCellValue(model.QuotationOrder.Buyer.Company.Name);
            sheet.GetRow(9).GetCell(1).SetCellValue(model.QuotationOrder.Buyer.Name);
            sheet.GetRow(10).GetCell(1).SetCellValue(model.QuotationOrder.Buyer.Email);
            sheet.GetRow(11).GetCell(1).SetCellValue(model.QuotationOrder.Receiver.Mobile);
            sheet.GetRow(12).GetCell(1).SetCellValue(model.QuotationOrder.Receiver.Address);

            //乙方
            sheet.GetRow(8).GetCell(8).SetCellValue("XXXXX有限公司");
            ICellStyle cstyle = workbook.CreateCellStyle();
            cstyle.Alignment = HorizontalAlignment.Left;
            sheet.GetRow(8).GetCell(8).CellStyle = cstyle;

            sheet.GetRow(9).GetCell(8).SetCellValue(model.QuotationOrder.SalesmanName);
            sheet.GetRow(9).GetCell(8).CellStyle = cstyle;

            sheet.GetRow(10).GetCell(8).SetCellValue(model.QuotationOrder.Salesman.Mobile);

            sheet.GetRow(10).GetCell(8).CellStyle = cstyle;

            sheet.GetRow(11).GetCell(8).SetCellValue(model.QuotationOrder.Salesman.Email);
            sheet.GetRow(11).GetCell(8).CellStyle = cstyle;

            int count = model.QuotationItems.Count;
            for (int i = 0; i < count; i++)
            {

                //设置列头的单元格样式
                HSSFCellStyle cellStyle = workbook.CreateCellStyle() as HSSFCellStyle;

                IRow row = sheet.CopyRow(1, 15 + i);
                ICell cell = row.CreateCell(0);
                cell.SetCellValue((i + 1));
                ICellStyle style1 = SetCellStyle((HSSFWorkbook)workbook, HorizontalAlignment.Left);
                cell.CellStyle = style1;

                cell = row.CreateCell(1);
                cell.SetCellValue(model.QuotationItems[i].Product.Name);
                cell.CellStyle = style1;

                cell = row.CreateCell(2);
                cell.CellStyle = style1;
                //合并单元格
                CellRangeAddress region = new CellRangeAddress(15 + i, 15 + i, 1, 2);
                sheet.AddMergedRegion(region);

                cell = row.CreateCell(3);
                cell.CellStyle = style1;
                cell.SetCellValue(model.QuotationItems[i].CustomCode);
                cell = row.CreateCell(4);
                cell.CellStyle = style1;
                cell.SetCellValue(model.QuotationItems[i].Product.Code);
                cell = row.CreateCell(5);
                cell.CellStyle = style1;
                cell.SetCellValue("PCS");
                cell = row.CreateCell(6);
                cell.CellStyle = style1;
                cell.SetCellValue(model.QuotationItems[i].Quantity);
                cell = row.CreateCell(7);
                cell.CellStyle = style1;
                cell.SetCellValue(model.QuotationItems[i].Quotation.DispatchDays >= 0 ? ((int)model.QuotationItems[i].Quotation.DispatchDays).ToString() : "");
                cell = row.CreateCell(8);
                cell.CellStyle = style1;
                cell.SetCellValue(model.QuotationItems[i].Quotation.UnitPriceWithTax >= 0 ? ((decimal)model.QuotationItems[i].Quotation.UnitPriceWithTax).ToString("f2") : "");
                cell = row.CreateCell(9);
                cell.CellStyle = style1;
                cell.SetCellValue(model.QuotationItems[i].Quotation.SubtotalWithTax.ToString("f2"));
                cell = row.CreateCell(10);
                cell.CellStyle = style1;
                cell.SetCellValue(model.QuotationItems[i].Remark);
            }

            sheet.GetRow(15 + count).GetCell(1).SetCellValue(model.QuotationOrder.Shipping.Amount.ToString("f2"));
            sheet.GetRow(15 + count).GetCell(4).SetCellValue(model.QuotationOrder.TotalWithTax.ToString("f2"));
            sheet.GetRow(15 + count).GetCell(7).SetCellValue(model.QuotationOrder.TotalWithTaxInChinese);
            sheet.GetRow(20 + count).GetCell(2).SetCellValue(model.Payment);

            return workbook;
        }

3、设置表格样式

csharp 复制代码
/// <summary>
        /// 给Excel添加边框
        /// </summary>
        private  ICellStyle SetCellStyle(HSSFWorkbook hssfworkbook, HorizontalAlignment ha)
        {
            ICellStyle cellstyle = hssfworkbook.CreateCellStyle();
            cellstyle.Alignment = ha;
            
            //有边框
            cellstyle.BorderBottom = BorderStyle.Thin;
            cellstyle.BorderLeft = BorderStyle.Thin;
            cellstyle.BorderRight = BorderStyle.Thin;
            cellstyle.BorderTop = BorderStyle.Thin;
            return cellstyle;
        }

4、excel加载图片

csharp 复制代码
  HSSFPatriarch patriarch = (HSSFPatriarch)sheet.DrawingPatriarch;
  HSSFClientAnchor anchor = new HSSFClientAnchor(10, 10, 0, 60, 7, 26 + count, 11, 38 + count);
  HSSFPicture picture = (HSSFPicture)patriarch.CreatePicture(anchor, LoadImage(tempDirPath + "1.png", (HSSFWorkbook)workbook));

LoadImage 方法

csharp 复制代码
private int LoadImage(string path, HSSFWorkbook wb)
        {
            FileStream file = new FileStream(path, FileMode.Open, FileAccess.Read);
            byte[] buffer = new byte[file.Length];
            file.Read(buffer, 0, (int)file.Length);
            return wb.AddPicture(buffer, PictureType.PNG);

        }

5、导出excel

csharp 复制代码
var stream = new MemoryStream();
var work = ExportExcel(printQuotationOrderViewModel);
   work.Write(stream);
   //mvc代码
   return File(stream.GetBuffer(), "application/vnd.ms-excel", quotedOrderModel.Number + ".xls");    
相关推荐
刘_sy6 小时前
使用EasyExcel和多线程实现高效数据导出
java·excel·easyexcel·批量导出excel
浅陌sss9 小时前
Xlua中C#引用Lua变量,导致Lua侧的GC无法回收的原因及解决方法
c#·lua
棉晗榜9 小时前
c#模拟鼠标点击左键
c#
爱吃香蕉的阿豪10 小时前
在c#中虚方法和抽象类的区别
深度学习·c#·.netcore
PowerBI学谦12 小时前
Copilot:Excel中的Python高级分析来了
python·excel·copilot
晚秋大魔王12 小时前
C# 添加图标
c#·visual studio code
shepherd枸杞泡茶13 小时前
第3章 .NETCore核心基础组件:3.1 .NET Core依赖注入
开发语言·c#·.net·.netcore
yuanpan13 小时前
C#的async异步方法里如果使用了await,那么它跟同步方法有什么区别?
开发语言·c#
CodeCraft Studio16 小时前
.NET版PDF处理控件Aspose.PDF教程:在 C# 中将 TIFF 文件转换为 PDF
pdf·c#·.net
斯内科16 小时前
C#使用文件读写操作实现仙剑五前传称号存档修改
c#·二进制·修改器