【问题标题】:Export arrays into xlsx using axlsx gem使用 axlsx gem 将数组导出到 xlsx
【发布时间】:2020-01-03 22:02:43
【问题描述】:

我正在尝试使用 AXLSX gem 将 CSV 文件的所有内容复制到 Excel 工作簿。在第二张纸上,我只想要复制 2 列。下面是一个例子。

我尝试了“.map”方法,但没有奏效。

require 'csv'
require 'Axlsx'


p = Axlsx::Package.new
wb = p.workbook
animals = CSV.read('test.csv', headers:true)
column = ['Animals', 'Name']

headers = Array.new
headers << "Animal"
headers << "Name"
headers << "Age"
headers << "State"


wb.add_worksheet(:name => 'Copy') do |sheet|
  animals.each do |row|
    headers.map { |col| sheet.add_row [row[col]] }
  end
end


wb.add_worksheet(:name => 'Names') do |sheet|
  animals.each do |row|
    column.map { |col| sheet.add_row [row[col]] }
  end
end

p.serialize 'Animals.xlsx'

CSV - But also desired output on XLSX Output from my code

【问题讨论】:

  • "that didn't work" 不是一个足够精确的错误描述,我们无法帮助您。 什么不起作用? 如何不起作用?你的代码有什么问题?您收到错误消息吗?错误信息是什么?你得到的结果不是你期望的结果吗?你期望什么结果,为什么,你得到的结果是什么,两者有什么不同?您正在观察的行为不是期望的行为吗?期望的行为是什么,为什么,观察到的行为是什么,它们有何不同?
  • 嗨 Jorg,我对此很陌生,很抱歉不清楚。当我使用“.map”方法时,它会将 CSV 文件中的数据提取到 xlsx 文件中,但仅将数据复制到 A 列中(我上传了一个标题为:“我的代码输出”的屏幕截图。所需的输出类似我的第一张图片标题为:“CSV - 但也需要 XLSX 上的输出”。让我知道我可以回答任何其他问题来提供帮助。
  • 我想你想做sheet.add_row headers.map { |col| row[col] }
  • @arieljuod 这行得通,完全符合我的期望。感谢您的帮助!

标签: ruby-on-rails ruby axlsx


【解决方案1】:

首先使用IO::readlines读取文件,然后分割每一行(使用Array#mapString#split分隔单元格)。

它会产生嵌套数组。类似的东西

[["Animal", "Name", "Age", "State"], ["Dog", "Rufus", "7", "CA"], ["Bird", "Magnus", "3", "FL"]]

这里的每个子数组都是你表格的行,子数组的每一项都是你表格的单元格。

如果您只需要第二张纸上的“名称”列,则需要制作嵌套数组

[["Name"], ["Rufus"], ["Magnus"]]

这就是生成 XLSX 文件所需的全部内容。

例如,您有animals.csv, 分隔的数据并希望生成animals.xlsx

require 'axlsx'

copy = File.readlines('animals.csv', chomp: true).map { |s| s.split(',') }
names = copy.map { |l| [l[1]] }

Axlsx::Package.new do |p|
  p.workbook.add_worksheet(name: 'Animals') { |sheet| copy.each { |line| sheet.add_row(line) }}
  p.workbook.add_worksheet(name: 'Names') { |sheet| names.each { |line| sheet.add_row(line) }}
  p.serialize('animals.xlsx')
end

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-26
    • 1970-01-01
    • 2013-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多