/** * 生成excel並下載 */ public void exportExcel(){ File newFile = createNewFile(); //File newFile = new File("d:/ss.xls"); //新文件寫入數據,並下載***************************************************** InputStream is = null; HSSFWorkbook workbook = null; HSSFSheet sheet = null; try { is = new FileInputStream(newFile); workbook = new HSSFWorkbook(is); //獲取第一個sheet sheet = workbook.getSheetAt(0); } catch (Exception e1) { e1.printStackTrace(); } if(sheet != null){ try { //寫數據 FileOutputStream fos = new FileOutputStream(newFile); HSSFRow row = sheet.getRow(4); HSSFCell cell = row.getCell(1); System.out.println(cell.getStringCellValue()); cell.setCellValue("ssssssssssssssssssssssssssssssssssssssssssss"); workbook.write(fos); fos.flush(); fos.close(); //下載 InputStream fis = new BufferedInputStream(new FileInputStream(newFile)); HttpServletResponse response = this.getResponse(); byte[] buffer = new byte[fis.available()]; fis.read(buffer); fis.close(); response.reset(); response.setContentType("text/html;charset=UTF-8"); OutputStream toClient = new BufferedOutputStream(response.getOutputStream()); response.setContentType("application/x-msdownload"); String newName = URLEncoder.encode("采購合同"+System.currentTimeMillis()+".xls", "UTF-8"); response.addHeader("Content-Disposition", "attachment;filename=\""+ newName + "\""); response.addHeader("Content-Length", "" + newFile.length()); toClient.write(buffer); toClient.flush(); } catch(Exception e) { e.printStackTrace(); }finally { try { if (null != is) { is.close(); } } catch (Exception e) { e.printStackTrace(); } } } //刪除創建的新文件 //this.deleteFile(newFile); } /** * 復制文件 * * @param s * 源文件 * @param t * 復制到的新文件 */ public void fileChannelCopy(File s, File t) { try { InputStream in = null; OutputStream out = null; try { in = new BufferedInputStream(new FileInputStream(s),1024); out = new BufferedOutputStream(new FileOutputStream(t),1024); byte[] buffer = new byte[1024]; int len; while ((len=in.read(buffer))!=-1) { out.write(buffer,0,len); } } finally { if (null != in) { in.close(); } if (null != out) { out.close(); } } } catch (Exception e) { e.printStackTrace(); } } /** * 讀取excel模板,並復制到新文件中供寫入和下載 * @return */ public File createNewFile(){ //讀取模板,並賦值到新文件************************************************************ //文件模板路徑 String path = this.getRequest().getRealPath(SystemConfig.FILETEMPLATE); String fileName="purchaseContract.xls"; File file=new File(path+"/"+fileName); //保存文件的路徑 String realPath = ServletActionContext.getServletContext().getRealPath(SystemConfig.UPLOAD_FILE_DIR); //新的文件名 String newFileName = "采購合同"+System.currentTimeMillis() + ".xls"; //判斷路徑是否存在 File dir = new File(realPath); if(!dir.exists()){ dir.mkdirs(); } //寫入到新的excel File newFile = new File(realPath, newFileName); try { newFile.createNewFile(); //復制模板到新文件 fileChannelCopy(file, newFile); } catch (Exception e) { e.printStackTrace(); } return newFile; } /** * 下載成功后刪除 * * @param files */ private void deleteFile(File... files) { for (File file : files) { if (file.exists()) { file.delete(); } } }
出處:https://www.cnblogs.com/kisstear/p/5461494.html