写入Excel文件所需Jar包:poi-3.9-20121203.jar
Excel文件存放路径:D://cba.xls,这个可以根据你自己想要写入excel文件的路径而改变,
修改这条语句中的路径即可:
FileOutputStream fileout = new FileOutputStream("D://cba.xls");
下面是整体代码:
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://www.ibm.com/developerworks/cn/data/library/techarticles/0302bhogal/0302bhogal.html