Lua 学習: xls ファイル・アクセス

2016-11-07 :  PCクリニック
Python、C言語、Perl、グルコサミン、Firefox
2年前(2014-06-16)の記事「Python 学習: xls ファイル・アクセス
で、
  ・・・・・
  ・・・・・
  「Excel操作 (python-excel)

     アプリケーションを作成する上で、
    Excelを読み書きする機会は多いと思います。
     PythonでもExcel操作が可能なライブラリが存在しており、
    その内の一つがpython-excelライブラリです。

     「python-excel」ライブラリは「xlrd」「xlwt」「xlutils」という
    3つのパッケージが存在します。
    インストーラもそれぞれ分かれており、
    用途に応じてダウンロード・インストールを行いましょう。
  ・・・・・
  ・・・・・
と書いた。

今回、Lua(GSL Shell)で、相当するものは無いか?

調べてみたが、「Stack Overflow」の
Using Lua for working with excel
に載っている“LuaCOM”くらいしか見つからない。

これ、<紙>では使えない?
--->「LuaCOM 代替:VBScript 利用
  ・・・・・
  ・・・・・
  でも、“LuaCOM”は
  試してみたり、調べたり、して見たが、・・・・・
  GSL Shell ( LuaJIT ) では使えなさそう???
  ・・・・・
  ・・・・・

そこで、
afxLua / winman は、Python の win32com に匹敵”を使ってみた。


取り敢えず、xls ファイルの読み込み
既存の“hoge.xls”を丸ごと、“out.txt”に変換する。
入力ファイルは、
ImageJ 学習:拡張子 xls で出力!?”じゃない、
本物(?)の(バイナリの)ファイルであること。
出力テキストファイルは、タブ区切りとする。


出来たプログラムは、
----- sample_xls2txt.gsl -----
require'winman' ----- モジュール準備

----- 出力ファイルの準備 -----
OT=io.open( 'out.txt', 'w' ); OT:close() ----- カラのファイルを用意し、
os.execute( 'start notepad out.txt' ) ----- “メモ帳”で開く

----- 入力ファイルの準備 -----
os.execute( 'start hoge.xls' ) ----- “EXCEL” で開く

----- 両方のアプリの“窓”を特定
pad = winman.find{matchtitle=".+メモ帳$", wait=4000}
xls = winman.find{matchtitle=".+hoge.xls$", wait=4000} ----- 環境による

----- 元を、全て選択(Ctrl+A)し、クリップボードにコピー(Ctrl+C)
xls:activate(); winman.sleep(10)
winman.send( '^a^c' )
winman.sleep(500) ----- clipboard に確実に書き込まれる迄

----- メモ帳にペースト(Ctrl+V)し、上書き保存(Ctrl+S)し、
pad:activate(); winman.sleep(10)
winman.send( '^v^s' ); winman.sleep(200)

winman.send( '%fx' ) ----- ファイル(Alt+F)→終了(X)

----- EXCELで、選択解除(ESC)し、ファイル(Alt+F)→終了(X)
xls:activate()
winman.send( '{ESC}%fx' )
でイイかな?

補足
最初にカラのファイルを用意しとあるが、
これは、上書き保存1発で済ませたい為である。
もしゼロから“メモ帳”を立ち上げるとすると、
最後に保存するとき、
「ディレクトリ指定」→「ファイル名指定」
と些かメンドウになるから。


なお、
テキストファイルに出力せず、メモリ上の文字列で処理する場合は、
----- sample_xls2string.gsl -----
require'winman'
require'clipboard'

function split( str, sep )
if sep == nil then sep = '%s' end
local t={} ; i=1
for str in string.gmatch( str, "([^"..sep.."]+)") do
t[i] = str i=i+1
end
return t
end

os.execute( 'start hoge.xls' )
xls = winman.find{matchtitle=".+Excel.*$", wait=4000} ----- 環境条件を若干緩めた

xls:activate(); winman.sleep(10)
winman.send( '^a^c' )
winman.sleep(500)

ww = clipboard.gettext() ---------- この文字列

xls:activate(); winman.sleep(100)
winman.send( '{ESC}%fx' )

---------- 確認 ----------

wT = split( ww, '\n' ) ----- 行毎の文字列 のテーブル
B3 = split( wT[3], '\t' )[2] ----- 3行目の2列目の項目
print( B3 )
の様になるのかナ?


本日はここまで。


Lua ( GSL Shell ) 学習は続く。


見ていただいた序でとは厚かましい限りですが、
お帰りに投票して頂けるとなお嬉しいです。 ⇒ blogram投票ボタン


161008
関連記事
スポンサーサイト

コメントの投稿

管理者にだけ表示を許可する

おきてがみ/blogram
blogram投票ボタン



おきてがみ

最新記事
カレンダー
09 | 2017/10 | 11
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31 - - - -
月別アーカイブ
カテゴリ
最新コメント
検索フォーム
リンク
プロフィール

<紙>

Author:<紙>
ようこそ。
「パソコンヲタクの雑記帳」
もろもろなことを綴っています。
パソコン ヲタクってねくら?
画像は kami でなく kani です。

カウンター(fc2、i2i) /Google Analytics


i2i(from 2010-08-24)
Total =
Today  =  
Yesterday=
アンチエイジング

Google Analytics
ブックマーク