2

POI フレームワーク (HSSF) を使用して xlsm ファイルを読み取ることができません。xlsm ファイルの読み取り中に次のエラーが発生します。

提供されたデータは、Office 2007+ XML にあるようです。OLE2 Office ドキュメントを扱う POI の部分を呼び出しています。このデータを処理するには、POI の別の部分を呼び出す必要があります (例: HSSF ではなく XSSF)。

XSSFでもファイルを読み込んでみました。それでも問題は解決しません。poiフレームワークを使用してJavaコードでxlsmファイルを読み取り、そのファイルに新しいシートを書き込む方法を教えてください。

4

2 に答える 2

4

最初にこれらの 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();
 }


    }
}
于 2014-05-10T03:44:37.097 に答える
2

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

次に、Row クラスと Cell クラスを使用してコンテンツを読み取ることができます。

最後にこれを書く

FileOutputStream fileOut=new FileOutputStream("d:\\excelfiles\\WeeklyStatusReport.xlsm");
wb.write(fileOut);
于 2012-10-12T08:48:33.270 に答える