サイドバーにスプレッドシートの内容を常に反映させることはできますが、実用には問題があります。
- サイドバーの幅が 300ピクセル固定のため、コンテンツ内容によっては横スクロールが必要
- サイドバーのコンテンツの部分更新ができない(全体を再設定する必要がある)
- サイドバーのコンテンツ更新時にフォーカスがサイドバーに奪われ、A1セルが選択&スクロールされる。
特に3が致命的で、どこかのセルを変更する度に選択中のセルがA1になってしまうので使いづらすぎました。
JavaScript
1
2function onOpenByTrigger(e) {
3 showSidebar();
4}
5
6
7function onEditByTrigger(e) {
8 showSidebar();
9}
10
11
12function showSidebar() {
13 const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("シート1");
14 const values = sheet.getDataRange().getValues();
15
16 const template = HtmlService.createTemplateFromFile("Sidebar");
17 template.values = JSON.stringify(values);
18 const htmlOutput = template.evaluate();
19 SpreadsheetApp.getUi().showSidebar(htmlOutput);
20}
HTML
1<!DOCTYPE html>
2<html>
3 <head>
4 <base target="_top" />
5 <title>SpreadsheetSidebar</title>
6 <script>
7 window.addEventListener("DOMContentLoaded", () => {
8 const values = JSON.parse("<?= values ?>");
9 const table = document.querySelector("table");
10
11 values.forEach(rowValue => {
12 const tr = document.createElement("tr");
13 table.appendChild(tr);
14 rowValue.forEach(value => {
15 const td = document.createElement("td");
16 tr.appendChild(td);
17 td.textContent = value;
18 });
19 });
20 });
21 </script>
22 </head>
23 <body>
24 <h3>サイドバー</h3>
25 <table border="1"></table>
26 </body>
27</html>
(追記)
getDataRange
はデータが入っているセルすべてを含む範囲を取得するので、特定範囲が欲しければ、getRange
を使ってください。
JavaScript
1//const values = sheet.getDataRange().getValues();
2// ↓
3//列番号を指定する場合1
4const values = sheet.getRange(53, 2, 9, 3).getValues();
5//A1Notaion を指定する場合
6const values = sheet.getRange("BA2:BC10").getValues();
また、HTMlファイル(Sidebar.html)ですが
例えばテーブルタグの装飾にCSSは利用できるのでしょうか?
すべて利用きるかまではわかりませんが、CSSは適用できます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/07/19 06:38
2020/07/19 08:42
2020/07/19 08:57
2020/07/19 09:00