2017-11-15 1 views
0

Ich habe ein Skript für Google Docs erstellt, das einen Menüeintrag namens "Dienstprogramme" -> "Datum einfügen" hinzufügt, der (offensichtlich) das aktuelle Datum an der Cursorposition einfügt. Ich möchte dieses Skript für andere Dokumente wiederverwenden und es schließlich anderen in meiner Organisation anbieten, also habe ich es als Bibliothek in ein anderes Dokument importiert. Wenn ich jedoch versuche, es auszuführen, verweist eine Funktion in der Bibliothek auf eine andere, daher erhalte ich den Fehler, dass die Funktion .insertAtCursor nicht existiert.Eine Funktion in einer Bibliothek referenzieren

Muss ich alles in der Bibliothek innerhalb der gleichen Funktion haben? Wenn nicht, gibt es eine Möglichkeit, den Anruf so zu verwenden, dass er annimmt, dass er sich in der Bibliothek befindet? Ich vermute, dass dies ein Missverständnis der Bereiche in Google Apps Script ist, bin mir aber nicht sicher. Hier

ist die Bibliothek:

function onOpen() { 
    // Add a menu with some items, some separators, and a sub-menu. 
    DocumentApp.getUi().createMenu('Utilities') 
     .addItem('Insert Date (dd MMMM yyyy)', 'insertAtCursor') 
     .addToUi(); 
} 




/** 
* Inserts the sentence "Hey there!" at the current cursor location in boldface. 
*/ 
function insertAtCursor() { 
    var cursor = DocumentApp.getActiveDocument().getCursor(); 

    if (cursor) { 
    // Attempt to insert text at the cursor position. If insertion returns null, 
    // then the cursor's containing element doesn't allow text insertions. 
    // Date format defined at https://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html 
    // Make sure if you change the date format you update the menu items in the onOpen() fuction above 
    var date = Utilities.formatDate(new Date(), "GMT", "dd MMMM yyyy"); // "yyyy-MM-dd'T'HH:mm:ss'Z'" 
    var element = cursor.insertText(date); 
    if (element) { 
     element.setBold(false); 
    } else { 
     DocumentApp.getUi().alert('Cannot insert text at this cursor location.'); 
    } 
    } else { 
    DocumentApp.getUi().alert('Cannot find a cursor in the document.'); 
    } 
} 

Und hier ist, wie ich es in dem anderen Dokument verwenden:

function onOpen() { 
    InsertDate.onOpen() 
} 

Wenn ich rufe InsertDate.insertAtCursor aus dem anderen Dokument, das funktioniert, aber doesn Es macht keinen Sinn, weil ich diese Funktion nur über den Menüpunkt aufrufen möchte. Ich bin mir nicht sicher, wie ich diese Bibliothek ändern kann, um in einem anderen Dokument "nur zu arbeiten".

+0

Lustig, wie das Problem Idee rührt auszuzuschreiben ... Wenn ich eine Funktion in dem anderen Dokument Skript erstellen , Es klappt. 'Funktion insertAtCursor() {InsertDate.insertAtCursor}' Dies scheint jedoch immer noch mehr Arbeit, als ich tun möchte (oder andere tun). Vorschläge für einen besseren Weg sind willkommen. –

Antwort

0

Im Skript, das die Bibliothek verwendet man ein Menü erstellen benötigen und auch eine Funktion erstellen, die nur die Bibliothek aufruft, wie die insertAtCursor Funktion im Rahmen des Dokuments mit der Bibliothek aufgerufen wird:

function onOpen() { 

    // Add a menu with some items, some separators, and a sub-menu. 
    DocumentApp.getUi().createMenu('Utilities') 
     .addItem('Insert Date (dd MMMM yyyy)', 'insertAtCursor') 
     .addToUi(); 
} 

function insertAtCursor() { 
    InsertAtCursor.insertAtCursor() 
} 

Das folgende ist ein bisschen saubere und funktionieren würde, es ist nur nicht so offensichtlich, was los ist:

function onOpen() { 
    InsertAtCursor.onOpen() 
} 

function insertAtCursor() { 
    InsertAtCursor.insertAtCursor() 
} 
Verwandte Themen