第三部分:数据导入到excel
数据是由sql语句从数据库查出来的,最初想到的是直接写方法执行sql语句查出数据,然后写入excel,但是由于需要做成通用的公共方法,因此查数据的方法是动态的,无法确定,所以就用到了java的反射机制,首先写好服务层的方法,然后在前台将服务层注入的bean名称,与方法名传给后台,后台利用反射调用取数据,然后写入excel。
导入excel表需要用到poi的jar包:jar包如下:
poi-3.9-20121203.jar
xmlbeans-2.3.0.jar
poi-ooxml-3.9-20121203.jar
poi-examples-3.9-20121203.jar
poi-excelant-3.9-20121203.jar
poi-ooxml-schemas-3.9-20121203.jar
poi-scratchpad-3.9-20121203.jar
@Controller public class FileTransferController extends BaseController{ //临时文件存放目录 public String tempPath = FileUtil.getProjectPath()+"\\temp\\"; /** * 数据导出到excle表中 * @author zheng_liming * @param request * @param response * @return */ @SuppressWarnings("rawtypes") @RequestMapping(value = "/fileTransfer/exportToExcle", method = RequestMethod.POST) public void exportToExcle(HttpServletRequest request,HttpServletResponse response) throws Exception{ DynamicForm dynamicForm =(DynamicForm) PlatformContext.getRequestAttribute(SystemConstants.DYNAMICFORM); //反射调用方法 List<Map<String, Object>> resultList = reflect(dynamicForm); String fileType = "xlsx"; //创建工作文档对象 Workbook wb = null; HSSFFont xlsFont = null; HSSFCellStyle xlsStyle = null; XSSFFont xlsxFont = null; XSSFCellStyle xlsxStyle = null; if (fileType.equals("xls")) { wb = new HSSFWorkbook(); xlsFont = (HSSFFont) wb.createFont();//字体 xlsFont.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);//字体加粗 xlsStyle = (HSSFCellStyle) wb.createCellStyle();//样式 xlsStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);//水平居中 xlsStyle.setFont(xlsFont);//单元格字体 }else if(fileType.equals("xlsx")){ wb = new XSSFWorkbook(); xlsxFont = (XSSFFont) wb.createFont();//字体 xlsxFont.setBoldweight(XSSFFont.BOLDWEIGHT_BOLD);//字体加粗 xlsxStyle = (XSSFCellStyle) wb.createCellStyle();//样式 xlsxStyle.setAlignment(XSSFCellStyle.ALIGN_CENTER);//水平居中 xlsxStyle.setFont(xlsxFont);//单元格字体 }else{ System.out.println("您的文档格式不正确!"); return; } //创建sheet对象 Sheet sheet1 = (Sheet) wb.createSheet("sheet1"); int headNum = 0;//表头从0开始 int rowNum = 1;//行数据从1开始 int totalCellNum = 0; //创建表头的行 Row head = (Row) sheet1.createRow(headNum); //循环写入行数据 for (Map<String, Object> map : resultList) { int cellNum = 0; Row row = (Row) sheet1.createRow(rowNum); Iterator it = map.keySet().iterator(); //循环写入列数据 while (it.hasNext()) { String key = (String) it.next(); //第一次外循环的时候将表头数据写入 if(rowNum==1){ Cell headCell = head.createCell(cellNum); headCell.setCellValue(key.equals("rn")?"序号":key); //表头样式 headCell.setCellStyle(xlsStyle==null?xlsxStyle:xlsStyle); } //将行数据写入 Cell cell = row.createCell(cellNum); cell.setCellValue(map.get(key).toString()); cellNum = cellNum+1; } totalCellNum = cellNum; rowNum = rowNum+1; } //自动调整列宽 for (int i=0;i<totalCellNum;i++) { sheet1.autoSizeColumn(i); } String timeStr = DateUtil.dateToDateString(new Date(),"yyyyMMddHHmmss"); File file = new File(tempPath); if (!file.exists()) { file.mkdirs(); } //创建文件流 OutputStream stream = new FileOutputStream(tempPath+timeStr+"."+fileType); //写入文件并保存到工程目录下 wb.write(stream); //关闭文件流 stream.close(); //将工程目录下的文件下载到客户端 downFile(tempPath,timeStr+"."+fileType); //删除工程目录下文件 FileUtil.removeAllFile(tempPath); FileUtil.removeFolder(tempPath); } /** * 将服务器上的文件下载到客户端 * @author zheng_liming * @param filePath 文件路径 * @param fileName 文件名称 */ public void downFile(String filePath,String fileName) throws Exception{ FileInputStream fis = new FileInputStream(new File(filePath+fileName)); //设置响应头和保存文件名 HttpServletResponse response = getResponse(); response.setContentType("APPLICATION/OCTET-STREAM"); response.setHeader("Content-Disposition", "attachment; filename=" + URLEncoder.encode(fileName, "UTF-8")); //写出流信息 int b = 0; PrintWriter out = response.getWriter(); while((b=fis.read())!=-1) { out.write(b); } //关闭 fis.close(); out.close(); } /** * 反射调用类方法 * @author zheng_liming * @param className 类名 * @param methodName 方法名 * @return List<Map<String, Object>> 调用的方法返回值 */ @SuppressWarnings("unchecked") public List<Map<String, Object>> reflect(DynamicForm dynamicForm) throws Exception{ String className = dynamicForm.getString("className"); String methodName = dynamicForm.getString("methodName"); //初始化 MethodInvoker methodInvoker = new MethodInvoker(); methodInvoker.setTargetObject(SpringContext.getBean(className)); methodInvoker.setTargetMethod(methodName); //设置参数 methodInvoker.setArguments(new Object[]{dynamicForm}); //准备方法 methodInvoker.prepare(); Object result = methodInvoker.invoke(); Map<String, Object> resultMap = (Map<String, Object>) result; List<Map<String, Object>> resultList = (List<Map<String, Object>>) resultMap.get("rows"); return resultList; } }
相关推荐
目前项目有一个需求“数据的离线导入导出”,需要将数据分模块导入到不同的excel,然后压缩成数据包下载
基于java的p2p文件传输代码.rar基于java的p2p文件传输代码.rar基于java的p2p文件传输代码.rar基于java的p2p文件传输代码.rar基于java的p2p文件传输代码.rar基于java的p2p文件传输代码.rar基于java的p2p文件传输代码....
java对Excel表格数据处理并以List集合返回(只要传Excel文件路径即可)
基于JAVA的文件传输设计与实现.doc 基于JAVA的文件传输设计与实现.doc 基于JAVA的文件传输设计与实现.doc 基于JAVA的文件传输设计与实现.doc 基于JAVA的文件传输设计与实现.doc 基于JAVA的文件传输设计与实现.doc ...
基于java文件传输的示例,个人觉得不错!
jeecg导入excel 想学的速度了
用JAVA实现文件数据传输,包括CLIENTSOCKET,CLIENTTEST,SERVERTEST三个JAVA文件,在ECLIPSE环境下能够运行。需要两台电脑。
压缩文件中是把dataTable导入到Excel中的一个抽象方法,用的时候只需传一个dataTable进去就OK了
java毕业设计——java文件传输系统的设计与实现(论文+源代码).zip java毕业设计——java文件传输系统的设计与实现(论文+源代码).zip java毕业设计——java文件传输系统的设计与实现(论文+源代码).zip java毕业设计...
2.使用一个button实现导入数据模板,导入表格内容 3.实现进度条功能,跟踪文件传输进度 4.引用Microsoft.Office.Interop.Excel和Spire.Xls分别实现文件的导入和导入报表文件、导入表格数据,System.Threading功能...
前端Excel大文件file slice分片,md5校验文件完整性并作文件标识记录写入数据库,支持断点续传。文件上传完毕后,使用EasyExcel读取文件流,处理Excel数据写入数据库中,可处理百万级数据。项目完整,连接数据库即可...
基于java的远程登录和文件传输基于java的远程登录和文件传输基于java的远程登录和文件传输基于java的远程登录和文件传输
基于JAVA的文件传输(源代码+分析文档)设计与实现 基于JAVA的文件传输(源代码+分析文档)设计与实现 基于JAVA的文件传输(源代码+分析文档)设计与实现 基于JAVA的文件传输(源代码+分析文档)设计与实现 基于JAVA的文件...
文件上传下载 excel导入导出 及http 传输 真实解析 手工纯写
Java文件管理系统,支持权限管理、历史版本管理、Office编辑、Office预览、在线解压缩、文件分享、文件加密、远程存储、跨仓库推送、跨服务器推送、秒传、断点续传、智能搜索、文件备注、自动备份、一键迁移。...
如何利用 Java 实现 QQ 文件传输功能 现在, 通过网络传输文件已经非常普遍, 各种传输工 具也很多, 最具有代表性的就是 QQ 提供的文件传输功能了, 它能让好友之间方便的把自己的文件传给对方。 仔细查看 QQ 的...
对java socket 编程的练习,做了一个基于socket的文件传输程序,可以实现单方文件传输
基于JAVA的FTP文件传输系统设计与开发(课程设计).docx基于JAVA的FTP文件传输系统设计与开发(课程设计).docx基于JAVA的FTP文件传输系统设计与开发(课程设计).docx基于JAVA的FTP文件传输系统设计与开发(课程设计).docx...
运用线程,实现基于tcp/ip的文件传送。适用于做基于局域网的Java聊天程序
UDP传输的优点是快捷,因为它是没有安全保证的。有一定的丢失率。而且,由于各包的传输路径不同,后发送的包可能先于先发送的包到达。所以,如果发送大量的数据,就需要进行检错。当然,还得保证快捷的传输。 我就是...