- ベストアンサー
UWSCでテキストファイルを開いて表示できない原因とは?
- UWSCでテキストファイルやExcelファイルを開けない理由について調査しました。
- FOPEN関数を使用してテキストファイルを開こうとしても、うまく開けない現象が発生しています。
- テキストファイルやExcelファイルを開くためには、ファイルパスやセキュリティ設定の他にも追加の記述が必要な可能性があります。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
fopenはuwscでファイルを開くための命令です。 > fid=FOPEN("test01.txt",F_READ or F_WRITE) エラー値が返ってないのなら、 fline=FGET(fid, 1) とかでflineに1行目が取得できるので、 print fline なんかで表示できるはず。 -- > UWSCでテキストファイルやExcelファイルを開きたいのですが、 メモ帳(notepad.exe)やExcelでファイルを開くためには、例えば、 exec("C:\Windows\notepad.exe test01.txt") などとして、メモ帳をアプリとして起動し、同時に引数を指定します。
その他の回答 (1)
- Picosoft
- ベストアンサー率70% (274/391)
こんなツールがあるのですね。 ちょっとダウンロードしてヘルプを眺めてみました。 > FOPEN関数は、ファイルを開いて表示するものだと思っていましたが > 違うのでしょうか? 「ファイルを開く」の意味を取り違えているようです。 FOPEN関数は「ファイルをUWSCの関数で読み書きするために開く」ための関数です。 メモ帳でファイルを開くわけではありません。 取得したファイルIDを使って、 「FGET(fid, 1)」と書けば1行目を読み込みますし、 「FPUT(fid, "test")」と書けば行末に「test」と書き込みます。 コマンドプロンプトで入力したときと同じ動作を期待する場合は、DOSCMD関数を使ってください。 DOSCMD("test01.txt", TRUE)
お礼
早速のご回答ありがとうございました。 お礼が遅くなってしまって申し訳ございませんでした。 >「ファイルを開く」の意味を取り違えているようです。 そういうことだったんですね。 FGETやFPUTをためせばよかったんですね。 なぜそこに気がつかなかったのか、自分で自分が恥ずかしいです(TT) ありがとうございました。 >コマンドプロンプトで入力したときと同じ動作を期待する場合は、DOSCMD関数を使ってください。 これはやってみたのですが、思うような動作をしなかったので今回は採用しませんでした。 ありがとうございました。 結果的に、No2の方のご回答でうまくいったのですが、そちらで、 自分の書いた結果をご報告させていただきます。 恥ずかしいような内容ですが・・・(TT) きっとお忙しいであろう中、ほんとうに、ありがとうございました。m( _ _ )m
お礼
早速のご回答ありがとうございました。 お礼が遅くなってしまって大変申し訳ございませんでした。 >exec("C:\Windows\notepad.exe test01.txt") ↑お教えいただいたこのやり方でうまくきました。 本当にありがとうございました。 きっとお忙しい中だったと思うのですが、本当に助かりました。 ありがとうございました。 お礼として、一応、自分が何をしたかったのかをご報告させていただきます。 以下のようなことをしたかったのでした。 (01)UWSCファイルから、Excelを起動して、 マクロセキュリティ「中」を「低」にかえていったん閉じる。 (02)Excelのマクロ付きのプログラムファイルを起動。 (03)そのプログラムの終了時に、終了ボタンを押したときに、 UWSCにて「低」を「中」に戻して閉じる。 開きたいExcelファイルのパスは D:\test\TestBook2003_01.xls です。 セキュリティを「中」から「低」に変えてExcelを開くUWSファイルのパスは以下です。 D:\test\test01_01_open_ex2003.uws セキュリティを「低」から「中」に戻してExcelファイル閉じるUWSファイルのパスは以下です。 D:\test\test01_02_close_ex2003.uws 書いたコードは次のとおりです。 ●Excelを「中」を「低」にして開くUWSファイルのコード //Excelは、外部プログラム(VBSやUWSCなど)からCOM経由(?)で開くと、 //セキュリティ設定が「中」や「高」「最高」であっても、 //VBAプログラムが生きたまま開いてしまうという、 //言ってみるとセキュリティホール(?)のようなものがあります。 //それを利用して、まず開き、「中」や「高」を「低」にします。 //(「中」の場合、ダイアログが出ないため、「有効」ボタンを押す // プログラムを書かなくてすむため) //それでいったん閉じます。 //COM経由で開いたままだと、Auto_Openプロシージャが使えなかったり //他のコードが実行できなかったり戸、色々と不都合があるといけないので、 //いったん閉じ、再度、COMじゃない、普通の起動方法(exec命令)で //開きます。それならAuto_Openプロシージャや他のコードが使えなくなることがないので。 //不可視状態でやっても、結局少し表示されてしまうし、 //可視状態のほうが動きがチラつきが少なくてきれいなので、 //可視状態のままで実行させました。 //################################################################################# //COM経由(?)でいったん空のExcelを開く //################################################################################# //(2000、2003共用) Dim o_XL = CreateOLEObj("Excel.Application") Dim o_WB = o_XL.WorkBooks.Add o_XL.Visible = TRUE // 可視状態にします。 idExcel=getid("Microsoft Excel","XLMAIN") //ショートカットキー動作にて、マクロセキュリティダイアログを開きます。 SCKEY( idExcel, VK_ALT, VK_T, VK_M, VK_S) //################################################################################# ///セキュリティ設定を「低」にして閉じる。 //################################################################################# idセキュ=getid("セキュリティ","bosa_sdm_XL9") //Excel2003専用の「低」を選ぶコード↓。2000はメッセージ内容がちがうのでこれだと「低に」できません。 clkitem(idセキュ,"低(L) (推奨しません) コンピュータに損害を与える場合があるマクロを実行する前に警告しません。 ウイルス検索プログラムがインストールされているか、すべてのドキュメントが安全であると確認した場合のみ設定してください。",CLK_ACC) //マクロセキュリティダイアログを閉じます。 clkitem(idセキュ,"OK",CLK_ACC) //いったん閉じます。 SCKEY( idExcel, VK_ALT,VK_F4) //################################################################################# //COM経由(?)じゃない普通の開き方で目的のxlsファイルを開きます。 //################################################################################# //(2003専用) exec("C:\Program Files\Microsoft Office\OFFICE11\EXCEL.EXE D:\test\TestBook2003_01.xls") ========== ●Excelの「アプリ終了」ボタンのコード Private Sub CommandButton1_Click() Dim ret As Variant ret = Shell("D:\test\uwsc\UWSC.exe D:\test\test01_02_close_ex2003.uws") End Sub ========== ●「test01_02_close_ex2003.uws(セキュリティを元に戻すUWSファイル)」の内容 idExcel=getid("Microsoft Excel","XLMAIN") //マクロセキュリティダイアログを開きます。 SCKEY( idExcel, VK_ALT, VK_T, VK_M, VK_S) //マクロセキュリティを中に戻します。 idセキュ=getid("セキュリティ","bosa_sdm_XL9") //2003専用コード↓ clkitem(idセキュ,"中(M) コンピュータに損害を与える可能性があるマクロを実行する前に警告します。",CLK_ACC) //マクロセキュリティダイアログを閉じます。 clkitem(idセキュ,"OK",CLK_ACC) //Excelを閉じます。 SCKEY( idExcel, VK_ALT,VK_F4) //上書きを聞かれたら、はい、で閉じます。 id上書き確認=getid("Microsoft Excel","#32770") SCKEY( id上書き確認, VK_Y) ============ 以上です。 これで目的を達することができました。 neKo_deuxさん、本当にありがとうございました。 また、Picosoftさんも本当にありがとうございました。