I've done something similar using Heroku and Sidekiq. Heroku provides both free and mini-plans for low-cost computing, and the Sidekiq gem lets you chunk out your work to several workers, letting them run simultaneously, thus finishing faster.
Do you know where your bottleneck is? Is it the input of the XLSX file or the output to CSV? If it's the latter, bring in your XLSV file, and chunk bits of it out to Sidekiq workers.
For example, you could split out your XLSX file into chunks of 1000 rows, then
rows.each do |row|
MySidekiqWorker.perform_async(row)
end
And your MySidekiqWorker might look like:
class MySidekiqWorker
include Sidekiq::Worker
def perform(row)
# append processed data to CSV
end
end
Your workers do all the heavy lifting and will almost certainly be faster than your laptop without such help.