RubyGems axlsx создает список ячеек, представляющих время, и добавляет его программно

Я постараюсь максимально упростить этот вопрос. Я создаю файл xls с помощью Axlsx, и внутри файла есть столбец, который представляет длину задачи с этим форматом [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

Спасибо

1 ответ

Решение

Моя ошибка была попытка манипулировать строками как раз, вот как я решил

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

Я надеюсь, что это помогает кому-то еще

Другие вопросы по тегам