表格数据导出

首先就是给导出绑定一个点击事件,序列化获取数据,在序列化结果传参到控制器接收

        function exportExcel() {

            //序列化获取数据
            var formBranch = $("#formBranch").serialize();
            console.log(formBranch);

            //序列化结果传参
            window.open("ExportExce?" + formBranch);
        }
 public ActionResult ExportExce(Branch ExportBranch,string searchBranch)
 {
    return null;
 }

在控制器接收了一个表,在去获取数据

//获取数据
            var linqBranch = (from tbBranch in myModels.Branch
                             join tbBankAccount in myModels.BankAccount on tbBranch.BankAccountID equals tbBankAccount.BankAccountID
                             select new BranchVo
                             {
                                 BranchID = tbBranch.BranchID,
                                 BranchName = tbBranch.BranchName,
                                 djsbh = tbBranch.djsbh,
                                 Branchforshort = tbBranch.Branchforshort,
                                 BranchFullName = tbBranch.BranchFullName,
                                 site = tbBranch.site,
                                 phone = tbBranch.phone,
                                 Contact = tbBranch.Contact,
                                 website = tbBranch.website,
                                 fax = tbBranch.fax,
                                 E_mail = tbBranch.E_mail,
                                 OpenanIine = tbBankAccount.OpenanIine,
                                 S_Account = tbBranch.S_Account,
                                 S_Username = tbBranch.S_Username,
                                 TFN = tbBranch.TFN,
                                 Disable = tbBranch.Disable
                             }).ToList();
执行查询,将数据放到对象列表中
List<BranchVo> listBook = linqBranch.ToList();
//创建工作簿
IWorkbook workbook = new HSSFWorkbook();
//创建工作表 (给工作表设置名称为分店信息表)
ISheet sheet = workbook.CreateSheet("分店信息表");
#region 表头行
            //创建标头行
            IRow rowHeader = sheet.CreateRow(0);
            //创建单元格并设置单元格的值
            rowHeader.CreateCell(0).SetCellValue("序号");
            rowHeader.CreateCell(1).SetCellValue("分店编号");
            rowHeader.CreateCell(2).SetCellValue("单据识别号");
            rowHeader.CreateCell(3).SetCellValue("分店简称");
            rowHeader.CreateCell(4).SetCellValue("分店全称");
            rowHeader.CreateCell(5).SetCellValue("地址");
            rowHeader.CreateCell(6).SetCellValue("电话");
            rowHeader.CreateCell(7).SetCellValue("联系人");
            rowHeader.CreateCell(8).SetCellValue("网站");
            rowHeader.CreateCell(9).SetCellValue("传真");
            rowHeader.CreateCell(10).SetCellValue("Email");
            rowHeader.CreateCell(11).SetCellValue("开户行");
            rowHeader.CreateCell(12).SetCellValue("银行账号");
            rowHeader.CreateCell(13).SetCellValue("户名");
            rowHeader.CreateCell(14).SetCellValue("税号");
            rowHeader.CreateCell(15).SetCellValue("停用");
            //设置表头行样式
            ICellStyle cellStyle_header = workbook.CreateCellStyle();//声明样式
            cellStyle_header.Alignment = HorizontalAlignment.Center;//水平居中
            cellStyle_header.VerticalAlignment = VerticalAlignment.Center;//垂直居中
            cellStyle_header.FillPattern = FillPattern.SolidForeground;//设置背景填充效果
            cellStyle_header.FillForegroundColor =                     NPOI.HSSF.Util.HSSFColor.Yellow.Index;//设置背景填充颜色
            //设置字体
            IFont font_header = workbook.CreateFont();//声明字体样式
            font_header.Boldweight = (short)FontBoldWeight.Bold;//加粗
            font_header.IsBold = true;
            font_header.FontHeightInPoints = 10;//字体大小
            cellStyle_header.SetFont(font_header);//加入单元格
            for (int i = 0; i < rowHeader.Cells.Count; i++)
            {
                //GetCell(i)获取单元格 CellStyle设置单元格样式
                rowHeader.GetCell(i).CellStyle = cellStyle_header;
            }
            #endregion

上面就是对于表头行的处理,1、创建标头行2、创建单元格并设置单元格的值

3、设置表头行样式4、设置字体

#region 数据行
            //创建数据单元格的样式
            ICellStyle cellStyle_value = workbook.CreateCellStyle();//声明样式
            cellStyle_value.Alignment = HorizontalAlignment.Center;//水平居中
            cellStyle_value.VerticalAlignment = VerticalAlignment.Center;//垂直居中

            for (int i = 0; i < listBook.Count; i++)
            {
                //创建行
                IRow row = sheet.CreateRow(i + 1);
                //创建单元格并设置值
                row.CreateCell(0).SetCellValue(i + 1);
                row.CreateCell(1).SetCellValue(listBook[i].BranchName);
                row.CreateCell(2).SetCellValue(listBook[i].djsbh);
                row.CreateCell(3).SetCellValue(listBook[i].Branchforshort);
                row.CreateCell(4).SetCellValue(listBook[i].BranchFullName);
                row.CreateCell(5).SetCellValue(listBook[i].site);
                row.CreateCell(6).SetCellValue(listBook[i].phone);
                row.CreateCell(7).SetCellValue(listBook[i].Contact.ToString());
                row.CreateCell(8).SetCellValue(listBook[i].website.ToString());
                row.CreateCell(9).SetCellValue(listBook[i].fax.ToString());
                row.CreateCell(10).SetCellValue(listBook[i].E_mail.ToString());
                row.CreateCell(11).SetCellValue(listBook[i].OpenanIine.ToString());
                row.CreateCell(12).SetCellValue(listBook[i].S_Account.ToString());
                row.CreateCell(13).SetCellValue(listBook[i].S_Username.ToString());
                row.CreateCell(14).SetCellValue(listBook[i].TFN.ToString());
                if (listBook[i].Disable == 0)
                {
                    row.CreateCell(15).SetCellValue("否");
                }
                else
                {
                    row.CreateCell(15).SetCellValue("是");
                }
                //给每个单元格添加样式
                for (int j = 0; j < row.Cells.Count; j++)
                {
                    row.GetCell(j).CellStyle = cellStyle_value;
                }
            }
            #endregion

上面就是对于数据行的处理首先就是创建数据单元格的样式,在去遍历每一行,在去创建行,如果说需要导出上面数据,就创建多少个单元格,在上面图中有一个状态的处理,所以进行了判断的处理,在给每一个单元格统计样式。

//设置列宽为自动适应 GetRow变量每一列 Cells.Count统计单元格个数
            for (int i = 0; i < sheet.GetRow(1).Cells.Count; i++)
            {
                sheet.AutoSizeColumn(i);//这列自动适应最长数据单元格的宽度
                sheet.SetColumnWidth(i, sheet.GetColumnWidth(i) * 12 / 10);//设置列的宽度为自适应宽度之后的1.2倍
            }

            //拼接文件名
            string fileName = "分店信息" + DateTime.Now.ToString("yyyy-MM-dd-HH-mm-ss-ffff") + ".xls";
            //创建内存流
            MemoryStream BookStream = new MemoryStream();
            //将工作簿写入内存流
            workbook.Write(BookStream);

            BookStream.Seek(0, SeekOrigin.Begin);
            return File(BookStream, "application/vnd.ms-excel", fileName);

接收接收置列宽为自动适应 GetRow变量每一列 Cells.Count统计单元格个数、拼接文件名、创建内存流、将工作簿写入内存流,然后直接返回。

这是我所学到的导出,所以我要分享给你们,希望可以帮助到你们。

以上就是我的分享,新手上道,请多多指教。如果有更好的方法或不懂得地方欢迎在评论区教导和提问喔!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值