目前用的是poi来实现的导出操作
ExcelFile 类,用来封装了执行操作的过程
package poi;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.sql.SQLException;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
public class ExcelFile {
/**
* 写Excel操作
* @param fileName
* 文件名,文件要写入到的盘符和文件名,但不需要后缀名
* @param fieldName
* 表头名
* @param res
* 数据对象,java.sql.ResultSet
*/
public static void writeExcel(String fileName,String [] fieldName,java.sql.ResultSet res)
{
FileOutputStream fos =null;
try {
fos = new FileOutputStream(fileName+".xls");
HSSFWorkbook wb = new HSSFWorkbook();
HSSFCellStyle style3 = wb.createCellStyle(); // 创建单元格风格.
style3.setAlignment(HSSFCellStyle.VERTICAL_CENTER); // 垂直居中
style3.setAlignment(HSSFCellStyle.ALIGN_CENTER); // /水平居中
HSSFSheet s = wb.createSheet();
createTag(fieldName,s,style3);//写表格的头部
createValue(res,s,style3);//获取数据集,然后获得数据,写文件
wb.write(fos);
fos.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
finally
{
if(fos!=null)
{
try {
fos.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
/**
* 创建表格表头
* @param tags
* @param s
*/
private static void createTag(String [] tags,HSSFSheet s, HSSFCellStyle style3)
{
HSSFRow row = s.createRow(0);
HSSFCell cell = null;
// cell0.setCellType()
for(int i=0;i<tags.length;i++)
{
cell = row.createCell((short)i);
cell.setEncoding(HSSFCell.ENCODING_UTF_16);
cell.setCellStyle(style3);
cell.setCellValue(tags[i]);
}
}
/**
* 设置表格内容
* @param res
* @param s
*/
private static void createValue(java.sql.ResultSet res,HSSFSheet s,HSSFCellStyle style3)
{
try {
int flag = 1;
int count = res.getMetaData().getColumnCount();
HSSFRow row = null;
HSSFCell cell = null;
while(res.next())
{
row = s.createRow(flag);
for(int i=1;i<=count;i++)
{
cell = row.createCell((short)(i-1));
cell.setEncoding(HSSFCell.ENCODING_UTF_16);
cell.setCellStyle(style3);
Object obj = res.getObject(i);
cell.setCellValue(obj+"");
}
flag++;
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
ExcelFileText 类用来测试:
package poi;
import java.sql.ResultSet;
import dao.PageMarDAO;
import dao.PageMarDAO.BaseDao;
import dao.PageMarDAO.ConnectionType;
import poi.ExcelFile;
public class ExcelFileText {
public static void main(String [] args)
{
PageMarDAO dao = PageMarDAO.getInstance(ConnectionType.jdbc);
String sql = "SELECT * FROM <table_name>";
BaseDao b = dao.getBaseDAO();
ResultSet rs = b.getResultSet(sql);
ExcelFile.writeExcel("F://text", new String[]{"列1","列2","列3","列4","列5","列6"}, rs);
}
}
在此基础上结合smartUpload实现数据的下载功能
<body leftmargin="0" topmargin="0">
<%
System.out.println("正在检索数据...");
if(strSQL == null || "".equals(strSQL))return; ----------------------------------------strSQL 这里就是执行的数据库操作
System.out.println("HTMLRender=="+chartId+"====="+strSQL);
DBConnection dbConn = new DBConnection();
connection = dbConn.getConnection();
statement = connection.createStatement();
rs = statement.executeQuery(strSQL);
System.out.println("数据检索完毕...");
FileOutputStream fos =null;
System.out.println("创建Excel临时文件...");
chartTitle = chartTitle == null || "".equals(chartTitle) ? "详细列表" : chartTitle;
System.out.println("数据检索完毕..." + chartTitle);
String fileName = "F:\\"+chartTitle+".xls";
try{
if(strSQL != null && !"".equals(strSQL)){
fos = new FileOutputStream(fileName);
HSSFWorkbook wb = new HSSFWorkbook();
HSSFCellStyle style3 = wb.createCellStyle(); // 创建单元格风格.
style3.setAlignment(HSSFCellStyle.VERTICAL_CENTER); // 垂直居中
style3.setAlignment(HSSFCellStyle.ALIGN_CENTER); // /水平居中
HSSFSheet s = wb.createSheet();
HSSFRow row = s.createRow(0);
HSSFCell cell = null;
String cols = new String[]{} ------------------------------------------------------cols 这里对应的是头部数组
System.out.println("创建Excel临时文件的头部...");
for(int i=0;i<cols.length;i++)
{
cell = row.createCell((short)i);
cell.setEncoding(HSSFCell.ENCODING_UTF_16);
cell.setCellStyle(style3);
cell.setCellValue(cols[i]);
}
//int i = 0;
int flag = 1;
int count = rs.getMetaData().getColumnCount();
HSSFRow row1 = null;
HSSFCell cell1 = null;
System.out.println("向创建好的Excel临时文件中写入数据...");
while(rs.next())
{
row1 = s.createRow(flag);
for(int i=0;i<colens.length;i++)
{
cell1 = row1.createCell((short)i);
cell1.setEncoding(HSSFCell.ENCODING_UTF_16);
cell1.setCellStyle(style3);
Object obj = rs.getObject((i+1));
cell1.setCellValue(obj+"");
}
flag++;
}
wb.write(fos);
fos.close();
}
System.out.println("下载文件...");
java.io.File file = new java.io.File(fileName);
if(file.exists()){
out.clear();
out = pageContext.pushBody();
// 新建一个SmartUpload对象
SmartUpload su = new SmartUpload();
// 初始化
su.initialize(pageContext);
// 设定contentDisposition为null以禁止浏览器自动打开文件,
//保证点击链接后是下载文件。若不设定,则下载的文件扩展名为
//doc时,浏览器将自动用word打开它。扩展名为pdf时,
//浏览器将用acrobat打开。
su.setContentDisposition(null);
// 下载文件
su.downloadFile(fileName);
System.out.println("文件下载成功,删除临时文件...");
file.delete();
}
}catch(Exception e){
e.printStackTrace();
}
%>
</body>