问题描述
我想对我的csv / xlsx文件实施密码保护,但是以某种方式无法实现。我无法在互联网上找到写得很好的东西。我用xlsx尝试过。
render formats: :xlsx if current_user.save(validate: false)
在我的app/views/tools/export_database.xlsx.axlsx
wb = xlsx_package.workbook
wb.add_worksheet(name: "Users") do |sheet|
sheet.sheet_protection.password = ENV['sheet_password']
sheet.add_row %w(Id Email Role Verification First\ Name Last\ Name Title Birthday Postcode Telephone Payment Company\ Name Office\ Number Address Email\ Confirmed Agent\ Name Agent\ Position Agent\ Number Agent\ Email Company\ logo Address\ Line\ 2 Town County Created\ At Updated\ At),:types => [:string,:string,:string]
User.all.each do |user|
sheet.add_row [user.id,user.email,user.role,user.verification,user.first_name,user.last_name,user.title,user.dob,user.postcode,user.telephone,user.payment,user.company_name,user.office_number,user.address,user.email_confirmed,user.agent_name,user.agent_position,user.agent_number,user.agent_email,user.company_logo,user.address_line_two,user.town,user.county,user.created_at,user.updated_at],:string]
end
end
但这不起作用。
另一种实现是使用CSV。
format.csv { send_data @users.to_csv,filename: "users-#{Date.today}.csv" }
在用户模型中。
CSV.generate(headers: true) do |csv|
csv << attributes
all.find_each do |user|
csv << attributes.map{ |attr| user.send(attr) }
end
end
还有另一种尝试使用prawn和prawn-table的方法,但是问题是,当列数增加时,表看起来不好。请通过以上任何一种方法帮助我。谢谢。
解决方法
尽管Excel文件支持密码保护,但CSV没有。因此,请放弃CSV方法。
您用于生成xlsx的gem支持密码加密,并在https://github.com/caxlsx/caxlsx/blob/282eec44ef01746ee25931fa6cd287ad083fd40b/examples/sheet_protection_example.md
中提供了示例当您说它不起作用时;它以什么方式不起作用?无法生成文件或文件生成了文件,但是没有受到保护?