这里主要是实现excel,CSV文件的输入输出及PDF的输出。
1,首先是excel,使用poi实现导入导出
POI详细介绍参考:https://www.cnblogs.com/huajiezh/p/5467821.html
常识:
xlsx和xls都是excel文件名扩展名,xls是早期excel使用的,xlsx为后续excel版本才开始使用。主要有以下区别:
1、xls是excel 2007之前版本的使用的默认格式。xlsx是excel 2007之后的版本使用的默认格式,包括2007的版本。
2、XLSX格式的占用空间比XLS的小。xlsx是用新的基于XML的压缩文件格式取代了xls默认文件格式。
3、excel 2007之前的版本无法直接打开xlsx格式的,版本较低不兼容。但可通过安装office兼容性补丁包来实现打开编辑。
4、excel 2007之后的版本可以直接打开XLS、xlsx。软件是向下兼容的。如果要使低版本的也可以打开,可以在保存时选择excel 97-2003.xls格式的。
在POI中,解析.XLS使用的是HSSFWorkbook,解析.XLSX的解析用的是XSSFWorkbook,需要判断处理
具体过程:
2. 1 数据库信息的查询。
将数据库中的某张表中的数据进行一个查询,将查询到的数据进行写入excel文件中。
2. 2 建立一张excel表进行存储查询到的数据。
建立一张excel表,首先建立一个工作簿,然后建立一个sheet,在sheet中建立一行作为表头,将数据库查询到的数据分别放到对应的表头的下方。
MultipartFile与File的知识: https://blog.youkuaiyun.com/sdut406/article/details/85647982
以下数据库操作不涉及,单纯实现这种思想:
实体封装:(运行结果有问题,但是这里只是单纯的实现功能)
package com.ssn.demo.controller;
import lombok.Data;
@Data
public class User {
private String deptNO;
private String deptName;
private String deptNum;
}
实现的控制层:
package com.ssn.demo.controller;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.DateUtil;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.ss.util.CellRangeAddress;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.springframework.stereotype.Controller;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;
@Controller
public class TestController {
// 2003版及以前
public static final String EXCEL_XLS = "xls";
// 2007版及以后
private static final String EXCEL_XLSX = "xlsx";
/**
* 判断是否为excel
* @throws Exception
*/
public void checkExcel(String fileName) throws Exception {
// 不是文件,且不是EXCEL_XLS和EXCEL_XLSX结尾的
if (fileName.endsWith(EXCEL_XLS) || fileName.endsWith(EXCEL_XLSX)) {
throw new Exception("不是excel文件");
}
}
/**
* 判断excel的版本,得到对应的Workbook
*/
public Workbook getWorkbook(InputStream in, MultipartFile file) throws Exception {
Workbook workbook = null;
if (file.getName().endsWith(EXCEL_XLS)) { // excel 2003
workbook = new HSSFWorkbook(in);
}
if (file.getName().endsWith(EXCEL_XLSX)) { // excel 2007/10
workbook = new XSSFWorkbook(in);
}
return workbook;
}
/**
* 生成excel并将虚拟好的数据写入
* @throws IOException
*/
@RequestMapping("/excelExport")
@ResponseBody
public Object excelExport(HttpServletResponse response) throws IOException {
// 如果你想操作数据库,也可以操作。这里建议用高版本
HSSFWorkbook workbook = new HSSFWorkbook(); //Excel的文档对象 2003
// 以下的参数,都可以抽象化,从而实现代码的可读性
HSSFSheet sheet = workbook.createSheet("excel测试表格"); // 创建sheet表单并命名
// 创建第一行
HSSFRow row = null; // Excel的行
row = sheet.createRow(0); // 创建第一行
row.setHeight((short)(26.25*20)); //设置行高
row.createCell(0).setCellValue("用户列表");// 为第一个单元格设值
// 将首行用三个单元格表示,即是合并列(你也可以合并行)
CellRangeAddress rowRange = new CellRangeAddress(0,0,0,3);
sheet.addMergedRegion(rowRange); // 合并整合到sheet
//创建第一行
row = sheet.createRow(1);
row.setHeight((short)(22.25*20));
row.createCell(0).setCellValue("部门名ID"); // 为第一个单元格设值
row.createCell(1).setCellValue("部门名"); // 为第二个单元格设值
row.createCell(2).setCellValue("部门员工数"); // 为第三个单元格设值
for(int i = 0; i < 6; i++) { // 这里模拟从数据库取出的数据
row = sheet.createRow(i + 2)