我需要能夠在 Ruby on Rails 應用程式中非常快速地讀取大 xlsx 檔案(350k x 12 單元格,~30MB)中的第一行(標題)。我目前正在使用 Roo gem,這對于較小的檔案來說很好。但是對于這么大的檔案,它需要 3-4 分鐘。有沒有辦法在幾秒鐘內做到這一點?
xlsx = Roo::Spreadsheet.open(file_path)
sheet = xlsx.sheet(0)
header = sheet.row(1)
uj5u.com熱心網友回復:
ruby gemroo不支持檔案流;它將整個檔案讀入記憶體。正如您所說,這對于較小的檔案作業正常,但對于讀取大檔案的小部分則不太好。
您需要使用不同的庫/方法。例如,您可以使用 gem: creek,它將自身描述為:
一個 Ruby gem,它提供了一種快速、簡單和有效的方法來決議大型 Excel(xlsx 和 xlsm)檔案。
而且,以專案自述檔案中的示例為例,將您撰寫的代碼roo轉換為使用creek以下代碼的代碼非常簡單:
require 'creek'
creek = Creek::Book.new(file_path)
sheet = creek.sheets[0]
header = sheet.rows[0]
注意:通過 Google 快速搜索您的 StackOverflow 問題標題,我將這篇博文作為頂部搜索結果。首先在谷歌上搜索總是值得的。
uj5u.com熱心網友回復:
使用#gets可以作業,也許是這樣的:
first_line_data = File.open(file_path, "rb", &:gets)
first_line_file = File.open("tmp_file.xlsx", "wb") { |f| f << first_line_data }
xlsx = Roo::Spreadsheet.open("tmp_file.xlsx")
# etc...
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/375551.html
