java jxl解析Excel(fileUpload)
需要的jar包:commons-io-1.3.2.jar, jxl.jar, commons-fileupload-1.2.1.jar, commons-logging-1.1.jar
Action数据处理:
public class ExtractExcelAction extends ActionSupport implements ServletRequestAware{
private HttpServletRequest request;
private File theExcel;
private Log logger = LogFactory.getLog(this.getClass());
private static final String SESSION_IMPORT_Content = "import.excel";
public File getTheExcel() {
return theExcel;
}
public void setTheExcel(File theExcel) {
this.theExcel = theExcel;
}
public void setServletRequest(HttpServletRequest request) {
this.request = request;
}
public String test() throws Exception{
InputStream stream = new FileInputStream(theExcel);//struts2方法
//InputStream stream = new FileInputStream(new File("D:\\Study\\test.xls"));--本地文件
//以下代码段为servlet和struts1.处理方式
//ServletFileUpload upload = new ServletFileUpload();
//FileItemIterator iter = upload.getItemIterator(request);
//while (iter.hasNext()) {
// FileItemStream item = iter.next();
// String name = item.getFieldName();
// InputStream stream = item.openStream();
//if(logger.isDebugEnabled()){
// logger.debug("成功读取文件["+item.getFieldName()+"]");
// }
if(logger.isDebugEnabled()){
logger.debug("成功读取文件["+theExcel.getName()+"]");
}
//解析excel文件
ExtractExcelData extractExcel = new ExtractExcelData();
extractExcel.extract(stream);
request.getSession().setAttribute(SESSION_IMPORT_Content, extractExcel);
request.setAttribute("fileName", theExcel.getName().substring(theExcel.getName().lastIndexOf(File.separator) + 1));
//excel的表头
request.setAttribute("excelFields", extractExcel.getHeaders());
return "success";
}
}
解析Excel类:ExtractExcelData.java(不同情况可做不同的数据结构)
public class ExtractExcelData { private Log log = LogFactory.getLog(ExtractExcelData.class); /** 提取excel的表头 */ private String[] headers = new String[0]; /** 提取excel的数据列表,元素类型为List,显示顺序与表头一致*/ private List data = new ArrayList(); public List getData() { return data; } public String[] getHeaders() { return headers; } public void extract(InputStream in){ Workbook workbook = null; try { workbook = Workbook.getWorkbook(in); Sheet sheet = workbook.getSheet(0); if (log.isDebugEnabled()) { log.debug("取得第一个 sheet=[" + sheet + "]"); } int rowCount = sheet.getRows(); if (log.isDebugEnabled()) { log.debug("在EXCEL共取到[" + rowCount + "]行数据"); } if (rowCount > 0) { createTableHeader(sheet.getRow(0)); for (int i = 1; i < rowCount; i++) { createTableRow(sheet.getRow(i)); } } if (log.isInfoEnabled()) { log.info("完成读取EXCEL文件"); } } catch (Exception e) { String msg = "创建 Workbook 错误"; if (log.isInfoEnabled()) { log.info(msg, e); } //throw new ImportExportException(msg, e); } } private void createTableHeader(Cell[] cells) { if (cells != null) { if (log.isInfoEnabled()) { log.info("设置表头时共找到[" + cells.length + "]列cell"); } headers = new String[cells.length]; for (int i = 0; i < cells.length; i++) { headers[i] = cells[i].getContents(); } } } private void createTableRow(Cell[] cells) { if (cells != null && cells.length > 0) { List elementList = new ArrayList(); for (int i = 0; i < headers.length; i++) { String value = ""; if (i < cells.length && cells[i] != null) { value = cells[i].getContents(); if(StringUtils.isNotBlank(value)){ value = value.trim(); } } elementList.add(value); } if (log.isInfoEnabled()) { log.info("数据行:" + elementList); } data.add(elementList); } } }
页面:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=GBK"> <title>测试</title> <script type="text/javascript"> function doNext(){ var formatstring = 'xls'; var filePath= document.getElementById("theExcel").value; var i = filePath.lastIndexOf("."); newstring= filePath.substring(i+1); if(formatstring == newstring){ document.getElementById("importForm").submit(); }else{ alert("对不起,文件格式与选择的文件不相符!"); } } </script> </head> <body> <form id="importForm" action="user/extractExcel_test" enctype="multipart/form-data" method="post" > 请选择要输入的excel文件:<input id="theExcel" name="theExcel" type="file" value =""/> <input type="button" onclick="doNext();" value="解析"/> </form> </body> </html>
posted on 2012-09-19 10:53 Panda_Luffy 阅读(1450) 评论(0) 编辑 收藏 举报