2008/02/06

Common Lisp : cl-win32ole Excel UsedRange

Excel に書かれたテーブル仕様書から clsql:def-view-class でテーブルクラスを作り、clsql-sys:create-view-from-class で Postgresql 上にテーブルを作成しました。
Excel から clsql:def-view-class 定義を作るのにはもちろん cl-win32ole を使いました。
最初は Excel のセルを1つずつ見ていかないとだめかな、めんどうだなぁ、と思っていたのですが。
値の入っているセルの範囲を取得できる UsedRange という便利なメソッドを見つけました。
これで、Excel シート上のデータを一括で Lisp のリストとして取得できます。
あとは、Lisp でのリスト操作なので楽々でした♪
UsedRange とっても便利です。

(eval-when (:compile-toplevel :load-toplevel :execute)
(require :cl-win32ole)
(use-package :cl-win32ole))

(defun excel-contents (path)
(let ((excel (create-object "Excel.Application")))
(unwind-protect
(ole excel :workbooks :open path
:worksheets :item 1
:usedRange :value)
(ole excel :quit))))

2 件のコメント:

匿名 さんのコメント...

とっても素敵ですね。
cl-win32oleってCommon Lispを使う強力な理由になりそう。

Common LispでOLEオートメーションってできるのかな??
って考えて調べるとACLではできるらしいことがACLマニュ
アルであっさりわかりました。次にSBCLではどうだろう、
と思って調べると、こちらの"Common Lisp で OLE ライブ
ラリを作りはじめる"のページがひっかかりました。

Common Lispで自在にWindowsを使えるんですね。
すばらしいです。

Yoshinori Tahara さんのコメント...

コメントありがとうございます。
とても嬉しいコメントです。

まだ、日付や時刻、接続可能オブジェクトなど実装してないので自在にとまではいきませんが、ぼちぼち実装していきたいと思います。