[英]Export arrays into xlsx using axlsx gem
我正在嘗試使用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'
首先使用IO::readlines
讀取文件,然后分割每行(使用Array#map
和String#split
由單元格String#split
)。
它將產生嵌套數組。 就像是
[["Animal", "Name", "Age", "State"], ["Dog", "Rufus", "7", "CA"], ["Bird", "Magnus", "3", "FL"]]
這里的每個子數組都是表的行,每個子數組項都是表的單元格。
如果只需要第二張紙上的“名稱”列,則需要制作嵌套數組
[["Name"], ["Rufus"], ["Magnus"]]
這就是生成XLSX文件所需的全部。
例如你已經animals.csv
與serapated數據,
並希望產生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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.