Как суммировать столбец в файле Excel с SCALA, используя crealytics или библиотеку POI? - PullRequest
0 голосов
/ 03 мая 2020

Я пытаюсь прочитать файл Excel, используя crealytics, и мне нужно сложить столбец чисел. Мой последний объект - каждый раз проверять, является ли «Итог», отображаемый в нижней части файла, суммой соответствующих ячеек.

enter image description here

С помощью crealytics я, конечно, могу прочитать свой файл и разобраться с ним, и это очень просто (я написал функцию, чтобы получить последнюю строку в файле, чтобы не перепутать данные и последнюю строку):

val df = spark.read
      .format("com.crealytics.spark.excel")
      .option("dataAddress", sheetName + "!B10:L" + excelEndAdress)
      //.option("header", "true")
      .option("useHeader", "true")
      .option("treatEmptyValuesAsNulls", "false")
      .option("inferSchema", "true")
      .option("addColorColumns", "true")
      .option("timestampFormat", "MM-dd-yyyy HH:mm:ss")
      .option("treatEmptyValuesAsNulls", "true")
      .schema(schema)
      .load(path)

Я могу кодировать функцию для работы с кадром данных, полученным из файла Excel, но это может привести к большему потреблению памяти и я предпочитаю иметь дело с файлом Excel. Я также пытался с библиотекой POI (я не могу найти документацию по библиотеке POI в scala ..). Это код:

def getRowContents(sheet: XSSFSheet, rowId: Int, columnNum: Int): List[String] = {
    (0 until columnNum).map(colId => Option(sheet.getRow(rowId).getCell(colId)).getOrElse("").toString).toList
  }

  val workbook = new XSSFWorkbook(new FileInputStream(path))
  val sheet = workbook.getSheetAt(0)
  //val columnNum = sheet.getRow(0).getPhysicalNumberOfCells
  //(0 to sheet.getLastRowNum).map(i => getRowContents(sheet, i, columnNum)).toList

  println(sheet)

И я получил это сообщение Ошибка:

org.apache.poi.openxml4j.exceptions.OLE2NotOfficeXmlFileException: The supplied data appears to be in the OLE2 Format. You are calling the part of POI that deals with OOXML (Office Open XML) Documents. You need to call a different part of POI to process this data (eg HSSF instead of XSSF)

Есть ли способ сделать это по-другому? Как я могу использовать библиотеку POI для суммирования значений в SCALA, НЕ В JAVA ПОЖАЛУЙСТА? Спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...