本项目基于SSM框架,简单封装了Excel批量导入导出功能,不用建数据库表一键导入导出Excel,不过这样只适用于对导入的Excel表进行转换。上一篇介绍了建表导入导出Excel(点击跳转)
一、下载poi jar包:
点这里下载:poi 3.8/3.9/3.10三个版本下载
poi 3.17最新版本下载
二、基本操作步骤:
首先,理解一下一个Excel的文件的组织形式,一个Excel文件对应于一个workbook(HSSFWorkbook),一个workbook可以有多个sheet(页/表)(HSSFSheet)组成,一个sheet是由多个row(行)(HSSFRow)组成,一个row是由多个cell(单元格)(HSSFCell)组成。
1、用HSSFWorkbook打开或者创建“Excel文件对象”
2、用HSSFWorkbook对象返回或者创建Sheet对象
3、用Sheet对象返回行对象,用行对象得到Cell对象
4、对Cell对象读写。
三、封装Excel工具类ImportExcelUtil
public class ImportExcelUtil {
private final static String Excel_2003 = ".xls"; //2003 版本的excel
private final static String Excel_2007 = ".xlsx"; //2007 版本的excel
/**
* @param in
* @param fileName
* @param columNum 自定义列数
* @return
* */
public List> getBankListByExcel(InputStream in,String fileName) throws Exception{
List> list = null;
//创建Excel工作簿
Workbook work = this.getWorkbook(in, fileName);
if(work == null) {
throw new Exception("创建Excel工作簿为空!");
}
Sheet sheet = null;
Row row = null;
Cell cell = null;
list = new ArrayList>();
//遍历Excel中的所有sheet
for(int i = 0; i li = new ArrayList
四、控制层Controller
解决:MultipartFile文件或者图片上传一直为null问题
/**
* 导出销售订单数据
* @param myFile
* @param respon
* @return
* @throws IOException
*/
@RequestMapping(value = "export", method=RequestMethod.POST)
public ModelAndView exportFile(@RequestParam(value="file",required=false)MultipartFile myFile,HttpServletResponse response,HttpServletRequest request)throws IOException {
ModelAndView mv = this.getModelAndView();
try {
ImportExcelUtil util = new ImportExcelUtil();
InputStream input = null;
List> lists = null;
if (myFile.isEmpty()) {
logBefore(logger, "导入文件为空,请先添加Excel文件!");
} else {
String fileName = myFile.getOriginalFilename();
input = myFile.getInputStream();
lists = util.getBankListByExcel(input, fileName);
input.close();
//导出用SXSSFWorkbook
SXSSFWorkbook workbook = new SXSSFWorkbook(10000);
CellStyle style = workbook.createCellStyle();
style.setAlignment(XSSFCellStyle.ALIGN_CENTER);//SXSSFWorkbook方式的居中
// 创建一个sheet页
SXSSFSheet sheet = (SXSSFSheet) workbook.createSheet("销售订单");
// 创建标题
SXSSFRow headRow = (SXSSFRow) sheet.createRow(0);
headRow.createCell(0).setCellValue("单据日期");
headRow.createCell(1).setCellValue("单据编号");
headRow.createCell(2).setCellValue("客户编码");
headRow.createCell(3).setCellValue("客户");
headRow.createCell(4).setCellValue("结算客户编码");
headRow.createCell(5).setCellValue("结算客户");
headRow.createCell(6).setCellValue("部门编码");
headRow.createCell(7).setCellValue("部门");
headRow.createCell(8).setCellValue("业务员编码");
headRow.createCell(9).setCellValue("业务员");
headRow.createCell(10).setCellValue("币种代码");
headRow.createCell(11).setCellValue("币种");
headRow.createCell(12).setCellValue("汇率");
headRow.createCell(13).setCellValue("运输方式");
headRow.createCell(14).setCellValue("送货地址");
headRow.createCell(15).setCellValue("联系人");
headRow.createCell(16).setCellValue("联系电话");
headRow.createCell(17).setCellValue("客户手机号");
headRow.createCell(18).setCellValue("合同号");
headRow.createCell(19).setCellValue("收款方式");
headRow.createCell(20).setCellValue("外部单据号");
headRow.createCell(21).setCellValue("按仓库拆单出库");
headRow.createCell(22).setCellValue("国际单号");
headRow.createCell(23).setCellValue("内部单号");
headRow.createCell(24).setCellValue("备注");
headRow.createCell(25).setCellValue("仓库编码");
headRow.createCell(26).setCellValue("仓库");
headRow.createCell(27).setCellValue("项目编码");
headRow.createCell(28).setCellValue("项目");
headRow.createCell(29).setCellValue("存货编码");
headRow.createCell(30).setCellValue("存货名称");
headRow.createCell(31).setCellValue("销售单位");
headRow.createCell(32).setCellValue("数量");
headRow.createCell(33).setCellValue("报价");
headRow.createCell(34).setCellValue("折扣%");
headRow.createCell(35).setCellValue("税率%");
headRow.createCell(36).setCellValue("含税单价");
headRow.createCell(37).setCellValue("含税金额");
headRow.createCell(38).setCellValue("预计交货日期");
headRow.createCell(39).setCellValue("赠品");
headRow.createCell(40).setCellValue("备注");
headRow.createCell(41).setCellValue("国家");
headRow.createCell(42).setCellValue("货代");
headRow.createCell(43).setCellValue("客户单号");
// 循环将excel中的数据存入库
for (int i = 1; i < lists.size(); i++) {
List
五、jsp页面