@hasegawayosuke
ExecuteExcel4Macro で CALL ワークシート関数使ってShellExecute呼んでそれでVimScript操作してHTMLを数秒で生成する Excel の使い方をたぶん mattn が書いてくれる。
http://twitter.com/hasegawayosuke/statuses/147123761429217280
まずGo言語のソース(動作には go-oleが必要)
package main
import (
"fmt"
"github.com/mattn/go-ole"
"github.com/mattn/go-ole/oleutil"
"io/ioutil"
"os"
"path/filepath"
"strconv"
)
func main() {
ole.CoInitialize(0)
unknown, _ := oleutil.CreateObject("Excel.Application")
excel, _ := unknown.QueryInterface(ole.IID_IDispatch)
defer func() {
if excel != nil {
oleutil.CallMethod(excel, "Quit")
excel.Release()
}
}()
path, _ := filepath.Abs(os.Args[1])
sheet := os.Args[2]
r1, _ := strconv.Atoi(os.Args[3])
c1, _ := strconv.Atoi(os.Args[4])
r2, _ := strconv.Atoi(os.Args[5])
c2, _ := strconv.Atoi(os.Args[6])
dir, file := filepath.Split(path)
path = fmt.Sprintf(`'%s[%s]%s'`, dir, file, sheet)
cwd, _ := os.Getwd()
tmp, _ := ioutil.TempFile(cwd, "hasegawayosuke")
defer os.Remove(tmp.Name())
for r := r1; r <= r2; r++ {
for c := c1; c <= c2; c++ {
ret := oleutil.MustCallMethod(
excel,
"ExecuteExcel4Macro",
fmt.Sprintf(`""&` + path + `!R%dC%d`, r, c))
if c != c1 {
fmt.Fprint(tmp, ",")
}
fmt.Fprint(tmp, ret.ToString())
}
fmt.Fprintln(tmp)
}
oleutil.MustCallMethod(
excel,
"ExecuteExcel4Macro",
`CALL("shell32", "ShellExecuteA", "JJJCCJJ", 0, 0, "gvim", ` +
`"""` + tmp.Name() + `"" -S session.vim", 0, 1)`)
}
そしてセッション用のvimscript
%s!,!</td><td>!g|:%s!.*!<tr>\r\t<td>&</td>\r</tr>!g|:%s!><!>\r\t<!g
exe "normal! ggO<table>\<esc>Go</table>"
set ft=html
コマンドラインから
excel4macro subtech.xls Sheet1 3 2 7 3
こう実行する。引数はファイル名、シート名、開始行番号、開始列番号、終了行番号、終了列番号になります。これで実行すると...
便利!ぇ