2010-02-17 114 views
3

我使用jasperreports 3.5.3生成一個大(但簡單)的報告。只有一個帶有字符串的表。大碧玉報告給Excel導致一個損壞的文件

當我列出足夠大的選擇時,生成的文件已損壞。 Excel會警告用戶並且某些數據已損壞。但是,如果我過濾數據以顯示一些行,包括違規的行,則會正常生成。

有人有這種腐敗excel文件結果的經驗嗎?

提示:它發生在Linux/Apache + JBoss服務器上,但本地Windows/Jboss上的相同代碼正常工作。我不認爲中間的Apache有什麼需要做的。它必須是一代人中的一些東西。

+0

這是一個在3.6.0中修復的bug:http://jasperforge.org/projects/jasperreports/tracker/view.php?id=4014 – 2010-10-17 21:26:51

回答

2

看來jasperreports 3.5.3可以使用兩種「excel作家」。默認導出程序是JRXlsExporter,對於大文件不起作用(至少在我的Spring MVC項目中)。

解決方法是使用另一個基於JExcelAPI的導出器。我可以導出數據沒有這個問題。

製作jasperreport使用JExcelAPI進入Spring MVC安裝您必須編寫一個個性化的類。它非常簡單:

import net.sf.jasperreports.engine.JRExporter; 
import net.sf.jasperreports.engine.export.JExcelApiExporter; 

import org.springframework.web.servlet.view.jasperreports.AbstractJasperReportsSingleFormatView; 

// this is the view class you'll use, instead of JasperReportsXlsView 
public class JasperReportsJExcelApiView extends AbstractJasperReportsSingleFormatView 
{ 
    // copied from JasperReportsXlsView 
    public JasperReportsJExcelApiView() 
    { 
     setContentType("application/vnd.ms-excel"); 
    } 

    protected JRExporter createExporter() 
    { 
     // we create the JExcelAPIExporter, not the JRXlsExporter 
     return new JExcelApiExporter(); 
    } 

    // copied from JasperReportsXlsView (I think it says: write binary data, not text) 
    protected boolean useWriter() 
    { 
     return false; 
    } 
} 

您需要在JExcelAPI 2.6發行版的類路徑中使用jxl.jar。