C で Excel にアクセスするのには COM の invoke を使ってアクセスします。C で書く前に Ruby の invoke メソッドだけを使ってアクセスしてみます。
参考:Win32OLE 活用法 【第 2 回】 Excel
COM を学ぶ(5) : Mingw で MS-Access,SQL server に接続
require 'win32ole' # セルを取得 def cellObject(sheet, y, x) sheet.invoke("Cells").invoke("Item",y,x) end # マージセルなら1,1のアイテム、通常セルならそのセル # を返す。 def getItem(cell) if cell.invoke("MergeCells") then cell.invoke("MergeArea").invoke("Item",1,1) else cell end end # セルデータを取得 def getCell(sheet, y, x) getItem(cellObject(sheet, y, x)).invoke("Value") end # セルにデータを書き込み def putCell(sheet,y,x,value) getItem(cellObject(sheet, y, x)).setproperty("Value",value) end filename = WIN32OLE.new('Scripting.FileSystemObject').invoke("GetAbsolutePathName","sample2.xls") xl = WIN32OLE.new('Excel.Application') # xl.setproperty("Visible",true) book = xl.invoke("Workbooks").invoke("Open",filename) sheet = book.invoke("Worksheets",2) putCell(sheet, 1, 2, "Haskell") putCell(sheet, 1, 3, "Scala") putCell(sheet, 1, 4, "Prolog") p getCell(sheet, 1,2) p getCell(sheet, 1,3) p getCell(sheet, 1,4) book.invoke("Save") xl.invoke("Workbooks").invoke("Close") xl.invoke("Quit")
PS D:\lang\COM\Excel> ruby exl.rb "Haskell" "Scala" "Prolog"