私はExcelファイルに書き込もうとしていますが、エラーが発生し続けます:
スレッド「メイン」の例外org.Apache.poi.POIXMLException:org.Apache.poi.openxml4j.exceptions.InvalidFormatException:パッケージにはコンテンツタイプパーツが含まれている必要があります
私が理解していることから、jarファイルが欠落しています。
誰がどのファイルであるかを特定するのを手伝ってくれますか?
追伸Netbeansを使用しています。
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);
}
}
ファイル拡張子を使用して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);
これは、LibreOfficeを使用してXLS/XLSXファイルを作成するときに発生する可能性があります。どうやら変換で何かが失われ、ファイルはMicrosoft Officeで作成されたスプレッドシートと同じではないようです。同じエラーが発生しましたが、解決策は、LibreOffice Calcで行ったすべての作業をMS Excelスプレッドシートにコピーしてから、新しいファイルを保存することでした。
持っているのは、作成しようとしている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");
}
別の可能な解決策は
Workbook workbook = WorkbookFactory.create(source)
WorkbookFactory
は、使用しているApache POIによって提供される必要があります(新しいバージョンにアップグレードしない場合)。ファイル形式を認識し、Workbook
インターフェイス(XSSFWorkbook
またはHSSFWorkbook
)の具体的な実装を作成します。 source
パラメーターには、Java.io.InputStream
またはJava.io.File
を指定できます。
Excelのフォーマットを確認してください...最初にpoiでサンプルExcelを作成し、同じエラーを与える最初の試みで列を変更しましたが、数回試した後、正常に読み取りました。なぜ最初に実行されなかったのでしょうか?適切なライブラリがあり、正しいExcel形式を確認してください
私は同じ問題を抱えています。 Excelファイルを開くと、〜$ ______。xlsxのようなファイルが生成されます。すべてのファイルを見つけて削除してください。
ネットワークの問題またはフォーマットの破損が原因で、アプリケーションがアクセスしようとしているExcelファイルが応答しないため、このエラーが発生します。ネットワークの問題が原因である場合は、後でアプリケーションを実行してみてください(または)ファイルが破損している場合は、新しいファイルを入れてアプリケーションをテストしてください。幸運を。
同じ問題が発生しました。 Excelの形式が正しくありません。すべての作業を新しいシートにコピーするか、フォーマットをクリアできます。幸運を。
私の場合、これは私が持っていた方法であり、line3はこの例外を投げていました:
File xlsxFile = new File( "C:\\myWorkbook.xlsx" );
FileInputStream finXLSX = new FileInputStream( xlsxFile ); //line1
FileOutputStream foutXLSX = new FileOutputStream( xlsxFile ); //line2
XSSFWorkbook workSheet = new XSSFWorkbook( finXLSX ); //line3
しかし、line2を介してxlsxファイルの出力ストリームも開いたため、line3が機能していなかったことがわかりました。 line2を削除して機能させました。