玩轉大資料之——通過java操作office/wps的 EXCEL
阿新 • • 發佈:2018-12-11
操作Office文件,要用到apache公司的一個工具包: poi-3.7-20101029.jar
poi外掛的使用方式類似dom技術
不同版本:
接下來進行演示功能:
1.用純Java技術實現建立一個名為a.xls的檔案(工作薄),
在其中新建一個"表1"的sheet,往B9單元格填入"湖南aa"
@Test public void mkXls() throws IOException{ HSSFWorkbook book=new HSSFWorkbook(); HSSFSheet sheet=book.createSheet("表1"); HSSFRow row = sheet.createRow(8); //第9行 HSSFCell cell = row.createCell(1); cell.setCellValue("湖南aa"); //序列化 book.write( new FileOutputStream("d:/a/a.xls") ); }
2.功能: 把MySQL中的所有資料庫全部匯出形excel格式的檔案, 為簡化知識點,這裡只匯出一個數據庫abcd
@Test public void exportDemo() throws Exception{ export("abcd"); } public void export(String dbName) throws Exception { HSSFWorkbook book = new HSSFWorkbook(); Connection conn = Conn4Utils.getConn(); Statement st = conn.createStatement(); DatabaseMetaData dm=conn.getMetaData(); ResultSet rs=dm.getTables(dbName, dbName, null, new String[]{"TABLE"}); /*反模式: 我們以後開發時儘量不要採用結果集巢狀的方式寫程式碼,尤其是帶事務時,這很容易出問題的 while(rs.next()){ String tableName = rs.getString("TABLE_NAME"); //表格名 String sql = "select * from "+dbName+"."+tableName; //跨庫查詢 ResultSet rss = st.executeQuery(sql); while(rss.next()){ //..... } } */ List<String> tableNameS=new ArrayList<String>(); while(rs.next()){ String tableName=rs.getString("TABLE_NAME"); tableNameS.add(tableName); } //處理資料庫中的每一個表格 for(String tableName:tableNameS){ HSSFSheet sheet=book.createSheet(tableName); String sql="select * from "+dbName+"."+tableName; ResultSet rss=st.executeQuery(sql); ResultSetMetaData rsmd=rss.getMetaData(); //先獲取欄位數 int cols=rsmd.getColumnCount(); //匯出表頭 HSSFRow row=sheet.createRow(0); for(int i=0;i<cols;i++){ HSSFCell cell=row.createCell(i); cell.setCellValue(rsmd.getColumnName(i+1)); } //匯出資料 int idx =1; while(rss.next()){ row=sheet.createRow(idx++); for(int i=0;i<cols;i++){ HSSFCell cell=row.createCell(i); cell.setCellValue(rss.getString(i+1)); } } } //把工作簿物件book序列化 book.write(new FileOutputStream("d:/a/"+dbName+".xls")); }