web-dev-qa-db-fra.com

Incorporer Google Spreadsheet dans Google Document

Est-il possible d'incorporer une feuille de calcul Google dans un document Google à Microsoft Excel et Microsoft Word? Que diriez-vous d'un graphique à partir d'un tableur?

82
ale

À partir d’aujourd’hui (20/05/2016), Google commence à déployer la possibilité d’intégrer un graphique à partir d’un tableur Google dans un document Google. À ce stade, deux de mes 3 comptes Google rendent l'option disponible dans le menu Insert, avec un nouveau sous-menu Insert→Chart situé sous l'élément Insert→Drawing….

Lorsque vous insérez de tels graphiques, ils restent liés à la feuille de calcul d'origine. Si vous ne voulez que des données tabulaires, vous pouvez utiliser un type de graphique sous forme de tableau pour présenter vos données sous forme de tableau simple.

Il existe certaines limitations à ce stade (par exemple en ce qui concerne la taille du graphique) et le graphique doit préexister dans la feuille de calcul avant de pouvoir l'insérer, mais cela va dans la bonne direction…


Pour insérer une feuille de calcul ou un tableau, utilisez Ajouter une table à partir de Google Sheets en copiant-collant de Sheets vers Docs et choisissez l'option liée.

Le graphique est non mis à jour en direct si vous modifiez la feuille de calcul source pendant que votre document est ouvert. Toutefois, le document détectera les modifications et vous donnera un Bouton Mettre à jour au-dessus de la feuille de calcul incorporée pour refléter les dernières modifications apportées à la source.

24

Autant que je sache, vous pouvez uniquement copier et coller de la feuille de calcul vers le document texte. La feuille de calcul est insérée sous forme de tableau, mais ils ne sont pas liés: si vous modifiez un élément de la feuille de calcul, il ne sera pas répercuté dans le document texte.

Bien sûr, j'aimerais vraiment avoir tort!

32
jfoucher

Voici une solution basée sur un script qui permet d’insérer un tableau avec le contenu d’une plage donnée dans une feuille de calcul donnée. Je n'ai pas essayé de trouver un moyen de synchroniser les données en temps réel, car cela ne semblait pas pratique compte tenu du volume potentiellement important de données à transférer à chaque édition dans le tableur. Au lieu de cela, le script ajoute un élément de menu personnalisé "Mettre à jour les données" au document.

Le script doit être lié au document (créé à l’aide de Outils> Editeur de script dans le menu du document). L'URL de la feuille de calcul, ainsi que la feuille et la plage à utiliser, sont spécifiés dans le script. Pour incorporer toutes les données sur la feuille, remplacez .getRange(rangeName) par .getDataRange().

Lorsque la fonction updateData est exécutée pour la première fois, elle ajoute la table à la fin du document. Lors des exécutions suivantes, la table est mise à jour (c’est-à-dire que si plus de texte est ajouté après la table, l’ordre sera préservé).

Notez que couper-coller de la table interromprait le processus de mise à jour (le script ajouterait une nouvelle table à la fin) car la copie collée est un nouvel objet. Au lieu de cela, copier-coller le texte autour de la table.

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());
}

Notes techniques

  1. Il est également possible de synchroniser les données toutes les heures, en plus de manuellement. Ajoutez simplement un déclencheur temporel à partir du menu Ressources de l'éditeur de script, de sorte qu'il exécute la fonction updateData.

  2. On peut également adapter ce script pour qu'il soit lié à la feuille de calcul source. Cela nécessiterait des modifications dans la manière dont le document est ouvert (par exemple, par URL), mais sinon, la logique est la même.

  3. La partie fastidieuse du script consiste à récupérer le descripteur de la table existante dans le document. Cela nécessite de le placer dans une plage nommée. En outre, il est beaucoup plus pratique de remplacer complètement l'élément de table que de modifier les entrées d'une table existante. Etant donné qu'une plage nommée est immuable, elle est également supprimée avec la table qu'elle contient, puis recréée avec la nouvelle table.

11
user79865

Oui, vous pouvez. Copiez le contenu d'une feuille et collez-la dans votre document. Dans le coin droit, il vous sera demandé si vous souhaitez créer un lien vers la feuille de calcul. Si vous le faites, après avoir modifié la feuille de calcul, vous pouvez cliquer sur l'icône de mise à jour dans vos documents pour intégrer les modifications à votre document.

4
Fish Monitor

Une autre solution consiste à utiliser Google Sites ou tout autre éditeur de contenu permettant l'incorporation de contenu iframes.

Pour intégrer des feuilles de calcul Google dans une page de Google Sites

  1. Créez un nouveau site ou accédez à un site existant.
  2. Créez une nouvelle page ou cliquez sur Modifier sur une page existante.
  3. Cliquez sur Insertion> Lecteur> Tableur.
  4. Sélectionnez la feuille de calcul
  5. Définir les options
  6. Cliquez sur Enregistrer
3
Rubén