提取.xls ole -file之后,使用Microsoft Excel为空,但可以使用Apache -Poi读取



i有一个.doc文件,带有嵌入式.xls和一个嵌入式.doc。我可以提取两个文件并保存它。当我想打开.doc时 - 记录一切都很好。当我想打开.xls - 文档是空的,编辑器什么也没打开,我也看不到任何空的单元格。

因此,我尝试使用Apache-poi再次阅读提取的.xls文档,以及当我查看单元格的表格或内容时 - 一切都在那里。

您有什么想法吗?

我的设置是:Apache-Poi版本3.15(我还尝试了一些次要版本)Word和Excel文件是在Office 2007中创建的。

代码 - 部分:

POIFSFileSystem fs = new POIFSFileSystem(file);
    POIOLE2TextExtractor poiole2TextExtractor = ExtractorFactory.createExtractor(fs);
    POITextExtractor[] embeddedExtractors = ExtractorFactory.getEmbededDocsTextExtractors(poiole2TextExtractor);
    for (POITextExtractor textExtractor : embeddedExtractors) {
        // If the embedded object was an Excel spreadsheet.
        if (textExtractor instanceof ExcelExtractor) {
            ExcelExtractor excelExtractor = (ExcelExtractor) textExtractor;
            DirectoryNode directoryNode = (DirectoryNode) excelExtractor.getRoot();

            HSSFWorkbook hssfWorkbook = new HSSFWorkbook(directoryNode, true);
            File tmp = new File(targetfolder, "test.xls");
            FileOutputStream fileOutputStream = new FileOutputStream(tmp);
            hssfWorkbook.write(fileOutputStream);
            fileOutputStream.flush();
            fileOutputStream.close();
            hssfWorkbook.close();
        }

谢谢:)

所以我以某种方式发现了问题:

对于HSSFWorkBook,我需要设置以下属性:

hssfWorkbook.setHidden(false);

对于所有格式XLSX(2007),如果您调用该方法,您将获得notimplemplededexception-因此您必须手动修复该方法...我找到了解决方案:

String workbookContent = new String(ZipFileUtils.getInnerFile(tmp, "xl/workbook.xml"), "UTF-8");
                workbookContent = workbookContent.replaceFirst("visibility="hidden"", "");
                ZipFileUtils.replaceZippedFile(tmp, "xl/workbook.xml",
                        workbookContent.getBytes( "UTF-8"), new FileOutputStream(tmp2));

其中tmp =我提取的XLSX文件,然后将其保存到妈妈TMP2

的新文件中

相关内容

最新更新