2013年4月第二周工作总结
1、功能描述,eBay第三方管理软件通途系统的补录跟踪号需求的开发,补录方式分为批量导入,API获取,手工补录三种,还有常用格式页面的开发,后台新建常用格式的页面的开发。
2、主要知识点:
1> js控件gridpanel(标签页)的应用
2> 文件上传 上传的原理是html中form包含有<input type="file" name="uploadFile"/>并且form配置enctype=""multipart/form-data,form提交的时候web应用程序以流的形式读取文件数据保存到服务器即实现了文件上传功能
3、java 解析excel。java从服务器指定位置读取上传的excel,new File(“filePath”)。用jxl包来解析excel主要有jxl.Workbook,jxl.Cell,jxl.Range,jxl.Sheet,异常类jxl.read.biff.BiffException,没有用POI包是因为循环取得excel数据的时候getCell()方法会将数字类型的数据直接转成double类型,问题没有解决所以换了包。主要代码
//得到文件流
private File handleExcel(String fileDirectory,DelegateHttpServletRequest request) {
String fileId = null;
Map mfileItem = ((DelegateMultipartHttpServletRequest) request).getFileItems();
if (mfileItem != null && mfileItem.size() == 1) {
List uploadItems = (List) mfileItem.get("uploadExcel");
if (uploadItems == null || uploadItems.size() == 0)
return null;
FileItem fileItem = (FileItem) uploadItems.get(0);
fileId = fileItem.getFileId();
}
if (fileId == null || fileId.trim().equals("")) {
return null;
}
return new File(fileDirectory + fileId);
}
try {
Workbook workbook = Workbook.getWorkbook(new File("D:\test.xls"));
list = (ArrayList) getDatasInSheet(workbook, 0); //得到第一个sheet的数据
Map returnMap = automatch(list,dataFactory);
if(returnMap != null && (Boolean)returnMap.get("isMatch")) { //匹配常用格式
wfContext.setTransientVariable("returnMap", returnMap);
}
if(list == null || list.size() < 1) {
wfContext.setTransientVariable("errorMessage", "数据解析错误,请核查excel!");
}
wfContext.setTransientVariable("dataList", list);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (BiffException e) {
e.printStackTrace();
} finally {
file.delete();
}
//遍历得到excel所有数据
public List getDatasInSheet(Workbook workbook, int sheetNumber) {
List<List> result = new ArrayList<List>();
Sheet sheet = workbook.getSheet(sheetNumber); // 获得指定的sheet
Range[] merge = sheet.getMergedCells();
if(merge != null && merge.length > 0) { //如果有合并单元格直接报错
return null;
}
int rowCount = sheet.getRows(); // 获得sheet总行数
int cellCount = sheet.getColumns(); // 获得sheet总行数
logger.info("found excel rows count:" + rowCount);
if (rowCount < 1) {
return null;
}
for (int rowIndex = 0; rowIndex < rowCount; rowIndex++) { // 遍历行row
List<Object> rowData = new ArrayList<Object>();
for (short cellIndex = 0; cellIndex < cellCount; cellIndex++) { // 遍历列cell得到本行的数据
Cell cell = sheet.getCell(cellIndex, rowIndex);
if(rowIndex == 0) {
String tempData = cell.getContents().trim();
if(tempData != null && !"".equals(tempData)) {
rowData.add(cell.getContents().trim().replaceAll("\r", "").replaceAll("\n", "").replaceAll("'", "´"));
}
} else {
rowData.add(cell.getContents().trim().replaceAll("\r", "").replaceAll("\n", "").replaceAll("'", "´"));
}
}
result.add(rowData);
}
return result;
}
4、特殊字符的处理,回车的处理用replaceAll("\r","").replaceAll("\n","")替换,如果特殊字符要返还到页面单引号双引号的替换可以直接用´代替单引号,"替换双引号