ウィリアムのいたずらの、まちあるき、たべあるき

ウィリアムのいたずらが、街歩き、食べ物、音楽等の個人的見解を主に書くブログです(たま~にコンピューター関係も)

サーブレットからExcelを画面に出さずに、マクロを引数つきで呼び出す

2007-09-07 16:34:52 | JavaとWeb

このまえのJavaからExcelを画面に出さずに、マクロを引数つきで呼び出す。の応用で、サーブレットから、Excelを呼び出してみましょう。



■仕様
Excelを画面に出さずに、マクロを、コマンドラインから引数つきで呼び出すで示した、Excelマクロ(指定された内容を指定されたファイルに書き出す関数testmsg)がはいった、Excelファイル、book1.xlsが

¥¥tmp¥¥book1.xls
(¥は、本当は半角。以下同じ)

にあったとして

それを起動するVBスクリプト(さっきのところにプログラムは書いてあります)test.vbsが

¥¥tmp¥¥test.vbs


としてあったとき、サーブレットを引数

fname=書き出しファイル名&msg=書き出したい内容

で送ると、

¥¥tmp¥¥書き出しファイル名

に、書き出したい内容を書いて、保存します。
なお、C:¥WINDOWS¥SYSTEM32にcmd.exeがあるとします。




■ソース

このようなサーブレットを作ればいいみたい(クラス名はexecVBSとしました)

import java.io.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class execVBS  extends HttpServlet {

	/*
	 * メソッド:service
	 * 内容 :サーブレットが入ってくるところ
	 * 
	 */
	public void service(HttpServletRequest request, 
                      HttpServletResponse response) 
                          throws ServletException, IOException 
   {
		//==============================//
		//	引数の取得	  //
		//==============================//
		request.setCharacterEncoding("utf-8");
		String fname =	request.getParameter("fname");
		String msg   =	request.getParameter("msg");


		//==============================//
		//	プログラム実行	  //
		//==============================//
		String sendData = "ret ok!";
		Runtime r = Runtime.getRuntime();
		try
		{
			String[] cmdList = new String[6];

			cmdList[0]="C:¥¥WINDOWS¥¥SYSTEM32¥¥cmd.exe";
			cmdList[1]="/c";
			cmdList[2]="¥¥tmp¥¥test.vbs";
			cmdList[3]="/file:¥¥tmp¥¥book1.xls";
			cmdList[4]="/outfname:¥¥tmp¥¥" + fname;
			cmdList[5]="/msg:" + msg;

			r.exec(cmdList);
		}
		catch(Exception e)
		{
			sendData = e.toString();
		}

		//==============================//
		//	出力する		  //
		//==============================//
	         // ContentTypeを設定
	         response.setContentType("text/plain; charset=utf-8");
		response.addHeader("Cache-Control", "no-cache");
                  response.addHeader("Pragma", "no-cache");

	         // 出力用PrintWriterを取得
    	         PrintWriter out = response.getWriter();
		out.println(sendData);
   }
}


で、呼び出しは、たとえば、ローカル127.0.0.1:8080においたとすれば、
http://127.0.0.1:8080/vbs/servlet/execVBS?fname=kekka.txt&msg=abcdefg
とすると、tmpフォルダのkekka.txtに、abcdefgという内容で、ファイルを書き出します。

cmd.exeの指定ですが、"C:¥¥WINDOWS¥¥SYSTEM32¥¥cmd.exe"と、フルパスで指定しないとダメでした。

この記事についてブログを書く
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« Gooと「顔ちぇき!」が業務提携 | トップ | 開発の初めから順番に書いて... »
最新の画像もっと見る

JavaとWeb」カテゴリの最新記事