各位大侠帮个忙吧..谢了.希望你们能娶到个好媳妇儿.

是这样一个情况.我用jxl 从数据库里面读取一些记录.然后插入到Excel文件时候.并不是按照我的要求录入的数据.排版乱的很.
首先我简单说下我的表格(excel).它有6个字段包括id,userName,userAge,userAddress,userScore,userCourse
然后生成了JavaBean类---Excel 6个属性对应数表的6个字段
然后我在类DataBase中定义了一个简单的查询所有数据的方法.代码如下.
[code="java"]public class DataBase {
public ArrayList getInfo(){
Excel excel ;
ArrayList list = new ArrayList();
try{
Connection ct = this.getCon();//这里就是得到Connection对象了
PreparedStatement ps = ct.prepareStatement("select * from excel");
ResultSet rs = ps.executeQuery();
while(rs.next()){
excel = new Excel();
excel.setId(rs.getInt(1));
excel.setUserName(rs.getString(2));
excel.setUserAge(rs.getInt(3));
excel.setUserAddress(rs.getString(4));
excel.setUserScore(rs.getInt(5));
excel.setUserCourse(rs.getString(6));
list.add(excel);
}
return list;
}catch(Exception ex){
System.out.println("数据表中没有数据");
ex.printStackTrace();
}
return null;
}
}

[/code]

然后我在下面这个类中访问这个方法(得到数据库记录).并且通过 WritableWorkbook 对象写入到Excel文件中.
[code="java"] public class ExcelHandle {
public void createExcelFile(){
DataBase source = new DataBase();
ArrayList list =source.getInfo();//得到数据库的记录
try{
//创建excel文件
WritableWorkbook book = Workbook.createWorkbook(new File("d:\myexcel.xls"));

WritableSheet sheet=book.createSheet("第一页",0);
Excel excel;
for(int i = 0;i<list.size();i++){
excel =list.get(i);
if(i==0){

//关键的问题是在这里.我这里用判断i=0的方法得到了第一条记录插入excel中.但是下面的记录我就不知道怎么根据这个关键的参数 读出来了.难不成还一个个的判断 i 的值?要是1W条记录那岂不是要判断一万次.我就求个算法了.大侠们。
sheet.addCell(new Label(i,i,String.valueOf(excel.getId())));
sheet.addCell(new Label(i+1,i,excel.getUserName()));
sheet.addCell(new Label(i+2,i,String.valueOf(excel.getUserAge())));
sheet.addCell(new Label(i+3,i,excel.getUserAddress().toString()));
sheet.addCell(new Label(i+4,i,String.valueOf(excel.getUserScore())));
sheet.addCell(new Label(i+5,i,String.valueOf(excel.getUserCourse())));
}

}
book.write();
book.close();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

[/code]

//关键的问题是在哪个if(i==0)下面不知道如何写下去了.我这里用判断i=0的方法得到了第一条记录插入excel中.但是下面的记录我就不知道怎么根据这个关键的参数 读出来了.难不成还一个个的判断 i 的值?要是1W条记录那岂不是要判断一万次.我就求个算法了.大侠们。

最后就是写了个 Main测试.这个createExcelFile方法了.读出来的数据并不是按照一条条有序的插入到Excel文件中的.乱七八糟的.大侠们,看过了给点意见吧。真的感激万分了.

其中就有我说到的排版 混乱的截图(第一幅图).各位大侠参考下..我要的是像第一条第2条那样的排版方式.后面的实在是太混乱了
[img]http://dl.iteye.com/upload/picture/pic/63807/61c7a160-975f-3b52-8437-ae7dd6fdf041.jpg[/img]
我分析了它的坐标问题,但是就是得不出具体 的算法 第二幅图
[img]http://dl.iteye.com/upload/picture/pic/63809/3f97f1a6-7795-3b85-b03d-55c0dc5383c9.jpg[/img]
各位帮忙的大侠们.我就默默的祝福你们能娶个好媳妇儿吧..

4个回答

补充一下上面更改的,

sheet.addCell(new Label(i,i,String.valueOf(excel.getId())));

改成

sheet.addCell(new Label(0,i,String.valueOf(excel.getId())));

呵呵,已经有媳妇了 :wink:

if(i==0){

//关键的问题是在这里.我这里用判断i=0的方法得到了第一条记录插入excel中.但是下面的记录我就不知道怎么根据这个关键的参数 读出来了.难不成还一个个的判断 i 的值?要是1W条记录那岂不是要判断一万次.我就求个算法了.大侠们。

sheet.addCell(new Label(i,i,String.valueOf(excel.getId())));

sheet.addCell(new Label(i+1,i,excel.getUserName()));

sheet.addCell(new Label(i+2,i,String.valueOf(excel.getUserAge())));

sheet.addCell(new Label(i+3,i,excel.getUserAddress().toString()));

sheet.addCell(new Label(i+4,i,String.valueOf(excel.getUserScore())));

sheet.addCell(new Label(i+5,i,String.valueOf(excel.getUserCourse())));

更改成

if(i==0){

//关键的问题是在这里.我这里用判断i=0的方法得到了第一条记录插入excel中.但是下面的记录我就不知道怎么根据这个关键的参数 读出来了.难不成还一个个的判断 i 的值?要是1W条记录那岂不是要判断一万次.我就求个算法了.大侠们。

sheet.addCell(new Label(i,i,String.valueOf(excel.getId())));

sheet.addCell(new Label(1,i,excel.getUserName()));

sheet.addCell(new Label(2,i,String.valueOf(excel.getUserAge())));

sheet.addCell(new Label(3,i,excel.getUserAddress().toString()));

sheet.addCell(new Label(4,i,String.valueOf(excel.getUserScore())));

sheet.addCell(new Label(5,i,String.valueOf(excel.getUserCourse())));

最近做了一个类似的例子,可以参考一下
FileOutputStream fos=null;
List books=bookService.findAll();//查找所有图书
List attrList=new ArrayList();
for(BookDTO book:books){
attrList.add(book.getBookName());
attrList.add(book.getBookAuthor());
attrList.add(book.getBookPrice());
attrList.add(book.getBookPublishDate());
attrList.add(book.getPublishName());
}

   try {
    fos=new FileOutputStream(path);

    HSSFWorkbook wb=new HSSFWorkbook();//创建一个工作薄
    HSSFSheet sheet1=wb.createSheet("book");
    int count=0;


    for(int i=0;i<books.size();i++){
        HSSFRow rows=sheet1.createRow(i);
        int maxcols=attrList.size()/books.size();//最大列数
        for(int j=0;j<maxcols;j++){
              HSSFCell cols=rows.createCell((short)j);
              HSSFRichTextString str=new HSSFRichTextString(attrList.get(count++).toString());
              cols.setCellValue(str);
        }
    }
 wb.write(fos);
 fos.flush();
} catch (FileNotFoundException e) {
    e.printStackTrace();
} catch (IOException e) {
    e.printStackTrace();
}finally{
    if(fos!=null){
         try {
            fos.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!