「TAURI」でExcelのデータを読み書きしてWebページに表示してみよう
はじめに
今回は、図1のように「Excel」の「xlsx」ファイルを読み書きし、Webページに表示するためのxlsxファイルビューアを作ります。ただし、セルの文字列データにしか対応していません。
まず、テンプレートでバックエンドの「Rust」は触らずに、フロントエンドのWebページだけを書き換えてテーブル表を表示します。次にバックエンドのTAURIコマンド関数から50音(「あ」〜「ん」)の文字列を取得して表示します。それから、いったん50音の文字列をExcelブックのセルに入れて「50音.xlsx」ファイルに保存し、最後にファイルダイアログでその「50音.xlsx」ファイルを選択するとセルの文字列が読み込まれてWebページにテーブル表が表示されます。なお、この際はたいていのxlsxファイルであれば読み込めます。
TAURIプロジェクトの作成
それでは、いつものようにTAURIプロジェクトを「$ cargo create-tauri-app excel」のように新規作成し、カレントディレクトリを「excel」フォルダに変更します。
今回はExcelファイルを扱うために「umya-spreadsheet」クレートを使うので、「Cargo.toml」ファイルに追記します。また、ファイルダイアログも扱うため、これまでと同様に、次のサンプルコードのように「Cargo.toml」ファイルと「tauri.conf.json」ファイルも変更します。
「tauri.conf.json」ファイル に追記する「"dialog": { "all": true,"open": true,"save": true }」にコメントを書かなかったのは、「json」ファイルはコメントアウトの機能がないためです。また「$ cargo-tauri build」コマンドでリリースビルドする際は"identifier"をユニークな(一意の)値に変更し、アイコンもオリジナルの画像に変えてください。
・「src-tauri」→「Cargo.toml」ファイルのサンプルコード[package] name = "excel" version = "0.0.0" description = "A Tauri App" authors = ["you"] license = "" repository = "" edition = "2021" [build-dependencies] tauri-build = { version = "1.2", features = [] } [dependencies] tauri = { version = "1.2", features = ["dialog-all"] } # ダイアログの許可 serde = { version = "1.0", features = ["derive"] } serde_json = "1.0" umya-spreadsheet = "1.2.3" # xlsxファイルの読み書き [features] custom-protocol = ["tauri/custom-protocol"]・「src-tauri」→「tauri.conf.json」ファイルのサンプルコード
{ "build": { "beforeDevCommand": "", "beforeBuildCommand": "", "devPath": "../src", "distDir": "../src", "withGlobalTauri": true }, "package": { "productName": "excel", "version": "0.0.0" }, "tauri": { "allowlist": { "all": false, "dialog": { "all": true, "open": true, "save": true } }, (後略)
テーブル表のWebページをデザインする
次のサンプルコードのように「index.html」「main.js」「styles.css」ファイルを記述して「$ cargo-tauri dev」コマンドを実行すると、図2のようにテーブル表が表示されます。まだバックエンドでExcelファイルは読み書きしておらず、配列に初期データを用意して表示しただけです。
ここは、いつものようにWebページをデザインしただけですね。ただ、今回はTAURIの最新版にアップデートしようとしたところインストールに失敗しました。エラーが出た場合は「$ cargo install tauri-cli --locked」とコマンドを実行してみてください。
HTMLのコーディング
テンプレートのindex.htmlファイルの「本文(body)」の中身を「table」タグだけにします。このtableタグの中身を「JavaScript」で入れ替えてテーブル表を表示します。
また、今回のTAURIでは最新版でテンプレートを作ったので「script」タグは「モジュール(小分けにした機能)」を表す「type="module"」属性を消さないと「onClick」でJavaScriptの関数が呼び出せませんでした。
・「src」→「index.html」ファイルのサンプルコード<!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8" /> <link rel="stylesheet" href="styles.css" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>Tauri App</title> <script src="./main.js" defer></script> </head> <body> <table> </table> </body> </html>
【サンプルコードの解説】
tableタグでテーブルを表示します。
JavaScriptのコーディング
「setData」関数の引数に「列数(col)」「行数(row)」「文字列の配列データ(data)」を渡せば、「ヘッダー」と「行番号」と文字列データをテーブル表の「セル」に入れて配置します。
index.htmlファイルのDOMが読み込まれたら、「0」~「9」の10文字を2行だけsetData関数に渡してテーブル表を表示します。
・「src」→「main.js」ファイルのサンプルコードconst { invoke } = window.__TAURI__.tauri; // tableタグ let table; // DOMが読み込み完了時 window.addEventListener("DOMContentLoaded", () => { // tableタグの取得 table = document.querySelector("table"); // 初期データ let data = [ "0","1","2","3","4","5","6","7","8","9", "0","1","2","3","4","5","6","7","8","9", ]; // 初期データのセット setData(10,2,data); }); // データのセット function setData(col,row,data) { // tableタグを空にする table.innerHTML = ""; // ヘッダー let header = [ "A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z" ]; let th = '<th onClick="openXlsx();">開く</th>'; for ( let i = 0; i < col; i++ ) { th += "<th>"+header[i]+"</th>"; } table.insertAdjacentHTML('beforeend','<tr>'+th+'</tr>'); // 行の追加 for ( let i = 0; i < row; i++ ) { let td = '<td class="row">'+(i+1)+'</td>'; for ( let j = 0; j < col; j++ ) { td += "<td>"+data[col*i+j]+"</td>"; } table.insertAdjacentHTML('beforeend','<tr>'+td+'</tr>'); } }
【サンプルコードの解説】
「table」変数にtableタグを取得します。
初期データの文字列配列をsetData関数で表示します。
setData関数では、まずinnerHTMLを空白文字「""」にして空にします。「th」タグの1列目に「開く」ボタンを、2列目以降に「A」~「Z」のヘッダーのセルを追加します。2行目以降には1列目に行番号のセルを、2列目以降に文字列データを入れてtdタグのセルを追加します。
スタイルシートのコーディング
今回のスタイルシートはテーブルのセルに外枠(ボーダー)を描いて、ヘッダーと行番号の背景色をグレーにして太字にしました。もう少しエレガントに書くなら、ボーダー(border)と余白(padding)を「th」「td」で共通させた方が良いかもしれません。
・「src」→「styles.css」ファイルのサンプルコードth, .row { background-color: #ccc; border: solid 1px #000; padding: 10px 20px; font-weight: bold; } td { border: solid 1px #000; padding: 10px 20px; }
【サンプルコードの解説】
thタグがヘッダーのセルです。
「.row」セレクタは行番号のセルです。
tdはヘッダー以外のセルです。
連載バックナンバー
Think ITメルマガ会員登録受付中
全文検索エンジンによるおすすめ記事
- 「TAURI」で気象庁の「CSVデータ」を解析する
- 「TAURI」でデータベースを使ってみよう
- 「Ace」を使って「TAURI」で「テキストエディタ」アプリを作ろう
- 「TAURI」で「画像ビューア」のサンプルアプリを作ろう
- 「TAURI」にも必要な「Rust」の「クレート」を使う
- 「TAURI」で「ピアノ音楽」アプリを作ろう
- 「TAURI」で「簡易RSSリーダー」を開発してみよう
- 「TAURI」と「Rust」の「Option型」と「Result型」を使いこなそう
- 「TAURI」と「Rust」の「テスト」機能を試してみよう
- 「TAURI」の基礎知識を押さえ、簡単なTAURIアプリ開発を体験してみよう