You are not logged in.
Dear users of this forum,
we are pleased to inform you that we will be updating the software behind this forum in the near future.
Existing posts, users and categories will remain untouched.
Important:
We will keep you informed in the pinned thread.
Kind regards,
Your ReportServer Team
Liebe Nutzer dieses Forums,
wir freuen uns, euch mitteilen zu können, dass wir in naher Zukunft die Software hinter diesem Forum aktualisieren werden.
Existierende Beiträge, Nutzer und Kategorien bleiben weiterhin bestehen!
Wichtig:
Wir halten euch im angepinnten Beitrag auf dem Laufenden!
Mit vielen Grüßen
Euer ReportServer Team
Hi,
I need to have possibility to export reports in EXCEL in two formats: XLS and XLSX (user can choose which one).
I know that I can choose globally which format is always exported via built-in button: Excel (configuration in "excelexport.cf)" but such permanent setting doesn't resolve my problem.
Should I create Report Executor? Any hints?
What's more, is possible to export dynamic list report to Word automatically?
I would be grateful if you give me some hints.
Offline
Hi,
I think I resolved this problem by adding output generator hook based on code from build-in net.datenwerke.rs.base.service.reportengines.table.output.generator.XLSOutputGenerator.java.
Maybe sb has the same problem so I pase my code of such a script:
/* Script with XLS Excel97 output generator class to register such an output generator as a hook */
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import net.datenwerke.rs.base.service.reportengines.table.hooks.TableOutputGeneratorProviderHook;
import net.datenwerke.rs.base.service.reportengines.table.hooks.adapter.TableOutputGeneratorProviderHookAdapter;
import net.datenwerke.rs.base.service.reportengines.table.output.generator.TableOutputGenerator;
import net.datenwerke.rs.base.service.reportengines.table.output.generator.RSTableOutputGenerator;
import net.datenwerke.rs.base.service.reportengines.locale.ReportEnginesMessages;
import net.datenwerke.rs.base.service.reportengines.table.output.object.CompiledXLSTableReport;
import net.datenwerke.rs.base.service.reportengines.table.output.object.RSTableModel;
import net.datenwerke.rs.base.service.reportengines.table.utils.RSTableToXLS;
import net.datenwerke.rs.core.service.reportmanager.ReportExecutorService;
import net.datenwerke.rs.core.service.reportmanager.engine.CompiledReport;
import net.datenwerke.rs.core.service.reportmanager.exceptions.ReportExecutorRuntimeException;
import net.datenwerke.rs.utils.localization.LocalizationServiceImpl;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import com.google.inject.Inject;
public class XLSExcel97OutputGenerator extends RSTableOutputGenerator{
public static final String HOOK_NAME = "XLS_EXCEL97_OUTPUT_GENERATOR";
private final ReportEnginesMessages messages = LocalizationServiceImpl.getMessages(ReportEnginesMessages.class);
private final RSTableToXLS rsTableToXLS;
@Inject
public XLSExcel97OutputGenerator(
RSTableToXLS rsTableToXLS
) {
super();
/* store objects */
this.rsTableToXLS = rsTableToXLS;
}
@Override
public String[] getFormats() {
String[] formats = ["EXCEL97"];
return formats;
}
private String getExportFormat(){
return "xls";
}
@Override
public CompiledReport getTableObject() {
boolean stream = null != os;
if(! stream)
os = new ByteArrayOutputStream();
try {
/* export to excel */
Workbook wb = new HSSFWorkbook();
Sheet sheet = wb.createSheet(messages.xlsOutputGeneratorSheetName());
/* export */
rsTableToXLS.exportToExcel((RSTableModel) super.getTableObject(), wb, sheet, false, originalReport);
/* finalize workbook */
wb.write(os);
} catch (Exception e) {
ReportExecutorRuntimeException rere = new ReportExecutorRuntimeException(e.getMessage());
rere.initCause(e);
throw rere;
} finally{
try {
os.close();
} catch (IOException e) {
throw new ReportExecutorRuntimeException(e);
}
}
/* create report object */
return new CompiledXLSTableReport(stream ? null : ((ByteArrayOutputStream)os).toByteArray());
}
@Override
public CompiledReport getFormatInfo() {
return new CompiledXLSTableReport(null);
}
@Override
boolean supportsStreaming(){
return false;
}
}
final XLSExcel97OutputGenerator xlsGenerator = GLOBALS.injector.getInstance(XLSExcel97OutputGenerator.class);
/* specify provider */
def provider = [
provideGenerators : { ->
return [xlsGenerator]
}
] as TableOutputGeneratorProviderHookAdapter
/* plugin hook */
GLOBALS.services.callbackRegistry.attachHook(XLSExcel97OutputGenerator.HOOK_NAME, TableOutputGeneratorProviderHook.class, provider)I have a question to Report Server team:
Why is there an error for report with empty results (I want to export report with no rows) if I don't override method supportsStreaming() to return false instead of true?
Regards,
Patryk
Last edited by Patryx (2019-07-09 15:44:32)
Offline
Hi Patryx,
supportsStreaming has to be set to false for the old excel format. So your script sets it correctly, thanks for sharing.
Regards,
Eduardo
Offline