如何阅读省略前两行的excel文件

Pri*_*iya 13 excel apache-poi

我有一个111行的Excel文件.我需要省略工作表的前两行,然后使用java和POI读取文件.

Mur*_*nth 32

您必须使用rownum().Here 跳过前两行.示例代码

HSSFWorkbook      workBook = new HSSFWorkbook (fileSystem);
HSSFSheet         sheet    = workBook.getSheetAt (0);
Iterator<HSSFRow> rows     = sheet.rowIterator ();

while (rows.hasNext ())
{
  HSSFRow row = rows.next ();
  // display row number in the console.
  System.out.println ("Row No.: " + row.getRowNum ());
  if(row.getRowNum()==0 || row.getRowNum()==1){
   continue; //just skip the rows if row number is 0 or 1
  }
}
Run Code Online (Sandbox Code Playgroud)

这是完整的例子

import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRichTextString;
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; 
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;

import java.util.Iterator;

public class POIExcelReader
{

/** Creates a new instance of POIExcelReader */
public POIExcelReader ()
{}

@SuppressWarnings ("unchecked")
public void displayFromExcel (String xlsPath)
{
InputStream inputStream = null;

try
{
inputStream = new FileInputStream (xlsPath);
}
catch (FileNotFoundException e)
{
System.out.println ("File not found in the specified path.");
e.printStackTrace ();
}

POIFSFileSystem fileSystem = null;

try
{
fileSystem = new POIFSFileSystem (inputStream);

HSSFWorkbook      workBook = new HSSFWorkbook (fileSystem);
HSSFSheet         sheet    = workBook.getSheetAt (0);
Iterator<HSSFRow> rows     = sheet.rowIterator ();

while (rows.hasNext ())
{
HSSFRow row = rows.next ();
if(row.getRowNum()==0 || row.getRowNum()==1){
       continue; //just skip the rows if row number is 0 or 1
      }
// once get a row its time to iterate through cells.
Iterator<HSSFCell> cells = row.cellIterator ();

while (cells.hasNext ())
{
HSSFCell cell = cells.next ();

System.out.println ("Cell No.: " + cell.getCellNum ());

/*
 * Now we will get the cell type and display the values
 * accordingly.
 */
switch (cell.getCellType ())
{
    case HSSFCell.CELL_TYPE_NUMERIC :
    {

        // cell type numeric.
        System.out.println ("Numeric value: " + cell.getNumericCellValue ());

        break;
    }

    case HSSFCell.CELL_TYPE_STRING :
    {

        // cell type string.
        HSSFRichTextString richTextString = cell.getRichStringCellValue ();

        System.out.println ("String value: " + richTextString.getString ());

        break;
    }

    default :
    {

        // types other than String and Numeric.
        System.out.println ("Type not supported.");

        break;
    }
}
}
}
}
catch (IOException e)
{
e.printStackTrace ();
}
}

public static void main (String[] args)
{
POIExcelReader poiExample = new POIExcelReader ();
String         xlsPath    = "c://test//test.xls";

poiExample.displayFromExcel (xlsPath);
}
}
Run Code Online (Sandbox Code Playgroud)


Gag*_*arr 5

Apache POI提供了两种方法来访问Excel文件中的行和单元格。一个是给您所有条目的迭代器,另一个是按索引循环。(POI还会告诉您开始/结束行/列)。迭代器的使用通常更简单,但是两者的速度一样快。

如果您对要提取的行有特定要求,建议您使用后者。您的代码将希望是这样的:

int FIRST_ROW_TO_GET = 2; // 0 based

Sheet s = wb.getSheetAt(0);
for (int i = FIRST_ROW_TO_GET; i < s.getLastRowNum(); i++) {
   Row row = s.getRow(i);
   if (row == null) {
      // The whole row is blank
   }
   else {
      for (int cn=row.getFirstCellNum(); cn<row.getLastCellNum(); cn++) {
         Cell c = row.getCell(cn, Row.RETURN_BLANK_AS_NULL);
         if (c == null) {
            // The cell is empty
         } else {
            // Process the cell
         }
      }
   }
}
Run Code Online (Sandbox Code Playgroud)