2017-01-05 28 views
0

我會盡可能地簡化問題。我正在用axlsx生成一個xls文件,並且在文件內部有一列表示這種格式的任務的長度[h]:mm:ssRubyGems axlsx創建一個表示時間並以編程方式添加它的單元格列表

我希望單元格具有該格式,並且在最後一行中我想添加該列的所有行。下面是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添加此字符'(之前的時間),所以obviosly是格式不正確模板。

如果我將文件上傳到oneDrive,我沒有那個新字符。這些單元格的格式爲[h]:mm:ss。但是我不能夠總結的範圍內,最後一個單元格的值是=SUM(D2:D174)但它表明0,如果我改變格式[h]:mm:ss其更改爲0:00:00

謝謝

+1

既然你與strftime的格式,我認爲你有一個真正的字符串,而不是一個日期,它實習生盟友是一個整數。你可以嘗試不轉換它。 – noel

+0

謝謝@noel,你的評論引導我回答 – agusgambina

回答

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 

我希望它能幫助別人

相關問題