ZBLOG

def saveAsExcels(df: DataFrame, pageSize: Int, fileName: String): Unit = { val rows: Array[Row] = df.collect() val groups: Array[Array[Row]] = rows.grouped(pageSize).toArray groups.zipWithIndex.foreach { case (groupRows, index) => ...

要在路径不存在时自动创建文件夹,可以使用Java的File类来实现。你可以在保存Excel文件之前检查目标文件夹是否存在,如果不存在,则创建该文件夹。以下是修改后的代码示例:

import java.io.{File, FileOutputStream}
import org.apache.poi.hssf.usermodel._
import org.apache.spark.sql.{DataFrame, Row}

def saveAsExcels(df: DataFrame, pageSize: Int, fileName: String): Unit = {
  val rows: Array[Row] = df.collect()
  val groups: Array[Array[Row]] = rows.grouped(pageSize).toArray

  groups.zipWithIndex.foreach { case (groupRows, index) =>
    val workbook: HSSFWorkbook = new HSSFWorkbook()
    val sheet: HSSFSheet = workbook.createSheet("Sheet1")

    // 写入表头
    val headerRow: HSSFRow = sheet.createRow(0)
    df.columns.zipWithIndex.foreach { case (columnName, columnIndex) =>
      headerRow.createCell(columnIndex).setCellValue(columnName)
    }

    // 写入数据行
    groupRows.zipWithIndex.foreach { case (row, rowIndex) =>
      val excelRowIndex = rowIndex + 1 // 跳过表头行
      val excelRow: HSSFRow = sheet.createRow(excelRowIndex)

      row.schema.fieldNames.zipWithIndex.foreach { case (columnName, columnIndex) =>
        excelRow.createCell(columnIndex).setCellValue(row.getAs[String](columnName))
      }
    }

    // 创建目标文件夹(如果不存在)
    val folderPath = new File(fileName).getParentFile
    if (!folderPath.exists()) {
      folderPath.mkdirs()
    }

    // 将生成的Excel保存到文件中
    val fileOut: FileOutputStream = new FileOutputStream(s"${fileName}_$index.xlsx")
    workbook.write(fileOut)

    fileOut.close()
  }
}

在上述代码中,我们使用new File(fileName).getParentFile获取文件夹的路径,并通过调用mkdirs()方法来创建目标文件夹。这样,在保存Excel文件之前会检查文件夹是否存在,如果不存在,则会自动创建。

请注意,该代码示例假定传递给saveAsExcels()方法的fileName参数是包含文件名和路径的完整字符串。


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:http://sdn.0voice.com/?id=5090

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?