【办公软件】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");    
相关推荐
Aevget15 分钟前
DevExpress WPF中文教程:Data Grid - 如何使用虚拟源?(一)
c#·wpf·界面控件·devexpress·ui开发
左师佑图44 分钟前
Apache POI SXSSFWorkbook 报错“没有那个文件或目录”问题排查与解决方案
java·apache·excel
weixin_456904271 小时前
以太网与工业以太网通信C#开发
开发语言·c#
虚行2 小时前
C#项目连接S7-PLCSIM Advanced读写操作
开发语言·python·c#
“抚琴”的人3 小时前
C#中获取程序执行时间
服务器·前端·c#
monkeyhlj4 小时前
excel-mcp-server rocky linux简单部署
linux·运维·excel
薄荷撞~可乐5 小时前
C#拆箱/装箱(性能优化)
性能优化·c#
胖咕噜的稞达鸭6 小时前
C++中的父继子承(2)多继承菱形继承问题,多继承指针偏移,继承组合分析+高质量习题扫尾继承多态
c语言·开发语言·数据结构·c++·算法·链表·c#
Dm_dotnet6 小时前
WPF应用绑定系统快捷键
c#
.NET修仙日记6 小时前
SQL Server实战指南:从基础CRUD到高并发处理的完整面试题库
面试·职场和发展·c#·.net·sql server·.net全栈经典面试题库