首先就是给导出绑定一个点击事件,序列化获取数据,在序列化结果传参到控制器接收
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统计单元格个数、拼接文件名、创建内存流、将工作簿写入内存流,然后直接返回。
这是我所学到的导出,所以我要分享给你们,希望可以帮助到你们。
以上就是我的分享,新手上道,请多多指教。如果有更好的方法或不懂得地方欢迎在评论区教导和提问喔!