【问题标题】:How to close XSSF file with out.close()?如何使用 out.close() 关闭 XSSF 文件?
【发布时间】:2019-08-10 22:47:20
【问题描述】:

我正在尝试保存并关闭已成功打开但由于某种原因无法保存和关闭的现有工作簿:

//declarations etc here...

try {
            InputStream ExcelFileToRead = new FileInputStream(file);
            XSSFWorkbook  wb = new XSSFWorkbook(ExcelFileToRead);


            //XSSFWorkbook wb = new XSSFWorkbook(new FileInputStream(new File(file)));
            XSSFSheet sheet = wb.getSheetAt(0);
            XSSFRow row;
            XSSFCell cell;
            int rows; 
            rows = sheet.getPhysicalNumberOfRows();
            int cols = 1; 
            XSSFRichTextString path;
            String stpath;


            try {
            if(!Desktop.isDesktopSupported()){
                    System.out.println("Error: Desktop is not supported");
            }
            Desktop desktop = Desktop.getDesktop();
            if(filee.exists()) desktop.open(filee);
            FileOutputStream out = new FileOutputStream(file);  
            wb.write(out);
            out.close();

//code continues...

wb.write(out) 成功打开文件。我已经阅读了大量的posts/articles/docs 都使用close() 方法来关闭XSSF Excel 文件,但它在这里不起作用。

我该如何解决这个问题?

【问题讨论】:

  • 你怎么知道它“不起作用”,“不起作用”是什么意思? //declarations etc here... 为什么你认为这些对于理解你的问题没有必要?例如,filefilee 是什么?请访问help center,转至tour,尤其是阅读How to Ask,了解如何有效使用本网站。
  • 您好,很抱歉,无论如何下面的人都明白了问题所在,所以代码足够了。无论如何,只是为了进一步说明,filee 和 file 是同一个 Excel 文件的相同路径。只是 filee 是一个文件对象,而 file 是一个字符串。我尝试同时使用这两种方法来解决问题,但问题是我只能使用与现有文件不同的路径进行保存和关闭,如下面的 Jim Garrison 所述。

标签: java excel apache apache-commons xssf


【解决方案1】:

您不能以这种方式覆盖输入文档,正如 POIXMLDocument#write(OutputStream o) 的 Javadoc 中明确记录的那样,XSSFWorkBook 继承了该文档:

注意 - 如果 Document 是从 File 而不是 InputStream 打开的,您必须写出到不同的文件,不能通过 OutputStream 覆盖

【讨论】:

  • 你说得对,我刚刚发现我可以用不同的文件名保存它。但这不是我想要的。我基本上只需要打开、保存、关闭和读取 xlsx 文件。我想要打开保存和关闭(而不仅仅是读取它)的唯一原因是因为我需要读取的数据是公式,所以我得到了最后一个保存的值。例如。如果我有一个像今天()这样的公式,它给出今天的日期并且我今天保存 Excel,明天 Java 仍将获得昨天的日期,而不是新的今天日期。有什么建议吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-10
  • 1970-01-01
  • 2011-05-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多