首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Ruby中读取第一行大XLSX文件的最快方法

在Ruby中读取第一行大XLSX文件的最快方法
EN

Stack Overflow用户
提问于 2021-12-07 13:37:24
回答 2查看 535关注 0票数 0

在应用程序中,我需要能够非常快地读取大xlsx文件(350 kx12单元,~30 on )中的第一行(头)。我正在使用Roo在目前,这是好的较小的文件。但这么大的文件需要3-4分钟。有办法在几秒钟内做到这一点吗?

代码语言:javascript
复制
xlsx = Roo::Spreadsheet.open(file_path)
sheet = xlsx.sheet(0)
header = sheet.row(1)

编辑:

  • 我试过其他宝石:
    • rubyXL花了几分钟
    • 克里克以30多岁的速度最快。但仍无法在控制器中使用

Edit2:

  • 最后我在作业中使用了creek,并在控制器中对结果进行了轮询。Thx 汤姆·洛德建议小溪
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-12-07 16:39:57

ruby roo不支持文件流;它将整个文件读入内存。正如您所说,它对于较小的文件很好,但对于读取大型文件的小部分则不是很好。

您需要使用不同的库/方法。例如,您可以使用gem:creek,它将自己描述为:

Ruby,它提供了一种快速、简单和高效的解析大型Excel (xlsx和xlsm)文件的方法。

而且,以该项目的自述文件为例,将您为roo编写的代码转换为使用creek的代码非常简单

代码语言:javascript
复制
require 'creek'
creek = Creek::Book.new(file_path)
sheet = creek.sheets[0]
header = sheet.rows[0]

注意:一个快速的谷歌你的StackOverflow问题标题引导我到这篇博客文章作为最高的搜索结果。在Google上搜索总是值得的。

票数 1
EN

Stack Overflow用户

发布于 2021-12-07 14:53:40

使用#gets可以工作,可能是这样的:

代码语言:javascript
复制
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...
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70261110

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档