首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用RJB (Ruby桥)的Aspose不工作

使用RJB (Ruby桥)的Aspose不工作
EN

Stack Overflow用户
提问于 2013-06-05 21:40:01
回答 2查看 1K关注 0票数 3

我在Java中有一个代码,它通过赋值库打开一个excel模板(它运行得很完美):

代码语言:javascript
复制
import com.aspose.cells.*;
import java.io.*;

public class test
{
    public static void main(String[] args) throws Exception
    {
        System.setProperty("java.awt.headless", "true");
        FileInputStream fstream = new FileInputStream("/home/vmlellis/Testes/aspose-cells/template.xlsx");
        Workbook workbook = new Workbook(fstream);
        workbook.save("final.xlsx");
    }
}

在我用RJB (Ruby )在上运行这个程序之后:

代码语言:javascript
复制
require 'rjb'

#RJM Loading
JARS = Dir.glob('./jars/*.jar').join(':')
print JARS
Rjb::load(JARS, ['-Xmx512M'])

system = Rjb::import('java.lang.System')
file_input = Rjb::import('java.io.File')
file_input_stream = Rjb::import('java.io.FileInputStream')
workbook = Rjb::import('com.aspose.cells.Workbook')

system.setProperty("java.awt.headless", "true")
file_path = "/home/vmlellis/Testes/aspose-cells/template.xlsx"
file = file_input.new(file_path)
fin = file_input_stream.new(file)

wb = workbook.new(fin)

我知道这个错误:

代码语言:javascript
复制
test.rb:57:in `new': Can't find file: java.io.FileInputStream@693a317a. (FileNotFoundException)
    from aspose-test.rb:57:in `<main>'

为什么?我运行同样的代码..。但是在Ruby中却不起作用!我该怎么解决这个问题?

更新:

文档中有一个初始化程序:工作簿(java.io.InputStreamstream).但在RJB不起作用。(这怎么可能?)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-06-07 10:32:45

你的程序应该是有效的,但我找不到任何理由它没有,我正在调查它。

现在交替的方法。

方法1使用工作簿(String)构造函数,而不是工作簿(FileInputStream)。这件事在我的结尾是完美无缺的。示例代码是

代码语言:javascript
复制
require 'rjb'

#RJM Loading
JARS = Dir.glob('/home/saqib/cellslib/*.jar').join(':')
print JARS
Rjb::load(JARS, ['-Xmx512M'])

system = Rjb::import('java.lang.System')
workbook = Rjb::import('com.aspose.cells.Workbook')

system.setProperty("java.awt.headless", "true")
file_path = "/home/saqib/rjb/template.xlsx"
save_path = "/home/saqib/rjb/final.xlsx"

wb = workbook.new(file_path)
wb.save(save_path)

方法2编写了一个新的类库。在其中编写所有与Aspose.Cells相关的代码。公开需要从Ruby (RJB)调用的非常简单和基本的方法。为什么?

  • 用本机Java语言编写程序很容易。如果使用RJB,则需要执行大量的代码转换。
  • 在Java中调试和测试是很容易的。
  • RJB的使用仅限于从您自己的Java库调用方法。RJB代码将是小的和基本的。

类似的例子使用自己的库创建了一个新的项目,可以说是“最快速的”。在其中添加一个新的公共类。

代码语言:javascript
复制
package cellstest;
import com.aspose.cells.Workbook;
public class AsposeCellsUtil 
{
    public String doSomeOpOnWorkbook(String inFile, String outFile)
    {
        String result = "";
        try
        {
            // Load the workbook
            Workbook wb = new Workbook(inFile);
            // Do some operation with this workbook
            // ..................
            // Save the workbook
            wb.save(outFile);
            // everything ok.
            result = "ok";
        }
        catch(Exception ex)
        {
            // Return the exception to calling program
            result = ex.toString();
        }
        return result;
    }
}

像这样,为每个操作添加任意多个方法。构建项目并将"cellstest.jar“复制到复制Aspose.Cells jar文件的文件夹中。您可以从方法中返回一个字符串,并在Ruby程序中检查返回值,以获得成功或错误代码。Ruby程序现在将类似于

代码语言:javascript
复制
require 'rjb'

#RJM Loading
JARS = Dir.glob('/home/saqib/cellslib/*.jar').join(':')
print JARS
Rjb::load(JARS, ['-Xmx512M'])

system = Rjb::import('java.lang.System')
AsposeCellsUtil = Rjb::import('cellstest.AsposeCellsUtil')

system.setProperty("java.awt.headless", "true")
file_path = "/home/saqib/rjb/template.xlsx"
save_path = "/home/saqib/rjb/final.xlsx"

# initialize instance
asposeCellsUtil = AsposeCellsUtil.new()
# call methods
result = asposeCellsUtil.doSomeOpOnWorkbook(file_path, save_path)

puts result

PS。我是阿斯坡公司的开发人员,布道者。

票数 4
EN

Stack Overflow用户

发布于 2013-06-06 17:53:47

在Java代码中,将文件名字符串传递给FileInputStream()构造函数:

代码语言:javascript
复制
FileInputStream fstream = new FileInputStream("/home/vmlellis/Testes/aspose-cells/template.xlsx");

在Ruby代码中,传递一个文件对象:

代码语言:javascript
复制
file = file_input.new(file_path)
fin = file_input_stream.new(file)

您试过做与Java相同的事情吗?

代码语言:javascript
复制
fin = file_input_stream.new(file_path)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16950372

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档