我会尽量简化这个问题。我正在使用axlsx生成一个xls文件,并且在文件中有一个列,表示使用此格式的任务的长度[h]:mm:ss
我希望单元格具有该格式,并且在最后一行中我想添加列的所有行。这是xls的模板
wb = xlsx_package.workbook
wb.add_worksheet(name: "Length") do |sheet|
time = wb.styles.add_style :num_fmt => 46
sheet.add_row [
"Length"
], :style => title
@tasks.each do |task|
sheet.add_row [
Time.at(task.duration*60).utc.strftime("%k:%M:%S").strip
], :style => [
time
]
end
range_amount = "D2:D#{@tasks.size+1}"
sheet.add_row ["=SUM(#{range_amount})"], :style => [time]
end
我遇到的问题是
在LibreOffice中,时间单元格在开始时(在时间之前)添加此字符'
,例如'0:50:00
,因此显然格式不正确。
如果我将文件上传到oneDrive,我没有那个新角色。单元格具有此格式[h]:mm:ss
。但是我无法对范围求和,最后一个单元格的值为=SUM(D2:D174)
,但显示为0
,如果我将格式更改为[h]:mm:ss
,则更改为0:00:00
< / p>
谢谢
答案 0 :(得分:0)
我的错误是试图操纵字符串作为时间,这是我解决的方法
wb = xlsx_package.workbook
wb.add_worksheet(name: "Length") do |sheet|
time_title = sheet.styles.add_style(:bg_color => "55FF0000", :fg_color=>"FFFFFFFF", :border=>Axlsx::STYLE_THIN_BORDER, :alignment=>{:horizontal => :center}, :num_fmt => 46)
time = wb.styles.add_style :num_fmt => 20
sheet.add_row [
"Length"
], :style => title
@tasks.each do |task|
sheet.add_row [
"=#{task.duration}/1440"
], :style => [
time
]
end
range_amount = "D2:D#{@tasks.size+1}"
sheet.add_row ["=SUM(#{range_amount})", :style => [time_title]
end
我希望对其他人有帮助