0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

vte.cxAdvent Calendar 2015

Day 24

【vte.cx応用】23.サーバーサイドJavascriptを使用したエクセル出力の方法

Last updated at Posted at 2015-12-23

今回はサーバーサイドjavascriptを使用したエクセルファイルの出力と、その書き方の仕方について説明します。

vtecxblankを最新の状態にしてください

Xls出力は古いバージョンのvtecxblankプロジェクトだと動作しません。
お手数ですが、vtecxblankプロジェクトを最新にしていただきますようよろしくお願い致します。
(2015/12/18付)

XLSのサンプルソース

エクセルファイルを出力する際は、テンプレートとなるXLSファイルとリソースデータが必要になります。
XLSファイルで型となるテンプレートを作成し、そのテンプレートにリソースデータの値を代入して出力するイメージとなります。

このリソースデータをxlsとして出力するとします。

/d/hoge(リソースデータ)
    {
    	feed: {
    		entry:[{
    			title: 'Hello World',
    			link: [{
    				___href: '/hoge',
    				___rel: 'self'
    			}],
    			id: '/hoge,1'
    		}]
    	}
    }

リソースデータのtitle項目の「Hello World」をXLSとして出力したい場合、以下のようなファイルをテンプレートとして用意してください。

hello_world.xls(XLSテンプレート)
hello_world.xls(XLSテンプレート)

表示したい項目をセルに**「${項目名}」**で指定します。
こうすることでtitle項目の「Hello World」をセルに埋め込めます。

テンプレートのエクセルファイルの保存場所

テンプレートのHTMLはvtecxblankプロジェクトの以下の場所に配置してください。

ファイルの置き場所
   /app/xls
      hello_world.xls

サーバーサイドjavascriptでReflexContext.toXls()を実行する

エクセルを作成し出力するためにはサーバーサイドjavascriptが必要になります。
ReflexContext.toXls()メソッドを使用することでエクセルを出力できます。

以下のサーバーサイドjavascriptを用意してください。

test.xls.js(サーバーサイドjavascript)
module.exports = function () {

  // リソースデータ取得
  var data = ReflexContext.getEntry('/hoge');

  // エクセル出力
  ReflexContext.toXls(data, '/xls/hello_world.xls', 'test.xls');

};

ReflexContext.toXlsメソッドの引数は以下のようになります。

    ReflexContext.toXls({リソースデータ}, {HTMLのURL}, {XLSのファイル名(拡張子含む)})

デプロイを実行し、実際にアクセスしてみる

  • hello_world.xls(テンプレートXLS)
  • test.xls.js(サーバーサイドjavascript)

をapp配下に置いたら、デプロイを実行したら、以下のURLでアクセスしてみてください。

アクセスURL
   /s/test.xls

するとXLSが表示(またはダウンロード)されると思います。

グローバルなoutput_xls.jsを作成する

一つのXLSファイルに対して一つのサーバーサイドjavascriptを作成するのは何かと手間になるケースがあります。そういうときはxls作成用の共通したサーバーサイドjavascriptを作成するといいと思います。

Xls作成用のサーバーサイドjavascript
GET /s/output_xls?data=/hoge&template=/xls/person_template.xls&name=test.xls

// output_xls.js
module.exports = function () {

  var querystring = ReflexContext.querystring();

  // 各パラメータ取得
  var data_path = querystring.split('&')[0].replace('data=', '');
  var template_path = querystring.split('&')[1].replace('template=', '');
  var xls_name = querystring.split('&')[2].replace('name=', '');

  // リソースデータ取得
  var data = ReflexContext.getEntry(data_path);

  ReflexContext.toXls(data, template_path, xls_name);

};

こうすることで、引数により生成するエクセルを変更することができます。

以上でエクセル出力の説明を終わります。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?