我一直在使用Spreadsheet gem来创建xls文件,并在我的应用程序中使用rubyzip gem将它们压缩下载。
以下是生成xls文件的lib类的代码片段
excel_file = Spreadsheet::Workbook.new
sheet1 = excel_file.create_worksheet :name => 'Attendance'
.#code
.#code for xls
.#code
excel_file.write("/home/Code/attn/files/excel/TEST-#{@name}-#{t}.xls")
我在控制器中压缩文件
files = Dir.glob("#{Rails.root}/files/excel/*.xls")
@original_file = File.basename(files.first)
@original_path = "#{Rails.root}/files/excel"
Zip:: File.open(@filename, Zip::File::CREATE) do |z|
z.add(@original_file,@original_path+'/'+@original_file)
z.get_output_stream("Other details.txt") { |os| os.write "This is a system generated excel sheet" }
end
send_file @filename, :type => 'application/zip', :filename => "Attendance-#{city}-#{t}.zip", :stream=> false, :x_sendfile=>true
当我使用Ubuntu桌面下载zip文件并使用LibreOffice读取xls文件时,此方法非常有效。正确提取zip没有任何问题,并且读取xls表而没有任何损坏警告。
但是当我使用Windows 7下载相同的zip文件并使用文件浏览器解压缩时,使用MS Excel打开xls文件"错误0x80070057:参数不正确" 弹出错误。
此外,当通过gmail或hotmail上传xls表时,它被标记为病毒。
注意: - 仅适用于Spreadsheet gem创建的大小超过140kB的xls文件
生产和本地环境生成的文件都存在此问题。
环境: -
生产
Ubuntu 14.04 server
rvm 1.26.11
Ruby 2.2.2
开发
Ubuntu 14.04
rvm 1.26.11
Ruby 2.1.6
使用的Gems版本: -
生产
rubyzip (1.1.7)
spreadsheet (1.0.7)
rubygems-bundler (1.4.4)
ruby-ole (1.2.11.8)
开发
rubyzip (1.1.7)
spreadsheet (1.0.7)
rubygems-update (2.4.8)
ruby-ole (1.2.11.8)
生成的xls文件的mime类型是
应用/ CDFV2-腐败;字符集=二进制