簡體   English   中英

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)該范圍,最后一個單元格的值為=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

希望對別人有幫助

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM