Googleドライブ テーブルのデータを使用してレポートします。 単純なDBを作成します。 パート1

誰もがGoogleドライブ(Google Docs)について知っていると思います。多くの人はおそらくGoogle Apps Scriptについて知っていると思います。 Googleスプレッドシート(​​シート)とGoogle Doc(ドキュメント)を使用して、テーブルからデータを含むドキュメントを生成する別の方法を紹介します。

最初にGAS(Google Apps Script)について学んだ人のために、 Getting Started with Google Apps Scriptを読むことをお勧めします

タスク:ドキュメントの作成プロセスを自動化します。
解決策:

1.データベースを開き、必要なデータを見つけます。
2.テンプレートのコピーを作成します。
3.コピーしたテンプレートに入力します。

テーブルを使用してデータを保存し、ドキュメントを使用してテンプレートを保存します。
ドキュメント-クライアントに配信するためのドキュメントのフォーマットされたテキストを含みます。クライアントデータは変数に保存されます(私の場合、そのような変数が使用されました:)。

テーブルでは、データ自体を次のような構造で保存します。


たとえば、次のテキストを使用します。


ドライブに関するIDについてのいくつかの言葉は、各オブジェクトに固有のIDがあり、オブジェクト(ドキュメント、テーブル、フォルダー)を開いた状態でブラウザーの行を見ると取得できます。


以下にコードを示しますが、十分にコメントされていると思います。 フランス語の英語はご容赦ください。 DoAction()スクリプトのエントリポイント:
function doAction() {

var result = ReadBaseData( "31-05-2012" );
//If found data for this date...
if (result != null ) {
var doc = CreateNewDoc( "Act from " + result[0][0]);
FillTemplate(doc, result);
}
}
//inDoc - its a empty template, inData - data for filling template
function FillTemplate(inDoc, inData) {
//Getting count of files in folder
var NUM = DocsList.getFolderById(FOLDER_ID).getFiles().length;

//Replace masks (Don't work [NUM] or $NUM or something else)
inDoc.replaceText( "<NUM>" , NUM + 1);
inDoc.replaceText( "<DATE>" , Utilities.formatDate(inData[0][0], "GMT" , "dd.MM.yyyy" ));

//get first table in document
var table = curDoc.getTables()[0];
for (i=0; i< inData.length; i++) {
var row = table.appendTableRow();
row.appendTableCell(inData[i][1]);
row.appendTableCell(inData[i][2]);
}
curDoc.saveAndClose();

}
function CreateNewDoc(docName) {
//Making copy of blank file
var blankDoc = DocsList.getFileById(BLANK_DOC_ID).makeCopy(docName);
blankDoc.addToFolder(DocsList.getFolderById(FOLDER_ID));

//return working doc and table base
return curDoc = DocumentApp.openById(blankDoc.getId());
}
//get range and sort only for day from parameter
function ReadBaseData(inDate) {
var ssDoc = SpreadsheetApp.openById(BASE_TABLE_ID).getActiveSheet();

//get filled range
var data = ssDoc.getDataRange().getValues();

//create new array with data to inDate,
//for start from 1 because first row is text column headers
var filteredData = new Array( new Array() );
for (i=1; i< data.length; i++) {
data[i][0] = convertDate(data[i][0]);
if (data[i][0] == inDate && data[i][3] == 1) {
filteredData[i-1] = data[i];
}
}
return filteredData;
}


* This source code was highlighted with Source Code Highlighter .

最後に、Actsを含むフォルダーに新しいドキュメントを取得します

そしてテーブルからのデータで満たされました

したがって、アプリケーションソフトウェアをインストールすることなく、小規模オフィスでの請求書または行為の単純な発行を自動化することができます。

興味深い場合は、GUIに関する次の記事に進むことができます。

ご清聴ありがとうございました!

Source: https://habr.com/ru/post/J145416/


All Articles