需要將html網頁上的table中的數據導出為excel表格,網上雖然方法一大堆,
但是有的后台報錯,有的導出來的有缺陷。還好最好找出來一種。記錄下:
首先使用poi的jar包:http://files.cnblogs.com/files/ysj4428/excelExport.rar
貼代碼:
package com.pers.demo; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import javax.servlet.ServletException; import javax.servlet.ServletOutputStream; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.poi.hssf.usermodel.HSSFCell; import org.apache.poi.hssf.usermodel.HSSFRow; import org.apache.poi.hssf.usermodel.HSSFSheet; import org.apache.poi.hssf.usermodel.HSSFWorkbook; /** * Servlet implementation class DownExcel */ @WebServlet("/DownExcel") public class DownExcel extends HttpServlet { private static final long serialVersionUID = 1L; /** * @see HttpServlet#HttpServlet() */ public DownExcel() { super(); } /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request,response); } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { @SuppressWarnings("resource") HSSFWorkbook wb = new HSSFWorkbook(); HSSFSheet sheet = wb.createSheet("table"); //創建table工作薄 Object[][] datas = {{"區域", "總銷售額(萬元)", "總利潤(萬元)簡單的表格"}, {"江蘇省" , 9045, 2256}, {"廣東省", 3000, 690}}; HSSFRow row; HSSFCell cell; for(int i = 0; i < datas.length; i++) { row = sheet.createRow(i);//創建表格行 for(int j = 0; j < datas[i].length; j++) { cell = row.createCell(j);//根據表格行創建單元格 cell.setCellValue(String.valueOf(datas[i][j])); } } ByteArrayOutputStream os = new ByteArrayOutputStream(); wb.write(os); byte[] content = os.toByteArray(); InputStream is = new ByteArrayInputStream(content); response.reset(); response.setContentType("application/vnd.ms-excel;charset=utf-8"); response.setHeader("Content-Disposition", "attachment;filename=table.xls"); ServletOutputStream out = response.getOutputStream(); BufferedInputStream bis = null; BufferedOutputStream bos = null; try { bis = new BufferedInputStream(is); bos = new BufferedOutputStream(out); byte[] buff = new byte[2048]; int bytesRead; while (-1 != (bytesRead = bis.read(buff, 0, buff.length))) { bos.write(buff, 0, bytesRead); } } catch (Exception e) { e.printStackTrace(); } finally { if (bis != null) bis.close(); if (bos != null) bos.close(); } // wb.write(new FileOutputStream("D:/迅雷下載/table.xls"));//這行是直接寫到本地的 } }
如果要測試你只需要新建一個Web項目,調用servlet即可。放一個截圖