Festlegen des Werts einer Numbers-Zelle mit AppleScript

Ich versuche, ein Zahlenskript zu schreiben (um dies zu tun), in dem ich den Wert einer Zelle ändern muss.

Wenn ich jedoch so etwas mache

tell application "Numbers"
    activate
    tell document 1
        tell sheet 3
            set the value of cell "E1" to 1000
        end tell
    end tell
end tell

dann bekomme ich den fehler

 error "Numbers got an error: Can’t set cell \"E1\" of sheet 3 of document 1 to 1000." number -10006 from cell "E1" of sheet 3 of document 1

Dies enthält jedoch keine Informationen darüber, warum diese Zelle nicht festgelegt werden kann. Das Dokument, das Blatt und die Zelle sind alle vorhanden.

Ich denke, das hängt von meiner speziellen Tabelle ab, aber ist dies der richtige Weg, um den Wert einer Zelle festzulegen, und wenn ja, was kann ich sonst noch tun, um zu verstehen, warum es nicht funktioniert?

Ich denke, was Sie haben, sollte funktionieren, aber ich bin im Moment nicht vor einem Mac, also kann ich damit nicht spielen. Wenn sich jemand anderes nicht meldet, bevor ich wieder vor einem Mac sitze, teste ich an meiner Seite. Ich bin mir ziemlich sicher, dass der Fehlercode, den Sie erhalten, darauf hinweist, dass Schreibberechtigungen für die Datei verweigert wurden. Gibt es irgendetwas, das erklären könnte, warum Ihnen die Berechtigung zum Festlegen des Werts verweigert wird? Läuft Numbers? Ist die Tabelle bereits geöffnet? Etwas anderes?
@Monomeeth danke, dass du dich darum gekümmert hast. Die Datei existiert und ist in Numbers geöffnet. Es ist derzeit das vorderste Dokument und wird in einem Unterordner meines Ordners "Dokumente" gespeichert, in dem es keine Probleme mit Dateiberechtigungen geben sollte.
(Eine Sache ist jedoch, dass derzeit viele andere nicht gespeicherte Dokumente geöffnet sind, die ich derzeit nicht speichern oder schließen möchte. Mein Verständnis ist, dass sich "Dokument 1" immer auf das vorderste Fenster bezieht, aber ich kann das nicht wirklich finden in irgendeiner Dokumentation angegeben, und wenn ich falsch liege, nehme ich an, dass versucht wird, eine Zelle in einem der anderen Dokumente festzulegen.)
Hmm, ich erhalte ähnliche Fehler, wenn ich versuche, den Dateinamen von Dokument 1 oder den Wert von Zelle A1 in Blatt 1 abzurufen. Ich vermute also, dass das Problem überhaupt beim Zugriff auf Dokument 1 liegt.
zB error "Numbers got an error: Can’t get cell \"A1\" of sheet 1 of document 1." number -1728 from cell "A1" of sheet 1 of document 1(Ich werde das alles später in die Frage bearbeiten)
Derselbe Fehler auch, wenn ich anstelle tell document named "my document"von tell document 1. Ich erhalte den gleichen Fehler, wenn ich einen nicht vorhandenen Dokumentnamen verwende.
Okay, ich hatte die Gelegenheit, mich wieder vor einen Mac zu setzen, und habe meine Antwort mit einer Lösung aktualisiert, die funktionieren sollte. Lass mich wissen, wie es dir geht.

Antworten (2)

Ich bin wieder vor einem Mac und habe Ihren Code ausprobiert und auch den gleichen Fehler bekommen, also ist es wahrscheinlich etwas irreführend in Bezug auf das, was es eigentlich bedeutet.

Ich habe jedoch ein wenig mit Ihrem Skript herumgespielt und konnte den Code mithilfe des folgenden Codes zum Laufen bringen:

tell application "Numbers"
  tell table 1 of sheet 3 of document 1
    set the value of cell 1 of column "E" to 1000
  end tell
end tell

Jetzt, wo ich das zum Laufen gebracht habe, wollte ich nur darauf hinweisen, dass Sie die Zelle hart zu codieren scheinen usw. Das heißt, wenn sich die Position ändert, wird das Skript nicht dynamisch sein. Ob dies ein Problem für Sie ist oder nicht, hängt davon ab, was Sie zu tun versuchen und wie Ihre Numbers-Tabelle gestaltet ist.

Hurra! Ja, das funktioniert - offensichtlich ist die Angabe der Tabelle der notwendige Schritt, den ich übersehen hatte.
(Dies ist ein schneller Hack, der definitiv nicht nach morgen funktionieren muss, sonst würde ich das richtig machen, anstatt hart zu programmieren. Also danke für die schnelle Antwort, es wird einen großen Unterschied machen und wird sehr geschätzt!)

Mach es mit einem Einzeiler. Benötigen Sie keinen verschachtelten Tell.

tell application "Numbers" to set document 1's sheet 1's table 1's cell "E1"'s value to 1000

Oder eine allgemeinere Lösung von:

set documentName to "Document 1"
set sheetName to "Sheet 1"
set tableName to "Table 1"
set cellName to "D1"
set newvalue to "2000"

tell application "Numbers" to set document documentName's sheet sheetName's table tableName's cell cellName's value to newvalue