C# NPOI 操作Excel 案例
1、加入NPOI 程序集,使用nuget添加程序集
2、引用NPOI程序集
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、设置表格样式
/// <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加载图片
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 方法
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
var stream = new MemoryStream(); var work = ExportExcel(printQuotationOrderViewModel); work.Write(stream); //mvc代码 return File(stream.GetBuffer(), "application/vnd.ms-excel", quotedOrderModel.Number + ".xls");
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
2015-04-29 Linq 中的 in 与 not in 的使用
2015-04-29 asp.net mvc 在View中获取Url参数的值