Clicky

【GAS】スプレッドシートのデータをGoogleドキュメントに変換する方法(Google Apps Script)

GAS(GoogleAppsScript)
GAS(GoogleAppsScript)
この記事は約12分で読めます。

※記事中に広告情報を含みます。

スキルを手に入れた時、人は強くなれる。
Youtubeでスキルアップを始める 電子書籍でスキルアップを始める
\ワードプレスのスキルアップはこちら!/ WordPress入門読本

Google Apps Scriptを使うとスプレッドシートのデータを簡単にGoogleドキュメントに書き出すことができます。本記事では、すべてのシートのデータを取得し、見やすいドキュメント形式に変換する方法を解説します。このスクリプトを使えば、データの整理や報告書作成が効率化され、業務プロセスを大幅に改善できるでしょう。

スクリプトの全体像

Google Apps Scriptでは、スプレッドシートとドキュメントを連携させることができます。今回紹介するスクリプトは、指定したスプレッドシートのすべてのシートを順番に処理し、表形式でドキュメントに変換します。

このスクリプトを使うと、手動でのコピー&ペースト作業が不要になり、データ転記ミスを防げるだけでなく、定期的なレポート作成も自動化できます。

スプレッドシートの取得部分

まず最初のコードブロックでは、指定されたIDのスプレッドシートを開こうとします。

let ss;
try {
ss = SpreadsheetApp.openById(spreadsheetId);
} catch (error) {
Logger.log("スプレッドシートの取得に失敗しました: " + error.message);
return null;
}
const sheets = ss.getSheets();

ここでは、引数で受け取ったスプレッドシートIDを使ってスプレッドシートを開き、エラーが発生した場合はログにエラーメッセージを記録してnullを返します。スプレッドシートが正常に開けたら、そのスプレッドシートに含まれるすべてのシートを取得します。

ドキュメントの準備

次に、書き込み先のドキュメントを開き、内容をクリアします。

let doc;
let body;
try {
doc = DocumentApp.openById(documentId);
body = doc.getBody();
body.clear(); // 既存の内容をクリア
} catch (error) {
Logger.log("ドキュメントの取得に失敗しました: " + error.message);
return null;
}

ここでも、エラーハンドリングを行い、ドキュメントが見つからない場合やアクセス権限がない場合にはエラーメッセージをログに記録します。ドキュメントが開けたら、bodyオブジェクトを取得し、既存の内容をクリアします。

ドキュメントのタイトル追加

ドキュメントの最初に、スプレッドシート名をタイトルとして追加します。

body.appendParagraph(ss.getName() + "のデータ").setHeading(DocumentApp.ParagraphHeading.HEADING1);

スプレッドシートの名前に「のデータ」という文字列を追加し、見出し1(H1)のスタイルを適用します。これにより、ドキュメントの目的が一目で分かるようになります。

シートデータの処理

次に、各シートのデータを順番に処理していきます。

for (let i = 0; i < sheets.length; i++) {
const sheet = sheets[i];
const sheetName = sheet.getName();
const dataRange = sheet.getDataRange();
const values = dataRange.getValues();

// シート名をヘッダーとして追加
body.appendParagraph(sheetName).setHeading(DocumentApp.ParagraphHeading.HEADING2);

各シートに対して、シート名を取得し、シート内のデータ範囲(dataRange)を取得します。getValues()メソッドで、データを二次元配列として取得します。そして、シート名を見出し2(H2)として追加します。

データチェックと表の作成

データがない場合の処理と表の作成を行います。

// データがない場合の処理
if (values.length === 0 || values[0].length === 0) {
body.appendParagraph("データがありません。");
continue;
}

// テーブルを作成(行ごとに追加)
try {
// 行数と列数を確認
const numRows = values.length;
const numCols = values[0].length;

// 空のテーブルを作成
const table = body.appendTable();

シートにデータがない場合は「データがありません」というメッセージを表示して次のシートに進みます。データがある場合は、行数と列数を確認し、空のテーブルをドキュメントに追加します。

テーブルデータの追加

取得したデータをテーブルに追加していきます。

javascriptコピー// 行と列のデータを追加
for (let row = 0; row < numRows; row++) {
  // 新しい行を追加
  const tableRow = table.appendTableRow();
  
  // 行の各セルにデータを追加
  for (let col = 0; col < numCols; col++) {
    const cell = tableRow.appendTableCell();
    
    // セルに値を設定(nullや未定義の場合は空文字列に変換)
    const cellValue = values[row][col];
    const cellText = (cellValue !== null && cellValue !== undefined) ? cellValue.toString() : "";
    
    cell.setText(cellText);
    
    // セルの書式設定
    cell.setPaddingTop(2).setPaddingBottom(2)
        .setPaddingLeft(5).setPaddingRight(5);
  }
}

二重ループを使って、各行と列のデータをテーブルに追加します。セルの値がnullや未定義の場合は空文字列に変換し、テキストとして設定します。また、セルの余白(パディング)を設定して見やすくします。

エラーハンドリングとシート間の区切り

テーブル作成中のエラー処理とシート間に空白を入れる処理を行います。

javascriptコピー} catch (error) {
  // テーブル作成に失敗した場合はエラーメッセージを表示
  Logger.log("テーブル作成中にエラーが発生しました: " + error.message);
  body.appendParagraph("エラー: テーブルの作成に失敗しました。" + error.message);
}

// 見やすくするためにシート間に空白を入れる
if (i < sheets.length - 1) {
  body.appendParagraph("");
}

テーブル作成中にエラーが発生した場合は、ログにエラーメッセージを記録し、ドキュメントにもエラーメッセージを表示します。また、最後のシート以外の処理が終わったら、空の段落を追加して見やすくします。

処理終了とURL返却

最後に、処理が完了したドキュメントのURLを返します。

javascriptコピー// ドキュメントのURLを返す
const url = doc.getUrl();
Logger.log("ドキュメント更新完了: " + url);
return url;

これにより、スクリプトを実行した結果、更新されたドキュメントのURLがログに記録され、戻り値として返されます。このURLを使って、生成されたドキュメントに簡単にアクセスできます。

スクリプトの活用方法

このスクリプトは様々な用途に活用できます。例えば、毎週の売上レポートを自動生成したり、プロジェクト管理データを整理したり、学校の成績表を作成したりすることが可能です。

トリガーを設定すれば、特定の時間や条件でスクリプトを自動実行することもできます。例えば、毎週月曜日の朝9時に最新データをドキュメントに反映させるといった使い方ができます。

また、UIを追加すれば、ボタン一つでデータ変換を実行できるようになります。これにより、プログラミングの知識がない人でも簡単に使えるツールになります。

スクリプトのコード

以下がコードです。このコードをGoogle Apps Scriptエディタにコピー&ペーストして使用できます。

/**
* スプレッドシートの全シートのデータをドキュメントに書き込む
* スプレッドシートIDとドキュメントIDを直接指定して実行する
*
* @param {string} spreadsheetId - スプレッドシートのID
* @param {string} documentId - 書き込み先ドキュメントのID
* @return {string} 作成または更新されたドキュメントのURL
*/
function copySheetDataToDocument(spreadsheetId, documentId) {
// スプレッドシートを取得
let ss;
try {
ss = SpreadsheetApp.openById(spreadsheetId);
} catch (error) {
Logger.log("スプレッドシートの取得に失敗しました: " + error.message);
return null;
}
const sheets = ss.getSheets();

// ドキュメントを取得
let doc;
let body;
try {
doc = DocumentApp.openById(documentId);
body = doc.getBody();
body.clear(); // 既存の内容をクリア
} catch (error) {
Logger.log("ドキュメントの取得に失敗しました: " + error.message);
return null;
}

// ドキュメントのタイトルを追加
body.appendParagraph(ss.getName() + "のデータ").setHeading(DocumentApp.ParagraphHeading.HEADING1);

// 各シートのデータを処理
for (let i = 0; i < sheets.length; i++) {
const sheet = sheets[i];
const sheetName = sheet.getName();
const dataRange = sheet.getDataRange();
const values = dataRange.getValues();

// シート名をヘッダーとして追加
body.appendParagraph(sheetName).setHeading(DocumentApp.ParagraphHeading.HEADING2);

// データがない場合の処理
if (values.length === 0 || values[0].length === 0) {
body.appendParagraph("データがありません。");
continue;
}

// テーブルを作成(行ごとに追加)
try {
// 行数と列数を確認
const numRows = values.length;
const numCols = values[0].length;

// 空のテーブルを作成
const table = body.appendTable();

// 行と列のデータを追加
for (let row = 0; row < numRows; row++) {
// 新しい行を追加
const tableRow = table.appendTableRow();

// 行の各セルにデータを追加
for (let col = 0; col < numCols; col++) {
const cell = tableRow.appendTableCell();

// セルに値を設定(nullや未定義の場合は空文字列に変換)
const cellValue = values[row][col];
const cellText = (cellValue !== null && cellValue !== undefined) ? cellValue.toString() : "";

cell.setText(cellText);

// セルの書式設定
cell.setPaddingTop(2).setPaddingBottom(2)
.setPaddingLeft(5).setPaddingRight(5);
}
}
} catch (error) {
// テーブル作成に失敗した場合はエラーメッセージを表示
Logger.log("テーブル作成中にエラーが発生しました: " + error.message);
body.appendParagraph("エラー: テーブルの作成に失敗しました。" + error.message);
}

// 見やすくするためにシート間に空白を入れる
if (i < sheets.length - 1) {
body.appendParagraph("");
}
}

// ドキュメントのURLを返す
const url = doc.getUrl();
Logger.log("ドキュメント更新完了: " + url);
return url;
}

スクリプトの使用方法

  1. Google Driveでスクリプトエディタを開きます(拡張機能 > Apps Script)
  2. 上記のコードをコピーしてエディタに貼り付けます
  3. 使用したいスプレッドシートIDとドキュメントIDを確認します
  4. 以下のような呼び出しコードを追加します:
function runExample() {
// あなたのスプレッドシートIDとドキュメントIDに置き換えてください
const spreadsheetId = 'YOUR_ID';
const documentId = 'YOUR_ID';

const docUrl = copySheetDataToDocument(spreadsheetId, documentId);
Logger.log('生成されたドキュメント: ' + docUrl);
}
  1. runExample関数を実行します
  2. 生成されたドキュメントを確認します

まとめ

Google Apps Scriptを使えば、スプレッドシートのデータを自動的にドキュメントに変換することができます。今回紹介したスクリプトは、データを見やすく整理し、レポート作成の効率化に役立ちます。

エラーハンドリングもきちんと実装されています。また、カスタマイズも容易なので、自分の用途に合わせて機能を追加することも可能です。

Google Apps Scriptの力を活用して、データ処理の自動化を進めてみましょう。業務効率が大幅に向上し、より創造的な仕事に時間を使えるようになります。