Ruby Microsoft Excel电子表格用作从代码调用的计算引擎

Ruby Microsoft Excel电子表格用作从代码调用的计算引擎,ruby,excel,spreadsheet,ole,Ruby,Excel,Spreadsheet,Ole,我有一个MS Excel电子表格,可以做一些复杂的计算。我想创建一个脚本,它将使用从电子表格中获得的结果创建一个CSV文件 我可以用我的编程语言重写电子表格中的逻辑(例如Ruby,但我愿意使用另一种语言),但是每当有人更改电子表格中的逻辑时,我就必须更新代码。是否可以将MS Excel电子表格用作一个黑匣子,一个可以从我的代码中调用的计算引擎?然后我只需要在我的代码中编写CSV部分和输入数据下载,整个计算逻辑就可以保存在电子表格中,并且可以很容易地更新 理想情况下,我不想在电子表格中添加任何CS

我有一个MS Excel电子表格,可以做一些复杂的计算。我想创建一个脚本,它将使用从电子表格中获得的结果创建一个CSV文件

我可以用我的编程语言重写电子表格中的逻辑(例如Ruby,但我愿意使用另一种语言),但是每当有人更改电子表格中的逻辑时,我就必须更新代码。是否可以将MS Excel电子表格用作一个黑匣子,一个可以从我的代码中调用的计算引擎?然后我只需要在我的代码中编写CSV部分和输入数据下载,整个计算逻辑就可以保存在电子表格中,并且可以很容易地更新

理想情况下,我不想在电子表格中添加任何CSV生成或数据下载代码,因为它是由领域专家(而不是程序员)使用的。此外,我必须从互联网下载一些数据,并将其作为输入值传递到电子表格。我希望将这部分代码保存在外部,保存在Git这样的版本控制系统中。另外需要注意的是,电子表格使用了Solver Excel插件

如果您能为我们提供帮助,我们将不胜感激

谢谢,
Michal

要使用Ruby操作Excel电子表格,您可能需要使用win32ole

下面是一个示例脚本:

data = [["Hello", "World"]]

# Require the WIN32OLE library
require 'win32ole'
# Create an instance of the Excel application object
xl = WIN32OLE.new('Excel.Application')
# Make Excel visible
xl.Visible = 1
# Add a new Workbook object
wb = xl.Workbooks.Add
# Get the first Worksheet
ws = wb.Worksheets(1)
# Set the name of the worksheet tab
ws.Name = 'Sample Worksheet'
# For each row in the data set
data.each_with_index do |row, r|
  # For each field in the row
  row.each_with_index do |field, c|
      # Write the data to the Worksheet
      ws.Cells(r+1, c+1).Value = field.to_s
  end
end
# Save the workbook
wb.SaveAs('workbook.xls')
# Close the workbook
wb.Close
# Quit Excel
xl.Quit

要编写更复杂的代码,只需记录一个宏,然后查看宏的代码,并将其从VB转换为Ruby。

是否要从Excel创建csv?我不清楚为什么要从其他语言调用Excel工作簿。除非我遗漏了什么,否则请让用户以正常方式操作工作簿,并添加BeforeClose事件以输出CSV文件。如果您不知道VBA,这将有点困难,但我相信,这比任何其他选项都要容易。Tony,我需要定期运行计算。我想创建一个计划任务,由系统定期执行。该任务必须从互联网下载一些输入数据并将其传递到电子表格。我现在更新问题。谢谢,迈克尔,这很有希望。您知道是否可以使用OLE执行Excel加载项吗?