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