0

我正在使用(Axlsx gem,它工作得很好,但我需要将图像添加到单元格。我知道可以使用图像文件来完成(请参阅将图像添加到由 Axlsx 生成的 Excel 文件。?),但我使用我们存储在 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 ...> 

不知道如何进行

4

2 回答 2

1

尝试使用read将内容拉入临时文件并使用该位置:

t = Tempfile.new('my_image')
t.binmode
t.write image.read
t.close
ws.add_image(:image_src => t.path, ...
于 2014-02-03T21:11:48.140 回答
0

为 Paperclip & S3 添加一个替代答案,因为除了这个答案之外我找不到参考。

我正在使用 Rails 5.0.2 和 Paperclip 4.3.1。

使用图像 URL,例如: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。

于 2017-04-01T14:04:18.717 回答