ssh后台应用poi
2016-03-28 20:49
561 查看
1.导入
在service业务层中实现
经过导入的例子我们发现poi这个插件,并不太智能,我们解析读取excel文件中的信息,得先解析excel文件,再找到文件中储存相应的工作簿,在找到工作簿中对应的工作表,再利用表中循环一行一行的读取单元格,一旦单元格中某一部分为空或者超出行然易产生数据错误,且不易发现。而我之前项目进行xml文件解析时。使用xstreanm解析xml文件信息时,是以对象的方式来进行解析,方便许多,我在后续的文章会介绍这一强大的插件,问题在于xstream只能解析xml文件。
2.导出,导出与导入是差不多的方式,从数据库取得文件再依次文件->工作簿->表->单元格的再储存信息
在action中定义相应的导出方法
public void exportExcel(){
try {
//1、查找用户列表
userList = userService.findObject();
//2、导出
HttpServletResponse response = ServletActionContext.getResponse();
response.setContentType("application/x-execl");
response.setHeader("Content-Disposition", "attachment;filename=" + new String("用户列表.xls".getBytes(), "ISO-8859-1"));
ServletOutputStream outputStream = response.getOutputStream();
userService.exportExcel(userList, outputStream);
if(outputStream != null){
outputStream.close();
}
} catch (Exception e) {
e.printStackTrace();
}
}在业务层实现
//导入用户列表,在action中定义方法 public String importExcel(){ //1、获取excel文件 if(userExcel != null){ //是否是excel if(userExcelFileName.matches("^.+\\.(?i)((xls)|(xlsx))$")){ //2、导入 userService.importExcel(userExcel, userExcelFileName); } } return "list"; }
在service业务层中实现
public void importExcel(File userExcel, String userExcelFileName) { try { FileInputStream fileInputStream = new FileInputStream(userExcel); boolean is03Excel = userExcelFileName.matches("^.+\\.(?i)(xls)$"); //1、读取工作簿 Workbook workbook = is03Excel ? new HSSFWorkbook(fileInputStream):new XSSFWorkbook(fileInputStream); //2、读取工作表 Sheet sheet = workbook.getSheetAt(0); //3、读取行 if(sheet.getPhysicalNumberOfRows() > 2){ User user = null; for(int k = 2; k < sheet.getPhysicalNumberOfRows(); k++){ //4、读取单元格 Row row = sheet.getRow(k); user = new User(); //用户名 Cell cell0 = row.getCell(0); user.setName(cell0.getStringCellValue()); //帐号 Cell cell1 = row.getCell(1); user.setAccount(cell1.getStringCellValue()); //所属部门 Cell cell2 = row.getCell(2); user.setDept(cell2.getStringCellValue()); //性别 Cell cell3 = row.getCell(3); user.setGender(cell3.getStringCellValue().equals("男")); //手机号 String mobile = ""; Cell cell4 = row.getCell(4); try { mobile = cell4.getStringCellValue(); } catch (Exception e) { double dMobile = cell4.getNumericCellValue(); mobile = BigDecimal.valueOf(dMobile).toString(); } user.setMobile(mobile); //电子邮箱 Cell cell5 = row.getCell(5); user.setEmail(cell5.getStringCellValue()); //生日 Cell cell6 = row.getCell(6); if(cell6.getDateCellValue() != null){ user.setBirthday(cell6.getDateCellValue()); } //默认用户密码为 123456 user.setPassword("123456"); //默认用户状态为 有效 user.setState(User.USER_STATE_VALID); //5、保存用户 save(user); } } workbook.close(); fileInputStream.close(); } catch (Exception e) { e.printStackTrace(); } }
经过导入的例子我们发现poi这个插件,并不太智能,我们解析读取excel文件中的信息,得先解析excel文件,再找到文件中储存相应的工作簿,在找到工作簿中对应的工作表,再利用表中循环一行一行的读取单元格,一旦单元格中某一部分为空或者超出行然易产生数据错误,且不易发现。而我之前项目进行xml文件解析时。使用xstreanm解析xml文件信息时,是以对象的方式来进行解析,方便许多,我在后续的文章会介绍这一强大的插件,问题在于xstream只能解析xml文件。
2.导出,导出与导入是差不多的方式,从数据库取得文件再依次文件->工作簿->表->单元格的再储存信息
在action中定义相应的导出方法
public void exportExcel(){
try {
//1、查找用户列表
userList = userService.findObject();
//2、导出
HttpServletResponse response = ServletActionContext.getResponse();
response.setContentType("application/x-execl");
response.setHeader("Content-Disposition", "attachment;filename=" + new String("用户列表.xls".getBytes(), "ISO-8859-1"));
ServletOutputStream outputStream = response.getOutputStream();
userService.exportExcel(userList, outputStream);
if(outputStream != null){
outputStream.close();
}
} catch (Exception e) {
e.printStackTrace();
}
}在业务层实现
/** * 导出用户的所有列表到excel * @param userList 用户列表 * @param outputStream 输出流 */ public static void exportUserExcel(List<User> userList, ServletOutputStream outputStream) { try { //1、创建工作簿 HSSFWorkbook workbook = new HSSFWorkbook(); //1.1、创建合并单元格对象 CellRangeAddress cellRangeAddress = new CellRangeAddress(0, 0, 0, 4);//起始行号,结束行号,起始列号,结束列号 //1.2、头标题样式 HSSFCellStyle style1 = createCellStyle(workbook, (short)16); //1.3、列标题样式 HSSFCellStyle style2 = createCellStyle(workbook, (short)13); //2、创建工作表 HSSFSheet sheet = workbook.createSheet("用户列表"); //2.1、加载合并单元格对象 sheet.addMergedRegion(cellRangeAddress); //设置默认列宽 sheet.setDefaultColumnWidth(25); //3、创建行 //3.1、创建头标题行;并且设置头标题 HSSFRow row1 = sheet.createRow(0); HSSFCell cell1 = row1.createCell(0); //加载单元格样式 cell1.setCellStyle(style1); cell1.setCellValue("用户列表"); //3.2、创建列标题行;并且设置列标题 HSSFRow row2 = sheet.createRow(1); String[] titles = {"用户名","帐号", "所属部门", "性别", "电子邮箱"}; for(int i = 0; i < titles.length; i++){ HSSFCell cell2 = row2.createCell(i); //加载单元格样式 cell2.setCellStyle(style2); cell2.setCellValue(titles[i]); } //4、操作单元格;将用户列表写入excel if(userList != null){ for(int j = 0; j < userList.size(); j++){ HSSFRow row = sheet.createRow(j+2); HSSFCell cell11 = row.createCell(0); cell11.setCellValue(userList.get(j).getName()); HSSFCell cell12 = row.createCell(1); cell12.setCellValue(userList.get(j).getAccount()); HSSFCell cell13 = row.createCell(2); cell13.setCellValue(userList.get(j).getDept()); HSSFCell cell14 = row.createCell(3); cell14.setCellValue(userList.get(j).isGender()?"男":"女"); HSSFCell cell15 = row.createCell(4); cell15.setCellValue(userList.get(j).getEmail()); } } //5、输出 workbook.write(outputStream); workbook.close(); } catch (Exception e) { e.printStackTrace(); } } /** * 创建单元格样式 * @param workbook 工作簿 * @param fontSize 字体大小 * @return 单元格样式 */ private static HSSFCellStyle createCellStyle(HSSFWorkbook workbook, short fontSize) { HSSFCellStyle style = workbook.createCellStyle(); style.setAlignment(HSSFCellStyle.ALIGN_CENTER);//水平居中 style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);//垂直居中 //创建字体 HSSFFont font = workbook.createFont(); font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);//加粗字体 font.setFontHeightInPoints(fontSize); //加载字体 style.setFont(font); return style; }
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- Linux Generating SSH Keys
- PropertyChangeListener简单理解
- 使用Python生成Excel格式的图片
- c++11 + SDL2 + ffmpeg +OpenAL + java = Android播放器
- 插入排序
- 冒泡排序