首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > Java Web开发 >

ireport导出excel乱码,该怎么解决

2012-12-26 
ireport导出excel乱码报表里的内容都是英文的,因为是加拿大的项目,现在我不理解我导出excel为什么乱码那,

ireport导出excel乱码
报表里的内容都是英文的,因为是加拿大的项目,现在我不理解我导出excel为什么乱码那,大家帮忙看看

public String branchExcelReport(List list) {
JasperPrint jasperPrintArr=null;
ArrayList jasperPrintList = new ArrayList();
HttpServletResponse resp=null;
JasperReport report;
    Map map=new HashMap();
    String realPath = "";
resp = (HttpServletResponse)ActionContext.getContext().get(org.apache.struts2.StrutsStatics.HTTP_RESPONSE);
    realPath =ServletActionContext.getServletContext().getRealPath(
"/report/template/Branch.jasper");
 
    JRDataSource dataSource = new JRBeanCollectionDataSource(list);
    try {
report = (JasperReport)JRLoader.loadObject(realPath);

    jasperPrintArr = JasperFillManager.fillReport (report,  map, dataSource);  
    jasperPrintList.add(jasperPrintArr);
    
        //设定输出格式
        FileBufferedOutputStream fbos = new FileBufferedOutputStream(); 
        // 使用JRPdfExproter导出器导出pdf  
        JRPdfExporter exporter = new JRPdfExporter();  
        // 设置JasperPrintList  
        exporter.setParameter(JRExporterParameter.JASPER_PRINT_LIST, jasperPrintList);  
        exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, fbos);   
        exporter.setParameter(JRXlsExporterParameter.IS_REMOVE_EMPTY_SPACE_BETWEEN_ROWS, Boolean.TRUE); 
        exporter.setParameter(JRXlsExporterParameter.IS_ONE_PAGE_PER_SHEET, Boolean.FALSE); 
        exporter.setParameter(JRXlsExporterParameter.IS_WHITE_PAGE_BACKGROUND, Boolean.FALSE);
        exporter.exportReport();   
        resp.reset();   
        resp.setContentType("application/vnd.ms-excel;charset=UTF-8");   
        resp.setCharacterEncoding("UTF-8");
        resp.setContentLength(fbos.size()); 
        resp.setHeader("Content-Disposition", "attachment; filename=BRANCH.xls");
            ServletOutputStream ouputStream = resp.getOutputStream(); 
            

            try
            { 
                fbos.writeData(ouputStream); 
                fbos.dispose(); 
                ouputStream.flush(); 
            } 
            finally 


            { 
                if (ouputStream != null) 
                { 
                    try
                    { 
                    fbos.close(); 
                        ouputStream.close(); 
                    } 
                    catch (IOException ex) 
                    { 
                    ex.printStackTrace();
                    } 
                } 
            } 
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
    
return null;
}


[解决办法]
ireport的字符格式是不是不是utf-8的?
[解决办法]
resp.setContentType("application/vnd.ms-excel;charset=UTF-8");   
            resp.setCharacterEncoding("UTF-8");
UTF-8是简体中文,设置成ISO-8859-1试试
[解决办法]
乱码有两种是情况
首先确定编码格式是否正确.
1.为参数没全部传入
2.另外没有让流结束造成的。
如果是Linux下看报表还得在容器启动时加参数。
[解决办法]

导出excel不用那么麻烦配置,直接在action中写一个方法就可以实现这个功能
代码:
public String action_executeExcel(){
try{

List<JWJX_JXdajbxx> list = teachDossierService.findAll();
getDmWjlxdmAll();
getDmBgqxAll();

//设置导出头部
HttpServletResponse response = ServletActionContext.getResponse();
response.reset();
response.setContentType("application/vnd.ms-excel");
String fileName = java.net.URLEncoder.encode("教学档案.xls", "UTF-8");
response.setHeader("Content-Disposition", "attachment; filename="
+ new String(fileName.getBytes("UTF-8"), "GBK"));
//组装Excel
OutputStream os = response.getOutputStream();
WritableWorkbook book = Workbook.createWorkbook(os);
WritableSheet sheet = book.createSheet("教学档案", 0);
String titles[] = new String[] { "分类编号", "文件类型", "文件名称","归档范围","保管期限"};

String properties[] = new String[] { "flbh", "wjlx", "wjmc","gdfw", "bgqx"};

for (int i = 0; i < titles.length; i++) {


sheet.addCell(new Label(i, 0, titles[i]));
}
if(list != null && list.size()>0){
Iterator i = list.iterator();
int line = 1;
while (i.hasNext()) {
JWJX_JXdajbxx tsc = (JWJX_JXdajbxx) i.next();
for (int j = 0; j < properties.length; j++) {
Object value = PropertyUtils.getSimpleProperty(tsc,properties[j]);
value = value != null ? value : "";
if(properties[j].equals("wjlx")){
if(wjlxdms != null){
for(int a=0;a<wjlxdms.size();a++){
DM_wjlxdm dmwjlx = (DM_wjlxdm)wjlxdms.get(a);
if(tsc.getWjlx() .equals(dmwjlx.getWjlxdmid()) ){
value = dmwjlx.getMc();
}
}
}
}
if(properties[j].equals("bgqx")){
if(bgqxs != null){
for(int a=0;a<bgqxs.size();a++){
DM_bgqx dmbgqx = (DM_bgqx)bgqxs.get(a);
if(tsc.getBgqx().equals(dmbgqx.getBgqxid()) ){
value = dmbgqx.getMc();
}
}
}
}
sheet.addCell(new Label(j, line, value.toString()));
}
line++;
}
}

// 将组装好的Excel文件以流的格式输出到客户端
book.write();
book.close();
} catch (Exception e) {
e.printStackTrace();
}  
return null;
}

[解决办法]
在设计模版的时候有没有编码选择啊!好久没用ireport都忘了。

热点排行