簡體   English   中英

使用axlsx gem將數組導出到xlsx

[英]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'

CSV-也是 我的代碼 在XLSX 輸出 上的期望輸出

首先使用IO::readlines讀取文件,然后分割每行(使用Array#mapString#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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM