【问题标题】:Ruby Spreadsheet Gem: How do I display the values of everything in a column?Ruby Spreadsheet Gem:如何显示列中所有内容的值?
【发布时间】:2014-09-07 05:35:53
【问题描述】:

我有一个 2 列 A 和 B 的 Excel 电子表格,每列 1-10 的行是数字。当我尝试显示数值时。结果如下:

#<Spreadsheet::Column:0x007fba83810368>
#<Spreadsheet::Column:0x007fba83810d90>
...
...
...

在电子表格中我有这个:

x    y
32  4
402 6
733 4
1   30
2   3128
2   4
1   1
6   2
10  63
90  333

这就是我遍历文件的方式:

require 'spreadsheet'

importing = Spreadsheet.open 'file.xls'
book = importing.worksheet 'Sheet1'

book.each do |x, y|
  x = book.column(1)
  y = book.column(2)

  puts x
  puts y
end

如何让 ruby​​ 程序以格式化的方式输出数据?我的预期输出与电子表格格式相同。

【问题讨论】:

    标签: ruby excel rubygems


    【解决方案1】:

    这是一种方法。以下代码与answer 中建议的代码基本相同(建议以更类似于 Ruby 的方式这样做),我在其中添加了两行以生成您想要的输出格式:

    puts "x      y"
    require 'spreadsheet'
    Spreadsheet.open('file.xls') do |book|
      book.worksheet('Sheet1').each do |row|
        break if row[0].nil?
        puts "%6d %6d" % row
      end
    end
    

    您需要根据要处理的最长数字来改变列宽。我允许每列有 6 位数字 (%6d),有 1 个空格(在两个格式说明符之间)。我还将列标题与每个左对齐数字的最左边的数字对齐。

    【讨论】:

    • 我添加了我的完整代码。当我将 'puts "%6d %6d" % [a,b]' 插入到我的 do 块中时,我收到以下错误:`%': can't convert Spreadsheet::Column into Integer (TypeError)
    • 我替换了我的原始答案,因为假设您的结果变量包含这些值是不正确的,并且还因为我继承了我的测试变量名称并且没有将它们更正为正确的名称。链接到的原始问题和答案应该有助于解释此处使用的代码。我基本上从那个答案中获取了代码并添加了额外的格式。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-21
    • 2019-11-05
    • 2014-09-19
    相关资源
    最近更新 更多