我做的一个查询系统,要实现将查询结果导出为pdf报表。下面是我定义了的方法public InputStream generateExcel(List list) {
HSSFWorkbook wb = new HSSFWorkbook();
HSSFSheet sheet = wb.createSheet("new sheet");
HSSFRow row = sheet.createRow((short) 0);
HSSFCell cell = row.createCell((short) 0);
cell.setCellValue(new HSSFRichTextString("序号"));
cell = row.createCell((short) 1);
cell.setCellValue(new HSSFRichTextString("题名"));
cell = row.createCell((short) 2);
cell.setCellValue(new HSSFRichTextString("作者"));
cell = row.createCell((short) 3);
cell.setCellValue(new HSSFRichTextString("录入时间"));
for (int i = 0; i < list.size(); ++i) {
content = (Content) list.get(i);
row = sheet.createRow(i + 1);
cell = row.createCell((short) 0);
cell.setCellValue(new HSSFRichTextString(content.getId()));
cell = row.createCell((short) 1);
cell.setCellValue(new HSSFRichTextString(content.getTitle()));
cell = row.createCell((short) 2);
cell.setCellValue(new HSSFRichTextString(content.getAuthor()));
cell = row.createCell((short) 3);
cell.setCellValue(content.getDate());
}
File file = new File("result.xls");
try {
OutputStream os = new FileOutputStream(file);
wb.write(os);
os.close();
} catch (Exception e) {
e.printStackTrace();
} InputStream is = null;
try {
is = new FileInputStream(file);
} catch (FileNotFoundException e) {
e.printStackTrace();
} return is;
里面的content是 实体类的对象。调用其它方法以list的形式返回查询结果。上面的方法中可以得到查询结果,但就是无法生成Excel报表,不知道是不是文件输出有错误。

解决方案 »

  1.   

    到底是pdf 还是 excel报表?
      

  2.   

    楼主借鉴一下这个操作excel的例子,自己下个jxl.jar
    import java.io.File; 
    import java.util.*; 
    import jxl.*;
    import jxl.write.*; public class myExcel{
      Workbook workbook;
      Sheet sheet;
    /**
     *<br>方法说明:写入文件操作
     *<br>输入参数:
     *<br>返回类型:
     */
      public void write(){
        try{
            //创建一个可写入的excel文件对象
            WritableWorkbook workbook = Workbook.createWorkbook(new File("myfile.xls")); 
            //使用第一张工作表,将其命名为“午餐记录”
            WritableSheet sheet = workbook.createSheet("午餐记录", 0); 
            //表头
            Label label0 = new Label(0, 0, "时间"); 
            sheet.addCell(label0); 
            Label label1 = new Label(1, 0, "姓名"); 
            sheet.addCell(label1); 
            Label label2 = new Label(2, 0, "午餐标准"); 
            sheet.addCell(label2); 
            Label label3 = new Label(3, 0, "实际费用"); 
            sheet.addCell(label3); 
            //格式化日期
            jxl.write.DateFormat df = new jxl.write.DateFormat("yyyy-dd-MM  hh:mm:ss"); 
            jxl.write.WritableCellFormat wcfDF = new jxl.write.WritableCellFormat(df); 
            jxl.write.DateTime labelDTF = new jxl.write.DateTime(0, 1, new java.util.Date(), wcfDF); 
            sheet.addCell(labelDTF);
            //普通字符
            Label labelCFC = new Label(1, 1, "riverwind"); 
            sheet.addCell(labelCFC); 
             //格式化数字
            jxl.write.NumberFormat nf = new jxl.write.NumberFormat("#.##"); 
            WritableCellFormat wcfN = new WritableCellFormat(nf); 
            jxl.write.Number labelNF = new jxl.write.Number(2, 1, 13.1415926, wcfN); 
            sheet.addCell(labelNF); 
            
             
            jxl.write.Number labelNNF = new jxl.write.Number(3, 1, 10.50001, wcfN); 
            sheet.addCell(labelNNF); 
            //关闭对象,释放资源
            workbook.write(); 
            workbook.close();     }catch(Exception e){
          System.out.println(e);
        }
      }
    /**
     *<br>方法说明:读取excel文件一行数据
     *<br>输入参数:int row指定的行数
     *<br>返回类型:String〔〕结果数组
     */  
      public String[] readLine(int row){
        try{
          //获取数据表列数
          int colnum = sheet.getColumns();
          String[] rest = new String[colnum];
          for(int i = 0; i < colnum; i++){
            String sTemp = read(i,row);
            if(sTemp!=null)
             rest[i] = sTemp;
          }
          return rest;
        }catch(Exception e){
          System.out.println("readLine err:"+e);
          workbook.close();
          return null;
        }
      }
    /**
     *<br>方法说明:读取excel的指定单元数据
     *<br>输入参数:
     *<br>返回类型:
     */
      public String read(int col, int row){
        try{
          //获得单元数据
          Cell a2 = sheet.getCell(col,row); 
          String rest = a2.getContents();
          return rest;
        }catch(Exception e){
          System.out.println("read err:"+e);
          workbook.close();
          return null;
        }
      }
    /**
     *<br>方法说明:主方法,演示程序用
     *<br>输入参数:
     *<br>返回类型:
     */
      public static void main(String[] arges){
        try{
          myExcel me = new myExcel();
          //生成一个可读取的excel文件对象
          me.workbook = Workbook.getWorkbook(new File("myfile.xls"));
          //使用第一个工作表
          me.sheet = me.workbook.getSheet(0);
          //读一行记录,并显示出来
          String[] ssTemp = me.readLine(1);
          for(int i=0;i<ssTemp.length;i++)
           System.out.println(ssTemp[i]);
          //写入数据
          me.write();
          
          me.workbook.close();
        }catch(Exception e){
          System.out.println(e);
        }
      }
       
    }
      

  3.   

    import java.io.File; 
    import java.util.*; 
    import jxl.*;
    import jxl.write.*; 
    public class myExcel{
      Workbook workbook;
      Sheet sheet;
    /**
     *<br>方法说明:写入文件操作
     *<br>输入参数:
     *<br>返回类型:
     */
      public void write(){
        try{
            //创建一个可写入的excel文件对象
            WritableWorkbook workbook = Workbook.createWorkbook(new File("myfile.xls")); 
            //使用第一张工作表,将其命名为“午餐记录”
            WritableSheet sheet = workbook.createSheet("午餐记录", 0); 
            //表头
            Label label0 = new Label(0, 0, "时间"); 
            sheet.addCell(label0); 
            Label label1 = new Label(1, 0, "姓名"); 
            sheet.addCell(label1); 
            Label label2 = new Label(2, 0, "午餐标准"); 
            sheet.addCell(label2); 
            Label label3 = new Label(3, 0, "实际费用"); 
            sheet.addCell(label3); 
            //格式化日期
            jxl.write.DateFormat df = new jxl.write.DateFormat("yyyy-dd-MM  hh:mm:ss"); 
            jxl.write.WritableCellFormat wcfDF = new jxl.write.WritableCellFormat(df); 
            jxl.write.DateTime labelDTF = new jxl.write.DateTime(0, 1, new java.util.Date(), wcfDF); 
            sheet.addCell(labelDTF);
            //普通字符
            Label labelCFC = new Label(1, 1, "riverwind"); 
            sheet.addCell(labelCFC); 
             //格式化数字
            jxl.write.NumberFormat nf = new jxl.write.NumberFormat("#.##"); 
            WritableCellFormat wcfN = new WritableCellFormat(nf); 
            jxl.write.Number labelNF = new jxl.write.Number(2, 1, 13.1415926, wcfN); 
            sheet.addCell(labelNF); 
            
             
            jxl.write.Number labelNNF = new jxl.write.Number(3, 1, 10.50001, wcfN); 
            sheet.addCell(labelNNF); 
            //关闭对象,释放资源
            workbook.write(); 
            workbook.close();     }catch(Exception e){
          System.out.println(e);
        }
      }
    /**
     *<br>方法说明:读取excel文件一行数据
     *<br>输入参数:int row指定的行数
     *<br>返回类型:String〔〕结果数组
     */  
      public String[] readLine(int row){
        try{
          //获取数据表列数
          int colnum = sheet.getColumns();
          String[] rest = new String[colnum];
          for(int i = 0; i < colnum; i++){
            String sTemp = read(i,row);
            if(sTemp!=null)
             rest[i] = sTemp;
          }
          return rest;
        }catch(Exception e){
          System.out.println("readLine err:"+e);
          workbook.close();
          return null;
        }
      }
    /**
     *<br>方法说明:读取excel的指定单元数据
     *<br>输入参数:
     *<br>返回类型:
     */
      public String read(int col, int row){
        try{
          //获得单元数据
          Cell a2 = sheet.getCell(col,row); 
          String rest = a2.getContents();
          return rest;
        }catch(Exception e){
          System.out.println("read err:"+e);
          workbook.close();
          return null;
        }
      }
    /**
     *<br>方法说明:主方法,演示程序用
     *<br>输入参数:
     *<br>返回类型:
     */
      public static void main(String[] arges){
        try{
          myExcel me = new myExcel();
          //生成一个可读取的excel文件对象
          me.workbook = Workbook.getWorkbook(new File("myfile.xls"));
          //使用第一个工作表
          me.sheet = me.workbook.getSheet(0);
          //读一行记录,并显示出来
          String[] ssTemp = me.readLine(1);
          for(int i=0;i<ssTemp.length;i++)
           System.out.println(ssTemp[i]);
          //写入数据
          me.write();
          
          me.workbook.close();
        }catch(Exception e){
          System.out.println(e);
        }
      }
       
    }
      

  4.   

    不好意思写错了 是Excel格式的
      

  5.   

    用jxt感觉有点麻烦啊,觉得不如POI的理解简单点。还请诸位多多指教啊。
      

  6.   

    哪里有 Java EE 的东西了?
      

  7.   

    系统是用的Struts2+Spring+Hibernate 做的  上面这个方法只是service的实现类里的一个方法。其他的没贴出来。
      

  8.   


     package test;// 生成Excel的类 
    import java.io.File;import jxl.Workbook;
    import jxl.write.Label;
    import jxl.write.WritableSheet;
    import jxl.write.WritableWorkbook;public class CreateExcel {
    public static void main(String args[]) {
    try {
    // 打开文件
    WritableWorkbook book = Workbook.createWorkbook(new File("aa.xls"));
    // 生成名为“第一页”的工作表,参数0表示这是第一页
    WritableSheet sheet = book.createSheet("第一页",0);
    // 在Label对象的构造子中指名单元格位置是第一列第一行(0,0)
    // 以及单元格内容为test
    //Label label = new Label(0,0,"testssss");
    for(int i=0;i<10;i++){
    for (int j=0;j<10;j++){
    Label label = new Label(i,j,i*j+"");
    sheet.addCell(label);
    }
    }
    // 将定义好的单元格添加到工作表中

    // 生成一个保存数字的单元格 必须使用Number的完整包路径,否则有语法歧义 单元格位置是第二列,第一行,值为789.123
    jxl.write.Number number = new jxl.write.Number(1, 0, 555.12541);
    sheet.addCell(number);
    // 写入数据并关闭文件
    book.write();
    book.close(); } catch (Exception e) {
    System.out.println(e);
    }
    }
    }package test;// 读取Excel的类 
    import java.io.File;import jxl.Cell;
    import jxl.Sheet;
    import jxl.Workbook;public class ReadExcel {
    public static void main(String args[]) {
    try {
    Workbook book = Workbook.getWorkbook(new File("test.xls "));
    //获得第一个工作表对象
    Sheet sheet = book.getSheet(0);
    //得到第一列第一行的单元格
    int rows = sheet.getRows();
    int column = sheet.getColumns();
    for (int i=0;i<rows;i++){
    for (int j=0;j<column;j++){
    Cell cell1 = sheet.getCell(j, i);
    String result = cell1.getContents();
    System.out.print(result+",");
    }
    System.out.println("-----------------------------");
    }

    book.close();
    } catch (Exception e) {
    System.out.println(e);
    }
    }
    }package test;import java.io.File;import jxl.Workbook;
    import jxl.write.Label;
    import jxl.write.WritableSheet;
    import jxl.write.WritableWorkbook;public class UpdateExcel {
    public static void main(String args[]) {
    try {
    //Excel获得文件
    Workbook wb = Workbook.getWorkbook(new File("test.xls"));
    //打开一个文件的副本,并且指定数据写回到原文件
    WritableWorkbook book = Workbook.createWorkbook(new File("test.xls"), wb);
    //添加一个工作表
    WritableSheet sheet = book.createSheet("第二页 ", 1);
    sheet.addCell(new Label(0, 0, "第二页的测试数据 "));
    book.write();
    book.close();
    } catch (Exception e) {
    System.out.println(e);
    }
    }
    }