web專案實現Excel資料匯入匯出
阿新 • • 發佈:2019-01-04
由於專案要求,需要實現一個數據庫資訊匯出為Excel檔案,並能將Excel檔案中的資訊匯入資料庫的功能,網上找了一下資料,發現大都只涉及到Excel檔案的簡單操作,所以特地在此分享了自己寫的兩個簡單的Web端Excel檔案匯入匯出的例子。
涉及到的工具類主要有jxl.jar,commons-fileupload-1.2.1.jar,commons-io-1.4.jar,網上有很多這些工具的學習資料,具體可以自己百度,此處不再詳細闡述。
1、Excel檔案的匯出
首先是Excel檔案的匯入,這點比較簡單,主要是一些響應頭的設定,程式碼如下
public class ExportExcelUtil { public static void exportExcel( HttpServletResponse response) { try { OutputStream os = response.getOutputStream();// 取得輸出流 response.reset();// 清空輸出流 response.setHeader("Content-disposition", "attachment; filename="+new String("詞性資料".getBytes("GB2312"),"8859_1")+".xls");// 設定輸出檔案頭 response.setContentType("application/msexcel");// 定義輸出型別 WritableWorkbook wwb = Workbook.createWorkbook(os); // 建立excel檔案 WritableSheet ws = wwb.createSheet("Sheet1", 10); // 建立一個工作表 // 設定單元格的文字格式 WritableFont wf = new WritableFont(WritableFont.ARIAL,10,WritableFont.NO_BOLD,false,UnderlineStyle.NO_UNDERLINE,Colour.BLUE); WritableCellFormat wcf = new WritableCellFormat(wf); wcf.setVerticalAlignment(VerticalAlignment.CENTRE); wcf.setAlignment(Alignment.CENTRE); ws.setRowView(0, 500); // 填充資料的內容 // 填充表頭 Label name = new Label(0,0,"姓名"); Label sex = new Label(1,0,"性別"); //填充資料 Label nameValue = new Label(0,1,"tom"); Label sexValue = new Label(1,1,"man"); ws.addCell(name); ws.addCell(sex); ws.addCell(nameValue); ws.addCell(sexValue); wwb.write(); wwb.close(); } catch (IOException e){ } catch (RowsExceededException e){ } catch (WriteException e){} } }
2、Excel檔案的資料匯入
關於Excel的資料匯入,需要先將Excel檔案上傳到伺服器中,待資料讀取完成後再將Excel檔案刪掉,這裡順帶貼出Servlet層程式碼供大家參考
讀取Excel檔案的工具類public class Demo1 extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { File file = null; response.setContentType("text/html;charset=UTF-8"); try { FileItemFactory factory = new DiskFileItemFactory(); // 檔案上傳核心工具類 ServletFileUpload upload = new ServletFileUpload(factory); upload.setFileSizeMax(10*1024*1024); // 單個檔案大小限制 upload.setSizeMax(50*1024*1024); // 總檔案大小限制 upload.setHeaderEncoding("UTF-8"); // 對中文檔案編碼處理 if (ServletFileUpload.isMultipartContent(request)) { // 3. 把請求資料轉換為list集合 List<FileItem> list = upload.parseRequest(request); // 遍歷 for (FileItem item : list) { // 判斷:普通文字資料 if (item.isFormField()) { //普通表單項操作 } // 檔案表單項 else { // a. 獲取檔名稱 String name = item.getName(); // b. 得到上傳目錄 String basePath = getServletContext().getRealPath("/upload"); // c. 建立要上傳的檔案物件 file = new File(basePath,name); // d. 上傳 item.write(file); item.delete(); // 刪除元件執行時產生的臨時檔案 } } } List<String> list = ImportExcelUtil.importExcel(file); for(String s:list) { System.out.println(s); } } catch (Exception e) { e.printStackTrace(); } } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request,response); } }
public class ImportExcelUtil { private static List<String> list = new LinkedList<String>(); public static List<String> importExcel(File file) { try { list.clear(); FileInputStream fs = new FileInputStream(file); Workbook wb = Workbook.getWorkbook(fs); Sheet sheet = wb.getSheet(0); //獲取表的行數 int row = sheet.getRows(); //迴圈獲取值 for(int i = 0;i<row;i++) { String s = sheet.getCell(0,i).getContents(); list.add(s); } //關閉流,否則後面檔案刪除會失敗 fs.close(); file.delete(); } catch (BiffException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } return list; } }
以上程式碼可供參考,寫得非常簡單,大家可以根據需求進行更改,如有錯誤,歡迎大家批評指正,謝謝。