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

希望对其他人有所帮助