ruby-on-rails - 写入包含宏的现有 Excel .xls 文件

标签 ruby-on-rails ruby linux spreadsheet export-to-excel

我想在 Linux 下使用 Ruby 将数据插入现有的 Excel (.xls) 文件。这个文件已经有数据,它有一些格式属性,它包含宏。

我尝试使用电子表格 gem 将数据插入到文件中,但是当我保存修改时,文件的格式和所有宏都丢失了。

这是我遇到此问题的简单修改示例:

book = Spreadsheet.open('myOriginalFile.xls')
sheet = book.worksheet 0
sheet.write('C12','hello')
book.write('myModifiedFile.xls')

我尝试了很多东西,在论坛和网络上进行了研究,但没有找到解决方案... 有人有想法吗?

最佳答案

我找到了一个解决方案:

我使用 POI Apache 库,用 java 编写,带有 rjb gem(Ruby Java Bridge,它允许将 java 库与 ruby​​ 一起使用)。 POI 允许保留现有 xls 文件的宏和公式并对其进行修改。

对于那些需要的人,这里是如何设置 rjb 以使用 POI :

    # JVM loading
    apache_poi_path = File.dirname(__FILE__)+'/poi-3.8/poi-3.8-20120326.jar'
    Rjb::load("#{apache_poi_path}", ['-Xmx512M'])

    # Java classes import 
    @file_class = Rjb::import('java.io.FileOutputStream')
    @workbook_class = Rjb::import('org.apache.poi.hssf.usermodel.HSSFWorkbook')
    @poifs_class = Rjb::import('org.apache.poi.poifs.filesystem.POIFSFileSystem')
    Rjb::import('org.apache.poi.hssf.usermodel.HSSFCreationHelper')
    Rjb::import('org.apache.poi.hssf.usermodel.HSSFFormulaEvaluator')
    @cell_reference_class = Rjb::import('org.apache.poi.hssf.util.CellReference')
    @cell_class = Rjb::import('org.apache.poi.hssf.usermodel.HSSFCell')
    # You can import all java classes that you need

    # Java classes utilisation :
    @file_input_class = Rjb::import('java.io.FileInputStream')
    @file_input = @file_input_class.new(model_file_path)
    @fs = @poifs_class.new(@file_input)
    @book = @workbook_class.new(@fs)

    @worksheet = @book.getSheet('worksheet')
    # ...
    # You can use your objects like in Java but with a ruby syntax

关于ruby-on-rails - 写入包含宏的现有 Excel .xls 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13291094/

相关文章:

javascript - 使数据表响应

linux - 在 SED 中加入行中断条件

ruby-on-rails - 让 ng-token-auth 与 devise_token_auth 一起工作

ruby-on-rails - Ruby 没有方法错误

ruby - mac OS X 上 ruby​​ 中的递归 chmod?

ruby - IRB 内部 ri 的未定义方法

javascript - 这种 Rails 多线程方法有什么问题吗?

linux - 输出中出现奇怪的行

linux - 获取 ssh 命令的修剪输出

ruby-on-rails - 使用searchkick配置自定义ID?