本文主要是介绍POI技术处理Excel表 .xls ..xlsx两种格式的导入操作,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
一、说明
1、文章转载自:http://blog.csdn.net/onepersontz/article/details/49891405
原文标题====SpringMvc+POI 处理Excel的导入操作功能====
提到了ImportExcelUtil.java(Excel解析工具类)、UploadExcelControl.java (Spring控制器)、InfoVo.java(保存Excel数据对应的对象)、main.jsp(前端代码)以及配置文件web.xml、springmvc-servlet.xml(只做简单配置)、applicationContext-base.xml等。
2、本文只提Controller层、ImportExcelUtil工具类两部分,原文中这两部分导入功能可能会有一些小问题,具体可看原文网友评论。
3、我对原文导入部分代码进行略微修改后,导入功能已实际运用当中,没发现问题。
二、功能代码
首先先感谢下原文博主,然后上代码!!!!!
1、Controller层
// 单号信息service
@Autowired
public OrderService orderService ; //服务层改为自己的/*** 一键上传Excel表信息* * @author Justin* */@RequestMapping("order_add.action")public @ResponseBody List<String> uploadadd(MultipartFile myFile, HttpServletResponse res) throws IOException {List<String> errorList = new ArrayList<String>();try {ImportExcelUtil util = new ImportExcelUtil(); InputStream input = null;List<List<Object>> lists = null;if(myFile.isEmpty()) {log.error("文件不存在!");}else {if (errorList.size() == 0) {String fileName = myFile.getOriginalFilename();input = myFile.getInputStream(); lists = util.getBankListByExcel(input, fileName);input.close();//循环将excel中的数据存入库for(int i=1; i<lists.size(); i++) {List<Object> list = lists.get(i);Order order= new Order(); //实体类,改为自己的order.setOrderNumber(util.getFormat(String.valueOf(list.get(0))));order.setAddress(util.getFormat(String.valueOf(list.get(1))));order.setPhone(util.getFormat(String.valueOf(list.get(2))));orderService.add(order); } }}} catch (Exception e) {errorList.add("导入单号数据错误");e.printStackTrace();log.error("系统错误", e.fillInStackTrace());}return errorList;}
2、ImportExcelUtil工具类
package poi;import java.io.InputStream;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;import org.apache.poi.hssf.usermodel.HSSFDateUtil;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
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.xssf.usermodel.XSSFWorkbook;public class ImportExcel {private final static String Excel_2003 =".xls";//2003版本的excelprivate final static String Excel_2007 =".xlsx";//2007版本的excelpublic List<List<Object>> getBankListByExcel(InputStream in,String fileName) throws Exception{List<List<Object>> 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<List<Object>>();//遍历Excel中所有的sheetfor(int i=0;i<work.getNumberOfSheets();i++) {//获得Excel中sheet工作表单sheet = work.getSheetAt(i);if(sheet==null) {continue;}//遍历当前sheet中所有的行//int total = sheet.getPhysicalNumberOfRows();//如果excel有格式,这种方式取值不准确int totalRow = sheet.getLastRowNum();for(int j=sheet.getFirstRowNum();j<totalRow;j++) {//获取一行row = sheet.getRow(j);if(row!=null && !"".equals(row)) {//获取第一个单元格的数据,判断是否存在Cell firstCell = row.getCell(0);if(firstCell!=null) {//遍历一行中每一列List<Object> li = new ArrayList<Object>();//int totalColumn = row.getLastCellNum();for(int y=row.getFirstCellNum();y<row.getLastCellNum();y++) {//获取每一格cell = row.getCell(y);String cellCal = this.getCellValue(cell)+"";li.add(cellCal);}list.add(li);}}}}in.close();return list;}public Workbook getWorkbook(InputStream in,String fileName) throws Exception {Workbook work = null;//获取文件类型xls或者xlsxString fileType = fileName.substring(fileName.lastIndexOf("."));if(Excel_2003.equals(fileType)) {work = new HSSFWorkbook(in);//2003 版本的Excel}else if(Excel_2007.equals(fileType)) {work = new XSSFWorkbook(in);}else {throw new Exception("解析文件格式有误");}return work;}/*** 对表格中的数据进行格式化* @param cell* @return*/public Object getCellValue(Cell cell) {Object value = null;DecimalFormat df1 = new DecimalFormat("0");//格式化number,string 字符串SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");//日期格式化DecimalFormat df2 = new DecimalFormat("0.00");//格式化数字if(cell!=null && !"".equals(cell)) {switch(cell.getCellType()) {case Cell.CELL_TYPE_STRING:value = cell.getRichStringCellValue().getString();break;case Cell.CELL_TYPE_NUMERIC:if("General".equals(cell.getCellStyle().getDataFormatString())) {value = df1.format(cell.getNumericCellValue());}else if("m/d/yy".equals(cell.getCellStyle().getDataFormatString())) {value = sdf.format(cell.getDateCellValue());}else if(HSSFDateUtil.isCellDateFormatted(cell)) {Date date = cell.getDateCellValue();value = sdf.format(date);}else {value = df2.format(cell.getNumericCellValue());}break;case Cell.CELL_TYPE_BOOLEAN:value = cell.getBooleanCellValue();break;case Cell.CELL_TYPE_BLANK:value="";break;default:break;}}return value;}
}
这篇关于POI技术处理Excel表 .xls ..xlsx两种格式的导入操作的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!