C#利用NPOI导出Excel-ASP.NET MVC示例

本文介绍了如何在ASP.NET MVC项目中使用NPOI库快速导出Excel文件,避免了依赖微软的COM组件和复杂的IIS权限配置。通过示例代码展示了C#中创建和写入Excel的主要步骤。
摘要由CSDN通过智能技术生成

Excel结构:工作薄.xls->工作表sheet->单元格Cell.

使用NPOI导出Excel速度挺快。

微软内置的COM组件,需要依赖office,而且发布到IIS权限配置很麻烦。而且效率较低。

NPOI导出Excel主要C#代码:

写入Excel文件类:

public static class XlsWriter
    {
        public static IWorkbook Writer(XlsWorkSet workSet)
        {
            if (workSet == null || workSet.Sheets == null || workSet.Sheets.Length == 0)
                throw new ArgumentNullException();
            // 工作簿
            IWorkbook work = RenderWorkBook(workSet.Version);
            for (var i = 0; i < workSet.Sheets.Length; i += 1)
            {
                var layer = workSet.Sheets[i];
                ISheet workSheet = RenderSheet(work, layer);
                DataTable dataRow = layer.Rows;
                for (int row = 0; row < dataRow.Rows.Count; row += 1)
                {
                    IRow sheetRow = workSheet.CreateRow(row + layer.titleRowIndex);
                    for (int cols = 0; cols < layer.Fields.Length; cols += 1)
                    {
                        ICell cell = sheetRow.CreateCell(cols);
                        DataSetter(dataRow.Rows[row][layer.Fields[cols].FieldName], cell, layer.Fields[cols]);
                    }
                }

                AutoFitBodyWidth(workSheet, layer);
            }

            return work;
        }

        public static byte[] ToByte(this IWorkbook work)
        {
            using (MemoryStream ms = new MemoryStream())
            {
                work.Write(ms);
                return ms.ToArray();
            }
        }

        private static ISheet RenderSheet(IWorkbook work, XlsWorkSheet sheet)
        {
            ISheet workSheet = work.CreateSheet(sheet.SheetName);
            if (sheet.Fields == null || sheet.Fields.Length == 0)
                return workSheet;
            IRow sheetRow = workSheet.CreateRow(0);
            var format = work.CreateDataFormat();
            XlsField field = null;
            for (int i = 0; i < sheet.Fields.Length; i += 1)
            {
                field = sheet.Fields[i];
                ICell cell = sheetRow.CreateCell(i);
                cell.SetCellValue(field.Title);

                ICellStyle style1 = work.CreateCellStyle();
                IFont font1 = work.CreateFont();
                field.HeaderS.Initilize(style1, 
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值