RubyGems axlsx 创建表示时间的单元格列表并以编程方式添加
RubyGems axlsx create a list of cells that represent time and add it programmatically
我会尽量简化问题。我正在用 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
谢谢
我的错误是试图将字符串作为时间来操作,这是我解决的方法
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
希望对其他人有所帮助
我会尽量简化问题。我正在用 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
谢谢
我的错误是试图将字符串作为时间来操作,这是我解决的方法
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
希望对其他人有所帮助