zoukankan      html  css  js  c++  java
  • Can't obtain the input stream from /docProps/app.xml

    今天在做poi修改样式时,报了以下错误:

    Exception in thread "main" org.apache.poi.POIXMLException: java.io.IOException: Can't obtain the input stream from /docProps/app.xml
        at org.apache.poi.POIXMLDocument.getProperties(POIXMLDocument.java:148)
        at org.apache.poi.POIXMLDocument.write(POIXMLDocument.java:199)
        at com.supcon.ChangeXlsxCell.main(ChangeXlsxCell.java:29)
    Caused by: java.io.IOException: Can't obtain the input stream from /docProps/app.xml
        at org.apache.poi.openxml4j.opc.PackagePart.getInputStream(PackagePart.java:502)
        at org.apache.poi.POIXMLProperties.<init>(POIXMLProperties.java:75)
        at org.apache.poi.POIXMLDocument.getProperties(POIXMLDocument.java:146)
        ... 2 more

    网上查了相关文档,没找到相关资料,也没有给出解决资料,绝望之余,网上查找了poi修改数据的代码,运行了下竟然可以通过,以下为代码:

    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.IOException;
    
    import org.apache.poi.hssf.usermodel.HSSFCell;
    import org.apache.poi.hssf.usermodel.HSSFRow;
    import org.apache.poi.hssf.usermodel.HSSFSheet;
    import org.apache.poi.hssf.usermodel.HSSFWorkbook;
    
    public class ChangeCell {
    
    	@SuppressWarnings("deprecation")
    	public static void main(String[] args) {
    		String fileToBeRead = "C:\exp.xls"; // excel位置
    		int coloum = 1; // 比如你要获取第1列
    		try {
    			HSSFWorkbook workbook = new HSSFWorkbook(new FileInputStream(
    					fileToBeRead));
    			HSSFSheet sheet = workbook.getSheet("Sheet1");
    
    			for (int i = 0; i <= sheet.getLastRowNum(); i++) {
    				HSSFRow row = sheet.getRow((short) i);
    				if (null == row) {
    					continue;
    				} else {
    					HSSFCell cell = row.getCell((short) coloum);
    					if (null == cell) {
    						continue;
    					} else {
    						System.out.println(cell.getNumericCellValue());
    						int temp = (int) cell.getNumericCellValue();
    						cell.setCellValue(temp + 1);
    					}
    				}
    			}
    			FileOutputStream out = null;
    			try {
    				out = new FileOutputStream(fileToBeRead);
    				workbook.write(out);
    			} catch (IOException e) {
    				e.printStackTrace();
    			} finally {
    				try {
    					out.close();
    				} catch (IOException e) {
    					e.printStackTrace();
    				}
    			}
    		} catch (FileNotFoundException e) {
    			e.printStackTrace();
    		} catch (IOException e) {
    			e.printStackTrace();
    		}
    
    	}
    
    }
    

     我的错误代码如下:

    String fileToBeRead = "D:\template.xlsx"; // excel位置
    		File dataFile=new File(fileToBeRead);
    		try {
    			XSSFWorkbook workbook = new XSSFWorkbook(dataFile);
    			XSSFSheet sheet = workbook.getSheet("Sheet1");
    			FileOutputStream out = null;
    			try {
    				out = new FileOutputStream(fileToBeRead);
    				workbook.write(out);
    			} catch (IOException e) {
    				e.printStackTrace();
    			} finally {
    				try {
    					out.close();
    				} catch (IOException e) {
    					e.printStackTrace();
    				}
    			}
    		} catch (FileNotFoundException e) {
    			e.printStackTrace();
    		} catch (IOException e) {
    			e.printStackTrace();
    		}
    

    简单比较以下差异处在XSSFWorkbook初始化的时候:

    XSSFWorkbook workbook = new XSSFWorkbook(new FileInputStream(fileToBeRead));(正确的)
    
    XSSFWorkbook workbook = new XSSFWorkbook(dataFiel);(错误的)
    

    错误的描述是无法获得输入流: can  not  obtain  input  stream  for  xml....

     是不是一个outputStream一定要对应一个InputStream呢?????

    以上错误代码修改如下,即可通过:

    String fileToBeRead = "D:\template.xlsx"; // excel位置
    		File dataFile=new File(fileToBeRead);
    		try {
    			XSSFWorkbook workbook = new XSSFWorkbook(new FileInputStream(fileToBeRead));
    			XSSFSheet sheet = workbook.getSheet("Sheet1");
    			FileOutputStream out = null;
    			try {
    				out = new FileOutputStream(fileToBeRead);
    				workbook.write(out);
    			} catch (IOException e) {
    				e.printStackTrace();
    			} finally {
    				try {
    					out.close();
    				} catch (IOException e) {
    					e.printStackTrace();
    				}
    			}
    		} catch (FileNotFoundException e) {
    			e.printStackTrace();
    		} catch (IOException e) {
    			e.printStackTrace();
    		}
    
  • 相关阅读:
    .net core + mvc 手撸一个代码生成器
    如何使用VS Code编写Spring Boot (第二弹)
    第五章 .net core该怎么玩
    第四章 .net core做一个简单的登录
    第三章 搭建一个通用的权限管理系统
    第二章 在Linux上部署.net core
    将博客搬至CSDN
    Entity Framework6 with Oracle(可实现code first)
    利用windbg查找dictionary导致IIS占CPU100%案例分析(一)
    VS快捷键以及Reshaper快捷键
  • 原文地址:https://www.cnblogs.com/toSeeMyDream/p/4702770.html
Copyright © 2011-2022 走看看