需要poi-3.7-20101029.jar包
package cn.hncu.excel;
import java.io.FileOutputStream;
import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
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;
import org.junit.Test;
import cn.hncu.pool.ConnUtils4;
public class ExcelDemo {
HSSFWorkbook book=new HSSFWorkbook();
@Test
public void createExcel() throws Exception{
//内存中(一棵树)
HSSFSheet sheet=book.createSheet("表一");//创建工作薄
HSSFRow row=sheet.createRow(4);//第5行--行对象
HSSFCell cell=row.createCell(5);//5行6列==>F5单元格
cell.setCellValue("湖南益阳");
//把内存中的book对象写到本地
book.write(new FileOutputStream("d:/a/a.xls"));
}
//把数据库某个数据库(例如:"hncu")中的所有数据导出到一个名为"a.xls"的工作薄
@Test
public void exportDb2Excel() throws Exception {
Connection con=ConnUtils4.getConnection();
DatabaseMetaData dm=con.getMetaData();
ResultSet rss=dm.getCatalogs();
while(rss.next()){
System.out.println(rss.getString("TABLE_CAT"));
}
Scanner sc=new Scanner(System.in);
// String dbName="hncu";//这里数据库名写死,如果要写活,用元数据操作
String dbName=sc.next();
ResultSet rs_table=dm.getTables(dbName, dbName, null, new String[]{"TABLE"});
List< String> li=new ArrayList<String>();
while(rs_table.next()){
System.out.println(rs_table.getString("TABLE_NAME"));
li.add(rs_table.getString("TABLE_NAME"));
}
/*
* 进行数据库操作时,尽量不要出现结果集循环中再套结果集循环,即不要采用如下框架:
* while(rs.next()){
* ....
* while(rs2.next()){
....
}
* }
*/
HSSFWorkbook book=new HSSFWorkbook();
for(String tableName:li){
HSSFSheet sh=book.createSheet(tableName);
String sql="select * from "+dbName+"."+tableName;
ResultSet rs=con.createStatement().executeQuery(sql);
ResultSetMetaData rm=rs.getMetaData();
int cols=rm.getColumnCount();
//创建并填充表头
HSSFRow r=sh.createRow(0);
for(int i=0;i<cols;i++){
HSSFCell c=r.createCell(i);
c.setCellValue(rm.getColumnName(i+1));
}
//创建并填充表内容(表中的数据)
int x=1;//数据行的行号从1开始
while(rs.next()){
HSSFRow r2=sh.createRow(x++);//
for(int i=0;i<cols;i++){
HSSFCell c=r2.createCell(i);
c.setCellValue(rs.getString(i+1));
}
}
//把内存中的book对象写到本地
book.write(new FileOutputStream("d:/a/a.xls"));
}
}
}