使用scala中的apache poi读取excel文件

时间:2017-06-02 16:00:43

标签: excel scala apache-poi

我尝试使用poi SXSSF读取excel文件。由于某些原因,即使工作表中有行,sheet.rowIterator也会返回空迭代器。这是我的代码

import java.io.File
import org.apache.poi.xssf.streaming.SXSSFWorkbook
import org.apache.poi.xssf.usermodel.XSSFWorkbook
import scala.collection.JavaConverters._

class ExcelReader {
    final val fileName = "c:\\temp\\data-200.xlsx"
    def read(): Iterator[Contact] = {
        val file = new File(fileName)
        val workBook = new SXSSFWorkbook(new XSSFWorkbook(file),100)
        val sheet = workBook.getSheetAt(0) //this works gets sheet name
        Console.println(s"Sheet Name: ${sheet.getSheetName()}")
        val rowItr = sheet.rowIterator().asScala // this is empty iterator
        for (e <- rowItr) yield Contact(e.getCell(0).getStringCellValue(), 
               e.getCell(1).getStringCellValue(), 
               e.getCell(2).getStringCellValue(), 
               e.getCell(3).getStringCellValue(),
               e.getCell(4).getStringCellValue())
    }
}

不确定我做错了什么。

1 个答案:

答案 0 :(得分:0)

以下是我尝试过阅读excel文件的一个简单示例。

val myFile = new File("/home/sakoirala/Downloads/eu-historical-price-series_en.xls")

  val fis = new FileInputStream(myFile)

  val myWorkbook = new HSSFWorkbook(fis)

  val mySheet = myWorkbook.getSheetAt(0)

  val rowIterator = mySheet.iterator()

  while(rowIterator.hasNext){

    val row = rowIterator.next()

      val cellIterator = row.cellIterator()

      while(cellIterator.hasNext) {
        val cell = cellIterator.next()
          cell.getCellType match {
            case Cell.CELL_TYPE_STRING => {
              print(cell.getStringCellValue + "\t")
            }
            case Cell.CELL_TYPE_NUMERIC => {
              print(cell.getNumericCellValue + "\t")
            }
            case Cell.CELL_TYPE_BOOLEAN => {
              print(cell.getBooleanCellValue + "\t")
            }
            case Cell.CELL_TYPE_BLANK => {
              print("null" + "\t")
            }
            case _ => throw new RuntimeException(" this error occured when reading ")
            //        case Cell.CELL_TYPE_FORMULA => {print(cell.getF + "\t")}
          }
      }
      println("")
  }

希望这有帮助!