当前位置: 首页 > 知识库问答 >
问题:

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

羊渝
2023-03-14

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

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

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

共有1个答案

郭意
2023-03-14

首先下载这些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文件:

import java.io.File;
import java.util.Iterator;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.WorkbookFactory;

public class ReadMacroExcel {
public static void main(String[] args) {
 try {
     //Create a file  from the xlsx/xls file
          File f=new File("F:\\project realated file\\micro.xlsm");

          //Create Workbook instance holding reference to .xlsx file
          org.apache.poi.ss.usermodel.Workbook workbook = WorkbookFactory.create(f);
          System.out.println(workbook);

     //printing number of sheet avilable in workbook
     int numberOfSheets = workbook.getNumberOfSheets();
     System.out.println(numberOfSheets);
     org.apache.poi.ss.usermodel.Sheet sheet=null; 
   //Get the  sheet in the xlsx file
     for (int i = 0; i < numberOfSheets; i++) {


      sheet = workbook.getSheetAt(i);
     System.out.println(sheet.getSheetName());

   //Iterate through each rows one by one
     Iterator<Row> rowIterator = sheet.iterator();
     while (rowIterator.hasNext())
     {
         Row row = rowIterator.next();
         //For each row, iterate through all the columns
         Iterator<Cell> cellIterator = row.cellIterator();

         while (cellIterator.hasNext())
         {
             Cell cell = cellIterator.next();
             //Check the cell type and format accordingly
             switch (cell.getCellType())
             {
                 case Cell.CELL_TYPE_NUMERIC:
                     System.out.print(cell.getNumericCellValue() + "t");
                     break;
                 case Cell.CELL_TYPE_STRING:
                     System.out.print(cell.getStringCellValue() + "t");
                     break;
             }
         }
         System.out.println("");
     }
 }
 }
 catch (Exception e)
 {
     e.printStackTrace();
 }


    }
}
 类似资料:
  • 我试图使用java apache poi从只读xlsm读取数据,但当我使用XSSF工作簿时,它似乎无法访问该文件,而HSSF工作簿仅适用于xls文件。我的代码如下所示: 代码从未到达“工作簿中”打印行,我不知道为什么。请帮忙!

  • 我已经写了一个代码来访问。xlsm文件,但它无法执行此操作。我使用XSSFWorkBook和使用WorkBookFactory完成的通用工作簿尝试了相同的文件。 提供的电子表格似乎是加密的。xlsx文件。XSSF使用前必须对其进行解密,HSSF无法使用。 所以我离开了读取文件的一般方法,使用XSSF。 组织。阿帕奇。波伊。例外情况:org。阿帕奇。波伊。openxml4j。例外情况。Invalid

  • 我使用这段代码使用ApachePOI重写xlsm文件。我必须从resultset重写Sheet1上的数据,这段代码创建模板xlsm文件的副本,并执行所有处理。 但当我打开创建的xlsm文件时,会显示以下消息: 我们发现“文件名”中的某些内容有问题。xlsm’。你想让我们尽力恢复吗?如果您信任此工作簿的来源,请单击“是”。 这是我的代码,请建议我该怎么做。

  • 需要帮助修复此错误。我试图打印出字符串国家名称的数组长度。 我从一个简历文件阅读,我一直得到上面的错误。下面是我的代码: 下面是我的TestCSV类文件: 我的csv文件如下所示:这是一个摘要,因为我不想打印出全部252个国家。基本上,我把252个国家的数据存储在一个字符串数组中,年份存储在一个整数数组中,每个国家的蜂窝数据统计数据存储在一个二维双数组中。我是编程新手,我想知道我的方向是否正确,如

  • 问题内容: 在尝试使用apache poi读取Excel 2007文件.xlsx文件扩展时出现问题: 此行请给我一个例外 ,什么原因可能导致此错误? 问题答案: 您需要在类路径中包含一个名为“ your_location_of_poi \ poi-xx \ ooxml-lib \” 的jar文件 。 注意:是您正在使用的poi的版本,并且是上述文件夹下该jar文件的版本号

  • 我想在java中读取并追加一个. xlsm文件。我不知道如何做到这一点。我需要下载任何jar文件才能使用它吗?所有搜索结果都提供了一个使用apache poi的解决方案(我没有得到它是什么)。我不使用任何IDE。使用简单的文件阅读器和其他逻辑,我不能使用这种类型的文件吗? 请给我一个清晰的想法什么是. xlsm文件,以及如何使用java使用它。