2015-10-01 2 views
4

Я пытаюсь писать в файл Excel, однако я получаю сообщение об ошибке:«Пакет должен содержать тип контента часть [M1.13]»

Exception in thread "main" org.apache.poi.POIXMLException: org.apache.poi.openxml4j.exceptions.InvalidFormatException: Package should contain a content type part [M1.13]

Из того, что я понимаю, я пропускаю файл фляги ,

Может ли кто-нибудь помочь мне определить, какой файл он есть?

P.S. Я использую Netbeans.

my current files

import java.io.FileInputStream; 
import java.io.FileNotFoundException; 
import java.io.FileOutputStream; 
import java.io.IOException; 
import javax.swing.JOptionPane; 
import org.apache.poi.openxml4j.exceptions.InvalidFormatException; 
import org.apache.poi.xssf.usermodel.XSSFCell; 
import org.apache.poi.xssf.usermodel.XSSFRow; 
import org.apache.poi.xssf.usermodel.XSSFSheet; 
import org.apache.poi.xssf.usermodel.XSSFWorkbook; 

/** 
* 
* @author nicholaskissaun 
*/ 

public class Tester { 

    public static void main (String args \[\])throws FileNotFoundException, IOException, InvalidFormatException{  
     int RowCount = 7, iChoice; 
     String sChoice; 
     XSSFSheet s; 
     XSSFRow row1; 
     XSSFWorkbook wb; 
     XSSFCell r1c1, r1c2, r1c8, r1Episodes; 

     FileInputStream fis = new FileInputStream("/Users/nicholaskissaun/Google Drive/Grade 11_12/Computer Science/Java/Term1/src/IA/Profiles/Becky/ShowDetails.xlsx");   
     wb = new XSSFWorkbook(fis); 
     s = wb.getSheetAt(0); 

    }  

} 
+1

Ошибка не в отсутствии файла jar. Речь идет о недостающей части содержимого контента в файле ShowDetails.xlsx. Поэтому я подозреваю, что ShowDetails.xlsx не генерируется Excel, а некоторым сторонним программным обеспечением, которое делает что-то неправильно. Откройте ShowDetails.xlsx с Excel, сохраните его снова с помощью Excel и повторите попытку с помощью POI. –

+0

@AxelRichter Вы были правы, я сохранил его, и это сработало, однако я получил еще одну ошибку, теперь ха-ха. Исключение в потоке «AWT-EventQueue-0» java.lang.NoSuchMethodError: org.apache.poi.util.POILogger.log (I [Ljava/lang/Object;) V – Tephrite

+1

В классе ClassPath существует смесь различных версий POI , См .: http://poi.apache.org/faq.html#faq-N10006. Но у меня нет опыта работы с Netbeans. Поэтому я не знаю, как очистить ClassPath. Возможно, другие знают. –

ответ

0

ПРОВЕРКА EXCEL FORMAT .... Во-первых, я создал образец первенствует с пои, и я изменил столбцы с моей первой попытке он дает ту же ошибку, но после того, как несколько попробовать его успешно считаны .I чудо почему это не сработало вначале :( , но если у вас есть правая библиотека, пожалуйста, проверьте правильный формат excel

3

Это может произойти, когда вы создаете файл XLS/XLSX через LibreOffice. По-видимому, что-то теряется при преобразовании и файл не совпадает с таблицей, созданной в Microsoft Office. у него такая же ошибка, и решение для меня копировало всю работу, которую я сделал в LibreOffice Calc, в электронную таблицу MS Excel, а затем сохранил новый файл.

+1

Plz проверить правильный ответ от @Hitesh Sahu. – karimvai

4

Используйте расширение файла для обработки WorkSheet Тип

String inputFilename = new File(path).getName(); 

        switch (inputFilename.substring(inputFilename.lastIndexOf(".") + 1, 
          inputFilename.length())) { 
         case "xls": 
          return readXLS(path); 

         case "xlsx": 
          return readXLSX(path); 
         default: 
          Log.e(TAG, "No XLS file chosen"); 
          return "Please select valid \"Excel\" File\""; 
        } 

Для XLSX файла: используйте XSSFWorkbook & XSSFSheet

XSSFWorkbook workbook = new XSSFWorkbook(new FileInputStream(new File(path))); 

    XSSFSheet sheet = workbook.getSheetAt(0); 

Для XLS файла: используйте HSSFWorkbook & HSSFSheet

HSSFWorkbook workbook = new HSSFWorkbook(new FileInputStream(new File(path))); 

    HSSFSheet sheet = workbook.getSheetAt(0); 
0

У меня такая же проблема. Ваше преимущество не в правильном формате. Вы можете скопировать всю работу на новый лист или очистить формат. Удачи.

0

У меня такая же проблема. Когда вы откроете файл excel, он сгенерирует некоторый файл, например ~ $ ______. Xlsx Просто найдите и удалите все из них для меня.

1

У вас есть несоответствие версии файла Excel и рабочей книги, которую вы пытаетесь создать. Лучший способ избежать: выбрать реализацию интерфейса.

Я построил на вершине решения Hitesh Sahu в:

import org.apache.poi.ss.usermodel.Workbook; 
import org.apache.poi.ss.usermodel.WorkbookFactory; 

Workbook workbook = null; 

// parse files from request 
MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request; 
MultipartFile multipartDataPointsFile = multipartRequest.getFile("yourFileHere"); 

try { 
    if(multipartDataPointsFile!=null) { 
     String originalFileName= multipartDataPointsFile.getOriginalFilename(); 
     if(originalFileName!=null && originalFileName.length()>0) { 
      switch (originalFileName.substring(originalFileName.lastIndexOf(".") + 1, 
        originalFileName.length())) { 
       case "xls": 
        try { 
         workbook = WorkbookFactory.create(multipartDataPointsFile.getInputStream()); 
        }catch(org.apache.poi.openxml4j.exceptions.InvalidFormatException ie){ 
         logger.error("Malformed Excel"); 
         throw new IOException(); 
        } 
        if(workbook!=null) { 
         // Do something in here 
        }else{ 
         logger.error("Could not pass along the workbook"); 
         throw new IOException(); 
        } 
       case "xlsx": 
        try { 
         workbook = WorkbookFactory.create(multipartDataPointsFile.getInputStream()); 
        }catch(org.apache.poi.openxml4j.exceptions.InvalidFormatException ie){ 
         logger.error("Malformed Excel"); 
         throw new IOException(); 
        } 
        if(workbook!=null) { 
          // Do something in here 
        }else{ 
         logger.error("Could not pass along the workbook"); 
         throw new IOException(); 
        } 
       default: 
        logger.error("File type is not recognized Excell type"); 
        throw new IOException(); 
      } 

     }else{ 
      logger.error("Can Not Read File Name"); 
      throw new IOException(); 
     } 
    }else{ 
     logger.error("Did not select a file"); 
     throw new IOException(); 
    } 
} catch (IOException e) { 
    throw new ApplicationErrorException("Can't parse Excel file"); 
} 
0

Другим возможным решением является

Workbook workbook = WorkbookFactory.create(source) 

WorkbookFactory должна быть предоставлена ​​Apache POI вы используете (если не обновить до более новой версии). Он распознает формат файла и создает конкретную реализацию интерфейса Workbook (XSSFWorkbook или HSSFWorkbook). Параметр source может быть java.io.InputStream или java.io.File.