简体   繁体   中英

How to read from first to last row in excel using poi in java?

I am using apache poi to read form excel file, the code also works without any problem but the code reads data from middle and it does not read from first row of the file.

the code is :

package org.sample;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFCell;

import java.io.FileInputStream;
import java.io.IOException;
import java.util.Iterator;
import java.util.List;
import java.util.ArrayList;

public class Main {

    @SuppressWarnings("unchecked")
    public static void main(String[] args) throws Exception {
//
// An excel file name. You can create a file name with a full
// path information.
//
        String fileName = "D:/workspace/ReadExlsx/xlsx/SampleData.xls";


// Create an ArrayList to store the data read from excel sheet.
//
        List sheetData = new ArrayList();

        FileInputStream fis = null;
        try {
//
// Create a FileInputStream that will be use to read the
// excel file.
//
            fis = new FileInputStream(fileName);

//
// Create an excel workbook from the file system.
//
            HSSFWorkbook workbook = new HSSFWorkbook(fis);
//
// Get the first sheet on the workbook.
//
            HSSFSheet sheet = workbook.getSheetAt(0);

//
// When we have a sheet object in hand we can iterator on
// each sheet's rows and on each row's cells. We store the
// data read on an ArrayList so that we can printed the
// content of the excel to the console.
//
            Iterator rows = sheet.rowIterator();
            while (rows.hasNext()) {
                HSSFRow row = (HSSFRow) rows.next();
                Iterator cells = row.cellIterator();

                List data = new ArrayList();
                while (cells.hasNext()) {
                    HSSFCell cell = (HSSFCell) cells.next();
                    data.add(cell);
                }

                sheetData.add(data);
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (fis != null) {
                fis.close();
            }
        }

        showExelData(sheetData);
    }

    private static void showExelData(List sheetData) {
//
// Iterates the data and print it out to the console.
//
        for (int i = 0; i < sheetData.size(); i++) {
            List list = (List) sheetData.get(i);
            //for (int j = 0; j < list.size(); j++) {
                HSSFCell employeeid = (HSSFCell) list.get(0);
                HSSFCell department = (HSSFCell) list.get(3);
                HSSFCell date = (HSSFCell) list.get(5);
                System.out.print(employeeid.getRichStringCellValue().getString()+" , ");
                System.out.print(department.getRichStringCellValue().getString()+" , ");
                System.out.print(date.getRichStringCellValue().getString());
                //if (j < list.size() - 1) {
                   // System.out.print(", ");
                //}
           // }
            System.out.println("");
        }
    }
}

Please help to solve this.

If you have data int I rows and J columns you should try code like this:

   for (int i = 0; i < sheetData.size(); i++) {
        List list = (List) sheetData.get(i);
        for (int j = 0; j < list.size(); j++) {
            HSSFCell employeeid = (HSSFCell) list.get(j);
            System.out.print(employeeid.getRichStringCellValue().getString());
            if (j < list.size() - 1) {
                System.out.print(", ");
            }
        }
        System.out.println("");
    }

for me it worked perfectly. My version of poi is poi-3.8-20120306.

// Get the workbook instance for XLS file

XSSFWorkbook workbook = new XSSFWorkbook(file);

// Get first sheet from the workbook

XSSFSheet sheet = workbook.getSheetAt(0);

ArrayList<String> columndata = null;

Iterator<Row> rowIterator = sheet.iterator();
columndata = new ArrayList<>();

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

        if (row.getRowNum() > 0) { // To filter column headings
            if (cell.getColumnIndex() == 0) {// To match column
                                                // index
                switch (cell.getCellType()) {
                case Cell.CELL_TYPE_NUMERIC:
                    columndata.add(cell.getNumericCellValue() + "");
                    break;
                case Cell.CELL_TYPE_STRING:
                    columndata.add(cell.getStringCellValue());
                    break;
                }
            }
        }
    }
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM