Handsontable for Vueを使ってみる

# はじめに
これは、[Vue #2 Advent Calendar 2019](https://qiita.com/advent-calendar/2019/vue2)の12日目の記事となります。

昨年、[Handsontable Advent Calendar 2018](https://qiita.com/advent-calendar/2018/handsontable) を1人開催しまして、その中で、Handsontable for Vue の記事を書いたのですが、

>動作方法
ごめんなさい。あとで動作する部分を書きます。
[Handsontable for Vueの紹介](https://qiita.com/yaju/items/6fabe92923261d5719ab)

ということで動作方法を書かないまま1年が経ってしまいました。 

【2021/08/05追記】
ようやく、本格的にHandsontable for Vue を触ることにしたので、分かったことを追記していきます。

# 導入方法
MITライセンスのHandsontable 6.2.2を例にします。

npmからhandsontableと公式ラッパーの@handsontable/vueをインストールします。
※ラッパーである@handsontable/vueはhandsontable本体を含んでいません

```
npm install handsontable@6.2.2
npm install @handsontable/vue@3.1.0
```

Handsontable 6.2.2に対応するのが、@handsontable/vue 3.1.0となります。
また、vue.jsは2.6.14となります。

## Package Installerで導入する
Handsontable はNuGet版が用意されていますが、vue-handsontable-officialのNuGet版が用意されていないため、Visual Studioの場合には Package Installerをインストールするといいでしょう。
ツール->拡張機能と更新プログラムから拡張機能と更新プログラムの画面を開きます。オンラインを選択し、package installerを検索します。

インストール完了後(Visual Studio再起動)に、プロジェクトの右クリックメニューで「Quick Install Package」を選択します。
画面表示後に「npm」を選択、「@handsontable/vue」を入力してバージョンを3.1.0にしたら「Install」ボタンをクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/14053/b97c60e9-78c3-ec2b-6fef-db12468da41d.png)

必要なのは、「vue-handsontable.min.js」だけあればいいです。

## CDNを利用
npmを使用するのはオフライン上でも動作できるようにしたいためなので、別にオンラインのみでいいならCDNを利用するのがいいでしょう。

```js:CDN
<script src="https://cdnjs.cloudflare.com/ajax/libs/handsontable/6.2.2/handsontable.full.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/@handsontable/vue@3.1.0/dist/vue-handsontable.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.6.14/vue.min.js"></script>
```

# 動作方法
## テーブルの作成
未だに Vue.js を使いこなしていないので、「[Vue.jsでhandsontableを使う](https://qiita.com/hyaroy_pg/items/3d484ee26988299561a8)」を参考にしてみます。
※ライブラリーのバージョンは新しくしました。

サンプルは「[【Handsontable】導入と設定](https://qiita.com/yaju/items/c0307fa9ea69ad02c189)」と同じものです。
![商品マスタ.png](https://qiita-image-store.s3.amazonaws.com/0/14053/b1eb98cc-26fd-270d-03c5-81774c26a9f2.png)

CodePen がQiitaで埋め込みが出来るので、CodePen を使用します。

<p class="codepen" data-height="512" data-theme-id="default" data-default-tab="html,result" data-user="yaju-the-encoder" data-slug-hash="povyGOP" style="height: 512px; box-sizing: border-box; display: flex; align-items: center; justify-content: center; border: 2px solid; margin: 1em 0; padding: 1em;" data-pen-title="Handsontable for vue">
  <span>See the Pen <a href="https://codepen.io/yaju-the-encoder/pen/povyGOP">
  Handsontable for vue</a> by やじゅ (<a href="https://codepen.io/yaju-the-encoder">@yaju-the-encoder</a>)
  on <a href="https://codepen.io">CodePen</a>.</span>
</p>
<script async src="https://static.codepen.io/assets/embed/ei.js"></script>

## データの読み込み
今はHandsontable.vueのdataに初期テーブルデータをベタ書きしているが、実際にこのような使い方をすることはないので、データの読み込みをします。

【2021/08/05追記】
データセットボタンをクリックすると、データがセットされます。

<p class="codepen" data-height="512" data-default-tab="html,result" data-slug-hash="JjNmPVL" data-user="yaju-the-encoder" style="height: 512px; box-sizing: border-box; display: flex; align-items: center; justify-content: center; border: 2px solid; margin: 1em 0; padding: 1em;">
  <span>See the Pen <a href="https://codepen.io/yaju-the-encoder/pen/JjNmPVL">
  Handsontable for vue</a> by やじゅ (<a href="https://codepen.io/yaju-the-encoder">@yaju-the-encoder</a>)
  on <a href="https://codepen.io">CodePen</a>.</span>
</p>
<script async src="https://cpwebassets.codepen.io/assets/embed/ei.js"></script>

# 最後に
未だに Vue.js を使いこなしていないので仕組みをまだ理解していません。
~~データの読み込みなど作成してから記事を書き直します。~~