Java 如何使用Apache POI读取所有单元格值?

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/6530191/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-16 06:41:46  来源:igfitidea点击:

how to read all cell value using Apache POI?

javaapache-poi

提问by Sameek Mishra

I want to read all cell value from excel sheet using Apache POI and store it into one dimensional string array .Is is possible to read data from excel row by row and extract value from each cell?

我想使用Apache POI从excel表中读取所有单元格值并将其存储到一维字符串数组中。是否可以逐行从excel中读取数据并从每个单元格中提取值?

Please help me to solve this problem.

请帮我解决这个问题。

Thanks

谢谢

采纳答案by Rupok

import java.io.FileInputStream;
import java.util.Iterator;
import java.util.Vector;

import org.apache.poi.hssf.usermodel.HSSFCell; import org.apache.poi.hssf.usermodel.HSSFRow; import org.apache.poi.hssf.usermodel.HSSFSheet; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.poifs.filesystem.POIFSFileSystem;

public class ReadExcelFile {

public static void main( String [] args ) { String fileName="C:\temp\testPOI.xls"; //Read an Excel File and Store in a Vector Vector dataHolder=readExcelFile(fileName); //Print the data read printCellDataToConsole(dataHolder); } public static Vector readExcelFile(String fileName) { /** --Define a Vector --Holds Vectors Of Cells */ Vector cellVectorHolder = new Vector(); try{ /** Creating Input Stream**/ //InputStream myInput= ReadExcelFile.class.getResourceAsStream( fileName ); FileInputStream myInput = new FileInputStream(fileName); /** Create a POIFSFileSystem object**/ POIFSFileSystem myFileSystem = new POIFSFileSystem(myInput); /** Create a workbook using the File System**/ HSSFWorkbook myWorkBook = new HSSFWorkbook(myFileSystem); /** Get the first sheet from workbook**/ HSSFSheet mySheet = myWorkBook.getSheetAt(0); /** We now need something to iterate through the cells.**/ Iterator rowIter = mySheet.rowIterator(); while(rowIter.hasNext()){ HSSFRow myRow = (HSSFRow) rowIter.next(); Iterator cellIter = myRow.cellIterator(); Vector cellStoreVector=new Vector(); while(cellIter.hasNext()){ HSSFCell myCell = (HSSFCell) cellIter.next(); cellStoreVector.addElement(myCell); } cellVectorHolder.addElement(cellStoreVector); } }catch (Exception e){e.printStackTrace(); } return cellVectorHolder; } private static void printCellDataToConsole(Vector dataHolder) { for (int i=0;i<dataHolder.size(); i++){ Vector cellStoreVector=(Vector)dataHolder.elementAt(i); for (int j=0; j < cellStoreVector.size();j++){ HSSFCell myCell = (HSSFCell)cellStoreVector.elementAt(j); String stringCellValue = myCell.toString(); System.out.print(stringCellValue+"\t"); } System.out.println(); } }

}

}

回答by Buhake Sindi

There's a document on Javaworld, It's POI-Fectshowing you how this is achieved.

有一个关于Javaworld的文档,它是 POI-Fect向您展示了这是如何实现的。

Example:

例子:

String fileName = "C:/MyExcelFile.xls"; // file we are interested in
POIFSFileSystem fileSystem = new POIFSFileSystem(new FileInputStream(fileName));
HSSFWorkbook workbook = new HSSFWorkbook(fileSystem);
HSSFSheet sheet = workbook.getSheetAt(0); //Get first Excel Sheet

//Iterate throw each row.
Iterator<Row> rows = sheet.rowIterator();
while (rows.hasNext()) {
    HSSFRow row = (HSSFRow) rows.next();

    Iterator<Cell> cells = row.cellIterator();
    while (cells.hasNext()) {
        HSSFCell cell = (HSSFCell) cells.next();

        //Must do this, you need to get value based on the cell type
        switch (cell.getCellType()) {
            case HSSFCell.CELL_TYPE_NUMERIC:
                System.out.println(cell.getNumericCellValue());
            break;
            case HSSFCell.CELL_TYPE_STRING:
                System.out.println(cell.getStringCellValue());
            break;
            default: break;
        }
    }
}