一行野郎3

--------------------- [番外3] 一行野郎(回想) --------------------------


はじまり、はじまり~。


<ちょっと、ちょっとアンタ、アタイのかわいい後輩ちゃんを何驚かしているのよ!>
何の話ってか初代天使?

<そ、そうよ「配列マジック」では世話になったわね! 借りを返しに来た。>
だから何の話だって??

<あの時は、マルチステートメント使ってたじゃない?>
だから?

<マルチステートメント使っていないのを出しなさいよ!>
だから~「真・一行スクリプト」で詫び入れてるジャン。

<そんな古いのもう時効よ。>
オイっ!

<やっぱ、もう二度と出来ないんだ・・・一行野郎が聞いてあきれるわ。>
あの時は・・・回想

    <ほえぇ~~ホントだ。わずか4文字の変更で、あの複雑な内容をクリアするなんて・・・まさに「マジック!」>

    (何なのコイツは! 普通に出てくる質問で、コノ複雑な内容をたった一行で当たり前のようにやってのけるとは。)
    (しかも通常との変更点は4文字だとぉ? 冗談みたい!)
    (アタイは、今後もう一度こんなスクリプトを見る事が出来るのだろうか?)

回想終わり。

<と、思った私が馬鹿だった・・・一時のまぐれ当たりに騙されていたなんて。>
おい、おいっ。

<後輩ちゃんがアタイのところへ来た時は、もうボロボロだったわ! ボー然としてるし、天使の輪外れてるし・・・>
<「Linersが、Linersが・・・もう何も信じられない。」って。>
あ、アイツ。ワザと誤解を生むような言い回しを・・・

<で、アタイがここは一発ガツンと言ってやらねばと思って来たわけよ。>
ガツンとねぇ。私は何もしてないし、勝手に驚いていただけだよ。アンタも一杯食わされたね?

<えっ? アンタが後輩ちゃんにヒドイ事したんじゃないの?>
してません。

<じゃあ、何でアタイのところへ?>
多分このスクリプトを見せたかったんじゃないかな?

<どれどれ? ひえぇぇ~~何なのコレ? マルチレス一行の連発ぅ。>
グラグラ!
<けない。アタイの輪も落ちそうだったわ!>

<で、でもアタイは騙されないわ!>
どうしてそうなる。

<ヤラセでしょ? 予め一行スクリプトを用意して置いて、それを後輩ちゃんに選ばせたのね>
<その証拠にdos関連ばっかだし、アンタの得意分野だし・・・二度も騙すなんて>
だから~。

<やっぱ、アタイがシメてやるわ。そ~ねぇ・・・コレ!コレをやりなさいよ!>
<Comやdosは使えなさそうだし、結構な行数あるし、予め用意する暇なんてないから。>
たっくぅ。即効強制ですか? 年季が入っているだけあってタチが悪すぐる。

<何かおっしゃいました? Linersさん?>
い、いえ・・・口調が変わるところがさらに怖い。
どれどれ、質問はっと、「ExcelViewからの値読み取り」? ・・・また最悪な。

あ、あの
<何!>
コレってショートカットキーぐらいしかないんですけれど。

<だから?>
だけら、すでに使っていて無理っぽいんですけど。

<だから?>
それに12行もあるんですけれど。

<だから?>
だから一行ではチョット、3行でオッケーとかは?

<ダメに決まってるジャン! アタイの話聞いてた? マルチレス一行以外ありえないわ>
・・・そ、そんなぁ・・・

<か、勝ったわ! ついに悲願を達成したのよ!長年の恨み思い知ったか!!>
天使が「長年の恨み」とか言っちゃダメでしょ。 ホレっ。

<ホレって何?>
スクリプト。

<スクリプトって?>
あれ? マルチレス一行スクリプトが見たいんじゃなかったの?

<なにを、バカな・・・今、掲示板を見たばかりよ。スクリプト書く時間なんてないわ! ノータイムよ!!>
時間ならある。 アンタが勝利に陶酔していた時間が。

<ああ、神様、仏様。 お許しください。この私目がいけないのです。>
<迷える子羊に試練を与えすぎました。受けるべき罰はこの私が全て甘んじてお受け・・・・>
懺悔に入るのもノータイムだな。


print sckey(GETID("Excel Viewer"),VK_CTRL,G) + sckey(0,E,5,vk_enter) + sckey(0,VK_CTRL, C) + kbd(VK_esc) + GETSTR(0)


<120文字もないってどうゆう事? 実行してみて?>
ポチットな。

<ぐっ。マジッすか? まったく同じ動き・・・マルチレス一行&ノータイム・・・>
<いったい何が起こっているの?>
sckeyをつなげただけだよ。

<それは見ればわかるわ。そうじゃなくて、普通はウィンドウのIDを取得してそれからでしょ?>
普通ならね。でもウィンドウIDを必要とする関数の多くは0を指定するとアクティブ・ウィンドウとなる。

<あっ。そうか! でも必ずアクティブになるとは限らないでしょ? 不安定なんじゃないの?>
そうでもないよ。最初のsckeyでその性質上必ずアクティブになる。後は上手に繋げるだけ。

<でも、ちゃんと値を取得するわよね?>
ああ、UWSCの関数は、その戻り値のないものを式の中で使ってもエラーとはならない、加えて文字や数値を自動変換してくれる。
つまり、かなり自由に式の中に関数を組み込める訳。+で繋げれば順番に実行されるしね。

<そっかぁ~。有効なのはGETSTR(0)だけで、それまでにクリップボードに値がセットされる訳ね。>
そうゆう事ね。

<いったいなんてヤツなの? 実際の質問にマルチレス一行&ノータイム・・・圧縮率10倍以上>
<それだけじゃないわ!DOS、Windowsの両刀使いに加えて、階層処理、管理者権限、ノーCom処理が全て一行?!>
<最近だけでも3連発・・・過去には数え切れず。>
どうした?

<グスン。なんだか涙が出てきたわ。>
悲しいのか?

<嬉し涙よ! もうっ♪>

<・・・そう。そうだったのね。後輩ちゃんはコレを見せたかったのね?>


そうみたいだね。


おしまい。

 

-----------------------------------------------------------------------------------------------

提供は: 一行野郎 = Liners でした。

-----------------------------------------------------------------------------------------------
  ExcelViewからの値読み取り まるみ  
 ライセンスの関係でExcelがインストールされていないPCがあります。
運悪く、このPCで各部署から集められたExcelファイルの特定のセルの値を確認するルーチン作業が継続して発生することになりました。
調べたところフリーソフトのExcelViewerを使ってExcelの内容自体を表示することができました。
現在はExcelViewerで開いたファイルを目視で確認していますが、単純な比較作業なのでUWSCの力を借りたいと考えました。
Excel同様にCOMを使えばUWSCでセルの値を抜き出して・・・と調べてみたところ、ExcelViewerはCOMではないことが判明。
そこで今のところなんとも・・・な、次のようなスクリプトで逃げています。

 

EXID = GETID("Excel Viewer")

// アクティブセルをA1に移動
SCKEY( EVID , VK_CTRL , VK_HOME )

// セルを矢印キーを使ってE5まで移動
For i = 1 to 4
KBD(VK_Right)
Next

For i = 1 to 4
KBD(VK_Down)
Next

// アクティブセルの値を取り出す
SCKEY( EVID , VK_CTRL , C )
セルから取得した値 = GETSTR(0)
KBD(VK_ESC)

print セルから取得した値

勉強のためにも、もっとスマートな方法で解決したいと思うのですが、どんなアプローチがあるのでしょうか?

COMを使わずにUWSCでExcelから値を読み取る方法などでも構いません。
ヒントになりそうなことがありましたらば、是非お聞かせください。
よろしくお願いいたします。
DATE:2010/10/16(Sat) 12:58 No.3272  
 
 RE:ExcelViewからの値読み取り Liners  
 
 >もっとスマートな方法で解決したいと思う
スマートかどうかは疑問ですが、for-nextを避けたいのならジャンプを使うと良いでしょう。
行数を減らしたいのならsckeyをつなげる事ぐらいしか思い当たりません。

// ジャンプを使う例
sckey(ExID, VK_CTRL, G)  // ジャンプへのショートカット
sckey(0, E, 5, vk_enter) // sckeyを使いE5へ移動
DATE:2010/10/16(Sat) 17:37