当前位置: 首页 > 知识库问答 >
问题:

保存xlsx文件java poi时获取xmlvaluedisconnectedexception错误

凌恩
2023-03-14
save.addActionListener(new ActionListener() {

        public void actionPerformed(ActionEvent e) {
            String excelFilePath = "sample.xlsx";
            FileInputStream inputStream = null;
            try {
                inputStream = new FileInputStream(new File(excelFilePath));
            } catch (FileNotFoundException e1) {
                e1.printStackTrace();
            }

            Workbook workbook = null;
            try {
                workbook = new XSSFWorkbook(inputStream);
            } catch (IOException e1) {
                e1.printStackTrace();
            }

            //Sheet sheet = workbook.getSheetAt(0);
            for (int i = 0; i < workbook.getNumberOfSheets(); i++) {
                Sheet sheet = workbook.getSheetAt(i);

                Iterator<Row> iterator = sheet.iterator();
                Row row = sheet.getRow(0);
                while (iterator.hasNext()) {
                    Row nextRow = iterator.next();

                    Iterator<Cell> cellIterator = nextRow.cellIterator();
                    Iterator<Cell> scellIterator = nextRow.cellIterator();

                    cellIterator.next();
                    scellIterator.next();
                    scellIterator.next();
                    Cell topicsCell = cellIterator.next();
                    Cell topicSentimentCell = scellIterator.next();

                    String cellContents = topicsCell.getStringCellValue();
                    String scellContents = topicSentimentCell.getStringCellValue();

                    String[] topics = cellContents.split(";");
                    String[] topicSentiment = scellContents.split(";");


                    for (int in = 0; in < topics.length; in++) {
                        Cell cell = row.getCell(in);
                        cell.setCellValue(textArea.getText());
                    }


                }

                try {
                    workbook.write(new FileOutputStream("sample.xlsx"));
                } catch (IOException e1) {
                    e1.printStackTrace();
                }

            }
        }
    });

错误

共有1个答案

郎聪
2023-03-14

我知道这是个老问题,但它可以帮助某人。

当尝试两次写入同一文件时,会发生XmlValueDisconnectedException。当我尝试将Word转换成PDF格式时,就发生了这种情况。以下是帮了我的忙:

>

  • 首先,我必须更新所有Opensagres和Apache Poi依赖项的版本。

        FileInputStream is = FileUtils.openInputStream( templateFiles.get( 
        ConstantManager.FILE_NAME ) );
        XWPFDocument document = new XWPFDocument( is );
        tmpDoc = File.createTempFile( "tmp", "docx" );
        //replace body elements here...
    
        //write this into docx
        tmpDocx = File.createTempFile( "tmpDocx", "docx" );
        FileOutputStream out = new FileOutputStream( tmpDocx );
        document.write( out );
        out.close();
        PdfOptions options = PdfOptions.create();
        //KEY PART!!!           
        //it is not allowed to write into a document two times - 
        //org.apache.xmlbeans.impl.values.XmlValueDisconnectedException
        //that's why I have to reload a workbook from the file
        document = new XWPFDocument( new FileInputStream( tmpDocx ) );
    
        //and then convert to pdf
        FileOutputStream fos = new FileOutputStream( tmpDoc );
        PdfConverter.getInstance().convert( document, fos, options );
        fos.close();
        is.close();
        document.close();
    

  •  类似资料:
    • 在运行将StringBuilder的内容保存到.xlsx文件的代码时,它给出了以下错误: 线程“main”java.lang.nosuchmethoderror:org.apache.poi.util.poilogger.log(iljava/lang/object;ljava/lang/throwable;)V在org.apache.poi.openxml4j.opc.zippackage.bu

    • 当我从图库中选择一个图像时,我可以获得该图像的Uri,如下所示: 上面检索到的Uri的格式是content://media/external/images/media/7266 但是,当我试图获取刚保存为文件的图像的Uri时,无法以这种格式检索Uri: 从上面的代码获得的Uri是/storage/emulated/0/dcim/camera/02-04-16 12-49-16.png 我相信,这不

    • 例子 $ gcc -save-temps a/foo.c $ ls foo.* foo.c foo.i foo.o foo.s $ gcc -save-temps=obj a/foo.c -o a/foo $ ls a foo foo.c foo.i foo.o foo.s 技巧 如上所示,使用选项-save-temps可以保存gcc运行过程中生成的临时文件。这些中间文件的名字是

    • 我在eclipse(juno)中创建了一个简单的hello.jsp程序,当我试图通过run on server来运行这个jsp文件时,得到了以下错误 出现问题, 我已经删除了eclipse&tomcat服务器,然后重新安装。但是仍然得到相同的错误。我尝试选择服务器位置作为使用自定义位置,并给出不同的工作区路径。但什么都不管用。 我使用的是eclipse Juno、apache Tomcat-V6.

    • 问题内容: 我正在尝试通过Apache POI读取大型Excel文件xlsx,例如40-50 MB。我的内存不足异常。当前的堆内存为3GB。 我可以阅读较小的excel文件,没有任何问题。我需要一种方法来读取大型excel文件,然后通过Spring excel视图将它们作为响应返回。 我首先开始使用, 但是每个Apache POI API的使用成本很高,因此我改用OPC封装方式,但效果仍然相同。我

    • 在CKAN 2.4.1中,install datapusher和.csv文件上传到datastore是正确的,但是当test.xls或.xlsx文件上传到datastore失败时,datapusher搜索文件字段头时,在datapusher.error.log中: 配置文件中:ckan.datapusher.formats=csv xls xlsx tsv application/csv appl