Wie interagiere ich mit einem Numbers-Blatt über AppleScript?

Diese Frage bezieht sich auf:

wo ich versuche herauszufinden, wie ich mit AppleScript tun kann, was ich will.

Ich habe im Internet nach einer Möglichkeit gesucht, das aktive Blatt in Numbers festzulegen, bevor ich versuche, dort eine Änderung vorzunehmen. Die vorbereitenden Schritte sind im Wesentlichen:

tell application "Numbers"
    activate
    try
        set the chosenDocumentFile to "/path/to/myfile.numbers"
        open the chosenDocumentFile
    on error errorMessage number errorNumber
        if errorNumber is not -128 then
            display alert errorNumber message errorMessage
        end if
    end try
    tell chosenDocumentFile
        try
            -- this is where I'm stuck
        end try
    end tell
end tell

Die meisten Dinge, die ich online gefunden habe, sprechen über das Erstellen oder Löschen von Blättern, aber ich habe nichts gefunden, das ein klares Beispiel dafür bietet, wie man ein Blatt auswählt .

In meinem Fall habe ich derzeit 5 Blätter in meiner Tabelle. Ich weiß, dass ich das zweite Blatt auswählen möchte, um darauf zu reagieren ( sheet 2- richtig?)

Ich habe es versucht:

open the sheet 2

open sheet 2

select sheet 2

activate sheet 2

Keiner von ihnen scheint zu funktionieren, und alle verhindern, dass die nächste Codezeile innerhalb dieser einschließenden tryAnweisung ausgeführt wird.

Ich hoffe, es gibt eine wirklich einfache Antwort darauf (ich habe noch viel zu tun, bevor ich den Code bekomme, um alles zu tun, was ich will, aber ich stecke gerade hier fest).

Antworten (2)

Soweit ich weiß, hat Numbers keinen expliziten AppleScript- Befehl , um ein bestimmtes Blatt auszuwählen .

Es gibt die active sheet Eigenschaft des Dokuments , z.

tell application "Numbers" to get active sheet of front document

was die active sheet; obwohl man denken könnte, dass z.

tell application "Numbers" to set active sheet of front document to sheet 2

Angenommen, es gibt ein sheet 2, würde z. B. sheet 2auf das setzen active sheet, es setzt es nicht als das active sheet.

sheetHier ist die Methode, die ich verwende, um die Angaben active sheetim vorderen Dokument zu machen:

Hinweis: Dies ist eine Hack-Methode und bewirkt, dass ein gespeichertes Dokument als bearbeitet angezeigt wird, obwohl es den Wert der Zielzelle nicht ändert . Es funktioniert, indem es den Wert von cell "A1"auf seinen aktuellen Wert setzt , so dass, obwohl es als Bearbeitung wahrgenommen wird, keine Daten von seinem aktuellen Wert geändert wurden . Es funktioniert jedoch für mich in Numbers 5.1 in macOS High Sierra, und deshalb verwende ich es.

my selectSheet(2)

on selectSheet(n)
    try
        tell application "Numbers"
            activate
            set value of first cell of first table of sheet n of front document to ¬
                (value of first cell of first table of sheet n of front document)
        end tell
        --  # Press escape key to remove focus from cell A1.
        tell application "System Events" to key code 53
    on error eStr number eNum
        display dialog eStr & " number " & eNum buttons {"OK"} ¬
            default button 1 with icon caution
        return
    end try
end selectSheet

Hinweis: Der Beispiel- AppleScript- Code ist genau das und enthält abgesehen von der enthaltenen Fehlerbehandlung keine andere Fehlerbehandlung , die angemessen sein könnte. Es obliegt dem Benutzer, eine Fehlerbehandlung hinzuzufügen, die angemessen, erforderlich oder gewünscht ist. Sehen Sie sich die try- Anweisung und die error- Anweisung im AppleScript Language Guide an . Siehe auch Arbeiten mit Fehlern .

Das scheint bei mir in Automator nicht zu funktionieren - ich erhalte die folgende Fehlermeldung: "Automator darf keine Tastenanschläge senden. Nummer 1002"
Korrektur: Es funktioniert so weit, dass das Blatt sichtbar / aktiv wird, aber es entfernt nicht den Fokus auf der Zelle - wenn ich diesen Teil des Codes auskommentiere, funktioniert es. Ich habe Probleme mit dem Festlegen eines Werts in der bestimmten Zelle, die ich möchte, aber ich muss möglicherweise entweder diesen Beitrag aktualisieren oder einen weiteren erstellen, um damit umzugehen ...
@ghoti, Sie haben im OP nie erwähnt, dass Sie AppleScript-Code von Automator ausführen! Es funktioniert für mich ohne Probleme, wenn es in einem Automator-Workflow ausgeführt wird. Ich habe Automator jedoch zu Systemeinstellungen > Sicherheit & Datenschutz > Zugriffsrechte für den Datenschutz in macOS High Sierra hinzugefügt. Führen Sie es von einem Automator-Workflow, einer Anwendung oder einem Dienst aus (Quick Action in macOS Mojave) und in welchem ​​Betriebssystem? Was anderen AppleScript-Code betrifft, sollten Sie das wirklich in einer anderen Frage stellen und sowohl den Code als auch einen Screenshot des Automator-Workflows hinzufügen.
Mein Fehler - ich füge normalerweise Umgebungsdetails hinzu, wenn ich Fragen poste: MacOS X Mojave (10.14.5), Numbers 6.1, Automator 2.9. Ich denke daran, diesen Code in einen Dienst speziell für die Verwendung in dieser speziellen Tabelle zu verwandeln. Die Änderung der Systemeinstellungen scheint zu funktionieren. Danke!
Nach verschiedenen Fragen und Antworten und Design-Morphing endete dies als: AppleScript Numbers: Process data from Quicken

Verspätet…

set active sheet of document 1 to sheet 2 of document 1

Grundsätzlich müssen Sie für jedes Blatt angeben, auf welches Dokument verwiesen wird.

Wenn Sie einen Dokument-Tell-Block einfügen, können Sie dies natürlich vermeiden:

tell document 1 of application "Numbers"

    set active sheet to sheet 2
    
end tell
Funktioniert! Weiter so.