如何解析 Excel 文件以提供与视觉上显示的数据完全相同的数据?

2024-01-12

我使用的是 Rails 5 (Ruby 2.4)。我想阅读 .xls 文档,并且希望将数据转换为 CSV 格式,就像在 Excel 文件中显示的那样。有人推荐我使用 Roo,所以我就这么做了

book = Roo::Spreadsheet.open(file_location)
sheet = book.sheet(0)
text = sheet.to_csv
arr_of_arrs = CSV.parse(text)

然而,返回的内容与我在电子表格中看到的不同。例如,电子表格中的一个单元格有

16:45.81

当我从上面获取 CSV 数据时,返回的是

"0.011641319444444444"

如何解析 Excel 文档并准确获取我所看到的内容?我不在乎是否使用 Roo 进行解析,只要我可以获得 CSV 数据,它代表我所看到的内容,而不是一些奇怪的内部表示。作为参考,当我运行“file name_of_file.xls”时,我正在解析的文件类型给出了这一点...

Composite Document File V2 Document, Little Endian, Os: Windows, Version 5.1, Code page: 1252, Author: Dwight Schroot, Last Saved By: Dwight Schroot, Name of Creating Application: Microsoft Excel, Create Time/Date: Tue Sep 21 17:05:21 2010, Last Saved Time/Date: Wed Oct 13 16:52:14 2010, Security: 0

您需要将自定义公式以文本格式保存在 .xls 端。如果您从互联网打开 .xls 文件,这将不起作用,但如果您可以操作该文件,这将解决您的问题。您可以使用该功能来做到这一点=TEXT(A2, "mm:ss.0")A2 只是我用作示例的单元格。

book = ::Roo::Spreadsheet.open(file_location)
puts book.cell('B', 2) 
=> '16.45.8' 

如果操作文件不是一个选项,您可以将自定义转换器传递给CSV.new()并将小数时间转换回您需要的正确格式。

require 'roo-xls'
require 'csv'

CSV::Converters[:time_parser] = lambda do |field, info| 
  case info[:header].strip
  when "time" then  begin 
                      # 0.011641319444444444 * 24 hours * 3600 seconds = 1005.81 
                      parse_time =  field.to_f * 24 * 3600
                      # 1005.81.divmod(60) = [16, 45.809999999999999945]
                      mm, ss = parse_time.divmod(60)
                      # returns "16:45.81"
                      time = "#{mm}:#{ss.round(2)}"  
                      time 
                    rescue
                      field 
                    end
  else 
    field  
  end
end

book = ::Roo::Spreadsheet.open(file_location)
sheet = book.sheet(0)
csv = CSV.new(sheet.to_csv, headers: true, converters: [:time_parser]).map {|row| row.to_hash}
puts csv 
=> {"time "=>"16:45.81"}
   {"time "=>"12:46.0"}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何解析 Excel 文件以提供与视觉上显示的数据完全相同的数据? 的相关文章

随机推荐

  • 调整 RMarkdown 文档中使用 kable() 制作的表格的宽度

    使用knitr中的kable 函数制作表格时是否可以调整列的宽度 对于具有两列的表来说 这样的块会生成一个占据文档整个宽度的表 我想让列更窄 这可以用 kable 完成还是需要另一个包 这个 rmarkdown 块 r df lt data
  • Windows Phone 8 中的自动深色/浅色图标支持

    我认为这是一个很常见的问题 但我找不到适合我的解决方案 众所周知 WP 支持深色和浅色主题 用户可以更改主题 并且有多种方法可以覆盖他的决定并以您选择的颜色主题显示所有内容 但是 我只是想对这两种主题类型做出反应 并且我想以正确的颜色显示图
  • 删除字符串中的逗号,用逗号和双引号括起来 / Python

    我在 stackoverflow 上发现了一些类似的主题 但我是 Python 和 Reg Exps 的新手 我有一根绳子 2 星级宜必思柏林高级酒店于 2009 年进行了全面翻修 Messe 拥有 168 间空调客房 毗邻 柏林的 ICC
  • forEach 和 for (objs 中的 var o) 之间的性能差异

    以下之间的执行速度和 或内存消耗是否有任何差异 for var o in objs and objs forEach o 对于列表和队列 在我的机器上 使用 Dart VM 后者的速度往往要快 2 到 2 5 倍 这是有道理的 因为forE
  • 在express js路由中调用异步函数的正确方法

    我现在就是这样做的 但试图看看是否有正确的或其他的方法可以做到这一点 async function getmanual vars req res ajax var return data let db await mongo client
  • vim:添加注释宏

    Vim 对我来说几乎是完美的 但我仍然想要行注释和块注释功能 我想知道如何编写 vimrc 来在 python 和 javascript 中执行此操作 没有插件 http www vim org scripts script php scr
  • 为什么苹果的闭包声明缺少参数标签

    当我读完UIKit 大多数时候我看到的是闭包 作为函数参数 缺少这样的参数标签 func fooClosure fooClosure Bool gt Swift Void 在某些情况下我可以猜出它代表什么 而在其他情况下我不能 Exampl
  • 从数据文件 VB 脚本中读取下一行

    我正在尝试获取数据标记文件的下一行 但是因为有多行具有相同的标记 所以它正在经历并获取最后一行 但我需要第一行 下面的示例标记文件 Summary SA2100 7775555 Summary SUM100 9674555 Summary
  • 使用 Jquery 附加多个 html 元素

    我对 jQuery 很陌生 想知道是否有人可以建议我最佳实践 我希望将一个 div 元素附加到页面 其中包含大量 html 并且不确定实现此目的的最佳方法是什么 或者是否建议使用 jquery 例如 如果我想使用 jquery 将以下代码附
  • 函数模板的多个定义

    假设头文件定义了一个函数模板 现在假设有两个实现文件 include这个头 并且每个都调用了函数模板 在两个实现文件中 函数模板都使用相同的类型进行实例化 header hh template
  • 加载页面时显示加载动画微调器

    我想在 JQueryMobile 页面中显示加载动画微调器 该页面是通过 ajax 关闭加载的 页面已加载data ajax false or rel external 我试穿了pagebeforecreate and pageshow事件
  • Javascript样式对象将复杂的颜色名称转换为rgb

    当将复杂的 CSS 颜色名称应用于 DOM 元素时 有没有一种方法可以覆盖 javascript 将复杂的 CSS 颜色名称转换为 RGB 值的方式document getElementById xxx style object 例如 设置
  • php imagemagick 创建平铺金字塔 TIFF

    好吧 正如标题所说 我遇到了一个问题 我的测试函数是这样的 imagePath tmp 511a3874a0da1 pngName imagePath png tifName imagePath tif tempImg new Imagic
  • 具有多个子类型的 Scala 泛型(元组)类型

    我正在 Scala 中编写一个数据结构 基本上是一个哈希图 它将采用一个元组 每次可能有不同数量的参数 并用它做一些事情 为了一般地实现这一点 我定义了一个类型 type T lt Tuple1 with Tuple2 with Tuple
  • 更改应用程序中的 Cocoa 显示名称?

    如何更改 OS X 上 Dock 中应用程序上方显示的名称 我尝试过重命名目标并重命名我的项目 而且 我已经用 Google 搜索过它 经过进一步谷歌搜索后 我发现了这一点 项目 gt 编辑活动目标 gt 打包 gt 产品名称 虽然我第一次
  • Paytm sdk ios集成打开Paytm付款表格?

    在 iOS Xcode 7 中集成 Paytm sdk 2 1 并配置为进行支付 我有一个表格 其中需要填写金额和其他字段 然后有一个 Payment 按钮 这是我正在使用的代码 Step 1 Create a default mercha
  • jqGrid 卡在加载中?

    我正在尝试使用 JQuery 插件jqGrid http www trirand com blog 使用 asp net mvc 应用程序 我在下面向网格传递一个 JSON 对象format http www secondpersonplu
  • 创建 UIImageView 时上下文无效

    当我尝试创建 UIImageView 时出现错误 看看这段代码 UIImage backgroundPanel UIImage imageNamed loginPanelBackground png resizableImageWithCa
  • Azure API 管理:验证 jwt 令牌范围

    我们希望使用 validate jwt 策略保护 API 操作调用 但当我使用 required claims 检查范围时遇到问题 示例 我有一个令牌 其范围包括多个值 例如 xxx READ xxx WRITE yyy READ yyy
  • 如何解析 Excel 文件以提供与视觉上显示的数据完全相同的数据?

    我使用的是 Rails 5 Ruby 2 4 我想阅读 xls 文档 并且希望将数据转换为 CSV 格式 就像在 Excel 文件中显示的那样 有人推荐我使用 Roo 所以我就这么做了 book Roo Spreadsheet open f