【办公软件】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");    
相关推荐
我是唐青枫5 分钟前
C#.NET ValueTaskSource 深入解析:零分配异步、ManualResetValueTaskSourceCore 与使用边界
c#·.net
iCxhust16 分钟前
C#程序,窗体1向窗体2的textbox控件写入字符串“hello”
开发语言·c#
Codiggerworld41 分钟前
Vim的语法:删除、复制、粘贴,像说话一样自然
编辑器·vim·excel
iCxhust1 小时前
C#如何实现textbox文本多行输出 且自动换行输出
开发语言·c#
Pentane.2 小时前
【数据分析 | 农业项目】蔬菜类商品的自动定价与补货决策 | Tableau & Excel
数据挖掘·数据分析·excel·tableau
政沅同学3 小时前
C# 一种很好用的设计模式 不同对象之间进行解耦通信
设计模式·c#
happy_baymax4 小时前
Simulink 端口自动生成工具 (v2.1)(EXCEL+m语言)
服务器·matlab·excel·simulink
咩图5 小时前
C#进程通讯-命名管道通讯
c#·命名管道·进程通讯
SunnyDays10115 小时前
如何使用 C# 高效实现 Excel 与 CSV 的互相转换
c#·excel·csv
Byron Loong5 小时前
【网络】C#TCP 通讯
网络·tcp/ip·c#