我用jxl做导出,手动创建EXCEl
public void getExcel(String sheetName,OutputStream output,List<Map> epList) throws IOException, WriteException 
{  
 //创建工作薄
 WritableWorkbook wb = Workbook.createWorkbook(output);
 //创建工作表 Sheet
 WritableSheet sheet = wb.createSheet("Sheet1", 0);
 //创建标签
 Label label = new Label(0, 0, "外协合同清单");
 sheet.addCell(label);
 for(int row=0;row<epList.size();row++){
for(int i=0;i<20;i++){
String spStr=epList.get(row).toString().split("=")[i+1];
Label label2=new Label(i,row+1,spStr.split(",")[0]);
sheet.addCell(label2);
}
 }  
   try   { 
         output.flush(); 
         wb.write(); 
         wb.close();
         output.close();
 }   catch   (IOException   e)   { 
         e.printStackTrace(); 
         System.out.println( "Output is closed ");
 } 
就是从前台一个list导出到excel但现在问题是:导出后都是乱码,没有规律的乱码,连数字和字母也都是乱码!上网搜到说加一句话:
WorkbookSettings workbookSettings=new WorkbookSettings();
workbookSettings.setEncoding("ISO-8859-1"); //关键代码,解决中文乱码
Workbook workbook=Workbook.getWorkbook(is,workbookSettings);
但我不知道我的程序里面这句话怎么加?is貌似是个文件,我这里excel是手动创建的,is这个应该怎么写呢?另外页面是这样的:<%@ page contentType="application/vnd.ms-excel" language="java" import="java.util.*,com.direct.query.ps.WriteExcel" pageEncoding="GBK"%><%
List epList=(List)session.getAttribute("epList");
out.print(session.getAttribute("epList"));
response.setHeader("Content-Disposition","attachment;filename=waixie.xls");//指定下载的文件名
response.setContentType("application/vnd.ms-excel"); 
WriteExcel  we=new WriteExcel();
we.getExcel("111.xls",response.getOutputStream(),epList);
%>
求前辈帮我看看啥问题?谢谢了

解决方案 »

  1.   

    try{
    String filename = mon+"月"+cpName+".xls";
     filename=new String(filename.getBytes("iso8859-1"),"gb2312");
     response.setContentType("application/x-msdownload");
     response.setHeader("Content-disposition","attachment; filename="+new String(filename.getBytes("gb2312"),"iso8859-1"));
     bis =new java.io.BufferedInputStream(new java.io.FileInputStream(config.getServletContext().getRealPath("file/" + filename)));
     bos=new java.io.BufferedOutputStream(response.getOutputStream()); 
     byte[] buff = new byte[2048];
     int bytesRead;
     while(-1 != (bytesRead = bis.read(buff, 0, buff.length))) {
      bos.write(buff,0,bytesRead);
     }
    }
    catch(Exception e){
     e.printStackTrace();
    }
    finally {
     if (bis != null)bis.close();
     if (bos != null)bos.close();
    }
      

  2.   

    是通过页面把,这个form提交就行了,我这里有代码
    public class Caozuo {
    InputStream is = null; //定义一个输入流
    jxl.Workbook rwb = null;//定义一个只读的工作薄
    WritableWorkbook wr=null; //定义一个可写的工作薄
    FileOutputStream out=null;
    WritableSheet sheet=null;
    String worksheet = "List";//输出的excel文件工作表名      
     public Caozuo() {
    try {
    out=new FileOutputStream("E:\\a.xls");       
    wr=Workbook.createWorkbook(out);            
    sheet = wr.createSheet(worksheet, 0);
    // WritableWorkbook wr = Workbook.createWorkbook(new File("E:\\a.xls"));
    // //out=new FileOutputStream("E:\\a.xls");
    // is = new FileInputStream("E:\\a.xls");//创建一个输入流
    // rwb = Workbook.getWorkbook(is);//创建只读工作薄
    // //wr=Workbook.createWorkbook(out);
    // wr=Workbook.createWorkbook(new File("E:\\a.xls"), rwb);//创建可写的工作薄 } catch (Exception e) {
    e.printStackTrace();
    }
    } public ArrayList Select() {
    ArrayList arr = new ArrayList();
    Sheet rs = rwb.getSheet(0);//读取第一个表
    for (int i = 0; i < rs.getRows(); i++) {
    ArrayList arr1 = new ArrayList();
    for (int k = 0; k < rs.getColumns(); k++) {
    Cell c00 = rs.getCell(k, i);//k表示列,i表示行,注列和行从0开始
     
    String strc00 = c00.getContents();//getContents()方法是将Cell转换为字符串形式
    arr1.add(strc00);
    }
    arr.add(arr1);
    }
    rwb.close();
    return arr;
    } public void Insert() throws RowsExceededException, WriteException, IOException { 
    WritableSheet rs = wr.getSheet(0);//查找表一
    //WritableSheet rs = (WritableSheet)rwb.getSheet(0);

    int rownumber = rs.getRows();//多少行
    int cellnumber = rs.getColumns();//多少列
    for (int k = 0; k < cellnumber; k++) {
    jxl.write.Label labelC = new jxl.write.Label(k,rownumber,"这是第'"+rownumber+"'行,第'"+k+"'列");
    labelC.setString("fdsadf");
    //k表示哪一列,rownumber表示哪一行,从而定向到某个单元格,第三个参数是单元格内的内容
    rs.addCell(labelC);//把此单元格放入表中
    }

    wr.write();//写入
    wr.close();
    }
    public String  GoujianTable(String s ) throws Exception{
    int rownumber=s.split(";").length;
    int cellnumber=s.split(";")[0].split(",").length;
    String [] slist=s.split(";");
    String talbeString="<table >";
    for(int i=0; i<rownumber;i++){
    String [] sllist=slist[i].split(",");
    talbeString=talbeString+"<tr>";
    for(int k=0;k<cellnumber-1;k++){
    talbeString=talbeString+"<td>";
    talbeString=talbeString+sllist[k];
    talbeString=talbeString+"</td>";

    }
    talbeString=talbeString+"</tr>";
    }
    talbeString=talbeString+"</table>";
    return talbeString;
    }
    public void Inserted(String s ) throws Exception{
    int rownumber=s.split(";").length;
    int cellnumber=s.split(";")[0].split(",").length;
    WritableSheet rs = wr.getSheet(0);//查找表一
    String [] slist=s.split(";");
    for(int i=0; i<rownumber;i++){
    String [] sllist=slist[i].split(",");
    for(int k=0;k<cellnumber;k++){
    jxl.write.Label labelC = new jxl.write.Label(k,i,sllist[k]);
    rs.addCell(labelC);
    System.out.println("22");
    }

    }
    wr.write();//写入
    System.out.println("**********************");
    wr.close();
    }
    public void Delete(int id) throws IOException, WriteException{//id表示行号
    WritableSheet rs=wr.getSheet(0);//查找表一
    rs.removeRow(id-1);//删除行
    wr.write();//从内存中写入
    wr.close();

    }
    public void Update(int rowid,int columid,String cansu) throws RowsExceededException, WriteException, IOException{
    WritableSheet rs=wr.getSheet(0);
    //因为行和列都是从0开始,所以要减一
    jxl.write.Label labelC = new jxl.write.Label(columid-1,rowid-1,cansu);
    //WritableCell cell=(WritableCell) rs.getCell(columid-1,rowid-1);
    rs.addCell(labelC);
    wr.write();//写入
    wr.close();
    }
    }
    把你页面上面table的字符串取过来,然后传入GoujianTable()方法就搞定了
      

  3.   

    http://download.csdn.net/user/weihui5368452/导入导出execl源码
      

  4.   

    WorkbookSettings workbookSettings=new WorkbookSettings();
    workbookSettings.setEncoding("ISO-8859-1"); //关键代码,解决中文乱码
    Workbook workbook=Workbook.getWorkbook(is,workbookSettings);is 是个输入流,具体代码我忘了,这几行代码是为了改变编码方式的。你可以去找找改变jxl编码方式的例子,这三行代码原来是我写的
      

  5.   

    乱码啊?加上这一句试试:
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />