Microsoft ExcelやMicrosoft WordのようなGoogleドキュメントにGoogleスプレッドシートを埋め込むことはできますか?スプレッドシートのグラフはどうですか?
本日(2016-05-20)以降、GoogleはGoogleスプレッドシートのグラフをGoogleドキュメントに埋め込む機能を展開し始めています。この時点で、3つのGoogleアカウントのうち2つがInsert
メニューでオプションを使用可能にし、Insert→Chart
アイテムの下に新しいInsert→Drawing…
サブメニューがあります。
このようなチャートを挿入すると、元のスプレッドシートにリンクされたままになります。表形式のデータだけが必要な場合は、データを単純な表として表示するために使用できる表グラフタイプがあります。
この段階ではいくつかの制限があり(例:グラフのサイズに関して)、挿入する前にスプレッドシートにグラフが存在する必要がありますが、これは正しい方向に進んでいます…
スプレッドシートまたは表を挿入するには、 Googleスプレッドシートから表を追加 を使用して、スプレッドシートからドキュメントにコピーアンドペーストし、リンクオプションを選択します。
ドキュメントを開いているときにソーススプレッドシートを変更すると、グラフはnot更新されますが、ドキュメントは変更を検出してUpdateボタンを埋め込みスプレッドシートの上に置き、ソースの最新の変更を反映します。
私の知る限り、スプレッドシートからテキストドキュメントにのみコピーして貼り付けることができます。スプレッドシートはテーブルとして挿入されますが、リンクされていません。スプレッドシートで何かを変更しても、テキストドキュメントには反映されません。
もちろん、間違いであると証明されることは絶対に大好きです!
これは、特定のスプレッドシート内の特定の範囲のコンテンツを含むテーブルを挿入できるスクリプトベースのソリューションです。データをリアルタイムで同期する方法を見つけようとしませんでした。スプレッドシートを編集するたびに転送する必要がある潜在的に大量のデータを考えると、実用的とは思えませんでした。代わりに、スクリプトはカスタムメニュー項目「データの更新」をドキュメントに追加します。
スクリプトはドキュメントにバインドする必要があります(つまり、ドキュメントメニューの[ツール]> [スクリプトエディター]を使用して作成します)。スプレッドシートの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など)が、それ以外はロジックは同じです。
スクリプトの面倒な部分は、ドキュメント内の既存のテーブルのハンドルを取得することです。これには、名前付き範囲内に配置する必要があります。また、既存のテーブルのエントリを台無しにするよりも、テーブル要素を完全に置き換える方がはるかに便利です。名前付き範囲は不変であるため、名前付き範囲は含まれているテーブルとともに削除され、新しいテーブルとともに再度作成されます。
はい、できます。シートの内容をコピーしてドキュメントに貼り付けると、右隅にスプレッドシートにリンクするかどうか尋ねられます。その場合、スプレッドシートを編集した後、ドキュメントの更新アイコンをクリックして、ドキュメントに変更を反映できます。
別の方法として、Googleサイト、またはiframeコンテンツを埋め込むことができる他のコンテンツエディターを使用する方法があります。
GoogleサイトのページにGoogleスプレッドシートを埋め込むには