一行野郎8

--------------------- [番外8] 一行野郎(最後の戦い2) --------------------------


はじまり、はじまり~。


<う~~ん。う~~ん。う~~ん。>
便秘ですか?

<んっな訳ないでしょ! コレどうしても理解できない。>
確かに今回はリアクションが少なかったね。

コレ。

dm = doscmd("start excel.exe c:Book1.xls") + sendstr(0, "Sheet4!A1:AG100") + sleep(1) + sckey(0, vk_ctrl, g, v) + sckey(0,vk_enter,vk_ctrl, c) + SENDSTR(exec("C:Program FilesTeraPadTeraPad.exe"), REPLACE(REPLACE(getstr(0), "<#TAB>", ""),"n", "<#cr>"), 0, 1)

そうだな関数ごとに分解してみようか。

doscmd("start excel.exe c:Book1.xls")  // Excel起動+ファイル
sendstr(0, "Sheet4!A1:AG100")       // "Sheet4!A1:AG100"をクリップボードへ
sleep(1)                 // 待ち時間 Excel起動完了の為
sckey(0, vk_ctrl, g, v)          // ジャンプダイアログ表示&貼り付け
sckey(0,vk_enter,vk_ctrl, c)       // ジャンプダイアログ閉じる&範囲コピー
// terapadを起動しつつ、コピー内容をゲット&整形して貼り付け。
SENDSTR(exec("C:Program FilesTeraPadTeraPad.exe"), REPLACE(REPLACE(getstr(0), "<#TAB>", ""),"n", "<#cr>"), 0, 1)

<あっ!そっかぁ。ジャンプダイアログの操作だったのね。>
<しっかし、危ないタイミングね?>
この際、贅沢は言ってられん。

<しかも、ツッコミ所満載。>
どの辺が?

<doscmd("start はExecじゃダメなの?>
ダメじゃないけど、パスの長さと、パラメータの受け渡しそれに起動完了までのタイミングがね。

<じゃあ、sendstr(0, "Sheet3!A1:AG100")は?idを取って直接送れば良いのでは?>
試したけど、タイミングを取るのにSleepとGetidとSckeyが増えてしまったから。

<sckey(0,vk_enter,vk_ctrl, c)は対象Windowが違うのになぜ実行できる。>
sckey(0 はアクティブ・Windowに対してのキー操作であり、デフォルトのタイミング(間隔)を持って送られる。
Windowを閉じるのは速いので、間に合うみたいだね。

<ならsckeyは何故二つに分けて連続させた?>
そうして一度コントロールキーをキャンセルしないとEXCEL側でコマンドエラーとなったもんでね。

<ぐっ。たった一行にそこまで考えていたのか。だから時間がかかったんだ。>

<エクセルを開き、sheet4のA1~AG100までをクリップボードにコピーし、整形してTerapadに貼り付け。>
<条件はフリー版でも動くように、ノーCom&マルチレス。[その全てを一行]で。ふえぇ~~なんたる悪条件!>

<いったいこの条件をクリアできる人間が、どれほど居るのだろうか?>
いっぱい居るよ。でもみんなアホらしくてやらないだけさ。

<ツーことは、アンタはアホで一行オタクでヒマな訳ね。>
まっそうゆう事にしとこか。

<ったく。はじめっから出来るならポンポン出せばいいのに~~~! んな訳ないじゃない。>
< ・・・アタイだって不可能と思ったスクリプトが今、目の前にある。こっ、コイツぅ~~~。>

<物語の時代から見てるけど、そのころ一行スクリプトは少しだけで、「コイツ本当に一行野郎なのかよ」と思ってった。しかし、今は・・・>


アホな「一行スクリプト製造マシン」と思っているでしょ?


<・・・ うん♪♪♪>



(一行野郎編) おしまい。



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

提供は: 一行野郎 = 「一日一行(日課)」= アホな「一行スクリプト製造マシン」 = Liners でした。

-----------------------------------------------------------------------------------------------
    クリップボードにコピーの仕方 宮     
    本日pro版を使い始めた宮です。
エクセルを開き、sheet4のA1~AG100までをクリップボードにコピーし、
terapadを開いて、クリップボードから貼り付け、という処理を実行したいのですが、
ご教授お願いいたします。

==========================
Excel = XLOPEN("C:Users●●.xls")
XLACTIVATE(Excel, "Sheet4")
SENDSTR(0, Excel.ActiveSheet.Cells[A1,AG100])

id = GETID("", "#32768", -1)
CLKITEM(id, "開く(O)", CLK_ACC or CLK_BACK or CLK_MUSMOVE)
id = GETID("無題 - TeraPad", "TTeraPadMainForm", -1)
SLEEP(1)

ss = GETSTR(0)

Excel.ActiveSheet.Cells[y,x].Value = ss

==========================
初心者というのが嫌いなのですが、
よろしくお願い申し上げます。


DATE:2011/1/4(Tue) 23:42 No.3400     
    
    RE:クリップボードにコピーの仕方 Liners     
    
    問題点が不明ですが、下記を試してみては?

Excel = XLOPEN("C:Users●●.xls")
Excel.Sheets[4].Range["A1:AG100"].Copy
sckey(exec("C:Program FilesTeraPadTeraPad.exe"), vk_ctrl, v)
DATE:2011/1/5(Wed) 01:19     
    
    terapadでの置換作業の仕方 宮     
    
    Liners さま

宮です。

上記で教えていただいたコードで
terapadまでの貼り付けに成功いたしました^^
ありがとうございます!

続けまして、エクセルからのコピーに含まれる
タブ(t)⇒ 削除
n ⇒ n
という置換作業をしたいのですが、

下記のようなコードを作ってみましたが、
t や 空欄、n n といった文字列が
うまくカーソルに代入されません。

連続質問で申し訳ございませんが
宜しくお願いいたします。

==========================


Excel = XLOPEN("C:●●.xls")
// エクセルを開く

Excel.Sheets[4].Range["A1:AG100"].Copy
// シート4のA1~AG100までをクリップボードにコピー

sckey(exec("C:Program FilesTeraPadTeraPad.exe"), vk_ctrl, v)
// terapadを開き、貼り付け

sckey(0, vk_ctrl, r)
// terapadの置換(R)を開く

SLEEP(1)

id = GETID(GET_ACTIVE_WIN)
CLKITEM(id, "n=改行, t=TAB, =(E)", CLK_BTN, True)
// 置換ウインドウでnなどの記号を有効にする

sckey(0, vk_alt, t)
SENDSTR(0, "t", 1, True)
SLEEP(1)
// Altキー+tを押下し、置換前にカーソルを合わせ、tと代入する 


sckey(0, vk_alt, r)
SENDSTR(0, "", 1, True)
SLEEP(1)
// Altキー+r を押下し、置換前にカーソルを合わせ、(空欄)を代入する

sckey(0, vk_alt, a)
SLEEP(1)
// すべて置換(a) を押下する


sckey(0, vk_alt, a)
SLEEP(20)
// 確認ウインドウですべて(a) を押下する


// 20秒待ち、処理が終わるのを待つ



sckey(0, vk_ctrl, r)
// terapadの置換(R)を開く



SLEEP(1)

sckey(0, vk_alt, t)
SENDSTR(0, "n", 1, True)
// Altキー+tを押下し、置換前にカーソルを合わせ、nと代入する 

sckey(0, vk_alt, r)
SENDSTR(0, "n", 1, True)
SLEEP(1)
// Altキー+rを押下し、置換前にカーソルを合わせ、nと代入する 

sckey(0, vk_alt, a)
SLEEP(1)
// すべて置換(a) を押下する


sckey(0, vk_alt, a)
SLEEP(20)
// 確認ウインドウですべて(a) を押下する

==========================

DATE:2011/1/5(Wed) 10:28     
    
    提案 5150     
    
    terapadに貼り付ける前に置換した方が効率よいのでは?
とりあえずtab削除のみ。

Excel = XLOPEN("C:Users●●.xls")
Excel.Sheets[4].Range["A1:AG100"].Copy
REPLACE(getstr(0),"<#TAB>","")
sckey(exec("C:Program FilesTeraPadTeraPad.exe"), vk_ctrl, v)

あとはがんばってください。
DATE:2011/1/5(Wed) 13:33     
    
    terapadでの置換作業の仕方 2 宮     
    
    5150さまのご提案ありがとうございます。

==========================
Excel = XLOPEN("C:Users●●.xls")
Excel.Sheets[4].Range["A1:AG100"].Copy
REPLACE(getstr(0),"<#TAB>","")
sckey(exec("C:Program FilesTeraPadTeraPad.exe"), vk_ctrl, v)
==========================
しかしこのコードでは
処理ができず、置換されぬままテラパッドに
データが貼り付けられました。


引き続き、ご迷惑をおかけしますが
宜しくお願い申しあげます。


DATE:2011/1/5(Wed) 14:20     
    
    terapad置換 解決済み 宮     
    
    宮です。

自分でいじっていたら解決できました^^
ご迷惑をおかけいたしました。

==========================
// エクセルを開く
Excel = XLOPEN("C:●●●")

// シート4のA1~AG100までをクリップボードにコピー
Excel.Sheets[4].Range["A1:AG100"].Copy

// terapadを開き、貼り付け
sckey(exec("C:Program FilesTeraPadTeraPad.exe"), vk_ctrl, v)


sckey(0, vk_ctrl, r) // terapadの置換(R)を開く


// 置換ウインドウでnなどの記号を有効にする
CLKITEM(0, "n=改行, t=TAB, =(E)", CLK_BTN, True)



置換id =GETID("置換")
SendStr(置換id, "t", 1, True)     // 検索
SendStr(置換id, "", 2, True)     // 置換

sckey(0, vk_alt, a) // すべて置換(a) を押下する
SLEEP(1)
sckey(0, vk_alt, a) // 確認ウインドウですべて(a) を押下する
SLEEP(10)



sckey(0, vk_ctrl, r) // terapadの置換(R)を開く


置換id =GETID("置換")
SendStr(置換id, "n", 1, True)     // 検索
SendStr(置換id, "n", 2, True)     // 置換

sckey(0, vk_alt, a) // すべて置換(a) を押下する
SLEEP(1)
sckey(0, vk_alt, a) // 確認ウインドウですべて(a) を押下する
SLEEP(20)
DATE:2011/1/5(Wed) 15:18     
    
    RE:クリップボードにコピーの仕方 5150     
    
    失礼、こうでした。

Excel = XLOPEN("C:Users●●.xls")
Excel.Sheets[4].Range["A1:AG100"].Copy
SENDSTR(0,REPLACE(getstr(0),"<#TAB>",""))
sckey(exec("C:Program FilesTeraPadTeraPad.exe"), vk_ctrl, v)

けど処理速度が遅いかもしません。
いろんな方法がありますので。


    クリップボードにコピーの仕方  宮     
    
    5150さま

いえいえ助かりました。
ありがとうございました^^
それでは今後ともよろしくお願い申し上げます。