如题,我想写一个通用的导出查询结果为excel表的代码,我把查询结果放入了一个list,然后将list放进了一个session.写了一个类来得到这个list导出为excel表.
因为这个类是任何语句查询到的结果都能调用,所以不能确定list中的字段,请问怎样才能按顺序得到list中某一行的所有数据呢?
因为这个类是任何语句查询到的结果都能调用,所以不能确定list中的字段,请问怎样才能按顺序得到list中某一行的所有数据呢?
用一个java.util.List对象存各行数据,再把些List对象add到另一个java.util.List对象中即可
String data2 = list.get(1)
......String datan = list.get(n-1);
如:
ArrayList al_list=new ArrayList();
ArrayList al_row=new ArrayList();
al_row.add(字段1);
al_row.add(字段2);
.
.
al_list.add(al_row);
可以getclass
然后拿它的classmetadata
String data2 = list.get(1)
......String datan = list.get(n-1);
这种情况下因为每行不止一个数据,发布之后执行会报错.
为什么要放在session里,这样不是很好,搂住的意思可用嵌套ArrayList解决,每行一个ArrayList,每行里的ArrayList存你的字段
如:
ArrayList al_list=new ArrayList();
ArrayList al_row=new ArrayList();
al_row.add(字段1);
al_row.add(字段2);
.
.
al_list.add(al_row);
因为我的导出功能是在显示页面调用,不包含产生list的过程,所以考虑在产生list的时候把list放在session里.我回去改改产生list的过程,用这个方法试试.
字段不知道的话
可以getclass
然后拿它的classmetadata
*/可以写几句简单的代码看看么
.getClassMetadata( propClass );
我错了
好像只有hibernate里才有额……
这个问题怎么解决,先谢谢啊!
ArrayList al_row=new ArrayList();
al_row.add(字段1);
al_row.add(字段2);
.
.
al_list.add(al_row);
我在产生list的页面按照上面生成了list的嵌套
但是碰到了个这样的问题
在导出excel的类中 List list_list=(List)session.getAttribute("list_list");
try
{
jxl.write.WritableWorkbook wwb = Workbook.createWorkbook(new File("d:\\测试.xls"));
jxl.write.WritableSheet ws = wwb.createSheet("sheet1",0);
Iterator iterate =list_list.iterator();
List list_row = new ArrayList();
int i=0;
while(iterate.hasNext()){
for(int j=0;j<numberOfColumns;j++)
{
//在这里我怎么样让现在定义的list_row得到以前嵌套的list_row的值呢
int column = j+1;
String dataValue = (String)list_row.get(column);
jxl.write.Label labelC = new jxl.write.Label(j,i,dataValue);
ws.addCell(labelC);
}
i=i+1;
}
知道几行几列可以用Object[][]
*/
可以简单写几句代码看看么?
这样得到
for(int i=0;i<list_list.size();i++)
{
ArrayList list_row=(ArrayList)list_list.get(i)
}
知道几行几列可以用Object[][]
*/
class example
{
int a;
int b;
}
example[][] arr=new example[row][colum];
{
ArrayList list_row=(ArrayList)list_list.get(i)
}用这种方法,在执行
ArrayList list_row=(ArrayList)list_list.get(i);
的时候报错java.lang.ClassCastException
at action.OutExcel.execute(WriteExcel.java:72)
at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:419)
at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:224)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1194)
at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:414)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:740)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at weblogic.servlet.internal.ServletStubImpl$ServletInvocationAction.run(ServletStubImpl.java:1006)
at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:419)
at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:315)
at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:6718)
at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)
at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:121)
at weblogic.servlet.internal.WebAppServletContext.invokeServlet(WebAppServletContext.java:3764)
at weblogic.servlet.internal.ServletRequestImpl.execute(ServletRequestImpl.java:2644)
at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:219)
at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:178)我在之前也尝试过这样写
List list_row=(List)list_list.get(i);
报同样错误....
你这个不是ArrayList list_row=(ArrayList)list_list.get(i)引起的,
把代码全部贴出来我看看
import java.sql.*;
import java.io.*;
import jxl.*;
import jxl.write.*;
import jxl.format.*;
import java.util.*;
import java.awt.Color;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.lang.String;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import javax.servlet.http.*;
import java.lang.Integer;
public class OutExcel extends Action{
public ActionForward execute(
ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response) {
HttpSession session = request.getSession();
List Cxjg=(List)session.getAttribute("Cxjg"); //从session得到查询结果的list
String zd=(String)session.getAttribute("zds");
Integer zds=Integer.valueOf(zd); //这里得到字段数目
try
{
jxl.write.WritableWorkbook wwb = Workbook.createWorkbook(new File("d:\\测试.xls"));
jxl.write.WritableSheet ws = wwb.createSheet("sheet1",0);
Iterator iterate =Cxjg.iterator();
int i=0;
while(iterate.hasNext()){
int numberOfColumns = zds.intValue();
for(int j=0;j<numberOfColumns;j++)
{
List cxjgrow=(List)Cxjg.get(i);
String dataValue = (String)cxjgrow.get(j);
jxl.write.Label labelC = new jxl.write.Label(j,i,dataValue);
ws.addCell(labelC);
}
i=i+1;
}
wwb.write();
wwb.close();
}catch(Exception e) {
e.printStackTrace();
return mapping.findForward("faild");
}
return mapping.findForward("success");
}
}
会定位到List cxjgrow=(List)Cxjg.get(i);这一行上.
{
List cxjgrow=(List)Cxjg.get(i);
for(int j=0;j<numberOfColumns;j++)
{
String dataValue = (String)cxjgrow.get(j);
jxl.write.Label labelC = new jxl.write.Label(j,i,dataValue);
ws.addCell(labelC);
}
}
或则
while(iterate.hasNext()){
List cxjgrow=(List)iterate.next();
for(int j=0;j<cxjgrow.size();j++)
{
String dataValue = (String)cxjgrow.get(j);
jxl.write.Label labelC = new jxl.write.Label(j,i,dataValue);
ws.addCell(labelC);
}
}没有iterate.next();死循环i++,就溢出了
两种写法我都试了下
但同样都在
List cxjgrow=(List)Cxjg.get(i);
List cxjgrow=(List)iterate.next();
这里报错,报的错误和以前一样
下面是我现在的代码package action;
import java.sql.*;
import java.io.*;
import jxl.*;
import jxl.write.*;
import jxl.format.*;
import java.util.*;
import java.awt.Color;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.lang.String;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import javax.servlet.http.*;
import java.lang.Integer;
public class OutExcel extends Action{
public ActionForward execute(
ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response) {
HttpSession session = request.getSession();
List Cxjg=(List)session.getAttribute("Cxjg");
try
{
jxl.write.WritableWorkbook wwb = Workbook.createWorkbook(new File("d:\\测试.xls"));
jxl.write.WritableSheet ws = wwb.createSheet("sheet1",0);
Iterator iterate =Cxjg.iterator();
int i=0;
while(iterate.hasNext()){
List cxjgrow=(List)iterate.next();
for(int j=0;j<cxjgrow.size();j++)
{
String dataValue = (String)cxjgrow.get(j);
jxl.write.Label labelC = new jxl.write.Label(j,i,dataValue);
ws.addCell(labelC);
}
i=i+1;
}
wwb.write();
wwb.close();
}catch(Exception e) {
e.printStackTrace();
return mapping.findForward("faild");
}
return mapping.findForward("success");
}
}
最后得到列数据那段是按照
while(iterate.hasNext()){
List cxjgrow=(List)iterate.next();
for(int j=0;j<cxjgrow.size();j++)
{
String dataValue = (String)cxjgrow.get(j);
jxl.write.Label labelC = new jxl.write.Label(j,i,dataValue);
ws.addCell(labelC);
}
}写的。
非常感谢~~~!!