Я создаю электронную таблицу ODS, используя SODS (https://github.com/miachm/SODS). Это одностраничный неформатированный файл. LibreOffice доволен этим, как и Google Spreadsheets. 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\"")
}
Спасибо!
Интересно .... Если я открою и сохраню файл в LibreOffice, Excel будет доволен этим.
Отлично! Нет, конечно, плохо. Но теперь понятно, что в МС писать рано, это ошибка SODS, нужно писать там
Согласились, что это может быть что-то в SODS, но LibreOffice И Google Spreadsheets счастливы. Так что и здесь Excel может улучшиться :-))
Просто чтобы сузить область поиска ошибок: если файл, которым доволен LibreOffice, открывается в Calc и повторно сохраняется с другим именем (без изменения формата, по-прежнему как ODS), Excel также занимается саботажем с этим? повторно сохраненный файл?