我正在使用(Axlsx gem并且它运行良好,但我需要向单元格添加图像。 我知道它可以用图像文件完成(参见Adding image to Excel file generated by Axlsx.?),但是我在使用存储在S3中的图像(通过Carrierwave)时遇到了很多麻烦。
我尝试过的事情:
# image.url = 'http://.../test.jpg'
ws.add_image(:image_src => image.url,:noSelect => true, :noMove => true) do |image|
# ArgumentError: File does not exist
或
ws.add_image(:image_src => image,:noSelect => true, :noMove => true) do |image|
# Invalid Data #<Object ...>
不确定如何继续
答案 0 :(得分:1)
尝试使用read
将内容拉入临时文件并使用该位置:
t = Tempfile.new('my_image')
t.binmode
t.write image.read
t.close
ws.add_image(:image_src => t.path, ...
答案 1 :(得分:0)
为Paperclip&amp;添加替代答案。 S3除了这个答案之外我还找不到参考资料。
我使用的是Rails 5.0.2和Paperclip 4.3.1。
使用图片网址:http://s3.amazonaws.com/prod/accounts/logos/000/000/001/original/logo.jpg?87879987987987
@logo = @account.company_logo
if @logo.present?
@logo_image = Tempfile.new(['', ".#{@logo.url.split('.').last.split('?').first}"])
@logo_image.binmode # note that our tempfile must be in binary mode
@logo_image.write open(@logo.url).read
@logo_image.rewind
end
在.xlsx文件中
sheet.add_image(image_src: @logo_image.path, noSelect: true, noMove: true, hyperlink: "#") do |image|...
参考链接:http://mensfeld.pl/tag/tempfile/以获取更多信息。
.split('.').last.split('?').first
是从logo.jpg获取.jpg吗? 87879987987987.