node,jsでExcelを取り扱う。

業務として取り扱う場合、テンプレートから文字を埋め込むといったことをするはず、
つまりエクセルのテンプレートファイルを読み込んで日本語を含む値を設定した後ファイルに出力するということがやりたい。
exceljs が日本語も行けていい感じ。
ただし現状では画像貼り付けが非常に困難なようなので注意






サンプルソース


指定したURLにアクセスしたらエクセルをダウンロードするという雑なコード

/* eslint-env node, express */

const excel = require("exceljs")
const express = require("express")
const router = express.Router()
// const fs = require("fs")

/* GET home page. */
router.get("/", /* @callback */ function (req, res, next) {
  const templateFilePath = "public/data/template.xlsx"
  const outputFileName = "public/data/out.xlsx"

  var workbook = new excel.Workbook()

  workbook.xlsx.readFile(templateFilePath).then(function () {
    var sheet1 = workbook.getWorksheet(1)
    console.log(sheet1.getCell(2, 2).value)

    sheet1.getCell(3, 2).value = "テンプレートから出力テスト"
    workbook.xlsx.writeFile(outputFileName).then(function() {
      console.log("write ok!")
      res.download(outputFileName)

      // fs.unlink(outputFileName, function (err) {
      //   if (err) {
      //     console.log(err)
      //   }
      // })
    })
  })

  // res.render("box", { title: "Box Demos" })
})

module.exports = router


読み込むファイル

Excel template


出力されたファイル

Excel download



参考



getCell(行, 列)となっているので注意
コメントアウト部分はダウンロード後にファイルを消したかったんだけどうまくいかなかった。

http://qiita.com/hnakamur/items/392f66e3dbeec9ae9d00
https://github.com/guyonroche/exceljs
http://m-shige1979.hatenablog.com/entry/2015/12/22/080000


調べた限りでは画像貼り付けができない模様。
ウェブでやるならApache Poi(Java)を使用するしかないか...
node.jsからjavaを呼び出したりもできるけどやめておいた方がいいかと

2017年3月23日木曜日