• 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();
    		}
    
  • 相关阅读:
    WP8_给图片、按钮设置自定义图片
    WP8_读写XML
    JAVA编程思想读书笔记(五)--多线程
    《大话设计模式》--模板模式
    《大话设计模式》--原型模式
    《大话设计模式》--工厂方法模式
    《大话设计模式》--代理模式
    JAVA编程思想读书笔记(四)--对象的克隆
    《大话设计模式》--装饰者模式
    JAVA编程思想读书笔记(三)--RTTI
  • 原文地址:https://www.cnblogs.com/toSeeMyDream/p/4702770.html
Copyright © 2020-2023  润新知