在应用程序中,我需要能够非常快地读取大xlsx文件(350 kx12单元,~30 on )中的第一行(头)。我正在使用Roo在目前,这是好的较小的文件。但这么大的文件需要3-4分钟。有办法在几秒钟内做到这一点吗?
xlsx = Roo::Spreadsheet.open(file_path)
sheet = xlsx.sheet(0)
header = sheet.row(1)编辑:
Edit2:
发布于 2021-12-07 16:39:57
ruby roo不支持文件流;它将整个文件读入内存。正如您所说,它对于较小的文件很好,但对于读取大型文件的小部分则不是很好。
您需要使用不同的库/方法。例如,您可以使用gem:creek,它将自己描述为:
Ruby,它提供了一种快速、简单和高效的解析大型Excel (xlsx和xlsm)文件的方法。
而且,以该项目的自述文件为例,将您为roo编写的代码转换为使用creek的代码非常简单
require 'creek'
creek = Creek::Book.new(file_path)
sheet = creek.sheets[0]
header = sheet.rows[0]注意:一个快速的谷歌你的StackOverflow问题标题引导我到这篇博客文章作为最高的搜索结果。在Google上搜索总是值得的。
发布于 2021-12-07 14:53:40
使用#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://stackoverflow.com/questions/70261110
复制相似问题