我已经编写了一些代码来在网站上显示excel。
但是我得到这个例外
net.sf.jasperreports.engine.JRRuntimeException:没有输入源提供给导出器。
导入jsp
<%@ page import="java.io.*"%> <%@ page import="java.sql.Connection"%> <%@ page import="java.sql.DriverManager"%> <%@ page import="java.util.HashMap"%> <%@ page import="java.util.Map"%> <%@ page import="net.sf.jasperreports.engine.*"%> <%@ page import="java.io.ByteArrayOutputStream"%> <%@ page import="net.sf.jasperreports.view.JasperViewer"%> <%@ page import="net.sf.jasperreports.engine.export.*"%>
jsp代码导出到excel
<% Connection conn = null; String no1 = request.getParameter("no1"); String no2 = request.getParameter("no2"); System.out.println("get value " + no1 + " " +no2); try { Class.forName("com.mysql.jdbc.Driver").newInstance(); conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/ams2" ,"root","passwd1234"); File reportFile = new File (application.getRealPath("//jasper//report//Blank_A4_2.jasper")); Map parameters = new HashMap(); parameters.put("no1",no1); parameters.put("no2",no2); System.out.println("123 "+parameters); ByteArrayOutputStream xlsReport = new ByteArrayOutputStream(); JRXlsExporter exporter = new JRXlsExporter(); exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, xlsReport); exporter.setParameter(JRExporterParameter.OUTPUT_FILE, "C:\\"); exporter.setParameter(JRExporterParameter.OUTPUT_FILE_NAME, "sample.xls"); exporter.exportReport(); byte bytes[] = new byte[10]; bytes = xlsReport.toByteArray(); response.setContentType("application/vnd.ms-excel"); response.setContentLength(bytes.length); xlsReport.close(); ServletOutputStream outStream = response.getOutputStream(); outStream.write(bytes,0,bytes.length); outStream.flush(); outStream.close(); } catch (Exception ex) { out.println("Error " + ex); } %>
如何解决?
如果您使用的不是JasperReports的旧版本,则使用不推荐使用的方法,最重要的是,您不会将其传递JasperPrint给导出器。
JasperPrint
没有输入源提供给出口商。
您需要 填写报告 ,使用JasperFillManager.fillReport
JasperFillManager.fillReport
示例代码(碧玉报告v5或更高版本)
JasperDesign jasperDesign = JRXmlLoader.load(new FileInputStream(reportFile)); JasperPrint jasperPrint = JasperFillManager.fillReport(jasperDesign, parameters, conn); JRXlsExporter exporter = new JRXlsExporter(); exporter.setExporterInput(new SimpleExporterInput(jasperPrint)); //The JasperPrint, filled report exporter.setExporterOutput(new SimpleOutputStreamExporterOutput(xlsReport)); //Your ByteArrayOutputStream SimpleXlsReportConfiguration configuration = new SimpleXlsReportConfiguration(); configuration.setOnePagePerSheet(true); configuration.setDetectCellType(true); configuration.set //The other properties you like to set exporter.setConfiguration(configuration); exporter.exportReport();