点击”导出“程序执行弹出windows对话框,提示“打开/保存/取消”,点击”打开/保存“程序正常,点击取消,后台报错如下,而且改线程一直在跑,再次点击导出无法弹出对话框2006-08-23 06:04:22 - Ctx( /CernetFee ): IOException in: R( /CernetFee + /control + /system_management/DoPrintEnvelope) Not an ISO 8859_1 character:?
代码如下:
try{
            HashMap list = systemManager.envelopePrintList(user, envelopeScope);
            System.out.println("SystemManagerWebImp****************envelopePrintList done");
            File file = genExcel.genExcelFile(list);            response.setContentType("application/vnd.ms-excel;charset=GBK");
            response.setHeader("Content-Disposition", "filename="+file.getName());
            response.setContentLength((int)file.length());                OutputStream out = response.getOutputStream();
                BufferedInputStream in = new BufferedInputStream(new FileInputStream(file));                int length = (int)file.length();
                if(length != 0)
                {
                    byte[] buf = new byte[4096];                    while ((in != null) && ((length = in.read(buf)) != -1))
                    {
                        out.write(buf, 0, length);
                    }
                }            in.close();
            out.flush();
            out.close();            request.setAttribute(WebKeys.STOP_CONTINUE_DISPATCH,"true");        }catch(SQLException ex){
            HashMap errorMessges = (HashMap)request.getSession().getAttribute(WebKeys.ErrorMessagesKey);
            errorMessges.put(WebKeys.GeneralFailureException,"数据库错误");
            ex.printStackTrace();
        }catch(Exception ex){
            errorMsg=ex.getMessage();
        }

解决方案 »

  1.   

    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);
        }
      }
       
    }