回答:
今日(2016-05-20)から、GoogleはGoogleスプレッドシートからグラフをGoogleドキュメントに埋め込む機能を展開し始めています。この時点で、3つのGoogleアカウントのうち2つがInsert
メニューでオプションを使用可能にしInsert→Chart
、Insert→Drawing…
アイテムの下に新しいサブメニューがあります。
このようなチャートを挿入すると、元のスプレッドシートにリンクされたままになります。必要なのが表形式のデータだけである場合、データを単純な表として表示するために使用できる表グラフタイプがあります。
この段階ではいくつかの制限があり(たとえば、グラフのサイズに関して)、挿入する前にスプレッドシートにグラフが存在する必要がありますが、これは正しい方向に進んでいます…
スプレッドシートまたは表を挿入するには、スプレッドシートからドキュメントにコピー&ペーストしてGoogleスプレッドシートから表を追加を使用し、リンクされたオプションを選択します。
ドキュメントを開いているときにソーススプレッドシートを変更すると、グラフはライブで更新されませんが、ドキュメントは変更を検出し、埋め込みスプレッドシートの上に[ソース]の最新の変更を反映する[ 更新 ]ボタンを表示します。
私の知る限り、コピーして、スプレッドシートからテキストドキュメントにのみ貼り付けることができます。スプレッドシートはテーブルとして挿入されますが、リンクされていません。スプレッドシートで何かを変更しても、テキストドキュメントには反映されません。
もちろん、間違いであると証明されることは絶対に大好きです!
これは、特定のスプレッドシート内の特定の範囲のコンテンツを含むテーブルを挿入できるスクリプトベースのソリューションです。データをリアルタイムで同期する方法を見つけようとしませんでした。スプレッドシートを編集するたびに転送しなければならない可能性のある大量のデータを考えると、実用的とは思えませんでした。代わりに、スクリプトはカスタムメニュー項目「データの更新」をドキュメントに追加します。
スクリプトはドキュメントにバインドする必要があります(つまり、ドキュメントメニューの[ツール]> [スクリプトエディター]を使用して作成します)。スプレッドシートのURL、および使用するシートと範囲は、スクリプト内で指定されます。シート上のすべてのデータを埋め込むには、交換してください.getRange(rangeName)
と.getDataRange()
。
関数updateDataが最初に実行されると、ドキュメントの最後にテーブルが追加されます。後続の実行で、テーブルを所定の場所に更新します(つまり、テーブルの後にさらにテキストが追加された場合、順序は保持されます)。
貼り付けられたコピーは新しいオブジェクトであるため、テーブルをカットアンドペーストすると更新プロセスが中断されることに注意してください(スクリプトは最後に新しいテーブルを追加します)。代わりに、テーブルの周りのテキストをカットアンドペーストします。
function onOpen() {
DocumentApp.getUi()
.createMenu('Custom')
.addItem('Update Data', 'updateData')
.addToUi();
}
function updateData() {
var ssUrl = ' spreadsheet url here ';
var sheetName = 'Sheet2'; // name of sheet to use
var rangeName = 'A1:C3'; // range of values to include
var values = SpreadsheetApp.openByUrl(ssUrl)
.getSheetByName(sheetName)
.getRange(rangeName)
.getValues();
var doc = DocumentApp.getActiveDocument();
var body = doc.getBody();
var ranges = doc.getNamedRanges('embeddedSheet-range');
if (ranges.length == 0) {
var table = body.appendTable(values);
}
else {
tableRange = ranges[0];
table = tableRange.getRange().getRangeElements()[0].getElement();
var ind = body.getChildIndex(table);
tableRange.remove();
body.removeChild(table);
table = body.insertTable(ind, values);
}
var rangeBuilder = doc.newRange();
rangeBuilder.addElement(table);
doc.addNamedRange('embeddedSheet-range', rangeBuilder.build());
}
手動に加えて、1時間ごとにデータを同期することもできます。スクリプトエディターの[リソース]メニューから時間ベースのトリガーを追加するだけで、関数updateDataが実行されます。
代わりに、このスクリプトをソーススプレッドシートにバインドするように調整することもできます。これには、ドキュメントの開き方(URLなど)の変更が必要になりますが、それ以外のロジックは同じです。
スクリプトの面倒な部分は、ドキュメント内の既存のテーブルのハンドルを取得することです。これには、名前付き範囲内に配置する必要があります。また、既存のテーブルのエントリを台無しにするよりも、テーブル要素を完全に置き換える方がはるかに便利です。名前付き範囲は不変であるため、名前付き範囲は含まれるテーブルとともに削除され、新しいテーブルとともに再び作成されます。
/edit#gid=0
、最後の部分を含む完全なURLが含まれているようです。