アプリ版:「スタンプのみでお礼する」機能のリリースについて

UWSCでテキストファイルやExcelファイルを開きたいのですが、
FOPEN関数を使っても、たとえばテキストファイルを開こうと思っても開けません。

これはなぜでしょうか?
すべてのパソコンでダメでした。
OSはXPSP3、7SP1、です。
UWSCのバージョンは最新のバージョン(4.8e1)です。

UWSC.EXEのあるフォルダに、「test01.txt」を作成し、
fid=FOPEN("test01.txt",F_READ or F_WRITE)

と書いても、絶対パスで、

fid=FOPEN("C:\Users\user01\Desktop\uwsc\test01.txt",F_READ or F_WRITE)

と書いても、ダメでした。

その一行しか書いてないのがダメな原因なのでしょうか?

「C:\Users\user01\Desktop\uwsc\test01.txt」は
コマンドプロンプトやファイルを指定して実行、からは開けます。

アンチウィルスソフトは一時的にOFFにしてもだめでした。

OS(XPSP3)を再インストールして、ネットにつながず、
セキュリティソフトなしでやってみてもダメでした。

多分、自分が何か勘違いをしているのだと思いますが、
FOPEN関数は、ファイルを開いて表示するものだと思っていましたが
違うのでしょうか?

Webで検索すると、他のみなさんは開いているようなのですが・・・

ファイルのIDを取得するだけではだめで、ほかの記述も必要ということなのでしょうか?

ゆくゆくはExcelのファイルを普通に開きたいのです。
COMで開くような事例もあったので、それは試してみましたが、
Office2003のセキュリティの「中」設定が無視されて
開いてしまい、Auto_Openマクロも無視されたりで、
使いたくありません。
「中」設定のまま、「マクロを実行させるダイアログ」を
表示してExcelファイルを開きたいのです。

でもその前にということで、テキストファイルを試しにと思ったのですが
テキストファイルすら開けません。


何度かWeb検索しても一向に手がかりがつかめません。

大変すみませんが、どなたがご存知の方がいらっしゃったら、
よろしくご指導くださいませ。

A 回答 (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")

などとして、メモ帳をアプリとして起動し、同時に引数を指定します。
    • good
    • 1
この回答へのお礼

早速のご回答ありがとうございました。

お礼が遅くなってしまって大変申し訳ございませんでした。

>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さんも本当にありがとうございました。

お礼日時:2013/04/11 11:57

こんなツールがあるのですね。


ちょっとダウンロードしてヘルプを眺めてみました。


> FOPEN関数は、ファイルを開いて表示するものだと思っていましたが
> 違うのでしょうか?
「ファイルを開く」の意味を取り違えているようです。
FOPEN関数は「ファイルをUWSCの関数で読み書きするために開く」ための関数です。
メモ帳でファイルを開くわけではありません。
取得したファイルIDを使って、
「FGET(fid, 1)」と書けば1行目を読み込みますし、
「FPUT(fid, "test")」と書けば行末に「test」と書き込みます。

コマンドプロンプトで入力したときと同じ動作を期待する場合は、DOSCMD関数を使ってください。
DOSCMD("test01.txt", TRUE)
    • good
    • 0
この回答へのお礼

早速のご回答ありがとうございました。
お礼が遅くなってしまって申し訳ございませんでした。

>「ファイルを開く」の意味を取り違えているようです。

そういうことだったんですね。
FGETやFPUTをためせばよかったんですね。
なぜそこに気がつかなかったのか、自分で自分が恥ずかしいです(TT)
ありがとうございました。

>コマンドプロンプトで入力したときと同じ動作を期待する場合は、DOSCMD関数を使ってください。

これはやってみたのですが、思うような動作をしなかったので今回は採用しませんでした。
ありがとうございました。

結果的に、No2の方のご回答でうまくいったのですが、そちらで、
自分の書いた結果をご報告させていただきます。
恥ずかしいような内容ですが・・・(TT)

きっとお忙しいであろう中、ほんとうに、ありがとうございました。m( _ _ )m

お礼日時:2013/04/11 11:40

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A