UWSC 掲 示 板
投稿時に「証明書が不正です」と出る場合には、JavaScriptをオンにしてください
動作不具合での質問の場合には環境(OS,IEのバージョン等)の表記もしてください
タイトルは質問内容を表したものにしてください
ネットゲーム関係の質問はご遠慮ください

クリップボードの中身を変数に置き換え / 初心者
秀丸に文字列が記載されています。
その内容全てを変数や定数に置き換える事は可能でしょうか。

hide_id = GETID("秀丸")
html = fget(hide_id, F_ALLTEXT)

上記ではエラー出ました。

何卒よろしくお願いします

No.2931 2016/09/26(Mon) 15:37:29

Re: クリップボードの中身を変数に置き換え / 初心者
ごめんなさい タイトルに不備がありました

クリップボードの中身を変数に置き換え ×

秀丸の中身を変数に置き換え

No.2932 2016/09/26(Mon) 15:38:35
テキスト内容をIEのabout:blankに反映 / ラム酒
過去ログでの質問です。

----------------------------------------------
テキストファイルにHTMLソースが記載されています。
これをHTMLファイルに書き換え、ブラウザ上の値(ソースではない)を全てクリップボードにコピーしたいと考えています。

上記の動作をhtmlファイルを新たに作らずに配列のようなもので処理する事は可能なのでしょうか。


No.2763 2016/08/16(Tue) 16:55:37


☆ Re: HTMLソースを配列で処理 / stuncloud

htmlfileでいいのでは
IEをabout:blankで開いてdocument.writeしてもいいと思います

以下はhtmlfileの例です

fid = fopen("HTMLの書かれたテキストファイル.txt", F_READ)
html = fget(fid, F_ALLTEXT)
fclose(fid)

document = createoleobj("htmlfile")
document.write(html)

msgbox(document.body.innerText)
----------------------------------------------

「IEをabout:blankで開いてdocument.writeしてもいいと思います」
こちらの方法を取りたいのですが、どのように記載すればよろしいでしょうか。

No.2927 2016/09/26(Mon) 13:24:27

Re: テキスト内容をIEのabout:blankに反映 / stuncloud
htmlfileの場合ととくになにも変わりません、変数htmlは上記の引用と同様にファイルを全行読み出したものです

ie.navigate("about:blank")
BusyWait()
ie.document.write(html)

No.2928 2016/09/26(Mon) 14:32:45

Re: テキスト内容をIEのabout:blankに反映 / ラム酒
ありがとうございます。
うまくいきました

No.2930 2016/09/26(Mon) 15:33:49
メールを受信したい(SSL) / まるぱ
いつもUWSCとここで回答されているご先輩の方々のブログには大変お世話になっています。

SSL対応のメールを受信するプログラムを作りたいのですが、
自力では到底できそうになくお力を借りたい次第です。

これまで調べて、dllを利用する方法を調べました。


●BASP21.dll、これはUWSCの使用例に掲載されていますが、残念ながらGmailなどのSSLが必要なメアドには対応していません。


●NonMailNet.dll、こちらは完全無料ではないために、検討を見送りました。


●TKMP.DLL、VB.NET C#.NET 用のメール送受信クラスライブラリ ということなのですが、
UWSCで利用できるのかどうか自分には判断できません。

C#.NETのdllはCOMではないなどの情報を何処かのページでよみました。
POWERSHELLを使えばできるのでしょうか?


DEF_DLL  POWERSHELL どちらも理解するのが難しく、他のプログラム言語は学習しておりません。


dllを使わなくても構いませんので、SSL対応のメール受信をする方法がございましたら
アドバイスいただけると助かります。


Windows上で稼働させて、定期的にメールを受信して、その内容次第でいろいろな処理をさせたいと思っています。

よろしくお願い致します

No.2895 2016/09/18(Sun) 20:47:52

Re: メールを受信したい(SSL) / しろまさ
この辺で。
http://serialty.blog117.fc2.com/blog-entry-10.html

No.2899 2016/09/19(Mon) 09:24:20

Re: メールを受信したい(SSL) / まるぱ
しろまささん、アドバイスありがとうございます。
よくブログを参考にさせていただくことがあります。

ご紹介いただいたページは「CDOによるメール送信」ですね。
これはすでに実現できております。Windowsに標準でついている機能でできますので理想的です。

でも受信についてはなかなかいい情報が見つからず、ここに書き込んだ次第です。

No.2902 2016/09/19(Mon) 16:56:48

Re: メールを受信したい(SSL) / しろまさ
あ、受信でしたね。失礼しました。
私も昔、諦めた記憶があります。また調べてみます(_ _)

BASP21 Pro FAQ smtps http://www.b21soft.co.jp/basp21/basp21pfaq.html#smtps
Proか。。

Winsockを使えば出来そうですね。
ざっと検索してみましたがダイレクトなコードは見つかりませんでした。
Winsock メール 受信 で検索して他言語のサンプルを書き直すしかないのかな。
ゴリゴリな DEF_DELL 使用のコードになりそうですけどね^^

No.2903 2016/09/19(Mon) 17:32:17

Re: メールを受信したい(SSL) / stuncloud
gmail限定ならAPIで
過去記事: http://www3.rocketbbs.com/13/bbs.cgi?id=umiumi&mode=pickup&no=2105

No.2905 2016/09/20(Tue) 12:23:07

Re: メールを受信したい(SSL) / まるぱ
しろまささんも、あきらめたのですか、、、それなら私には無理かも(^ ^;

散々探しても参考になりそうなコードはないですね。

BASP21 Proは、このようなニーズに気づいて作られた有料プログラムなのかもしれません。

以前とはちがって一般的なWindowsが7以降のバージョンになってきましたので
それらのOSに標準で入っていそうなdllとか使うのって無理なんでしょうか?

誰かTKMP.DLLをUWSCで使えるようにCOM化したdll作ってくれたらと思うこのごろです。

ゴリゴリなDEF_DELL使って書いた関数なら、使いやすいかもしれませんね。


stuncloudさん、情報ありがとうございます。
Gmail、google apiでできるというのは私も最近知りました。
でもおっしゃるとおりgmailなんで、汎用性が、、、

海外のを探したとしても、日本語処理が問題になりますね。

No.2907 2016/09/20(Tue) 22:02:36

Re: メールを受信したい(SSL) / stuncloud
Officeが、というかOutlookがインストールされているならそれを使うという手も?
とりあえずこんな感じで受信済みのメールは見れました

// 予めOutlookで必要なメールを受信できるように設定しておく
Outlook = createoleobj("Outlook.Application")
NameSpace = Outlook.GetNamespace("MAPI")
Folder = NameSpace.Folders("xxxxxxx@gmail.com").Folders("受信トレイ") // gmailの「受信トレイ」

with Folder.Items(1) // 添字は1から
 print .Subject
 print .ReceivedTime
 print .Body
endwith

送受信をさせたい場合は
NameSpace.SendAndReceive(TRUE) // 引数: 進捗ダイアログの有無、FALSEだと非表示
でできるみたいです

https://msdn.microsoft.com/ja-jp/library/office/ff866895.aspx
Outlookはなんかわかりづらいな…

No.2909 2016/09/21(Wed) 11:29:50

Re: メールを受信したい(SSL) / しゅん@平凡な職業プログラマー
TKMP.dllをPowerShell経由で使ってみました。
ご参考まで。
http://d.hatena.ne.jp/junjun777/20160921/powershell_mail_recv_ssl

↓TextBlock内はPowerShellスクリプト。戻り値・引数はそれで良いかと思います。

No.2910 2016/09/21(Wed) 12:24:44

Re: メールを受信したい(SSL) / まるぱ
stuncloud さん、どんな風に動作するのか興味はあります.
Outlookで使うメアドは予め設定したものになるのですかねぇ?
ご紹介いただいたmsdnには「CreatObj」という言葉がありますね、まさにUWSCのCreateOLEObj!
こういう知っているような言葉があれば資料も理解できそう、、、な気がします(-^

しゅんさん、
とてもよくブログを参考にさせて頂いています。
多くが高レベルな内容なので、じっくり読んでも理解できないことが多いです、
さぞすごいプログラマーさんなんでしょうね。
!!!
ご紹介いただいたページ拝見したら、なんと!この質問のために書いていただきましたか!!
イヤイヤ、、、なんと言っていいのやら、、、、m(- -;)m アリガトウゴザイマス

さすがですね、サクッと書いてしまったようで。

TKMP.dll 、そのまま使えちゃったんですね、レジストリ登録なしに。スゴイ....

TextBlock文を使うのがなんとも不思議な感覚です。
この文の中って、そのままそのdllで使われている言語なんでしょうかね?

data = PowerShell(TextBlock) という形で実行で、戻り値は得られますね。

引数を渡したいときは
TextBlock文内の変数部分を置換すればいいのでしょうか
PowerShell(Replace(TextBlock,"変数A","値A")
のような感じですか?


これでしたかったことが実現できそうな予感がします。
この掲示板で皆さんにお聞きして本当によかったです。
しろまささん、stuncloudさん、しゅんさん、まことにありがとうございました!

No.2911 2016/09/21(Wed) 21:07:10

dllを使ってSSLメールの受信に成功 / まるぱ
しゅんさんからいただいたアドバイスがきっかけで、
PowerShellとTKMP.dllを使ってSSLのメールを受信するに成功しましたので報告いたします。


目的:

最も日付の新しいメールから順に件名を取得して、
件名の中にキーワードがあれば、そのメール本文を戻り値として得る


方法:

テキストブロック_SearchTKMPmailを変数に代入。

Respon = _SearchTKMPmail


変数中の%%server%%などをReplace文で使用する設定に置き換える。
Respon = Replace(Respon,"%%Title%%",ここにキーワードを入力")
Respon = Replace(Respon,"%%server%%","pop3.yahoo.co.jp")
他も同様に....

PowerShell実行
Data = TRIM(PowerShell(Respon))
Dataにメール本文が入ります。




以下テキストブロックの中身

TEXTBLOCK _SearchTKMPmail

Add-Type -Path TKMP.dll;
$server = "%%server%%";
$port = "%%port%%";
$userid = "%%userid%%";
$pass = "%%pass%%";

$Title = "%%Title%%";
$TargetNum = %%TargetNum%%;

$logon = New-Object TKMP.Net.BasicPopLogon($userid, $pass);
$pop = New-Object TKMP.Net.PopClient($logon, $server, $port);

#SSLを使用します
$pop.AuthenticationProtocol = [TKMP.Net.AuthenticationProtocols]::SSL;

#接続開始
if ($pop.Connect()) {

$Data = "";
$MailFound = $false;

# for ($i=1; $i -lt $pop.MailDatas.Length; $i++){
$j = $pop.MailDatas.Length -1
if ($j -gt -1){

$FoundNum = 0;
$CountNum = 0;
for ($i=$j; $i -gt 0; $i--){
#検索するのは最大10件まで
$CountNum += 1;
if ($CountNum -eq 10){break};

$Mail = $pop.MailDatas[$i];
if ($Mail.ReadHeader()){
# System.IO.Stream
$Header = $Mail.HeaderStream;

$reader = New-Object TKMP.Reader.MailReader($Header, $true);

$subject = $reader.HeaderCollection["Subject"];
$sender = $reader.HeaderCollection["from"];

# メール件名の中にキーワードがあるか探す
$SearchResult = $subject.IndexOf($Title);

if ($SearchResult -gt -1){
if ($Mail.ReadBody()){
$Body = $Mail.DataStream;
$reader = New-Object TKMP.Reader.MailReader($Body, $false);
$MailBody = $reader.MainText;
$FoundNum += 1;
if ($FoundNum -eq $TargetNum){
$MailFound = $true;
Write-Host $MailBody;
break;
}
}
}
}
}
if($MailFound -eq $false){Write-Host "メールがありません";}
} else {
Write-Host "メールがありません";
}

#切断
$pop.Close();

} else {
Write-Host "メールサーバーから応答がありません";
}
ENDTEXTBLOCK

No.2925 2016/09/25(Sun) 14:56:23
IF文について / アオ
初心者です。

クリック項目でラジオボタンとチェックボックスとセレクトボックスがランダムになっているので
IF文を使ってクリックしたいのですが、うまくいきません。
どこがちがうのかよくわかりません。宜しくお願い致します。


if IE.document.forms[0].elements[0].click()
else
IE.document.forms[0].elements[0].selectedIndex = 1
endif

No.2912 2016/09/22(Thu) 11:45:05

Re: IF文について / リキュール
以下でエレメントの情報取得が行えますので参考になると思います。

http://canal22.org/advance/ie/ie-document-forms-elements-propertie/

No.2916 2016/09/22(Thu) 21:39:01

Re: IF文について / アオ
リキュールさん、ご回答ありがとうございます。

エレメントの情報が知りたいのではありません。
私の説明不足ですみません。

単純にクリックをしたいだけなのですが、

例えば、以下のスクリプトではラジオボタンとセレクトボックス
がランダムでもクリックしてくれますが、チェックボックスはクリックしてくれません。

if IESetData(IE,True,"q1","1")=true then
else
IE.document.forms[0].elements[0].selectedIndex = 1
endif

このスクリプトではすべてクリックしてくれると思うですが、エラーになります。

if IE.document.forms[0].elements[0].click()=true then
else
IE.document.forms[0].elements[0].selectedIndex = 1
endif

説明が下手ですみません。
あまりよくわかってないので、出来ましたら、教えてもらえないでしょうか。
宜しくお願い致します。

No.2922 2016/09/23(Fri) 11:47:59

Re: IF文について / stuncloud
> このスクリプトではすべてクリックしてくれると思うですが、エラーになります。
せめてどんなエラーが出たか書きましょうよ

> if IE.document.forms[0].elements[0].click()=true then
click()はなにも返さないのでこの場合必ずelseに行きます
つまり、対象がinputだったとしても
> IE.document.forms[0].elements[0].selectedIndex = 1
をやろうとするので、selectedIndexがないからエラーになってるというオチですかね

対象がなんだかちゃんと調べたほうが良いでしょう
ifだと面倒なのでselectにしましたが、こんなんでいいのでは

select IE.document.forms[0].elements[0].tagName
 case "input"
  select IE.document.forms[0].elements[0].type
   case "radio", "checkbox"
    IE.document.forms[0].elements[0].checked = TRUE
  selend
 case "select"
  IE.document.forms[0].elements[0].selectedIndex = 1
selend

このコードは与えられた情報から予想で書いてるので、アオさんの期待した動作をしない可能性があります

No.2923 2016/09/23(Fri) 14:02:20

Re: IF文について / アオ
stuncloudさん、ご回答ありがとうございます、

すみません。エラーはCOMエラーです。
stuncloudさんのご推察の通りだと思います。

ずっとIF文で拘っていてなかなかできなかったですが、
stuncloudさんのおかげでやっと出来ました。

本当にありがとうございました。

No.2924 2016/09/23(Fri) 15:56:27
エクセルデータを一括で読み込む方法 / まさ

お世話になっております。
15万行のエクセルを変数に読み込ませるにあたり以下のように書いています。
この書き方だとものすごく時間がかかるため、一気に配列変数に入れられないかと
考えています。
どなたかお知恵を拝借いたしたく、アドバイスを頂けると大変助かります。


EXCEL = CREATEOLEOBJ("EXCEL.Application")
EXCEL.visible = True
Excel.WorkBooks.Open(FileName :="AAA.csv", readOnly :=False) 
Sleep(5)

for i = 1 to 150000

BBB[i] = EXCEL.RANGE("B" + i).value
CCC[i] = EXCEL.RANGE("C" + i).value
DDD[i] = EXCEL.RANGE("D" + i).value

next

EXCEL.ActiveWindow.Close(True)
Excel.quit

No.2913 2016/09/22(Thu) 18:59:18

Re: エクセルデータを一括で読み込む方法 / リキュール
変数に読み込ませるだけならエクセルをオープンする必要は無いと思います。

fid= FOPEN("AAA.csv",F_READ)
dim BBB[150000]
dim CCC[150000]
dim DDD[150000]
for i = 1 to 150000
BBB[i] = FGET(fid,i,2)
CCC[i] = FGET(fid,i,3)
DDD[i] = FGET(fid,i,4)
next
FCLOSE(fid)

No.2914 2016/09/22(Thu) 20:54:25

Re: エクセルデータを一括で読み込む方法 / Nagatani
Pro版でしたら下記の手もあります!
EXCEL = CREATEOLEOBJ("EXCEL.Application")

//遊び半分非表示処理
EXCEL.visible = False
Excel.WorkBooks.Open(FileName :="Book1.csv", readOnly :=False) 
XLACTIVATE(Excel, "Sheet1")

//配列に取り込み(数秒?)
 dd = XLGETDATA(Excel, "A1:C150000")

//取り込んだ内容を確認
 FOR LonI1 = 1 TO 40
  PRINT LonI1 + " A= " + DD[LonI1,1] +" B= " + DD[LonI1,2] + "C= " + DD[LonI1,3]
 NEXT

EXCEL.ActiveWindow.Close(True)
Excel.quit


15万行は確認してません!

No.2915 2016/09/22(Thu) 21:26:50

Re: エクセルデータを一括で読み込む方法 / 俄プログラマー
データの行列を入れ替え出来るなら

fid = FOPEN("aaa.csv",F_READ)
BBB = SPLIT(FGET(fid,1),",")
CCC = SPLIT(FGET(fid,2),",")
DDD = SPLIT(FGET(fid,3),",")
FCLOSE(fid)

No.2917 2016/09/22(Thu) 22:03:01

Re: エクセルデータを一括で読み込む方法 / まさ
リキュール様、Nagatani様、俄プログラマー様

誠にありがとうございます!
どれも早くなりました。

配列には入ったのですが、その後、キーワードを探すところで結局for文でまわして
時間がかかってします。

AAA[]配列からキーワードの配列番号を早く取り出す方法はないでしょうか。

for i = 1 to 150000
ifb AAA[i] = "TEST" then
XXXXX
endif
next

No.2918 2016/09/22(Thu) 22:25:50

Re: エクセルデータを一括で読み込む方法 / 俄プログラマー
HASHTBLを調べてみてください。
No.2919 2016/09/22(Thu) 23:00:41

Re: エクセルデータを一括で読み込む方法 / 俄プログラマー
連想配列で片付けましたが
配列を使わず検索する方法です。
一旦変数にファイルのデータを全て入れ
POSで検索したいキーの位置を探しその行のデータのみに絞ります。
ただし複数ヒットする場合、列2、3以降にもキーにヒットする場合を考慮してませんので
改行やカンマなど利用して工夫してください。(重複ありなしデータ内容のヒントが無いので)
3列16万行のデータでかかった時間は読み出しから表示まで1秒未満でした。
検証データの内容は単純に
1,1,1
2,2,2



160000,160000,160000
で検証しました。
(先の回答の行列は入れ替えしなくて良いです。)


key = "TEST"

fid = FOPEN("aaa.csv",F_READ)
value = FGET(fid,F_ALLTEXT)
FCLOSE(fid)

検索位置 = POS(key,value)
if 0 < 検索位置 then
text = copy(value,検索位置)//キー位置以降をコピー
改行位置 = POS("<#CR>",text)//改行までのデータに絞る為
print copy(text,1,改行位置)
else
print "ヒット無し"
endif

No.2920 2016/09/23(Fri) 02:31:50

Re: エクセルデータを一括で読み込む方法 / まさ
俄プログラマー様

早速のご回答ありがとうございます!!
格段に速くなりました!

No.2921 2016/09/23(Fri) 03:04:08
投稿するときのマナーについて / オレンジペン
初めまして。オレンジペンです。

UWSCに直接関わる話では無いのですが
投稿する際のマナーはどこに記載してあるのでしょうか?

【投稿(質問)の際に入力してほしいこと】
◆ UWSCのバージョン
◆ OS(Windows7 64bit 等)
◆ 何を使って、どうしたいのか

【投稿(質問)の際に気をつけること)】
◆ 終始「敬語」であり、「教えてもらう姿勢」であること
◆ 教えてもらったソースコードを試してみてどうだったか報告すること(できれば)
◆ 回答してもらったら感謝を述べること

他にもあるかとは思いますが、こういった投稿時のマナーについて
どこかに記載してもらうことは出来ないのでしょうか?

基本的にはマナーできている方が多く、私も質問する際には心がけておりますが
掲示板マナーみたいなものが記載してあると良いと思います。

※ 質問に回答くださる皆様は良い人ばかりで、この掲示板は素晴らしいと思います

No.2871 2016/09/16(Fri) 08:53:04

Re: 投稿するときのマナーについて / 俄プログラマー
水を差すような返信になりますが、私的には不要だと思います。

勿論無いより有る方が良いことは間違いないと思っています。
全ての方がそうだとは言いませんが、ヘルプ、豊富なサンプルが
サイト内にあるにも関わらず目を通さずに投稿。
それは良いとして、ありますよと書いても答えだけを求める方は
書式を求めてもその前に読まない傾向が強いです。
個人的な意見ですがマナー云々は書いてそれに従わせるものでも無いかなと思っています。
堅苦しいような感じになるのはちょっと。

>投稿する際のマナーはどこに記載してあるのでしょうか?

失礼を承知で質問返しです。掲示板のトップに記載されている

投稿時に「証明書が不正です」と出る場合には、JavaScriptをオンにしてください
動作不具合での質問の場合には環境(OS,IEのバージョン等)の表記もしてください
タイトルは質問内容を表したものにしてください
ネットゲーム関係の質問はご遠慮ください

これ読みましたでしょうか?
これだけで十分かと

No.2874 2016/09/16(Fri) 21:41:32

Re: 投稿するときのマナーについて / しろまさ
>個人的な意見ですがマナー云々は書いてそれに従わせるものでも無いかなと思っています。

賛成。礼儀は個人的な常識。自ら示すものであり、求めるものではないと。

環境も必要に応じてで良いと思います。長ったらしいのは読む気を無くしますし。

お礼も言いたくなかったら言わなくて良いんじゃないですか?
それで人間関係が悪くなっていくのは当人なんだし、
そうならないと理解できないでしょ。そういう人間は。

No.2900 2016/09/19(Mon) 09:34:32

Re: 投稿するときのマナーについて / しゅん
マナー、ではなくて、ガイドラインですよね。
ま、あっても良いのではないかと思います。

個人的には、
・UWSCのバージョンは最新
・OSは場合によっては必要(わからないなら書いて)
・「どうしたいか」を重点的に
・やってみたスクリプト(再現できる最小限で)
・丁寧語以上
を満たすのが望ましい、と考えています。

No.2906 2016/09/20(Tue) 14:05:38
UWSCでパソコン自動化動作環境 / 山本一智
UWSC5.2.2.0(フリー版)を下記パソコンにインストールして試してみました。
@デスクトップ Win10home 4GB 32ビット    IE11.589 11.0.35
Aノート    Win10pro 8GB 64ビット IE11.51 11.0.34

1.作業内容及び記録内容
 あるS/Wの中にある4個の部品の入力欄に、EXCELに表形式で予め4個入れてある最初の数字を、
  C&Pして、このS/Wの中にある1個目の部品の入力欄に入れてOKを押します。
  次にこのS/Wの中にある2個目の部品の入力欄を出しEXCELの2個目に入れてある数字をC&P
  して、2個目の部品の入力欄に入れてOKを押します。
  同様作業を4回続けます。この作業内容を記録します。

2.動作結果
1)@デスクトップはうまく動作しましたが、Aノートはカーソル の動きがうまく再現されません
でした。
2)@デスクトップでも、EXCELのセル選択でのC&Pではうまく 動作しない場合がありました。
3)このためセル選択後、ダブルクリックして縦のカーソルを出 し、Shift+ →で数字を全部選択
後、Ctrl+Cでコピーします。
4)その後、このS/Wの中にある1個の部品の入力欄にCtrl+Pで数字を入力します。
5)Aノートは"このS/Wの中"でのカーソルの動きとクリック動作が、再現されていないようです。

3.質問
そこで質問ですが、Win10homeでうまく動くのにWin10proで動かないのはなぜでしょうか?
 Win10proのどこかを変更したら直るのでしょうか?

No.2881 2016/09/17(Sat) 20:24:48

Re: UWSCでパソコン自動化動作環境 / 俄プログラマー
こちらでは再現できないので参考になれば
ヘルプページの
#N1、#N28、#N29

No.2887 2016/09/18(Sun) 11:54:51

Re: UWSCでパソコン自動化動作環境 / 山本
俄プログラマー さんありがとうございます。
初めての投稿なのでわからないのですが、
 ヘルプページの#N1、#N28、#N29
とはどこから見れるのですか?

No.2888 2016/09/18(Sun) 13:24:26

Re: UWSCでパソコン自動化動作環境 / 通りすがりの初心者
↑FAQかな
http://www.uwsc.info/faq.html

No.2889 2016/09/18(Sun) 13:45:43

Re: UWSCでパソコン自動化動作環境 / 俄プログラマー
FAQですね。申し訳ありません。
No.2893 2016/09/18(Sun) 17:27:27

Re: UWSCでパソコン自動化動作環境 / 山本
通りすがりの初心者 様
俄プログラマー   様
                             山本です

ご返事ありがとうございます。
Win10pro 1GB 32ビットがありましたので試してみたところOKでした。
ご指摘の#N1が関係しているのですか?
はっきりしませんが、これですっきりしたような感じがします。
いろいろありがとうございました。

No.2901 2016/09/19(Mon) 10:37:13
常に手前 / 高知 森田
いつも、お世話になります。
option explicit

DIM KEKKA
DIM 常に前面
DIM x
DIM ID
DIM moji

While true

KEKKA = SLCTBOX(SLCT_BTN, 0,1500,350, "常に前面?", "TOPMOST","ハンドル","終了")

SELECT KEKKA

CASE SLCT_1
常に前面= "TOPMOST"

ID = HNDTOID( GETSTR(0) )
CTRLWIN( ID , TOPMOST)
CTRLWIN( ID , NOTOPMOST)
CTRLWIN( ID, MAX )


CASE SLCT_2
常に前面= "ハンドル"

While True
id = GETID(GET_FROMPOINT_WIN) // マウスカーソル下のウィンドウ
if id = GETID(GET_FUKIDASI_WIN) then Continue // 吹き出し自体は無視

moji = "X座標 " + STATUS(id, ST_X) + " " + "Y座標 " + STATUS(id, ST_Y) + " " _
+ " 幅 " +STATUS(ID,ST_WIDTH) + " " + "高さ " + STATUS(ID,ST_HEIGHT) _
+ " " + STATUS(id, ST_TITLE) + " , " + STATUS(id, ST_CLASS) + " " + "ハンドル " + IDTOHND( ID )

// FUKIDASI(moji, G_MOUSE_X+8, G_MOUSE_Y, 3)

if GetKeyState(VK_SHIFT) then SendStr(0, IDTOHND( ID ) )

If GetKeyState(VK_SHIFT) Then Break


Sleep(0.1)

Wend

CASE SLCT_3
常に前面= "終了"

EXITEXIT
SELEND


Wend

FUKIDASIが、消えません
よろしくお願いします。

No.2896 2016/09/19(Mon) 07:41:08

Re: 常に手前 / まるぱ
ヘルプには
BALLOON() // 引数無しにて吹出し消去
とありますよ

No.2897 2016/09/19(Mon) 08:52:05

Re: 常に手前 / 俄プログラマー
If GetKeyState(VK_SHIFT) Then
FUKIDASI("")
Break
endif

文字無しを吹き出す事で消えます。
次回からの質問はどの動作の時にどうならないのか書いていただけると助かります。

No.2898 2016/09/19(Mon) 08:58:31
セレクトボックスのイベント / abs
試行錯誤しましたが、なかなか上手くいかないので質問させていただきます。

<select class="select-default">
<option value="">---</option>
<option value="1">aaa</option>
<option value="2">bbb</option>
.....
</select>

このようなセレクトボックスがあり、option.value=1などでデータの選択は可能です。
データを選択したときに二つ目のセレクトボックスが出てくるのですが、そのイベントが発生しません。
onClickなどがあれば、直接イベントを発生させることができると思うのですが、このような場合はどのようにイベントを発生させればよいのでしょうか?

あまり詳しくないのですが、開発者ツールのほうで、
<select class="select-default">の部分を選択し、イベントタブを確認すると、
invalid:
m.dispatchEventと書かれていましたので、このイベントが呼び出されているのではないかと思います。
別のjsファイルの中の関数がセレクトボックスの中身を変更した際に呼び出されているようなのですが、もしお分かりになるかたいらっしゃいましたらご教授お願いいたします。

No.2883 2016/09/18(Sun) 00:05:57

Re: セレクトボックスのイベント / 俄プログラマー
二つ目のセレクトボックスが出ている状態になったら
その対象のウインドウにある全オブジェクトの種別や現在の値などを
根こそぎ取得してみてはいかがでしょう?
特定が出来ればそのオブジェクトが出てくるまで待たせれば良いのではないでしょうか?
オブジェクトの取得についてわからなければサンプルページに参考になる物が書かれています。

No.2886 2016/09/18(Sun) 11:51:42

Re: セレクトボックスのイベント / abs
ありがとうございます。
二つ目のセレクトボックスはマウスでクリックして選択した場合は出現しますが、
値を書き換えるだけでは出現しない状態です。

オブジェクトの取得もやってみましたが、セレクトボックス選択後の読み込み待ちはそのオブジェクトがあるかどうかで判断することはできそうですが、それだけではイベントが発生せずオブジェクト自体が出現しませんので、止まってしまいます。

No.2891 2016/09/18(Sun) 13:57:01

Re: セレクトボックスのイベント / 俄プログラマー
>二つ目のセレクトボックスはマウスでクリックして選択した場合は出現しますが、
>値を書き換えるだけでは出現しない状態です。

セレクトボックス出現のきっかけがマウスクリックに限られているから
値を書き換えても出ないんですね。
CLKITEMでもだめでしょうか?
駄目ならBTNを使うとかどうでしょうか?

No.2892 2016/09/18(Sun) 16:32:37

Re: セレクトボックスのイベント / abs
ありがとうございます。
セレクトボックス自体はITM_ACCTXTという種別になっていてCLKITEMでクリックができませんでした。
座標指定でクリックさせるのはあまり好きじゃないので、最終手段で考えていたのですが、
やはりそれしかないかもしれないですね。

No.2894 2016/09/18(Sun) 19:59:04
機種別最小値 / SEN
いつもお世話になっております。
下記のようなのもで、機種別最小値を出したいのですが、途方に暮れてます。
XLSなので、"=MIN.."で埋め込めばよいのか、そうだと機種が増えた時、書き直さないといけませんし、
ご教授いただけませんでしょうか?


dim 機種[15],梱包[15],p=0,仕掛[15]
検索 = fopen("ハウス梱包.csv")
  for i = 2 to fget(検索, F_LINECOUNT)
   IFB fget(検索,i,7) = "T" THEN
    機種[p]=fget(検索,i,1)
    梱包[p]=fget(検索,i,2)
    p=p+1
   endif
  next
fclose(検索)

csv = fopen("Y:\zai.csv")
Excel = XLOPEN("C:\在庫状況.xls")
XLACTIVATE(Excel, "専用梱包")
Ex = GETACTIVEOLEOBJ("Excel.Application")

for p = 0 to length(梱包)-1
 XLSETDATA(Excel, 機種[p], 1, p+2)
 XLSETDATA(Excel, 梱包[p], 2, p+2)
 仕掛[P] = XLGETDATA( Excel,9,p+2) //仕掛かり 5行目
next

ifb XLGETDATA( Excel,4,1 ) <> fget( csv,2,35) then
 Ex.Rows(4).Insert
 Ex.Rows(4).Insert
 Ex.Rows(4).Insert
 Ex.Rows(4).Insert
 Ex.Rows(4).Insert
 Ex.Rows(4).Insert
 Ex.Rows(4).Insert
 Ex.Rows(4).Insert
 XLSETDATA(Excel, fget(csv,2,35), 4, 1) //更新日
 XLSETDATA(Excel, "注残", 5, 1)
 XLSETDATA(Excel, "出荷", 6, 1)
 XLSETDATA(Excel, "在庫−注残", 7, 1)
 XLSETDATA(Excel, "前日生産", 8, 1)
 XLSETDATA(Excel, "仕掛−前日生産", 9, 1)
 XLSETDATA(Excel, "受注可能数", 10, 1)
 for p = 0 to length(梱包)-1
  for i = 2 to fget(csv, F_LINECOUNT)
   IFB fget(csv,i,2) = 梱包[p] THEN
    DIM 在庫 = fget(csv,i, 5)
    DIM 注残 = fget(csv,i, 12)
    DIM 出荷 = fget(csv,i, 7)
    DIM 前日生産 = fget(csv,i, 3)
    XLSETDATA(Excel, 在庫, 4, p+2)
    XLSETDATA(Excel, 注残, 5, p+2)
    XLSETDATA(Excel, 出荷, 6, p+2)
    XLSETDATA(Excel, 在庫 - 注残, 7, p+2)
    XLSETDATA(Excel, 前日生産, 8, p+2)
    XLSETDATA(Excel, 仕掛[P] - 前日生産, 9, p+2)
    XLSETDATA(Excel, 在庫 - 注残 + 仕掛[P] - 前日生産, 10, p+2)
    break
   endif
  next
 next
endif
fclose(csv)
XLCLOSE(Excel)

在庫状況.xls
機種,T177,T177,T199,T199,
梱包,17A,TH6,19A,TH6
更新日,扉,部品箱,扉,部品箱
160909,25,23,23,23,
注残,8,15,7,15,
出荷,1,2,1,2,
在庫−注残,17,8,16,8,
前日生産,0,0,0,0,
仕掛−前日生産,60,90,33,90,
梱包別受注可能数,77,98,49,98,
機種別受注可能数,77,77,49,49,←機種別最小値を出したい

No.2856 2016/09/11(Sun) 13:57:50

Re: 機種別最小値 / Nagatani
>>機種別最小値を出したい

//スクリプトはここから
PUBLIC HASHTBL 機種      // パブリック、大・小文字区別しない、キーは書込み順
HASHTBL 機種名 = HASH_CASECARE or HASH_SORT // 大・小文字区別、キーはソート
dim 機種名[15],可能数[15]

 Excel = XLOPEN("C:\Users\Nagatani\Documents\在庫状況.xls")
 Ex = GETACTIVEOLEOBJ("Excel.Application")

//列数を数える 
 LonLast = 0
 WHILE EX.ActiveSheet.CELLS(11,LonLast+2).VALUE <> ""
  LonLast = LonLast + 1
 WEND
 LonLast = LonLast - 1

//配列に記憶
 FOR LonI1 = 0 TO LonLast - 1
  IF 機種[ Ex.ActiveSheet.CELLS(1,LonI1 + 2).VALUE , HASH_EXISTS ] = False THEN
   機種[ Ex.ActiveSheet.CELLS(1,LonI1 + 2).VALUE ]=Ex.ActiveSheet.CELLS(1,LonI1 + 2).VALUE //機種名
  ENDIF
 NEXT

//機種名に登録がなければ登録・あれば比較して可能数を変更
 LonLast2 = LENGTH(機種) - 1
 FOR LonI1 = 0 TO LonLast2
  FOR LonI2 = 0 TO LonLast
   IF 機種[LonI1,HASH_VAL] = Ex.ActiveSheet.CELLS(1,LonI2 + 2).VALUE THEN
    機種名[LonI1] = Ex.ActiveSheet.CELLS( 1,LonI2 + 2).VALUE //機種名
    IF (可能数[LonI1] = "" OR 可能数[LonI1] > Ex.ActiveSheet.CELLS(11,LonI2 + 2).VALUE) THEN
     可能数[LonI1] = Ex.ActiveSheet.CELLS(11,LonI2 + 2).VALUE //可能数
    ENDIF
   ENDIF
  NEXT
 NEXT
 
//表示
 FOR LonI1 = 0 TO LonLast2
  PRINT "機種名 " + 機種名[LonI1] + " : " + 可能数[LonI1]
 NEXT
//スクリプトここまで


>>機種が増えた時、書き直さない
 @エクセルシートの上(場合によって左側)に必要な最小値を表示させて固定する。
 A機種を追加する場合は下(場合によっては右側)へ挿入
  こうすれば上記スクリプトも必要ないような?

「ハウス梱包.csv」と「ZAI.CSV」がわからなかったので・・・はずしてたらごめんなさい!

No.2858 2016/09/11(Sun) 19:10:13

Re: 機種別最小値 / SEN
ありがとうございます。
なんか、自分にはちょっと難しそうです。
計算式を貼り付ける以外に想像していたのは、CALCARRAYでして、
下記のも一つ機種が終わると止まってしまいますし、
一つ目のセルには最小値が入りません(なければないでそれも支障はないのですが)。
全然ではありますが、簡単なのはありませんでしょうか?
恐縮です。

dim 梱包可能数[10]

Excel = XLOPEN("C:\在庫状況.xls")
XLACTIVATE(Excel, "専用梱包")
Ex = GETACTIVEOLEOBJ("Excel.Application")
 i = 2
 REPEAT
  左機種 = XLGETDATA(Excel,1,i)
  機種 = XLGETDATA(Excel,1,i+1)
  梱包可能数[i]= XLGETDATA(Excel,10,i)
  i=i+1
 UNTIL 左機種<>機種
 XLSETDATA(Excel,CALCARRAY(梱包可能数,CALC_min),11, i-1)
XLCLOSE(Excel)

No.2859 2016/09/11(Sun) 22:36:12

Re: 機種別最小値 / Liners
// 簡単 = 最小行数の意味なら… 変数を抑え、IF文を廃止して既出の手法に配慮したが…いかがでしょうか?

Ex = GETACTIVEOLEOBJ("Excel.Application")
hashtbl h
n = Ex.Range("A1").End(-4161).Column // xlToRight = -4161
for i = 2 to n
  h[EX.ActiveSheet.CELLS(1, i).value] = h[EX.ActiveSheet.CELLS(1, i).value] + "," + EX.ActiveSheet.CELLS(10, i).value
next
for i = 2 to n
   EX.ActiveSheet.CELLS(11, i).value = CALCARRAY(Split(h[EX.ActiveSheet.CELLS(1, i).value], ",", 1, 1),CALC_min)
next

No.2860 2016/09/12(Mon) 03:50:57

Re: 機種別最小値 / 森
エクセルのピボットテーブル機能を使った方が良いのでは?
UWSCのことではないので、ここでの説明はやめておきますが、
解説サイトがたくさん有るので「ピボットテーブル 最小値」とググってみて下さい。

ここなんかが、分かりやすそうに思います。
http://haku1569.seesaa.net/article/403458311.html

No.2861 2016/09/12(Mon) 07:53:19

Re: 機種別最小値 / SEN
ありがとうございます。
これだと思って組み込んで動かしまして家のパソコンではうまく動くのですが、
しかし、会社のパソコンでは最後のエクセルへの書き込みのところでなにも転記されません。
家のはEXCEL2016、EXCEL2010です。
こんな事ありますでしょうか?
エクセルへの書き込みのところは下記のような感じに書き換えさせていただきました。
家のパソコンではうまくいくので、問題はないと思いますが、あと一歩で悔しい思いです。
何をお伝えしたら、わかりますでしょうか?

XLSETDATA(Excel,CALCARRAY(Split(h[機種[i-1]],",",1,1),CALC_min),11,i+1)

No.2875 2016/09/16(Fri) 23:13:08

Re: 機種別最小値 / Liners
>こんな事ありますでしょうか?
あり得ますが、ほとんどの場合スクリプトかデータに問題があります。

>何をお伝えしたら、わかりますでしょうか?
まず改変なしの動作結果です。ここで問題なら根本的原因です。
次に改変したもので、単独で動作する最小限のスクリプトと使用データ。

>XLSETDATA(Excel,CALCARRAY(Split(h[機種[i-1]],",",1,1),CALC_min),11,i+1)
さすがに、これだけでは…

ただ一瞬で不自然なのは分かります。機種[i-1]の部分で通常このようには書きません。
この部分は表示されている列の機種名で、順不同かつ重複・不定数なので、通常配列には入れずに、その都度セルから読み取ります。
少なくともこんな風に書くでしょう。

XLSETDATA(Excel,CALCARRAY(Split(h[XLGETDATA(Excel,1,i+1)],",",1,1),CALC_min),11,i+1)

No.2882 2016/09/17(Sat) 22:50:51

Re: 機種別最小値 / SEN
何から何まで済みません。
下記のものが全部です。
昨日、会社のパソコンで調べた限りでは、CALCARRAYの最低値がうまく取れないみたいです。
よろしくお願いします。


dim 機種[100],梱包[100],p=0,仕掛[100],梱包可能数[100]
hashtbl h
検索 = fopen("C:\ハウス梱包.csv")
  for i = 2 to fget(検索, F_LINECOUNT)
   IFB fget(検索,i,7) = "TH" THEN
    機種[p]=fget(検索,i,1)
    梱包[p]=fget(検索,i,2)
    print p+" "+機種[p]
    p=p+1
   endif
  next
fclose(検索)

dim 列数 = p

csv = fopen("C:\zai.csv")
Excel = XLOPEN("C:\在庫状況.xls")
XLACTIVATE(Excel,"専用梱包")
Ex = GETACTIVEOLEOBJ("Excel.Application")

for p = 0 to 列数
 XLSETDATA(Excel, 機種[p], 1, p+2)
 XLSETDATA(Excel, 梱包[p], 2, p+2)
 仕掛[P] = XLGETDATA( Excel,9,p+2)
next

ifb XLGETDATA( Excel,4,1 ) <> fget( csv,2,35) then
 Ex.Rows(4).Insert
 Ex.Rows(4).Insert
 Ex.Rows(4).Insert
 Ex.Rows(4).Insert
 Ex.Rows(4).Insert
 Ex.Rows(4).Insert
 Ex.Rows(4).Insert
 Ex.Rows(4).Insert
 Ex.Rows(4).Insert
 XLSETDATA(Excel, fget(csv,2,35), 4, 1) //更新日
 XLSETDATA(Excel, "注残", 5, 1)
 XLSETDATA(Excel, "出荷", 6, 1)
 XLSETDATA(Excel, "在庫−注残", 7, 1)
 XLSETDATA(Excel, "前日生産", 8, 1)
 XLSETDATA(Excel, "仕掛−前日生産", 9, 1)
 XLSETDATA(Excel, "受注可能数(梱包)", 10, 1)
 XLSETDATA(Excel, "受注可能数(機種)", 11, 1)
 for p = 0 to 列数
  for i = 2 to fget(csv, F_LINECOUNT)
   IFB fget(csv,i,2) = 梱包[p] THEN
    DIM 在庫 = fget(csv,i, 5)
    DIM 注残 = fget(csv,i, 12)
    DIM 出荷 = fget(csv,i, 7)
    DIM 前日生産 = fget(csv,i, 3)
    XLSETDATA(Excel, 在庫, 4, p+2)
    XLSETDATA(Excel, 注残, 5, p+2)
    XLSETDATA(Excel, 出荷, 6, p+2)
    XLSETDATA(Excel, 在庫 - 注残, 7, p+2)
    XLSETDATA(Excel, 前日生産, 8, p+2)
    XLSETDATA(Excel, 仕掛[P] - 前日生産, 9, p+2)
    XLSETDATA(Excel, 在庫 - 注残 + 仕掛[P] - 前日生産, 10, p+2)
    梱包可能数[P] = 在庫 - 注残 + 仕掛[P] - 前日生産
    h[機種[P]] = h[機種[P]] + "," + 梱包可能数[P]
    break
   endif
  next
 next
 for i = 1 to 列数
  //XLSETDATA(Excel,CALCARRAY(Split(h[機種[i-1]],",",1,1),CALC_min),11,i+1)
  XLSETDATA(Excel,CALCARRAY(Split(h[XLGETDATA(Excel,1,i+1)],",",1,1),CALC_min),11,i+1)
  if 機種[i-1] = "" then break
 next
endif
XLCLOSE(Excel)
fclose(csv)

ハウス梱包.csv
間口/機種,梱包,数,掛率,企業体,マイナス,梱包在庫抽出
177A,17A4,1,,,1,TH
177A,10-6,1,,,1,TH
199A,19A4,1,,,1,TH
199A,10-6,1,,,1,TH

a1,梱包番号,a2,a3,在庫数,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15,a16,a17,a18,a19,a20,a21,a22,a23,a24,a25,a26,a27,a28,a29,a30,a31,a32,a33,a34,a35,a36,a37,a38,a39,a40,a41
1,10-6,0,0,61,0,0,0,0,120,105,45,46,2,206,563,201,120,0,0,0,0,0,0,0,0,0,570,150,210,0,0,0,0,160716,0,0,0,0,0,0,0,0
1,17A4,0,0,110,0,0,0,0,146,86,29,50,2,206,345,126,84,0,0,0,0,0,0,0,0,0,306,151,148,0,0,0,0,160716,0,0,0,0,0,0,0,16
1,19A4,0,0,41,0,0,0,0,55,52,16,38,2,206,220,75,36,0,0,0,0,0,0,0,0,0,190,122,58,0,0,0,0,160716,0,0,0,0,0,0,0,16,

在庫状況.xls
機種     177A   177A  199A   199A
梱包     17A4   10-6  19A4   10-6
       
        25 23 23 23
注残      8 15 7 15
出荷      1 2 1 2
在庫−注残   17 8 16 8
前日生産    0 0 0 0
仕掛−前日生産 60 90 33 90
受注可能数   98 15 49 98
        15 15 49 49

No.2884 2016/09/18(Sun) 10:51:23

Re: 機種別最小値 / 俄プログラマー
>CALCARRAYの最低値がうまく取れないみたいです。

Linersさんが書かれている事を試しましたか?
抜粋します
「ほとんどの場合スクリプトかデータに問題があります。」
「単独で動作する最小限のスクリプトと使用データ」

山を見てダメなら木を見る
木を見てダメなら葉っぱを見る
プログラムのバグ取りはこんな風です。

「CALCARRAYの最低値がうまく取れない」のであれば
取得先のデータが正しくないからです。
そのデータが正しい形になっていますか?
目で見えるように画面に表示してみてください。
そして確認です。
思っているデータが例えば
「10 40 35 5 75」
の筈なのに
「」
なんて事も良くありますよ。
必要であればCALCARRAYに特化した動作確認用のサンプルプログラムを作ってみましょう。
それで動作がしっかり出来ているかの確認です。

No.2885 2016/09/18(Sun) 11:43:48

Re: 機種別最小値 / Liners
結論から言うと動作しません。原因はデータの不備です。
問題個所は ifb XLGETDATA( Excel,4,1 ) <> fget( csv,2,35) then で在庫状況.xlsの該当部分は空白です。

またXLACTIVATE(Excel,"専用梱包")も不明ですし、在庫状況.xlsの内容もこのデータで作成されたものではありません。
全体にデータの不備が目立ちます。再チェックしてください。

スクリプトも正常動作する部分は除外して、命題に沿った必要最低限として下さい。
原因不明なので、全体を見てほしいと思う気持ちは理解できますが、逆効果です。

該当個所関連をコメントアウトすると、正常動作します。

受注可能数(梱包) 141 106 58 106
受注可能数(機種) 106 106 58 58

No.2890 2016/09/18(Sun) 13:56:29


 過去ログ(〜2016/10/02)・検索ツール


以下のフォームに記事No.と投稿時のパスワードを入力すれば
投稿後に記事の編集や削除が行えます。
199/200件 [ ページ : << 1 ... 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 ... 20 >> | 過去ログ ]