寫入Excel文件所需Jar包:poi-3.9-20121203.jar
Excel文件存放路徑:D://cba.xls,這個能夠根據你本身想要寫入excel文件的路徑而改變,
修改這條語句中的路徑便可:
html
FileOutputStream fileout = new FileOutputStream("D://cba.xls");
下面是總體代碼:
java
package com.poi.test.outxls; import java.io.FileOutputStream; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.ResultSetMetaData; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.List; import org.apache.poi.hssf.usermodel.HSSFCell; import org.apache.poi.hssf.usermodel.HSSFCellStyle; import org.apache.poi.hssf.usermodel.HSSFFont; import org.apache.poi.hssf.usermodel.HSSFRow; import org.apache.poi.hssf.usermodel.HSSFSheet; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.hssf.util.CellRangeAddress; import org.apache.poi.hssf.util.HSSFColor; import org.apache.poi.ss.usermodel.DataFormat; import org.junit.Test; @SuppressWarnings("deprecation") public class WriteExcel { static private String SQL_QUERY = "SELECT * FROM LOG4J"; static private List columnname = new ArrayList(); static private PreparedStatement stmt = null; static private ResultSet rset = null; // static private List data = new ArrayList(); //Method One private List data = null ; //Method Two static private List resultData = new ArrayList(); //@Test public void db() { try { //1.註冊驅動 Class.forName("com.mysql.jdbc.Driver"); //2.獲取數據庫鏈接 Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "test","test"); stmt = conn.prepareStatement(SQL_QUERY); rset = stmt.executeQuery(); ResultSetMetaData rsmd = rset.getMetaData();//獲取元數據對象 for(int i = 1;i<=rsmd.getColumnCount();i++) { columnname.add(rsmd.getColumnName(i));//獲取表中各個字段的名稱並存入columnname集合中 } while(rset.next()) { /*****************Method One**********************/ //數組 // Object[] obj = new Object[]{rset.getString(1),rset.getString(2),rset.getString(3),rset.getString(4),rset.getString(5),rset.getString(6)}; // data.add(obj); /*****************Method Two**********************/ data = new ArrayList(); System.out.println(); for(int i=1;i<=rsmd.getColumnCount();i++) { Object obj = rset.getObject(i); data.add(obj);//存入每一條記錄中字段的值 } resultData.add(data);//存入數據庫的記錄條數 System.out.println("ColumnNum "+rsmd.getColumnCount()+"***"+rset.getString(1)+"***"+rset.getString(2)+"***"+rset.getString(3)+"***"+rset.getString(4)); } } catch (Exception e) { e.printStackTrace(); System.out.println("ERR"); } } @Test public void WriteToExcel() { db(); try { FileOutputStream fileout = new FileOutputStream("D://cba.xls"); HSSFWorkbook hswb = new HSSFWorkbook();//建立Excel工做對象 DataFormat format = hswb.createDataFormat();//建立數據格式對象 HSSFFont f = hswb.createFont();//建立字體對象 f.setColor(HSSFColor.RED.index);//設置字體顏色 f.setFontName("Comic Sans MS"); //Set Font HSSFFont f2 = hswb.createFont(); f2.setColor(HSSFColor.BLUE.index); HSSFCellStyle hcs = hswb.createCellStyle();//建立單元格格式對象 hcs.setFont(f); // hcs.setDataFormat(format.getFormat("@")); HSSFCellStyle hcs2 = hswb.createCellStyle(); hcs2.setFont(f2); // hcs2.setDataFormat(format.getFormat("0")); // hcs2.setDataFormat(format.getFormat("yyyy-m-d h:mm:ss")); HSSFSheet sheet1 = hswb.createSheet("Log4j");//給Excel工做表命名 sheet1.setSelected(true);//Set a sheet as selected//設置打開Excel默認選中的工做表 //Merging cells -----合併單元格 sheet1.addMergedRegion(new CellRangeAddress( 1, //first row (0-based) 2, //last row (0-based) 5, //first column (0-based) 5 //last column (0-based) )); HSSFRow row = sheet1.createRow(0);//建立sheet工做表中的第一行 for(int i=0;i<columnname.size();i++) { String colname = (String)columnname.get(i); row.createCell(i).setCellValue(colname);//在第一行中建立單元格,並設置單元中的值 } System.out.println("datasize is "+data.size()); System.out.println("resultsize is "+resultData.size()); /*****************Method One**********************/ // for(int j=0;j<data.size();j++) // { // row = sheet1.createRow(j+1); // Object[] obj = (Object[])data.get(j); // for(int i=0;i<columnname.size();i++) // { // row.createCell(i).setCellValue(obj[i].toString()); // } // } /*****************Method Two**********************/ HSSFCell hc = null; for(int i=0;i<resultData.size();i++) { sheet1.autoSizeColumn(i+1);//Adjust column width to fit the contents row = sheet1.createRow(i+1);//循環建立工做表的行數 ArrayList list = (ArrayList)resultData.get(i); for(int j=0;j<list.size();j++) { //row.createCell(j).setCellValue(list.get(j).toString()); hc = row.createCell(j);//循環建立每一行所須要建立的單元格數 //hc.setCellStyle(hcs); // if(j%2==0) if(j==2) { /*java.lang.IllegalArgumentException: Cannot for mat given Object as a Date format方法格式的對象必須是Date類型*/ // String d = DateFormat.getDateInstance().format(String.valueOf(list.get(j))); /** * 數值數據須要特殊處理。要將數字存儲爲數字而不是文本, * 須要先將它們轉換成 doubles 類型。 * 不要將日期轉換成 doubles 類型,不然將不正確。 */ /** * 直接以文本格式輸出日期 */ /*SimpleDateFormat smd = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Date d = DateFormat.getDateTimeInstance().parse(list.get(j).toString());//獲取日期時間格式 String date = smd.format(d); hc.setCellValue(date); hc.setCellStyle(hcs2); hc.setCellType(HSSFCell.CELL_TYPE_STRING);*/ /******************************************* * * Excel表格以日期轉數字類型顯示 * 此時須要把數據格式設置爲: * hcs2.setDataFormat(format.getFormat("0")); * ******************************************/ //SimpleDateFormat smd = new SimpleDateFormat("yyyy/M/d");//Note uppercase M /*SimpleDateFormat smd = new SimpleDateFormat("yyyy-M-d"); Date d = DateFormat.getDateInstance().parse(list.get(j).toString()); //獲取日期格式 String date = smd.format(d); String[] strs = date.split("-"); StringBuffer sb = new StringBuffer(); for(int r=0;r<strs.length;r++) { sb.append(strs[r]); } String newdate = sb.toString(); Double dd = Double.parseDouble(newdate); hc.setCellValue(dd); hcs2.setDataFormat(format.getFormat("0")); hc.setCellStyle(hcs2); hc.setCellType(HSSFCell.CELL_TYPE_NUMERIC);*/ /******************************************************** * 當setCellValue(value);時 * 是Date類型時,能夠設置setCellType(cellType) * 應該爲HSSFCell.CELL_TYPE_NUMERIC * 或者不設置setCellType屬性 * 此時數據格式設置爲: * hcs2.setDataFormat(format.getFormat("yyyy-m-d h:mm:ss")); * **********************************************************/ hcs2.setDataFormat(format.getFormat("yyyy-m-d h:mm:ss")); Date d = DateFormat.getDateTimeInstance().parse(list.get(j).toString());//獲取日期時間格式 hc.setCellValue(d); hc.setCellStyle(hcs2); //設置單元格格式 hc.setCellType(HSSFCell.CELL_TYPE_NUMERIC); //DataUtil工具類 // hc.setCellValue(DateUtil.parseYYYYMMDDDate(list.get(j).toString())); } else { hc.setCellValue(list.get(j).toString()); hc.setCellStyle(hcs); hc.setCellType(HSSFCell.CELL_TYPE_STRING); } } } hswb.write(fileout); fileout.close(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
參考:http://poi.apache.org/ mysql
http://www.ibm.com/developerworks/cn/data/library/techarticles/0302bhogal/0302bhogal.html sql