クライアント側のファイル存在チェック方法とexcel実行方法

このQ&Aのポイント
  • クライアント側でのファイル存在チェック方法を教えてください。存在しない場合にはサーバーからexcelファイルをダウンロードし、存在する場合には何もしないようにしたいです。
  • また、クライアント側でexcelファイルを実行する方法も教えてください。
  • fopen()を使用してファイル存在チェックを行いましたが、サーバー側の存在チェックになってしまい、クライアント側をチェックできませんでした。アドバイスをお願いします。
回答を見る
  • ベストアンサー

ファイルの存在チェック クライアント側

皆さん、いつもお世話になっております。 次の事を実行したいのですが、どうしたらいいのかご存知でしたらご教授いただけると幸いです。 (やりたい事) 1.クライアントのファイル存在チェックしたい。 *実行前の処理として、クライアントのexcelファイルの存在チェック をして、  a)不存在の時は、サーバーからexcelファイルをダウンロード。 b)既存在のときは何もしない。 2.上記との関連ですが、何かボタンを押した時にクライアントのexcel を実行する。 --------------------------------------------------------------- 以上2点ですが、fopen()でやってもサーバーの存在チェックになってしまい、クライアント側をチェック出来ませんでした。何かアドバイスを下さい。 以下、実行サンプルです。 <?php $file = "test.xls"; if(!fopen($file, "r")) { header("location: http://xxxx.com/test/$file"); } ?> --------------------------------------------- 1.クライアントのファイル存在チェック 2.クライアントのexcel実行 簡単そうでしたが、できませんでした。よろしくお願いいたします。

  • PHP
  • 回答数2
  • ありがとう数2

質問者が選んだベストアンサー

  • ベストアンサー
noname#246547
noname#246547
回答No.1

fopenなどのPHPコードはサーバ上で実行されるため、 クライアントに該当ファイルが存在するかどうかはPHP単独ではできません。 よって、一度ブラウザにファイルチェックをするコード(VBScript等)を埋め込んだHTML(例:check.html)を読み込ませ、ブラウザ側でファイルチェックした結果を、サーバに送信(submit)してから、 サーバ上のPHP(例:download.php)でファイルをダウンロードするかしないか判断するようにしたらどうですか? ☆check.htmlのファイルチェック部分サンプル(あくまで最低限のサンプルのため、もっとよい方法があるはずです。ヒントになればと思い添付しました) <script Language="VBScript" > <!-- function checkFile() Dim fs, f, s Set fs = CreateObject("Scripting.FileSystemObject") On Error Resume Next Set f = fs.GetFile("C:/a.xls") if Err.Number = 53 then MsgBox "file not found" else MsgBox "file found" end if End function --> </script> 上記のMsgBoxの所をファイルの有無をサーバに送る手順に変更すればよいと思います。 もちろんActiveXは有効にしなければなりません。

syosin-oyaji
質問者

補足

marimari01様、早々のご教授ありがとうございました。 ご教授頂いたコードを実行したところ、ファイルの存在チェックができました。ありがとうございました。 申し遅れましたが、最終的な操作は「windows mobile(v5.0)」での実行をしたいのですが、このOSでは「VBScript」は動かないようです。 折角のありがたい情報でしたが、またお手上げ状態になってしまいました。・・・個別に手動でexcelを操作して貰うしかなさそうです。 お手隙の時で結構ですので、何かいい方法があったら教えて下さい。

その他の回答 (1)

noname#246547
noname#246547
回答No.2

ファイルチェック部分をjavascriptに変更してみてはいかがでしょうか? function ShowFileInfo(){   var fs, f, s;   fs = new ActiveXObject("Scripting.FileSystemObject");   if( fs.FileExists("C:/a.txt")){     alert( "file found");   }else{     alert( "file not found");   } }

参考URL:
http://officetanaka.net/excel/vba/filesystemobject/filesystemobject.htm#FileExists
syosin-oyaji
質問者

お礼

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

syosin-oyaji
質問者

補足

marimari01様、再度のご教授ありがとうございました。 サンプルのjavascriptを実行した結果、VBScriptと同様の結果でした。 *Windows mobile(v5.0)の機種はWILLCOM(wzero3)で、IE,OPERAの両方で実行してもだめでした。 *しかし、私にとってはmarimari01様からご教授頂いた内容は非常に有益で他のケースで活用できそうです。 *どうもお手数お掛けしました。  これからもよろしくお願いいたします。

関連するQ&A

  • クライアントのcsvファイルの読込について

    いつもお世話になっております。 Q1)クライアントPC内のCSV(c:\folder\file.csv)を読込みたいのですが、一度サーバーにアップロードさせないと駄目なのでしょうか? 尚、クライアントは複数の拠点にあります。 -------------------------------------------------- 現在、PHPが稼動しているサーバー上のCSV(c:\folder\file.csv)は、 下記のような記述で処理できるのですが、 $csv_f = "c:\folder\file.csv"; // CSVファイル&パス $fp = fopen($csv_f, "r"); // CSVファイル:OPEN while ($data = fgetcsv($fp)) . . クライアントPC内のCSV(c:\folder\file.csv)を読込む方法をご存知の方いらしたらご教授下さい。 <理想形はこうです> 1.クライアントPC内のCSV(c:\folder\file.csv)を読込んで処理。 2.処理後、c:\folder\file.csvは、c:\folder\file_old.csvという   名前にリネームする。 ----------------------------------------- 以上、よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • クライアントのファイルダウンロード後にサーバー側のファイルを削除したい

    お世話になっております。 ASP.NET(VB)を用いてExcelのファイルを操作保存し、保存してあるファイルをクライアントにダウンロードさせた後にExcelのファイルを削除させようとしています。 ですが、ファイルダウンロード実行する前にファイルが削除されています。 感じとしては、IEにダウンロードするように命令するのですが、そのレスポンスが遅くて削除になってしまっている感じがします。 できればクライアントのダウンロード完了をきっかけに削除するようなコードにしたいです。 どなたかご教授願えませんでしょうか。 以下 コード オブジェクトの宣言、処理 (省略) '*ファイル保存ブロック* 開始 '保存ファイル名 xlFilePath = ("C:\0.xls") '保存時の問合せのダイアログを非表示に設定 xlApp.DisplayAlerts = False xlSheet.SaveAs(xlFilePath) xlApp.DisplayAlerts = True Excel終了、オブジェクト解放 (省略) '*excelファイルダウンロードブロック* 開始 Response.Clear() Response.ContentType = "Application / vnd.ms - Excel" Response.AddHeader("Content-Disposition", "attachment;filename=" & "0.xls") Response.WriteFile("c:\0.xls") My.Computer.FileSystem.DeleteFile("c:\0.xls") 処理終了

  • web 上のファイルが存在するかチェックする方法

    php 5 を使用です。 自分のサーバーのファイルは file_exists($filename) でチェック出来ますが、 web 上のファイルが存在するか確認することは出来るのでしょうか? web 上のファイルというのは 自分のサーバーではないこういうものです。 http://www.example.com/images/pic01.jpg

    • ベストアンサー
    • PHP
  • VBSでファイル存在の有無チェック

    お世話になります。 前回も似たような質問をしておりましたが改めて質問させていただきます。 下記のような"URIAGE.bat"というバッチファイルを実行するTEST.VBSがあります。 CreateObject("WScript.Shell").Run "C:\URIAGEDATA\system\URIAGE.bat",0 やりたい事は"C:\URIAGEDATA\system"配下に"空ファイル.txt"というファイルが存在しなければURIAGE.batを実行して、存在しt場合はURIAGE.batを実行しないで終了、という仕組みにしたいのです。 前回の質問時に"URIAGE.bat実行中に"C:\URIAGEDATA\system"配下に"空ファイル.txt"というチェック用のテンポラリーのファイルを作成して、URIAGE.batを実行した時に、このファイルの存在の有無をチェックする方法をご教授いただきまして、お陰様でうまくいきました。 今回は呼出し元のTEST.VBSの中で"C:\URIAGEDATA\system"配下に空ファイル.txt"が存在しなければURIAGE.batを実行して、存在しなければ実行しないで終了、という様にしたいのです。 環境:Windows XP SP SP3 どなたかご教授いただけますと幸いでございます。

  • EXCEL VBA)ファイルを作成する際に「そのファイルは既に存在します」の警告を出さずに上書きしたい

    下記の「AAA」ブックを作成するコードを実行した際に、「そのファイルは既に存在します。上書きしますか[はい][いいえ]」という警告が出ます。この警告を出さずに、即上書きするようにしたいのですが、どうすればよいでしょうか。よろしくお願いします。 ActiveWorkbook.SaveAs Filename:="c:\FILE\AAA.xls" EXCEL2000を使用しています。

  • 複数ファイルを連続でダウンロード

    はじめまして 複数ファイルのダウンロードについて質問します。 チェックボックスで複数のファイル(PDFファイル)を選択して ダウンロードができるようにしたいのです。 自分でも色々調べて、「PEAR」モジュール「File_Archive」を使い 選択した複数ファイルを圧縮してダウンロードできるようにしました。 しかし、要望として圧縮ファイルにはせず、 PDFファイルを選択した数だけ順番にダウンロードできるようにしたいのです。 自分でも「header関数」を使いダウンロードできるようにソースを書いてみましたが 一つ目のファイルしかダウンロードできず、2つ目からのダウンロードが始まりません。 【ソースの例】*********************************** //DOWNLOAD&nbsp;1 $file_location&nbsp;=&nbsp;"/mnt/bisei_nfs/test1.txt"; $filename&nbsp;=&nbsp;"test1.txt"; /*&nbsp;ファイルダウンロード処理&nbsp;*/ $filesize&nbsp;=&nbsp;filesize(&nbsp;$file_location&nbsp;); header(&nbsp;"Accept-Ranges:&nbsp;none"&nbsp;); header(&nbsp;"Content-Length:&nbsp;$filesize"&nbsp;); header(&nbsp;"Content-Disposition:&nbsp;filename=\"$filename\""&nbsp;); header(&nbsp;"Content-Type:&nbsp;text/octet-stream"&nbsp;);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;IE $fp&nbsp;=&nbsp;fopen(&nbsp;"$file_location",&nbsp;"rb"&nbsp;); @fpassthru(&nbsp;$fp&nbsp;); //DOWNLOAD&nbsp;2 $file_location&nbsp;=&nbsp;"/mnt/bisei_nfs/test2.txt"; $filename&nbsp;=&nbsp;"test2.txt"; /*&nbsp;ファイルダウンロード処理&nbsp;*/ $filesize&nbsp;=&nbsp;filesize(&nbsp;$file_location&nbsp;); header(&nbsp;"Accept-Ranges:&nbsp;none"&nbsp;); header(&nbsp;"Content-Length:&nbsp;$filesize"&nbsp;); header(&nbsp;"Content-Disposition:&nbsp;filename=\"$filename\""&nbsp;); header(&nbsp;"Content-Type:&nbsp;text/octet-stream"&nbsp;);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;IE $fp&nbsp;=&nbsp;fopen(&nbsp;"$file_location",&nbsp;"rb"&nbsp;); @fpassthru(&nbsp;$fp&nbsp;); ***************************************************** 順番にダウンロードするには、どうしたらよいのでしょうか?

    • ベストアンサー
    • PHP
  • fopenでファイルがオープンできません

    $fp = fopen(TEST_FILE, "w") としてオープンしようとすると Warning: fopen(mybasic9.txt): failed to open stream: No such file or directory と、オープンしようとしたファイルがない、と出ます そして、そのファイルをあらかじめ作っておくと OKです。 しかし fopen(TEST_FILE, "w") は該当ファイルがあればそれをオープンし 無ければ、新しく作成する、とFopenの仕様に出ています。 これは、今使っているサーバーの問題でしょうか 何か、避ける方法はないでしょうか よろしくお願いします

    • 締切済み
    • PHP
  • サーバ側とクライアント側で共通の内容の環境変数ってありますか?

    サーバ側とクライアント側で共通の内容。。 例えば、WebへのLoginユーザなどは、サーバ側では、 REMOTE_USERで受け取れると思うのですが、 クライアント側でもWebへのLOGINの情報が、VBで取得できるような環境変数とかに、入っているのでしょうか? やりたいことは、サーバ側で、クライアント個別のファイルを作成して、クライアント側に保存されているEXEで、そのファイルにアクセス したいと思っております。 その場合、クライアントのEXEが取得できるような環境変数は あるのでしょうか? 例) クライアント  aiueo(WebへのLogin) ・・・(1)      ↓    サーバ   aiueo・・・(REMOTE_USERで取得)         (サーバ側でaiueo.txt作成し、URLで          クライアントのTEST.EXEを指定したWeb          ページを作成)      ↓      クライアント TEST.EXEは実行できます         aiueo.txt←((1)のLoginがクライアントの                TEST.EXE[VB]で取得               することは可能ですか?) ※サーバとクライアントで同じ内容を見れるものであれば、  どんなものでも結構です。  教えてください。 説明がわかりづらくて済みません。

  • VBAのDoLoopでファイルがあるかチェック

    VBA超初心者なりに記述したのですが、どうしたらいいのかわからないのでお助けください。 例えば以下のような一定の命名規則のファイルが、r:\testに複数あります。 0123-20140301-abcd.txt 0124-20140302-efgh.txt xxxx-20140301.csv xxxx-20140302.csv 「通し番号4桁-日付8桁-4桁(不定).txt」に対応する「xxxx(固定)-日付8桁.csv」のファイルがあるかチェックしたいだけなのですが、以下の記述では一番古い日付の1個しかチェックしてくれません。 ''''''''''''''''''''''''''''''''''''''''''''''''''  Dim buf As String  Dim cnt As Long  buf = Dir("r:\test\????-20*.txt") Do While buf <> ""  If Dir("r:\test\xxxx-" & Mid(buf, 6, 8) & ".csv") <> "" Then   Call MsgBox(buf & "が存在します")  End If  cnt = cnt + 1  buf = Dir() Loop   Call MsgBox(cnt & "個のファイルをチェック済み") '''''''''''''''''''''''''''''''''''''''''''''''''' 「xxxx-20140301.csv」が存在しない場合は「1個のファイルをチェック済み」と出て終わります。 本当は2個のファイルをチェックしてほしいのです。 なお、実際にファイルが何個あるかはその時々なので、いつでも使えるようにForNextではなくDoLoopを選びました。 If~Endifがなければ「2個のファイルをチェック済み」と出るので、その部分の記述が怪しいとは思うのですが。 なお、自宅のPCにはExcelがないので、VB2010Expressを入れて再現してみました。 msgboxの記述方法が違うくらいで、後は職場で悩んでいた内容そのままです。 どうぞよろしくお願いします。

  • クライアントからサーバーの実行ファイルをサーバー側で実行したい

    サーバーもクライアントもWindowsの環境で、Visual Basic 2005 を使い、クライアントからサーバーにある 実行ファイル(.exe)をサーバー側で実行したい のですが、どうもうまくいきません。shell 関数や Process.Start メソッドを使い、httpプロトコル (http://~)で実行ファイルを指定するようにした のですが、クライアント側で実行しようとします。 また、コマンドライン引数を指定したいです。 もちろん、サーバー側にはWebサーバー(IISのWWW サービス)をインストールしてあります。 UNIX系のrsh(リモートシェル)に相当するような 機能をWindowsでは実現できないのでしょうか? お分かりの方いらっしゃいましたらご教授のほど よろしくお願いします。

専門家に質問してみよう