如何解决是否可以导出数据行,包括每行图像
我有一个 Rails 5.2 应用程序。 在那里我有一个用户模型,每个用户都有他们的个人资料图片。现在我需要实现的是,我需要在一个excel/csv文件中导出多个用户。
一位用户将拥有一行,其中一列包含他们的详细信息。例如 ID、姓名、电子邮件、地址、联系人、个人资料图片。
我能够导出除图像之外的所有其他数据。我能够想出一种方法来在每张纸上导出单个图像,但是我被困在每行图像中。
目前我已经删除了所有关于 csv 相关 gem 用法和图像的更改,因为我没有得到任何地方
def self.to_csv(options = {})
attributes = %w{id name email address contact}
CSV.generate(options) do |csv|
csv << attributes
User.all.each do |user|
csv << [user.id,user.name,user.email,user.address,user.contact]
end
end
end
我知道我需要像 caxlsx 这样的东西,但仍然一无所知,无法弄清楚如何继续。 所有的 excel 导出 gem 都有导出每张单张图像的示例。 任何与此相关的事情都会非常有帮助 谢谢你
解决方法
所以,这适用于所有面临同样问题或第一次这样做的人。
我使用 'caxlsx_rails'
作为我的电子表格生成器。
首先,问题我不知道为什么图像没有在 Windows 10 的 Microsoft excel 中加载。我已经在谷歌表上进行了测试,但是这个解决方案正在为它工作。 我在 git 上看到了一个关于此图像未呈现问题的未决问题。希望它会得到修复。 所以我发布了部分可行的解决方案。
在 GemFile 中
gem 'caxlsx'
gem 'caxlsx_rails'
在控制器中
def export_data
render xlsx: 'export_data',template: 'some_view_path/export_data.xlsx.axlsx',filename: "data_#{DateTime.now.strftime("%d-%m-%Y")}.xlsx",disposition: 'inline'
end
在视图中,xlsx 的模板
## some_view_path/export_data.xlsx.axlsx
wb = xlsx_package.workbook # create excel book
wb.add_worksheet(name: "Data Sheet Name") do |sheet|
header = wb.styles.add_style({:alignment => {:horizontal => :center,:vertical =>
:center,:wrap_text => true},:border => { :style => :thin,:color => "000000" }})
border = wb.styles.add_style({:border => { :style => :thin,:color => "000000" }})
align_right = wb.styles.add_style({:alignment => {:horizontal => :right}})
align_left = wb.styles.add_style({:alignment => {:horizontal => :left}})
sheet.add_row
## empty row
sheet.add_row ["Data1","Data2","Data3","Data4","Image"],style: header
Model.all.each do |obj|
row = sheet.add_row [obj.data1,obj.data2,obj.data3,obj.data4],height: 100
index = row.row_index + 1
# this is just to point out where to display image
start_at = "E#{index}"
# image header/column is on E
img = obj.images.first
# if you hae multiple image you can get all and display them accordingly,# here i am only taking first one,as it satisfies my requirement.
path = ActiveStorage::Blob.service.send(:path_for,img.key)
# getting actual location for activeStorage file,# if you have image file location,you can point it directly
sheet.add_image(image_src: path,start_at: start_at,width: 100,height: 100)
# adding image
end
end
下载excel文件的按钮
在某些方面
<%= link_to "Export Sample",export_sample_your_controller_path(format: :xlsx),class:
"btn btn-smbtn-primary float-right" %>
我希望这对某些人有所帮助。
问候
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。