Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/385.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java中使用POI框架读取xlsm文件时出错_Java_Excel_Xlsm - Fatal编程技术网

在Java中使用POI框架读取xlsm文件时出错

在Java中使用POI框架读取xlsm文件时出错,java,excel,xlsm,Java,Excel,Xlsm,我无法使用POI框架(HSSF)读取xlsm文件。读取xlsm文件时出现以下错误 提供的数据似乎位于Office 2007+XML中。您正在调用POI中处理OLE2 Office文档的部分。您需要调用POI的不同部分来处理此数据(例如XSSF而不是HSSF) 我还尝试通过XSSF读取文件。即使这样也不能解决问题。谁能告诉我如何使用poi框架读取java代码中的xlsm文件,并为该文件编写新的工作表。您似乎正在使用apache poi 我使用以下代码读取我的xlsm文件 FileInputStre

我无法使用POI框架(HSSF)读取xlsm文件。读取xlsm文件时出现以下错误

提供的数据似乎位于Office 2007+XML中。您正在调用POI中处理OLE2 Office文档的部分。您需要调用POI的不同部分来处理此数据(例如XSSF而不是HSSF)


我还尝试通过XSSF读取文件。即使这样也不能解决问题。谁能告诉我如何使用poi框架读取java代码中的xlsm文件,并为该文件编写新的工作表。

您似乎正在使用apache poi

我使用以下代码读取我的xlsm文件

FileInputStream fileIn=new FileInputStream("d:\\excelfiles\\WeeklyStatusReport.xlsm");

Workbook wb=WorkbookFactory.create(fileIn);      //this reads the file

final Sheet sheet=wb.getSheet("Sheet_name");  //this gets the existing sheet in xlsmfile
//use wb.createSheet("sheet_name"); to create a new sheet and write into it
然后可以使用行和单元格类来读取内容

最后写下这个

FileOutputStream fileOut=new FileOutputStream("d:\\excelfiles\\WeeklyStatusReport.xlsm");
wb.write(fileOut);

首先下载这些JAR并将其添加到构建路径中:

  • xmlbeans-2.3.0.jar
  • poi-ooxml-schemas-3.7.jar
  • poi-ooxml-3.9.jar
  • poi-3.9.jar
  • dom4j-1.6.1.jar
现在您可以尝试此代码。它将读取XLSX和XLSM文件:

导入java.io.File;
导入java.util.Iterator;
导入org.apache.poi.ss.usermodel.Cell;
导入org.apache.poi.ss.usermodel.Row;
导入org.apache.poi.ss.usermodel.WorkbookFactory;
公共类ReadMacroExcel{
公共静态void main(字符串[]args){
试一试{
//从xlsx/xls文件创建一个文件
文件f=新文件(“f:\\project realated File\\micro.xlsm”);
//创建包含对.xlsx文件引用的工作簿实例
org.apache.poi.ss.usermodel.Workbook工作簿=WorkbookFactory.create(f);
System.out.println(工作簿);
//打印工作簿中可用的工作表的编号
int numberOfSheets=workbook.getNumberOfSheets();
系统输出打印LN(编号页);
org.apache.poi.ss.usermodel.Sheet Sheet=null;
//获取xlsx文件中的工作表
对于(int i=0;i
这对.xlsm文件不起作用,Outofmemory异常发生时效果很好。你一定有不同的问题。