用到開源軟件POI,詳細(xì)見以下URL:
http://jakarta.apache.org/poi/index.html

/** *//**
* 該類演示了POI的應(yīng)用
* 版權(quán) 本文版權(quán)屬Java天下
* Created on 2005-7-22
*/
package bss.servlet;
import javax.servlet.http.*;
import javax.servlet.*;
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 java.io.FileOutputStream;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Types;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Vector;
import java.util.Map;
import java.text.SimpleDateFormat;
import java.util.Calendar;

/** *//**
* @author ljfan
*
* TODO To change the template for this generated type comment go to Window -
* Preferences - Java - Code Style - Code Templates
*/

public class IVR_Excel extends HttpServlet
{
//文檔標(biāo)題數(shù)組名

private final static String sTitleArray[] =
{ "群發(fā)批次", "產(chǎn)品代碼", "目的省份", "目的城市" };
//記錄集列名

private final static String sColumnArray[] =
{ "push_id", "pid", "province", "gwcity" };

/**//*
* 按一定的規(guī)則生成文件名
* 規(guī)則為 IVRExcel_YYYY-MM-dd-mm-SSS.xls
*/

private static String generateFileName ()
{
String sFileName = "IVRExcel_";
SimpleDateFormat sdf = new SimpleDateFormat ("yyyy-MM-dd-HH-mm-SSS");
Calendar c = Calendar.getInstance();
sFileName += sdf.format(c.getTime());
sFileName += ".xls";
return sFileName;
}

/** *//**
* 將記錄信息導(dǎo)出為xls格式文件.
*
* @param fieldTitles
* 工作表的字段標(biāo)題數(shù)組(首行)
* @param propertyNames
* 每行記錄對應(yīng)的值對象的屬性名稱數(shù)組
* @param records
* 記錄集map, 其中key為記錄集中的列名, value為對應(yīng)列名的值(vector)
* @param fileName
* 導(dǎo)出文件的名稱
*/
public static void exportXLSFile(String[] fieldTitles,

String[] propertyNames, Map records, String fileName)
{

if (fieldTitles.length != propertyNames.length)
{
throw new IllegalArgumentException("工作表的字段標(biāo)題列數(shù)必須和值對象的屬性數(shù)相等!");
}
HSSFWorkbook workbook = new HSSFWorkbook();
HSSFSheet sheet = workbook.createSheet();
//設(shè)置標(biāo)題
HSSFRow row = sheet.createRow(0);

for (int k = 0; k < fieldTitles.length; k++)
{
HSSFCell cell[] = new HSSFCell[fieldTitles.length];
cell[k] = row.createCell((short) k);
cell[k].setEncoding(HSSFCell.ENCODING_UTF_16);
cell[k].setCellType(HSSFCell.CELL_TYPE_STRING);
cell[k].setCellValue(fieldTitles[k]);
}
//寫入數(shù)據(jù)庫中的記錄集數(shù)據(jù)
//取得記錄集行數(shù)
Iterator iter = records.values().iterator();
Vector v1 = (Vector) iter.next();
int rowNum = v1.size() + 1;

for (int i = 1; i < rowNum; i++)
{
HSSFRow _row = sheet.createRow(i);

for (int j = 0; j < propertyNames.length; j++)
{
Vector value = (Vector) records.get(propertyNames[j]);
HSSFCell cell[] = new HSSFCell[propertyNames.length];
cell[j] = _row.createCell((short) j);
cell[j].setEncoding(HSSFCell.ENCODING_UTF_16);
cell[j].setCellType(HSSFCell.CELL_TYPE_STRING);
cell[j].setCellValue((String) value.get(i - 1));
}
}

try
{
String outputFile = fileName;
FileOutputStream fOut = new FileOutputStream(outputFile);
workbook.write(fOut);
fOut.flush();
fOut.close();

} catch (Exception e)
{
System.out.println(e.getMessage());
}
}
public void doGet(HttpServletRequest req, HttpServletResponse resp)

throws ServletException
{
long start = System.currentTimeMillis();
String sRootDir = this.getServletConfig().getServletContext().getRealPath(
req.getServletPath());
System.out.println(sRootDir);

/**//*
* 得到根路徑
* servlet部署名為ExcelServlet
*/
sRootDir = sRootDir.substring(0, sRootDir.indexOf("ExcelServlet"));
//先在服務(wù)器根目錄下建Excel目錄
sRootDir += "Excel\\";
sRootDir = sRootDir.replace("\\", "\\\\");
String sOutputPath = generateFileName();
System.out.println(sRootDir);
sOutputPath = sRootDir + sOutputPath;
System.out.println(sOutputPath);

/**//*
* 獲取URL帶的參數(shù)
* param1 : PushID
* param2 : Province
* param3 : Pid
* param4 : Opp
* param5 : StartDate
* param6 : EndDate
*/
int iID = 0;
int iOpp = 0;

if (req.getParameter("ID") != null)
{

try
{
iID = Integer.parseInt(req.getParameter("ID"));

} catch (Exception e)
{
iID = 0;
}
}

if (req.getParameter("opp") != null)
{

try
{
iOpp = Integer.parseInt(req.getParameter("opp"));

} catch (Exception e)
{
iOpp = 0;
}
}
String sPid = req.getParameter("pid").trim();
String sProvince = req.getParameter("province").trim();
String sStartDate = req.getParameter("StartDate");
if (sStartDate == null)
sStartDate = "";
String sEndDate = req.getParameter("EndDate");
if (sEndDate == null)
sEndDate = "";
//get data from DB
Map DBMap = getFromDB(iID, sProvince, sPid, iOpp, sStartDate, sEndDate );
exportXLSFile(sTitleArray, sColumnArray, DBMap, sOutputPath);
long end = System.currentTimeMillis();
System.out.println("Excel文檔已經(jīng)生成,共花費(fèi): " + (end-start) +" ms");
}
public void doPost(HttpServletRequest res, HttpServletResponse resp)

throws ServletException
{
doGet(res, resp);
}

public static Map getFromDB(int iID, String sProvince, String sPid, int iOpp, String sStartDate, String sEndDate)
{
Map map = new HashMap();
Connection con = null;
CallableStatement cstmt = null;
ResultSet rs = null;
String sDBURL = "172.16.18.113";
String sDBName = "DetailQuery";
String sLoginNameUser = "*****";
String sPasswordUser = "*****";

String sTitles[] =
{ "群發(fā)批次", "產(chǎn)品代碼", "目的省份", "目的城市" };

String sColumn[] =
{ "push_id", "pid", "province", "gwcity" };
Vector v[] = new Vector[sColumn.length];

for (int i = 0; i < sColumn.length; i++)
{
v[i] = new Vector();
}
//get ResultSet from db

try
{
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
con = DriverManager.getConnection("jdbc:microsoft:sqlserver://"
+ sDBURL + ":1433;Databasename=" + sDBName, sLoginNameUser,
sPasswordUser);
cstmt = con
.prepareCall("{? = call RED_P_SMSPUSH_Query_IVR_main_demo (?, ?, ?, ?, ?, ?)}");
cstmt.registerOutParameter(1, Types.INTEGER);
cstmt.setInt(2, iID);
cstmt.setString(3, sProvince);
cstmt.setString(4, sPid);
cstmt.setInt(5, iOpp);
cstmt.setString(6, sStartDate);
cstmt.setString(7, sEndDate);
cstmt.execute();
rs = cstmt.getResultSet();

while (rs.next())
{

for (int i = 0; i < sColumn.length; i++)
{
v[i].add(rs.getString(sColumn[i]));
}
}

for (int i = 0; i < sColumn.length; i++)
{
map.put(sColumn[i], v[i]);
}
rs.close();
cstmt.close();
con.close();

} catch (Exception e)
{
System.out.println(e.getMessage());
}
return map;
}
// for simple test

/**//*
public static void main (String args[]) {
String sFileName = IVR_Excel.generateFileName();
System.out.println(sFileName);
int iID = 0;
int iOpp = 0;
String sProvince = "all";
String sPid = "all";
String sStartDate = "2005-7-1";
String sEndDate = "2005-7-21";
//get data from DB
Map DBMap = getFromDB(iID, sProvince, sPid, iOpp, sStartDate, sEndDate );
exportXLSFile(sTitleArray, sColumnArray, DBMap, "Test.xls");
System.out.println("已經(jīng)成功生成Excle文檔");
}
*/
}
































































































































































































































































































































Java天下社區(qū)
http://www.javatx.cn
歡迎大家上來交流Java技術(shù)。