記事概要
以下記事の家計簿アプリで使っているスプレッドシート、およびGASのスクリプトとテンプレートのコードを記載しています。宜しければ自己責任でご利用ください。
プログラムの著作は著者に帰属します。また、自己責任でご利用ください。何か上手く行かない場合も自力で解決してみてください・・・(公開設定の方法が適切でないとアクセスできない場合があります)。
これをひな型として、列を増やしたり、パスワードの管理方法を変えたりと自由にアレンジしてみて頂ければと思います。
情報漏えいの恐れがあるのでくれぐれもセキュリティーにかかわる情報管理には利用しない様にしてください。
インポートするスプレッドシート
まず、Googleドライブでスプレッドシートを作成し、そのスプレッドシートに以下からダウンロードしたエクセルのひな型をインポートしてください。これには式を含めたサンプルデータが入っています。
エクセルのシートをGoogleスプレッドシートにインポートしたら、シートの見出しを確認しておきます。また、スプレッドシートはお好みで名前を変えておきます。
ひな型では、以下の様な「書式」シートが入っています。

その他、サンプルとしていくつかの日付名のシートが入っています。

フォームを立ち上げるとその日の日付シートが自動作成されます。また、日付を指定して読み出すと、指定した日付のシートが自動作成されます。
スプレッドシートを作成したら、ブラウザの上方にあるURLから、スプレッドシートのIDを確認しておきます。
GASのテーブル形式フォームのスクリプトファイルとテンプレートファイルの作成
このアプリの以下の画面を呼び出すには、「コード.js」と「INDEX.HTML」が必要になります。

まず、Googleドライブから 新規作成 → GoogleAppsScript によりプロジェクトを新規作成します。
次に、プロジェクト画面より「コード.js」の元のコードを削除した上で、以下のコードを貼り付けてください。

☆各自のスプレッドシートID☆ のところは、各自のスプレッドシートのURLを参照してIDを貼り付けてください。
function doGet(e) {
var myApp = SpreadsheetApp.openById('☆各自のスプレッドシートID☆');
var tDate = new Date();
var mNames = ['01', '02', '03', '04', '05', '06', '07', '08', '09', '10', '11', '12'];
var mWeeks = ['日', '月', '火', '水', '木', '金', '土'];
var myDate = "D" + tDate.getFullYear() + mNames[tDate.getMonth()]+ String(100+Number(tDate.getDate())).substring(1)+"_" + mWeeks[tDate.getDay()];
var mySheet = myApp.getSheetByName(myDate);
var myFrmSheet = myApp.getSheetByName('書式');
if(!mySheet){
var mySheet = myFrmSheet.copyTo(myApp);
mySheet.setName(myDate);
}
var nRow=11;
var nCol=6;
var myCells = mySheet.getRange(1,1,nRow,nCol);
var myHTML = HtmlService.createTemplateFromFile('INDEX');
myHTML.myMSG ='ボタンをクリックしてください';
myHTML.myCells = myCells.getValues();
myHTML.myRows = nRow;
myHTML.myCols = nCol;
myHTML.myDate = myDate;
return myHTML.evaluate().addMetaTag("viewport", "width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=10.0");
}
function SetSheet(myCells, myRows, myCols, myDate0){
var myApp = SpreadsheetApp.openById('☆各自のスプレッドシートID☆');
var myDate =myDate0
var mySheet = myApp.getSheetByName(myDate);
var nRow = myRows;
var nCol = myCols;
for (var iRow = 0 ; iRow < nRow; iRow++) {
for (var iCol = 0 ; iCol < nCol; iCol++) {
if(!(iRow == 0 || iCol == 0 || iCol == 5)){
mySheet.getRange(iRow + 1,iCol + 1,1,1).setValue(myCells[iRow][iCol]);
}
}
}
var myTotal = new Array(2) ;
myTotal[0] = 0 ;
myTotal = 0 ;
for (var iRow = 2; iRow <= nRow ;iRow++){
if(typeof mySheet.getRange(iRow,5,1,1).getValue() == 'number'){
myTotal[0]++;
myTotal+= mySheet.getRange(iRow,5,1,1).getValue();
}
}
return myTotal;
}
function GetSheet(myRows, myCols, myDate0){
var myApp = SpreadsheetApp.openById('☆各自のスプレッドシートID☆');
var myDate =myDate0
var mySheet = myApp.getSheetByName(myDate);
var myFrmSheet = myApp.getSheetByName('書式');
if(!mySheet){
var mySheet = myFrmSheet.copyTo(myApp);
mySheet.setName(myDate);
}
var nRow=myRows;
var nCol=myCols;
var myCells = mySheet.getRange(1,1,nRow,nCol).getValues();
return myCells;
}
上記スクリプトは、doGet関数が含まれており、テンプレートから呼び出されて発動します。
また、プロジェクト画面で、上記コードで呼び出すテンプレートファイル「INDEX.html」を作成し、以下のコードを貼り付けます。

以上になります。プログラムはWEBアプリとしてデプロイすることで、URLにアクセスするだけで使える様になりますが、デプロイの方法詳細は、以下を参照してください。