2017-04-26 113 views
1

我试图创建一个新的只有“你好”的excel文件。 这里是我的代码:如何解决java Apache POI中的NotOfficeXmlFileException?

import java.io.File; 
 
import java.io.FileInputStream; 
 
import java.io.FileNotFoundException; 
 
import java.io.FileOutputStream; 
 
import java.io.IOException; 
 
import java.util.logging.Level; 
 
import java.util.logging.Logger; 
 
import javax.swing.JFileChooser; 
 
import org.apache.poi.hssf.usermodel.HSSFWorkbook; 
 
import org.apache.poi.ss.usermodel.WorkbookFactory; 
 
import org.apache.poi.xssf.usermodel.XSSFSheet; 
 
import org.apache.poi.xssf.usermodel.XSSFWorkbook; 
 

 
/** 
 
* 
 
* @author kamal 
 
*/ 
 
public class JavaApplication4 { 
 
    private static String dir = ""; 
 
    /** 
 
    * @param args the command line arguments 
 
    */ 
 
    public static void main(String[] args) { 
 
     try { 
 
      // TODO code application logic here 
 
      JFileChooser jc = new JFileChooser(); 
 
         jc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); 
 
      int output = jc.showOpenDialog(null); 
 
      if(output == JFileChooser.APPROVE_OPTION){ 
 
       File f = jc.getSelectedFile(); 
 
       String directory = f.getAbsolutePath(); 
 
       setDir(directory); 
 
      } 
 
      
 
      
 
      FileOutputStream out = new FileOutputStream(new File(getDir()+"\\Book2.xlsx")); 
 
      FileInputStream in = new FileInputStream(new File(getDir()+"\\Book2.xlsx")); 
 
      
 
      org.apache.poi.ss.usermodel.Workbook workbook = new XSSFWorkbook(in); 
 
      org.apache.poi.ss.usermodel.Sheet sheet = workbook.getSheetAt(0); 
 
      
 
      sheet.createRow(0).createCell(0).setCellValue("hello"); 
 
      
 
      workbook.write(out); 
 
      workbook.close(); 
 
      
 
      
 
     } catch (FileNotFoundException ex) { 
 
      ex.printStackTrace(); 
 
     } catch (IOException ex) { 
 
      Logger.getLogger(JavaApplication4.class.getName()).log(Level.SEVERE, null, ex); 
 
     } 
 
     
 
     
 
    } 
 

 
    /** 
 
    * @return the dir 
 
    */ 
 
    public static String getDir() { 
 
     return dir; 
 
    } 
 

 
    /** 
 
    * @param dir the dir to set 
 
    */ 
 
    public static void setDir(String directory) { 
 
     dir = directory; 
 
    } 
 
    
 
}

..和当我运行它,我得到以下错误:

Exception in thread "main" org.apache.poi.openxml4j.exceptions.NotOfficeXmlFileException: No valid entries or contents found, this is not a valid OOXML (Office Open XML) file 
 
\t at org.apache.poi.openxml4j.opc.ZipPackage.getPartsImpl(ZipPackage.java:286) 
 
\t at org.apache.poi.openxml4j.opc.OPCPackage.getParts(OPCPackage.java:758) 
 
\t at org.apache.poi.openxml4j.opc.OPCPackage.open(OPCPackage.java:327) 
 
\t at org.apache.poi.util.PackageHelper.open(PackageHelper.java:37) 
 
\t at org.apache.poi.xssf.usermodel.XSSFWorkbook.<init>(XSSFWorkbook.java:291) 
 
\t at javaapplication4.JavaApplication4.main(JavaApplication4.java:46) 
 
C:\Users\kamal\AppData\Local\NetBeans\Cache\8.2\executor-snippets\run.xml:53: Java returned: 1 
 
BUILD FAILED (total time: 7 seconds)

我抬头一看这个代码YouTube和它是一样的,但我不知道为什么我得到的错误?你能帮助我吗?

回答

-1

我正面临同样的问题。我确实通过在文件夹内单击鼠标右键来创建Excel文件,然后- >新建 - > Microsoft Excel工作表。 作为一个试用版,我删除了这个文件,然后通过开始菜单 - > Microsoft Office-> Excel 创建了新的Excel它对我很有效,希望它也能为你工作。

0

我认为最可能的解释是文件损坏,或者它是XSSFWorkbook无法理解的旧格式电子表格文件。

没有看文件本身,任何人都不可能给你一个明确的诊断。