scala Excel在使用SoDS创建的ods文件方面存在问题

vlju58qv  于 2022-11-09  发布在  Scala
关注(0)|答案(1)|浏览(167)

我正在使用SoDS(https://github.com/miachm/SODS)创建一个ODS电子表格。这是一个单页、非格式化文件。LibreOffice很满意,谷歌电子表格也是如此。另一方面,Excel声称它包含错误,当它试图修复它时,它会损坏数据。
我如何才能让Excel对此文件满意*?
代码(这是一个Play/Scala程序,accidentsDatasetCols是生成单元格内容的列提取程序):

val sheet = new Sheet("accidents")
    // add title row
    sheet.appendColumns(accidentsDatasetCols.size)
    sheet.appendRow()
    val titleRow = sheet.getRange(0,0,1,accidentsDatasetCols.size)
    accidentsDatasetCols.zipWithIndex.foreach( c => {
      titleRow.getCell(0,c._2).setValue(c._1.name)
    } )

    // add data rows
    for {
      workAccidents <- accidents.listAllAccidents()
    } yield {
      for ( acc <- workAccidents ) {
        sheet.appendRow()
        val row = sheet.getRange(sheet.getLastRow,0, 1, accidentsDatasetCols.size)
        accidentsDatasetCols.zipWithIndex.foreach( c => row.getCell(0,c._2).setValue(c._1(acc)) )
      }
      val sprd = new SpreadSheet()
      sprd.addSheet(sheet, 0)
      var bytes:Array[Byte]=null
      Using( new ByteArrayOutputStream() ){ bas =>
        sprd.save(bas)
        bas.flush()
        bytes = bas.toByteArray
      }
      Ok(bytes).as("application/vnd.oasis.opendocument.spreadsheet")
        .withHeaders("Content-Disposition"->"attachment; filename=\"work-accidents.ods\"")
    }

谢谢!

  • 或者,我如何才能让MS修复Excel?!
a0x5cqrl

a0x5cqrl1#

图书馆的作者在这里!
乍一看,Excel似乎比文件定义的默认样式域(默认字体系列、默认段落边距等)更符合预期。这不是标准所要求的,这就是为什么它在LibreOffice和Google Sheet中完美工作的原因。
这很奇怪,但我并不感到惊讶。这并不是Excel第一次因为糟糕的实现而引发问题。例如,Excel声明了包含1048573x16384个单元格的表格,尽管它只在顶部使用了几个单元格。这太愚蠢了,没有任何意义:https://github.com/miachm/SODS/issues/12
无论如何,我们不能改变Excel的工作方式。所以我会试着解决这个新问题。这个问题应该会在下一个版本中解决!
编辑:错误现在已经解决了!

相关问题