【问题标题】:JTable -> Excel -> JTable - issue with extensionJTable -> Excel -> JTable - 扩展问题
【发布时间】:2017-03-06 16:31:35
【问题描述】:

我有一个简单的问题。我制作了生成 jtable 的程序,你可以用一些值填充这个表,然后将整个表保存到 excel 中。

一开始我定义了文件:

文件 f = new File("C:\Users\Gregory\Desktop\test.xls");

这里是导出 JTable 到 excel 的类:

public void exportTable(JTable table, File file) 抛出 IOException { 表模型模型 = table.getModel(); FileWriter out = new FileWriter(file);

  for (int i = 0; i < model.getColumnCount(); i++) {
      out.write(table.getColumnModel().getColumn(i).getHeaderValue() + \t");
  }
  out.write("\n");
  for (int i = 0; i < model.getRowCount(); i++) {
      for (int j = 0; j < model.getColumnCount(); j++) {
          if (model.getValueAt(i, j) != null) {
              out.write(model.getValueAt(i, j).toString() + "\t");
          } else if (model.getValueAt(i, j) == null) {
              out.write("\t");
          }
         }
      out.write("\n");
  }out.close();

我无法将此表导入 java 程序。我收到错误: jxl.read.biff.BiffException:无法识别 OLE 流

当我打开此文件时,我收到一条消息,指出文件的格式与其扩展名 (.xls) 不同。所以我点击“另存为”,建议的扩展名是.txt。我将文件保存为 .xls(似乎与 java 程序保存的文件相同),然后我可以将 JTable 从该 excel 导入到 java 程序而没有任何错误。谁能建议如何使用正确的扩展名保存文件?

【问题讨论】:

  • 具有 XLS 扩展名的文件具有自定义格式。它不会将数据存储为文本。这就是为什么您有“另存为”选项的原因。您可以将自定义格式转换为文本格式。尝试将文件保存为“.csv”(您可能需要更改分隔符,或者将其保存为“.txt”。
  • 但是我对这个程序的设想是将 JTable 以与 JTable 中相同的格式导出到 Excel - 逐个单元格,然后将这些单元格导出到程序并创建 JTable。可能吗?一般来说-它可以按我的意愿工作,但我必须手动单击文件“另存为”并将文件另存为“.xls”-我可以从此文件创建jtable。
  • 你曾经用编辑器查看过“.xls”文件吗???它不包含您在“.cvs”或“.txt”文件中看到的文本。如果你想阅读微软制作的“.xls”规范然后创建文件,祝你好运。

标签: java excel swing


【解决方案1】:

在参数 path 中传递生成的文件的路径,并在参数 name 中传递所需的文件名称。 如果您感兴趣,可以更改方法签名以动态接收扩展文件。只需替换参数的 ".xls"

private void download(HttpServletRequest request, HttpServletResponse response, String path,
        String name) throws IOException
{
    OutputStream out = null;
    try
    {
        out = response.getOutputStream();
    }
    catch (IOException e)
    {
        e.printStackTrace();
    }
    File arquivo = new File(path);
    String sContentType = null;
    sContentType = "application/pdf";
    response.setContentType(sContentType);
    response.addHeader("content-disposition", "attachment; filename=" + name + ".xls");
    InputStream in = null;
    in = new BufferedInputStream(new FileInputStream(arquivo));
    if (in != null)
    {
        response.setContentLength((int) in.available());
        int l;
        byte b[] = new byte[4096];
        while ((l = in.read(b, 0, b.length)) != -1)
        {
            out.write(b, 0, l);
        }
        out.flush();
        in.close();
    }
    out.close();

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-02-20
    • 1970-01-01
    • 2012-12-30
    • 1970-01-01
    • 2017-05-05
    • 1970-01-01
    • 2011-01-23
    相关资源
    最近更新 更多