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

时间:2012-03-15 20:59:08

标签: ruby excel spreadsheet ole

我有一个MS Excel电子表格,可以进行一些复杂的计算。我想创建一个脚本,该脚本将创建一个CSV文件,其中包含从电子表格中获得的结果。

我可以用我的编程语言重写电子表格中的逻辑(例如Ruby,但我可以使用不同的语言),但是每当有人更改电子表格中的逻辑时我就必须更新我的代码。是否可以使用MS Excel电子表格作为黑盒子,计算引擎,可以从我的代码调用?然后我只会在我的代码中编写CSV部分和输入数据下载,整个计算逻辑可以保留在电子表格中,并且可以轻松更新。

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

任何帮助如何做到这一点将非常感激。

谢谢, 米甲

1 个答案:

答案 0 :(得分:2)

要使用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。