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

我想在 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,它允许使用带有ruby的java库). 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

相关文章

validates:conclusion,:presence=>true,:inclusion=>{...
一、redis集群搭建redis3.0以前,提供了Sentinel工具来监控各...
分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣...
上一篇博文 ruby传参之引用类型 里边定义了一个方法名 mo...
一编程与编程语言 什么是编程语言? 能够被计算机所识别的表...
Ruby类和对象Ruby是一种完美的面向对象编程语言。面向对象编...