如何生成Excel文件

pauluo 2003-12-19 04:18:15
环境tomcat + j2sdk1.4.1_02
在jsp中,要如何将sql语句查询到的数据生成到Excel文件中
或保存成Excel文件?
...全文
216 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
Sensible 2010-06-04
  • 打赏
  • 举报
回复
有没有更好的解决方法 我想 生成excel然后下载下来
晃晃悠悠_HW 2003-12-20
  • 打赏
  • 举报
回复
我没用过poi,我用的是jxl,感觉还不错!
上面仁兄的做法都很不错,值得借鉴,祝你成功
晃晃悠悠_HW 2003-12-20
  • 打赏
  • 举报
回复
不错!!!
fengjingyu 2003-12-19
  • 打赏
  • 举报
回复
private void downLoad(HttpServletResponse response,ResultSet rs)
throws Exception
{
PrintWriter out;
StringBuffer sb = new StringBuffer();
sb.append("a1");
.
.
sb.append("z1");

while(rs.next)
{
sb.append(createFileLine(rs.getString("aaa"),false);
sb.append(createFileLine(rs.getString("bbb"),false);
.
.
sb.append(createFileLine(rs.getString("zzz"),true);
}
if(sb!=null ))
{
response.setContentType("application/BizFirm-csv; charset=UTF-8");
response.setHeader("Content-disposition", "application/octet-stream;filename=orderList.CSV");
try
{
out = response.getWriter();
out.print(strDownloadData);
}
catch (IOException e)
{
throw new BfException(BfException.ORDERLIST_DOWNLOAD_ERR);
}
out.close();

}
}

private String createFileLine(String strVal,boolean isEnd)
{

String strValue = "";
String strComma = ",";
String strBr = "\n";

strVal = addQuotLR(replaceEnterToBr(replaceSimpleQuot(strVal)));
if (isEnd)
{
strValue = strVal + strBr;
}
else
{
strValue = strVal + strComma;
}
return strValue;
}
416 2003-12-19
  • 打赏
  • 举报
回复
用POI吧,这个做个参考,是把rs转化为Excel文件的
import java.util.*;
import org.apache.poi.hssf.usermodel.*;
import java.io.*;
public class DataExchange {

/**
* 一个Excel文件的层次:Excel文件->工作表->行->单元格
* 对应到POI中,为:workbook->sheet->row->cell
*
* 程序主要流程:
* 1、创建一个输出流并依次创建一个文件,工作表,若干行及每行的单元格
* 2、用一个循环将rs中的直附给Excel表
* 3、将表写如输出流输出并关闭输出流
*
* @param rs 要转换为Excel文件的数据库查询结果集
* @param userName 当前用户名
* @param moduleName 当前模块名
* @param dir 站点的相对路径,可由String file = request.getRealPath("/")获取
* @return 生成的文件名
*/
public static String rsToExcel(String userName, String moduleName, String dir, ResultSet rs)
{
short rownum = 0;
String str = null;
//生成文件名
GetDate currentDate = new GetDate();
String path = dir + File.separator + "temp" + File.separator;
String name = userName + "_" + moduleName + "_" + currentDate.getYear() + currentDate.getMonth() + currentDate.getDayOfMonth() + ".xls";
String fullName = path + name;

//获取结果集rs中的信息
int rsColCount = 0;
ResultSetMetaData rsmd = null;
try {
rsmd = rs.getMetaData();
rsColCount = rsmd.getColumnCount();
}
catch (SQLException e2)
{
e2.printStackTrace();
}

// 创建一个新的文件
File newFile = new File( fullName );
//创建一个输出流
FileOutputStream out = null;
try {
out = new FileOutputStream( newFile );
} catch (FileNotFoundException e) {
e.printStackTrace();
}
// 创建一个新的Workbook
HSSFWorkbook wb = new HSSFWorkbook();
// 在新的Workbook下创建一个Sheet
HSSFSheet s = wb.createSheet();
// 声明一个行的引用
HSSFRow r = null;
// 声明一个单元格的引用
HSSFCell c = null;

// 将第一个工作表命名为worksheet
wb.setSheetName(0, "worksheet");

// 将结果集rs中的值放到Excel中对应的位置
try
{
while(rs.next())
{
// 新建一行
r = s.createRow(rownum++);
//为每一行附值
for (short cellnum = (short)0; cellnum < rsColCount; cellnum++)
{
// 创建一个单元格
c = r.createCell(cellnum);
//解决中文问题
c.setEncoding(HSSFCell.ENCODING_UTF_16);
// 为单元格附值
str = rs.getString(cellnum + 1);
c.setCellValue(str);
}
}
}
catch (SQLException e3)
{
e3.printStackTrace();
}

// 将workbook写入输出流并关闭文件
try
{
wb.write(out);
out.close();
}
catch (IOException e1)
{
e1.printStackTrace();
}

return name;
}
}
javapopo 2003-12-19
  • 打赏
  • 举报
回复
Downloads The JACOB binary distribution (jacobBin_XX.zip) includes:
import com.ms.com.*;
import com.ms.activeX.*;

public class DispatchTest
{
public static void main(String[] args)
{
ActiveXComponent xl = new ActiveXComponent("Excel.Application");
Object xlo = xl.getObject();
try {
System.out.println("version="+xl.getProperty("Version"));
System.out.println("version="+Dispatch.get(xlo, "Version"));
xl.setProperty("Visible", new Variant(true));
Object workbooks = xl.getProperty("Workbooks").toDispatch();
Object workbook = Dispatch.get(workbooks,"Add").toDispatch();
Object sheet = Dispatch.get(workbook,"ActiveSheet").toDispatch();
Object a1 = Dispatch.invoke(sheet, "Range", Dispatch.Get,
new Object[] {"A1"},
new int[1]).toDispatch();
Object a2 = Dispatch.invoke(sheet, "Range", Dispatch.Get,
new Object[] {"A2"},
new int[1]).toDispatch();
Dispatch.put(a1, "Value", "123.456");
Dispatch.put(a2, "Formula", "=A1*2");
System.out.println("a1 from excel:"+Dispatch.get(a1, "Value"));
System.out.println("a2 from excel:"+Dispatch.get(a2, "Value"));
Variant f = new Variant(false);
Dispatch.call(workbook, "Close", f);
} catch (Exception e) {
e.printStackTrace();
} finally {
xl.invoke("Quit", new Variant[] {});
}
}
}
jonkeyjohns 2003-12-19
  • 打赏
  • 举报
回复
我也认为用POI比较好
blue999star 2003-12-19
  • 打赏
  • 举报
回复
首先把结果放在 String[][]或什么什么里
再把String[][]写入 Excel
用 jxl包
http://www.andykhan.com/jexcelapi/download.html
或者自己写个方法。
我们有个项目用的是odbc数据源。把excle当成个数据库,把数据写入形成报表。
老土豆T 2003-12-19
  • 打赏
  • 举报
回复
最简单的


因为ms word和excel的文档都支持html文本格式,因此可以先用word或excel做好模版,另存为Web页,然后将该html改成jsp,将数据部分动态填入即可,不用很辛苦的调整格式

word页面只要在jsp头设置如下指令:
<%@page contentType="application/msword;charset=GBK" %>

excel如下:
<%@page contentType="application/vnd.ms-excel;charset=GBK" %>
——-——————————————————————————————
使用这种方式客户端必须安装有office软件,用户访问时将在ie中直接用word或excel打开该页面。

此方法优势是模板设计、调整方便,无需在服务器端使用复杂的POI或jxl技术,也无需在客户端使用ActiveX控件技术,更安全、方便,轻松实现较好的打印效果。

microsoft关于服务器端动态创建office文档的资料(asp示例):
http://support.microsoft.com/default.aspx?scid=KB;en-us;301044&

简单示例:

<%@ page contentType="application/msword;charset=GBK" %><%@ page import="java.sql.*" %><html><head><title>报表</title></head><body bgcolor="#FFFFFF"><center><h1>报表</h1></center><table border=1 cellspacing=0 cellpadding=0 bordercolor=#000000 align=center><tr><td>用户名</td><td>真实姓名</td><td>性别</td></tr><%Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); String url="jdbc:odbc:user";//连接user数据库Connection con=DriverManager.getConnection (url, "", ""); Statement stmt=con.createStatement(); ResultSet rs=stmt.executeQuery("select * from user ");//查询user表while(rs.next()){%><tr><td><%= rs.getString("username") %></td><td><%= rs.getString("name") %></td><td><%= rs.getString("sex") %></td></tr><%}%><%rs.close();stmt.close();con.close();%> </table>



httruly 2003-12-19
  • 打赏
  • 举报
回复
推荐Apache开源项目POI

81,091

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧