簡體   English   中英

使用電子表格gem獲取電子表格行數

[英]Getting spreadsheet row count using spreadsheet gem

這是我當前的工作代碼:

require 'csv'
require 'spreadsheet'

folder_to_analyze = ARGV.first
folder_path = File.join(Dir.pwd, folder_to_analyze)

unless File.directory?(folder_path)
  puts "Error: #{folder_path} no es un folder valido."
  exit
end

def get_csv_file_paths(path)
  Dir.glob(path + '/**/*.csv').each do |f|
    yield f
  end
end

def get_xls_file_path(path)
  Dir.glob(path + '/**/*.xls').each do |f|
    yield f
  end
end

csv_files = []
excel_files = []
get_csv_file_paths(folder_path) { |f| csv_files << f }
get_xls_file_path(folder_path) { |f| excel_files << f }

puts "Se encontro #{csv_files.length + excel_files.length} archivos para procesar."

puts '==========================================='
puts 'Archivos CSV:'
puts '==========================================='
csv_files.each do |f|
  count = IO.readlines(f).size
  puts "Archivo: #{File.basename(f)} - Correos: #{count}"
end

puts '==========================================='
puts 'Archivos Excel:'
puts '==========================================='
Spreadsheet.client_encoding = 'UTF-8'
excel_files.each do |f|
  count = 0

  book = Spreadsheet.open f
  book.worksheets.each do |sheet|
    sheet.each do |row|
     count = count + 1
    end
  end

  puts "Archivo: #{File.basename(f)} - Correos: #{count}"
end

電子表格行計數的計算速度非常慢,每個excel文件大約需要4秒鍾才能計數。

有什么辦法可以加快速度嗎? 是否在某處隱藏了row_count屬性?

無需遍歷工作表的行,只需像這樣在每個工作表上調用計數

excel_files.each do |f|
  count = 0

  book = Spreadsheet.open f
  book.worksheets.each do |sheet| 
     count += sheet.count
  end

  puts "Archivo: #{File.basename(f)} - Correos: #{count}"
end

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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