0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

一括操作!Googleドキュメント複数タブの個別ファイル化

0
Posted at

~~~ Wordでダウンロードするときに、タブ別のファイルとしてZIP一括取得 ~~~

複数タブ構成のGoogleドキュメントを、タブ単位で個別ファイル化し、DriveからZIPで一括取得するための実務メモです。


1. はじめに / 概要

業務で複数タブ構成のGoogleドキュメントを扱っていると、

  • Wordで「すべてのタブ」を出力すると1ファイルに統合される
  • 「カレントタブ」で出力すると、タブの数だけ作業が必要
  • タブ単位で個別の形で一括保存する標準機能がない

という課題があります。

タブが多い資料ほど手作業は現実的でなくなるため、
タブ → 個別Doc生成 → フォルダ格納 → ZIP取得という外だし構成を組みました。


2. 全体像・仕組み

設計方針

  • Drive表示順を固定するため番号付与
  • 階層タブも順序維持(01-01形式)
  • コピー失敗でも止めない構成
  • Word出力はDrive側に外だし

3. 構築手順・最小構成

前提

  • Google Apps Script利用可能
  • タブ対応Googleドキュメント
  • 保存先フォルダID取得済み

「タブ単位で個別Doc生成」までをゴールにします。
ZIP化はDrive標準機能を使います。


5. 注意点・運用上の工夫

  • GoogleからWordのレイアウト完全再現は保証しない
  • Word出力はDrive側で実施
  • 保存先フォルダ構成を先に決める

完全自動ZIP生成まで一気にやらない方が安定します。



タグ

#GAS
#GoogleDocs
#業務効率化
#自動化


補足:コード

① フォルダID設定

const OUTPUT_FOLDER_ID = "フォルダIDのみ";

② タブ取得確認用

function checkTabsApi() {
  const doc = DocumentApp.getActiveDocument();
  const tabs = doc.getTabs();
  Logger.log("Top tabs: " + tabs.length);
  tabs.forEach((t, i) => Logger.log(i + ": " + t.getTitle()));
}

③ メイン処理

function splitTabsToDocs() {
  const srcDoc = DocumentApp.getActiveDocument();
  const outFolder = DriveApp.getFolderById(OUTPUT_FOLDER_ID);

  const items = flattenTabsWithOrder_(srcDoc);

  for (const item of items) {
    const tab = item.tab;
    if (typeof tab.asDocumentTab !== "function") continue;

    let docTab;
    try {
      docTab = tab.asDocumentTab();
    } catch (e) {
      continue;
    }

    const fileName = sanitizeName_(item.order + "_" + item.path);

    const newDoc = DocumentApp.create(fileName);
    const newBody = newDoc.getBody();
    newBody.clear();

    const srcBody = docTab.getBody();
    const n = srcBody.getNumChildren();

    for (let i = 0; i < n; i++) {
      const child = srcBody.getChild(i).copy();
      safeAppend_(newBody, child);
    }

    newDoc.saveAndClose();

    const f = DriveApp.getFileById(newDoc.getId());
    outFolder.addFile(f);
  }
}
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?