Java &引用;包装应包含一个内容类型部分[M1.13]”;
我正在尝试写入Excel文件,但不断出现错误: 线程“main”org.apache.poi.poimmlexception:org.apache.poi.openxml4j.exceptions.InvalidFormatException:包应包含内容类型部分[M1.13] 据我所知,我丢失了一个jar文件 有人能帮我确定是哪个文件吗 另外,我正在使用NetbeansJava &引用;包装应包含一个内容类型部分[M1.13]”;,java,excel,apache,swing,apache-poi,Java,Excel,Apache,Swing,Apache Poi,我正在尝试写入Excel文件,但不断出现错误: 线程“main”org.apache.poi.poimmlexception:org.apache.poi.openxml4j.exceptions.InvalidFormatException:包应包含内容类型部分[M1.13] 据我所知,我丢失了一个jar文件 有人能帮我确定是哪个文件吗 另外,我正在使用Netbeans 检查EXCEL格式。。。。首先,我用poi创建了一个示例excel,并用我的第一次尝试更改了列。它给出了相同的错误,但在几
检查EXCEL格式。。。。首先,我用poi创建了一个示例excel,并用我的第一次尝试更改了列。它给出了相同的错误,但在几次尝试后,它成功读取。我想知道为什么它在第一次运行时不起作用:(
但是,如果您有正确的库,请检查正确的excel格式当您通过LibreOffice创建XLS/XLSX文件时,可能会发生这种情况。显然,在转换过程中丢失了某些内容,并且该文件与Microsoft Office中制作的电子表格不同。我也有相同的错误,我的解决方案是复制我所做的所有工作在LibreOffice Calc中,将其转换为MS Excel电子表格,然后保存新文件。使用文件扩展名处理
工作表
键入
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文件:使用xssf工作簿和XSSFSheet
XSSFWorkbook workbook = new XSSFWorkbook(new FileInputStream(new File(path)));
XSSFSheet sheet = workbook.getSheetAt(0);
HSSFWorkbook workbook = new HSSFWorkbook(new FileInputStream(new File(path)));
HSSFSheet sheet = workbook.getSheetAt(0);
对于XLS文件:使用HSSF工作手册和HSSF表
XSSFWorkbook workbook = new XSSFWorkbook(new FileInputStream(new File(path)));
XSSFSheet sheet = workbook.getSheetAt(0);
HSSFWorkbook workbook = new HSSFWorkbook(new FileInputStream(new File(path)));
HSSFSheet sheet = workbook.getSheetAt(0);
我遇到了同样的问题。您的excel格式不正确。您可以将所有工作复制到新工作表或使用清晰的格式。祝您好运。我也遇到了同样的问题。当您打开excel文件时,它将生成一些文件,如~$\uuuuuuuuuuuuuuuuuuuuuuuxx
只需找到并删除所有对我有用的文件。您的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提供(如果没有升级到更新版本的话)。它可以识别文件格式并创建工作簿
接口的具体实现(XSSF工作簿
或HSSFWorkbook
).source参数可以是java.io.InputStream
或java.io.File
由于网络问题或格式损坏导致应用程序尝试访问的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
但我发现line3无法工作,因为我还打开了一个输出流
通过line2在我的xlsx文件上执行line3失败。我删除了line2以使其正常工作。我的excel工作表被加密。删除了密码,它正常工作。我遇到了类似的问题,最后发现该文件的敏感度-->为机密,将其更改为公共。解决了我的问题。
最好的是该错误与缺少jar文件无关。它与ShowDetails.xlsx文件中缺少内容类型部分有关。因此我怀疑ShowDetails.xlsx不是由Excel生成的,而是由某个第三方软件生成的,该软件出错。用Excel打开ShowDetails.xlsx,用Excel再次保存,然后用POI重试。@AxelRichter你是对的,我重新保存了它,它工作了,但是我现在又遇到了一个错误,哈哈。线程“AWT-EventQueue-0”java.lang.NoSuchMethodError:org.apache.poi.util.POILogger.log(I[Ljava/lang/Object;)v类路径中混合了不同的POI版本。请参阅:。但我没有使用Netbeans的经验。因此我不知道如何清理那里的类路径。也许其他人知道。@AxelRichter感谢您的帮助!谢谢!这也可能是因为选择了以
~$
开头的隐藏文件,而不是正常的文件,如果它仍然打开的话r在应用程序中编辑(我的情况)。这些是文件的临时副本,以防止文件损坏,以便您可以恢复它们…但是,这确实解决了我的问题!!!!简直难以置信!!