optimize xlsx export

master^2
Pete Matsyburka 2 weeks ago
parent 4b00c896e4
commit b8c1691bd7

@ -36,7 +36,7 @@ gem 'rotp'
gem 'rouge', require: false gem 'rouge', require: false
gem 'rqrcode', require: false gem 'rqrcode', require: false
gem 'ruby-vips' gem 'ruby-vips'
gem 'rubyXL', require: false gem 'rubyzip', require: false
gem 'shakapacker' gem 'shakapacker'
gem 'sidekiq' gem 'sidekiq'
gem 'sqlite3', require: false gem 'sqlite3', require: false
@ -45,6 +45,7 @@ gem 'trilogy', require: false
gem 'turbo-rails' gem 'turbo-rails'
gem 'twitter_cldr', require: false gem 'twitter_cldr', require: false
gem 'tzinfo-data' gem 'tzinfo-data'
gem 'xlsxtream', require: false
group :development, :test do group :development, :test do
gem 'better_html' gem 'better_html'

@ -497,9 +497,6 @@ GEM
ruby-vips (2.3.0) ruby-vips (2.3.0)
ffi (~> 1.12) ffi (~> 1.12)
logger logger
rubyXL (3.4.35)
nokogiri (>= 1.10.8)
rubyzip (>= 3.2.2)
rubyzip (3.2.2) rubyzip (3.2.2)
securerandom (0.4.1) securerandom (0.4.1)
semantic_range (3.1.1) semantic_range (3.1.1)
@ -575,10 +572,13 @@ GEM
base64 base64
websocket-extensions (>= 0.1.0) websocket-extensions (>= 0.1.0)
websocket-extensions (0.1.5) websocket-extensions (0.1.5)
xlsxtream (3.1.0)
zip_kit (>= 6.2, < 7)
xpath (3.2.0) xpath (3.2.0)
nokogiri (~> 1.8) nokogiri (~> 1.8)
yaml (0.4.0) yaml (0.4.0)
zeitwerk (2.8.2) zeitwerk (2.8.2)
zip_kit (6.3.4)
PLATFORMS PLATFORMS
aarch64-linux aarch64-linux
@ -638,7 +638,7 @@ DEPENDENCIES
rubocop-rails rubocop-rails
rubocop-rspec rubocop-rspec
ruby-vips ruby-vips
rubyXL rubyzip
shakapacker shakapacker
sidekiq sidekiq
simplecov simplecov
@ -650,6 +650,7 @@ DEPENDENCIES
tzinfo-data tzinfo-data
web-console web-console
webmock webmock
xlsxtream
RUBY VERSION RUBY VERSION
ruby 4.0.5 ruby 4.0.5

@ -2,7 +2,7 @@
autoload :CSV, 'csv' autoload :CSV, 'csv'
autoload :CSVSafe, 'csv-safe' autoload :CSVSafe, 'csv-safe'
autoload :RubyXL, 'rubyXL' autoload :Xlsxtream, 'xlsxtream'
autoload :Zip, 'zip' autoload :Zip, 'zip'
autoload :Numo, 'numo/narray' autoload :Numo, 'numo/narray'
autoload :OnnxRuntime, 'onnxruntime' autoload :OnnxRuntime, 'onnxruntime'

@ -19,22 +19,19 @@ module Submissions
end end
def rows_to_xlsx(rows) def rows_to_xlsx(rows)
workbook = RubyXL::Workbook.new
worksheet = workbook[0]
worksheet.sheet_name = Time.current.to_date.to_s
headers = build_headers(rows) headers = build_headers(rows)
headers.each_with_index do |column_name, column_index|
worksheet.add_cell(0, column_index, column_name)
end
rows.each.with_index(1) do |row, row_index| io = StringIO.new
extract_columns(row, headers).each_with_index do |value, column_index|
worksheet.add_cell(row_index, column_index, value) Xlsxtream::Workbook.open(io) do |workbook|
workbook.write_worksheet(Time.current.to_date.to_s) do |sheet|
sheet << headers.to_a
rows.each { |row| sheet << extract_columns(row, headers) }
end end
end end
workbook.stream.string io.string
end end
def rows_to_csv(rows) def rows_to_csv(rows)

Loading…
Cancel
Save