Fonction IMPORTRANGE - limitation des importations
Bonjour. Je dispose d'une feuille de calcul comportant environ 50 feuillets contenant des données. C'est mon fichier source. D'autres feuille de calcul importent ces données au moyen de la fonction IMPORTRANGE. Ces importations sont nombreuses mais fonctionnent rarement simultanément. Alors que tout fonctionne normalement depuis des années, je reçois aujourd'hui le message "vous avez atteint le nombre maximal de partages et d'importations de la feuille de calcul source". Quelles sont les solutions? éliminer les feuilles anciennes qui n'utilisent pas effectivement les autorisations d'importation créées (déjà essayé sur 3 ou 4 feuilles mais pas de résultat) Scinder la feuille source? autre?. Merci de votre aide. YN
Bonjour,
J'ai répondu à ce genre de problématique par l'export d'un JSON mais c'est assez chiant à mettre en place, en gros, comment fonctionne ton fichier ?
c'est une simple feuille de calcul GOOGLE SPREADSHEET (on va l'appeler source) qui fonctionne un peu comme une base de données. Cette feuille de calcul comporte environ 30 feuillets constitués d'IMPORTRANGE de GOOGLE SPREADSHEET constituant le résultat de formulaires. La feuille de calcul source est interrogée (ou importée) par d'autres feuilles de calcul. J'espère être clair...
En effet, dans Google Sheets la limite est de 50 références ImportRange par fichier.
Dans une premier, si possible tu peux simplifier, regrouper des données (cf explications ici: https://support.google.com/docs/answer/3093340?hl=fr#zippy=%2Cd%C3%A9tails-techniques-et-bonnes-prat...)
Si vraiment tu souhaites continuer sur le même fonctionnement, voici un script permettant d'exporter une feuille sheet au format JSON :
function exportToJson() {
var sheet = SpreadsheetApp.openByUrl('url du fichier sheet').getSheetByName('nom de la feuille'); // fichier & feuille origine
var range = sheet.getDataRange();
var values = range.getValues();
Logger.log(values)
var jsonData = [];
// Construire les données JSON
for (var i = 0; i < values.length; i++) {
var row = values[i];
var rowData = {};
for (var j = 0; j < row.length; j++) {
var header = values[0][j]; // entête de la feuille ! A MODIFIER ! dans cet exemple 0 = 1ère ligne
rowData[header] = row[j];
}
jsonData.push(rowData);
}
var jsonString = JSON.stringify(jsonData, null, 2); // édition du JSON
var folder = DriveApp.getFolderById('ID du dossier DRIVE'); // dossier cible
var fileName = 'nom du fichier.json'; // A MODIFIER
var files = folder.getFilesByName(fileName);
if (files.hasNext()) { // si fichier JSON existe déjà, supprimer les données et inserer nouvelles
var file = files.next();
var existingJsonString = file.getBlob().getDataAsString();
var existingData = JSON.stringify(existingJsonString);
existingData = []; // Supprimer les données existantes
jsonString = JSON.stringify(existingData.concat(jsonData), null, 2); // Concaténer les nouvelles données avec les anciennes (vide) et convertir en JSON
file.setContent(jsonString); // Écraser le fichier JSON existant avec les nouvelles données
} else {
folder.createFile(fileName, jsonString, MimeType.PLAIN_TEXT); // si pas de fichier JSON, le créer
}
}
Enusite pour importer les données :
function importFromJson() {
var fileId = '1WYCnkwCYAdvXwe33dNkf_k4Z'; // ID du fichier (clic droit > partager puis copier l'ID dans l'URL)
var file = DriveApp.getFileById(fileId);
var jsonString = file.getBlob().getDataAsString();
var jsonData = JSON.parse(jsonString); // conversion JSON > STRING
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); // dans ce cas active sheet mais sheet peut être définie
var dataRows = [];
sheet.clear(); // au cas où
var headers = Object.keys(jsonData[0]); // en-tête du fichier JSON cf export, dans ce exemple 1ère ligne
sheet.appendRow(headers); // on ajoutes les en-têtes à la feuille
for (var i = 0; i < jsonData.length; i++) { // stockage des data dans une variable
var row = [];
for (var j = 0; j < headers.length; j++) {
row.push(jsonData[i][headers[j]]);}
dataRows.push(row);
}
sheet.getRange(2, 1, dataRows.length, dataRows[0].length).setValues(dataRows); // insertion de la variable data dans la feuille
}
Bonjour
Merci pour toutes ces infos.
"En effet, dans Google Sheets la limite est de 50 références ImportRange par fichier." je comprends que 1 fichier peux contenir au max 50 formules ImportRange à extraire. C'est une info très utile. Mais mon souci semble être le nombre au niveau de la feuille source (capacité à être extraite par d'autres fichiers).
Merci pour les solutions proposées. Je vais effectivement essayer de simplifier car la solution JSON me parait très complexe.
Bonne journée.