PAThs Atlas
Sheet Bridge
Naviguer les manuscrits et envoyer une selection dans Google Sheets.
Detail
Aucun manuscrit charge
Selectionne un manuscrit dans la liste.
PAThs Atlas
Naviguer les manuscrits et envoyer une selection dans Google Sheets.
Aucun manuscrit charge
Selectionne un manuscrit dans la liste.
Source
atlas.paths-erc.eu| Champ | Valeur envoyee |
|---|
Configuration
Etape 1
Cree une feuille de calcul pour une premiere installation, ou ouvre le Sheet deja utilise pour mettre a jour l'export.
Etape 2
Apps Script est l'outil Google qui recoit les donnees et les ecrit dans la feuille.
Etape 3
Pour une premiere installation, efface le contenu par defaut. Pour une mise a jour, remplace tout l'ancien script par ce code, puis enregistre avec Ctrl + S.
const SHEET_NAME = "Feuille 1";
const HEADERS = [
"timestamp",
"sourceUrl",
"id",
"cmclid",
"tm",
"ldab",
"alias",
"stratigraphy",
"modernhistory",
"contents",
"dialect",
"dialectnotes",
"chronofrom",
"chronoto",
"datingsource",
"datingcriteria",
"bookform",
"writingsupport",
"leaftotextant",
"fragtot",
"leaftotestimated",
"quiresextant",
"gennotes",
"columns",
"linespercolumn",
"charsperline",
"alignment",
"alignmentnotes",
"leafw",
"leafh",
"framew",
"frameh",
"heighttenlines",
"prophw",
"propwt",
"dimnotes",
"pagination",
"pagtype",
"pagposition",
"pagnote",
"foliation",
"foltype",
"folposition",
"folnotes",
"handstot",
"lectionalsigns",
"structuralsigns",
"signsnotes",
"abbreviations",
"marginalnotes",
"restmodern",
"decortype",
"decorsubj",
"decorationdescr",
"enlargedinitials",
"sourceinfo",
"editors",
"status",
"lastmodified",
"shelfmarks",
"bibliography",
"hands",
"works",
"quires",
"places",
"files"
];
function doPost(e) {
const payload = JSON.parse(e.postData.contents || "{}");
const spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
const sheet = spreadsheet.getSheetByName(SHEET_NAME) || spreadsheet.insertSheet(SHEET_NAME);
const headers = ensureHeaders(sheet, payload);
sheet.appendRow(headers.map((header) => cellValue(payload[header])));
return ContentService
.createTextOutput(JSON.stringify({ ok: true }))
.setMimeType(ContentService.MimeType.JSON);
}
function ensureHeaders(sheet, payload) {
const payloadHeaders = Object.keys(payload || {});
const orderedHeaders = HEADERS.concat(payloadHeaders.filter((header) => !HEADERS.includes(header)));
const existingHeaders = readHeaders(sheet);
const headers = existingHeaders.length ? existingHeaders.slice() : [];
orderedHeaders.forEach((header) => {
if (!headers.includes(header)) {
headers.push(header);
}
});
if (!existingHeaders.length || headers.length !== existingHeaders.length) {
sheet.getRange(1, 1, 1, headers.length).setValues([headers]);
}
return headers;
}
function readHeaders(sheet) {
const lastColumn = sheet.getLastColumn();
if (lastColumn < 1) return [];
return sheet
.getRange(1, 1, 1, lastColumn)
.getValues()[0]
.map((header) => String(header || "").trim())
.filter(Boolean);
}
function cellValue(value) {
if (value === null || value === undefined) return "";
if (typeof value === "object") return JSON.stringify(value);
return value;
}
Etape 4
Le deploiement cree ou met a jour l'adresse web qui accepte les envois depuis cette page.
/exec reste normalement la meme si tu modifies le deploiement existant.
Etape 5
Google affiche une URL d'application web qui se termine par /exec.