1.数据的导出–把数据库的数据写入Excel里面,通过浏览器的文件下载的方式!
2.导出方式:1.-ms office excel
2. NPOI (JAVA POI)(常用) NPOI库文件-专门操作文档
Excel有两种版本 1.基本版本-xls(兼容性好,常用)
2.扩展版本-xlsx
3.导出步骤
1.查询数据
2.条件筛选
//编号
if (!string.IsNullOrEmpty(studentNumber))
{
query = query.Where(m => m.studentNumber.Contains(studentNumber));
}
//姓名
if (!string.IsNullOrEmpty(studentName))
{
query = query.Where(m => m.studentName.Contains(studentName));
}
//班级ID
if (classID > 0)
{
query = query.Where(m => m.classID == classID);
}
//身份证号
if (!string.IsNullOrEmpty(studentIDCard))
{
query = query.Where(m => m.studentIDCard.Contains(studentIDCard));
}
List list = query.ToList();
3.跟据模板文件的Excel导出
1.检查模板文件是否存在
检查之前,先使用 Server.MapPath 将相对的路径转为实际的物理路径
string templatePath = Server.MapPath("~/Document/ARDataTemplate.xls");
2.使用NPOI打开模板文件Excel
FileStream templateStream = System.IO.File.Open(templatePath, FileMode.Open);
3.使用NPOI打开模板Excel得到一个工作簿
NPOI.HSSF.UserModel.HSSFWorkbook excelBookTemplate = new NPOI.HSSF.UserModel.HSSFWorkbook(templateStream);
4.打开模板所在第一个工作表
5.设置标题,如果筛选时间段不为空就拼接上筛选时间段
6.往模板填充数据
7.以流的方式返回
string fileName = “学生信息” + DateTime.Now.ToString(“yyyy-MM-dd-HH-mm-ss-ffff”) + “.xls”;
8.把Excel转化为流,输出
1.定义内存流
MemoryStream BookStream = new MemoryStream();
2.将工作簿写入内存流
excelBookTemplate.Write(BookStream);
3.输出之前调用Seek(偏移量,游标位置)方法:获取文件流的长度
BookStream.Seek(0, SeekOrigin.Begin);
return File(BookStream, “application/vnd.ms-excel”, fileName);
4.知识点
1.设置数据单元格的样式
①水平垂直居中对齐
style.Alignment = NPOI.SS.UserModel.HorizontalAlignment.Center;
style.VerticalAlignment = NPOI.SS.UserModel.VerticalAlignment.Center;
②设置边框为实线
style.BorderLeft = NPOI.SS.UserModel.BorderStyle.Thin;
style.BorderTop = NPOI.SS.UserModel.BorderStyle.Thin;
style.BorderRight = NPOI.SS.UserModel.BorderStyle.Thin;
style.BorderBottom = NPOI.SS.UserModel.BorderStyle.Thin;
2.设置数据单元格的样式
NPOI.SS.UserModel.ICellStyle cellStyle_Title = workbook.CreateCellStyle();
cellStyle_Title.Alignment = NPOI.SS.UserModel.HorizontalAlignment.Center;//水平居中
cellStyle_Title.VerticalAlignment = NPOI.SS.UserModel.VerticalAlignment.Center;//垂直居中
NPOI.SS.UserModel.IFont font_title = workbook.CreateFont();//声明字体
font_title.Color = NPOI.HSSF.Util.HSSFColor.Blue.Index;//设置字体颜色
font_title.Boldweight = (short)NPOI.SS.UserModel.FontBoldWeight.Bold;//加粗
font_title.FontHeightInPoints = 18;//字体大小
cellStyle_Title.SetFont(font_title);//设置单元格字体
2.填充数据的步骤
①int index = 0;index也可为2,根据模板数据开始填充数据的行索引值确定
②遍历查询出的数据,填充Excel单元格
for (int i = 0; i < list.Count(); i++)
{
NPOI.SS.UserModel.IRow row = sheet.CreateRow(index); ;//给sheet添加一行
row.Height = 22 * 20;//设置行高
//设置单元格数据
row.CreateCell(0).SetCellValue(i + 1);
row.CreateCell(1).SetCellValue(list[i].studentNumber.ToString());
row.CreateCell(2).SetCellValue(list[i].studentName.ToString());
row.CreateCell(3).SetCellValue(list[i].calssName.ToString());
row.CreateCell(4).SetCellValue(list[i].studentSex.ToString());
row.CreateCell(5).SetCellValue(list[i].telephone.ToString());
row.CreateCell(6).SetCellValue(list[i].studentIDCard.ToString());
//设置单元格样式
for (int j = 0; j < row.Cells.Count; j++)
{
row.GetCell(j).CellStyle = style;
}
index++;
}
3.流–作用:操作文件.读取数据 (IO Input(读取) outPut(输出) 的缩写)