无法使用 Jasper 报告库生成 Excel 工作表报告

2024-04-12

我尝试使用以下代码生成 Excel 报告。

import java.util.*;

import net.sf.jasperreports.engine.*;
import net.sf.jasperreports.engine.export.JRXlsExporter;
import net.sf.jasperreports.export.OutputStreamExporterOutput;
import net.sf.jasperreports.export.SimpleExporterInput;
import net.sf.jasperreports.export.SimpleOutputStreamExporterOutput;
import net.sf.jasperreports.export.SimpleXlsReportConfiguration;

public class FirstReport 
{
public static void main(String[] args) 
{
    try
    {

        JRXlsExporter exporter = new JRXlsExporter();
        exporter.setExporterInput(new         SimpleExporterInput("FirstReport.jrxml"));
        exporter.setExporterOutput(new SimpleOutputStreamExporterOutput("C://sample_report.xls"));

        SimpleXlsReportConfiguration configuration = new SimpleXlsReportConfiguration();
        configuration.setOnePagePerSheet(true);
        configuration.setDetectCellType(true);
        configuration.setCollapseRowSpan(false);
        exporter.setConfiguration(configuration);   
        exporter.exportReport();

    }
    catch (Exception e)
    {
        e.printStackTrace();
    }

}
}

该程序正在生成以下异常

net.sf.jasperreports.engine.JRRuntimeException:net.sf.jasperreports.engine.JRException:从文件加载对象时出错:FirstReport.jrxml 在net.sf.jasperreports.export.SimpleExporterInput。(SimpleExporterInput.java:157) 在 FirstReport.main(FirstReport.java:33) 引起原因:net.sf.jasperreports.engine.JRException:从文件加载对象时出错:FirstReport.jrxml 在 net.sf.jasperreports.engine.util.JRLoader.loadObject(JRLoader.java:131) 在 net.sf.jasperreports.engine.util.JRLoader.loadObject(JRLoader.java:103) 在net.sf.jasperreports.engine.util.JRLoader.loadObjectFromFile(JRLoader.java:94) 在 net.sf.jasperreports.export.SimpleExporterInput。 (SimpleExporterInput.java:153) ... 1 更多 引起原因:java.io.StreamCorruptedException:无效的流头:3C3F786D 在 java.io.ObjectInputStream.readStreamHeader(来源未知) 在 java.io.ObjectInputStream.(来源未知) 在net.sf.jasperreports.engine.util.ContextClassLoaderObjectInputStream。 (ContextClassLoaderObjectInputStream.java:57) 在 net.sf.jasperreports.engine.util.JRLoader.loadObject(JRLoader.java:126) ... 4 更多


参数exporter.setExporterInput()必须基于 JasperPrint 对象(而不是 jrxml 文件)。

你可以在以下位置看到它:net.sf.jasperreports.export.SimpleExporterInput班级。这个类的一些代码:

/**
 * Creates an {@link ExporterInput} object with a single item wrapping the {@link JasperPrint} object that will be exported. 
 * If you already have a JasperPrint object, you can pass it to the exporter using this type of input.
 */
public SimpleExporterInput(JasperPrint jasperPrint)
{
    if (jasperPrint != null)
    {
        this.items = new ArrayList<ExporterInputItem>();
        items.add(new SimpleExporterInputItem(jasperPrint));
    }
}


/**
 * Creates an {@link ExporterInput} object with a single {@link JasperPrint} item read from the provided input stream. 
 * If you want to read the JasperPrint object from an input stream (like a web location), you can pass the stream to this constructor.
 */
public SimpleExporterInput(InputStream inputStream)
{
    if (inputStream != null)
    {
        JasperPrint jasperPrint = null;
        try
        {
            jasperPrint = (JasperPrint)JRLoader.loadObject(inputStream);
        }
        catch (JRException e)
        {
            throw new JRRuntimeException(e);
        }
        this.items = new ArrayList<ExporterInputItem>();
        items.add(new SimpleExporterInputItem(jasperPrint));
    }
}

JasperPrint 对象是 fillReport 方法执行的结果。例如:

JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReportFile, reportParameters, dataSource);

在此代码中,jasperReportFile 是与编译的报告文件(不是 jrxml)相对应的对象。在你的情况下 FirstReport.jasper

一些代码来自net.sf.jasperreports.engine.JasperFillManager:

/**
 * @see #fill(String, Map, JRDataSource)
 */
public static JasperPrint fillReport(
    String sourceFileName, 
    Map<String,Object> params,
    JRDataSource dataSource
    ) throws JRException
{
    return getDefaultInstance().fill(sourceFileName, params, dataSource);
}
....
    /**
 * Fills the compiled report design loaded from the specified file and returns
 * the generated report object.
 * 
 * @param sourceFileName source file containing the compile report design
 * @param params     report parameters map
 * @param dataSource     data source object
 * @return generated report object
 */
public JasperPrint fill(
    String sourceFileName, 
    Map<String,Object> params,
    JRDataSource dataSource
    ) throws JRException
{
    File sourceFile = new File(sourceFileName);

    JasperReport jasperReport = (JasperReport)JRLoader.loadObject(sourceFile);

    JasperReportsContext lcJrCtx = getLocalJasperReportsContext(sourceFile);

    return JRFiller.fill(lcJrCtx, jasperReport, params, dataSource);
}

HTH

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

无法使用 Jasper 报告库生成 Excel 工作表报告 的相关文章

随机推荐

  • Java:从 FTP 服务器访问文件

    我有一个 FTP 服务器 里面有一堆文件夹和文件 我的程序需要访问该服务器 读取所有文件并显示它们的数据 出于开发目的 我一直在使用硬盘驱动器上 src 文件夹中的文件 但现在服务器已启动并运行 我需要将软件连接到它 基本上我想要做的是获取
  • 是否可以获取 Stream 中的下一个元素?

    我正在尝试转换for loop到功能代码 我需要向前看一个值 也需要向后看一个值 是否可以使用流 以下代码是将罗马文本转换为数值 不确定带有两个 三个参数的reduce方法是否可以在这里提供帮助 int previousCharValue
  • 在 Windows 环境中使用 Gnustep 在 Objective-C 中进行编程

    我正在使用 Windows 并且想开始学习如何使用 Objective C 进行编程 我安装了 Gnustep 但无法确定如何构造和构建项目 等效 也找不到 IDE 请参阅Gnustep 入门 https stackoverflow com
  • 选择com的理由

    我想知道为什么人们会选择 Com 作为他的软件开发 技术 我的第一个想法是机器 编程语言的独立性 你的是啥呢 COM 是 Windows 上自动化和 IPC 的事实上的标准 尽管 Net 已经开始转移焦点 因此有些领域您根本没有 或没有 选
  • 在python中查找关键字后的单词[重复]

    这个问题在这里已经有答案了 我想查找出现在关键字 由我指定和搜索 之后的单词并打印出结果 我知道我应该使用正则表达式来做到这一点 我也尝试了一下 如下所示 import re s hi my name is ryan and i am ne
  • 如何从 Django 中的请求对象获取 URI?

    如何从 Django 中的请求对象获取 URI 有 request uri 吗 request META REQUEST URI or request get full path 你往往会产生大量琐碎的问题 你可以在文档 谷歌中轻松找到答案
  • NSTokenField 捕获一些 NSEvents

    我需要为 NSTokenField 和解决方案实现 Command Enter Command O 和 Esc 快捷键https stackoverflow com a 18486965 1067147 https stackoverflo
  • 如何使用 Javascript 访问网络摄像头 [重复]

    这个问题在这里已经有答案了 我用谷歌搜索了很长一段时间关于这个话题 没有任何令人满意的结果 实际上我的基本问题是 有没有可能使用 Javascript 访问网络摄像头 也许用 HTML5
  • jQuery .val() 与 .attr("value")

    我本来以为这两个是一样的 但看起来不是 我一般都用过 obj attr value 使用表单字段 但在我当前正在构建的页面上 obj attr value 不返回我在字段中输入的文本 然而 obj val does 在我构建的另一个页面上
  • 自定义验证错误的自动响应

    在 asp net core 2 1 中 当发生验证错误时 ApiController 将自动响应 400 BadRequest 如何更改 修改发送回客户端的响应 json body 有某种中间件吗 我正在使用 FluentValidati
  • 使用 Celery(RabbitMQ、Django)检索队列长度

    我在 django 项目中使用 Celery 我的代理是 RabbitMQ 我想检索队列的长度 我浏览了 Celery 的代码 但没有找到执行此操作的工具 我在 stackoverflow 上发现了这个问题 从客户端检查 RabbitMQ
  • 在 go 中使用来自网络的原始字节

    抱歉 问题很长 我最近一直在尝试使用 Go 而不是 C 来开发一个游戏服务器模拟器 我正在将其作为一个业余项目进行开发 并质疑我是否以合理的 Go 术语来实现它 正如您所料 服务器通过发送符合特定协议规范的原始数据包 TCP 与一个或多个游
  • Xcode UI 测试 - 使用存储的凭据登录/注销

    我想在我的 iOS 应用程序 Xcode 7 2 1 中运行登录过程的功能 UI 测试 该应用程序的行为是 成功登录后 将存储用户凭据 以便在下次启动时自动登录 不显示登录屏幕 因此 我在登录屏幕中设置了一系列 UI 事件 以使应用程序首次
  • 如何避免 TYPO3 中的日期时间问题?

    我创建了一个小扩展 它使用日期时间来查看一些特定事件 事件日期和事件时间 但如果我尝试从数据库获取正确的日期时间到前端 我总是会遇到麻烦 我可以通过 TYPO3 后端设置每个事件的日期时间 但是如果我尝试在前端获取这个值 例如
  • 从多个自左连接中删除重复项

    我正在动态生成如下所示的查询 该查询通过对其自身进行左连接 任意次数 来创建不同的规则组合 并避免使用某些相同属性作为连接条件的一部分的规则 例如 SELECT count FROM rules AS t1 LEFT JOIN rules
  • Bool.hashValue 转换为 Int 有效吗?

    在某些情况下和一些代码我看到hashValue用于转换Bool to Int 然而 代码 let someValue true let someOtherValue false print someValue hashValue print
  • 具有属性的 jasmine.createSpyObj

    在我的 Angular 测试中模拟依赖项时 我通常使用以下命令创建一个间谍对象jasmine createSpyObj const serviceSpy jasmine createSpyObj MyService method 然后将其提
  • Oracle Apex 22.21 - 图表页面 - 条形图类型 - 日期选择器

    我有一张桌子ORDERS其中包含列ORDER DATE 我创建了一个Chart as a Bar type 我希望图表显示给定日期或范围内的订单量 我正在关注这个Youtube教程 https www youtube com watch v
  • 为什么在数据包输入时 skb_buffer 需要跳过 20 个字节才能读取传输缓冲区?

    我正在 Linux 中编写一个网络模块 我发现只有在从 skb 缓冲区跳过 20 个字节后才能提取 tcp 标头 即使 API 是 skb transport header 其背后的原因是什么 有人可以详细解释一下吗 传出数据包不需要同样的
  • 无法使用 Jasper 报告库生成 Excel 工作表报告

    我尝试使用以下代码生成 Excel 报告 import java util import net sf jasperreports engine import net sf jasperreports engine export JRXls