OK, así que respondo a mi propia pregunta.
Es posible hacer lo que quería, aunque no encontré una solución satisfactoria.
La respuesta corta es: no pude encontrar una manera de usar applecript con la manipulación directa de la interfaz gráfica (por ejemplo, clics). Encontré una manera usando alternativas clave. Para hacer el trabajo exacto que necesitaba, la siguiente secuencia lo hará:
: después de abrir el documento en Números, abra la ventana de compartir:
tell application "System Events"
tell process "Numbers"
delay 1
tell menu bar 1
tell menu bar item "Share"
tell menu "Share"
delay 1
click menu item "Share Link via iCloud…"
end tell
end tell
end tell
end tell
: una vez que la ventana desplegable de compartir esté abierta, use la siguiente combinación de teclas
tell application "System Events"
--add tabs
delay 1
key code 48
delay 1
key code 48
delay 1
-- use arrows to move to the right part of the 'Share' window
key code 124
delay 1
key code 124
delay 3
-- click return
key code 36
delay 8
-- save the file and close it
keystroke "s" using {command down}
delay 4
keystroke "w" using {command down}
La respuesta larga es: es un dolor en el cuello por una serie de razones.
Primero, cuando creas un archivo de Números, es un archivo simple. Sin embargo, cuando se comparte, o cuando se guarda en iCloud, se convierte en un paquete. Applescript ve los paquetes como carpetas, por lo que debe verificar antes de hacer algo para saber si se trata de una carpeta o un paquete. Luego puedes continuar con las operaciones de intercambio.
Ahora, no encontré ninguna forma principal de interceptar cuando exactamente un archivo se convierte en un paquete. Es decir, cuando abres un archivo de Números y pides que se comparta, verás que Números te da un mensaje de "preparando el documento para compartir". Esto, encontré, es cuando el archivo se transforma en un paquete. Existe una propiedad que se puede usar para verificar si una ruta determinada corresponde a un paquete o un solo archivo: se podría hacer un bucle mientras (la carpeta del paquete de item_info es falsa) y luego continuar, pero esta propiedad se establece como verdadera. antes de que Numbers haya terminado su propio trabajo de "preparar el documento para compartir". Así que solo pude adivinar cuándo puedo continuar e ir a la parte de compartir del script. Puse un retraso aproximado de 30 segundos cuando un archivo aún no es un paquete, lo que debería dar suficiente tiempo para que Numbers finalice las transformaciones del archivo para compartir:
if (this_package_folder is false) and (this_extension is in the extension_list) then
delay 30
end if
Segundo, debe estar en una buena red, para que todas las operaciones relacionadas con Numbers en iCloud puedan realizarse sin problemas. De lo contrario, iCloud le dará mensajes de error que bloquearán la ejecución de script
En tercer lugar, debes cuidar los archivos .DS_Store y otros archivos que puedan estar dentro de la carpeta donde colocas tus documentos de Numbers para compartir.
Cuarto, si desea identificar dónde se encuentra la carpeta de iCloud con los documentos que se compartirán, desde AppleScript no lo verá como lo ve desde el buscador (es decir, en la unidad de iCloud), pero Hay que buscarlo en / yourUser / Library / Mobile Documents / iCloud Drive / yourfolder.
Con todas estas advertencias, aquí está el script que estoy usando ahora. En mi sistema, funciona. Asume varias cosas:
- hay una carpeta en tu iCloud donde están los documentos de Numbers
- tiene un archivo en el que desea guardar las rutas de los archivos que se compartirán, para que conozca las rutas que debe comunicar a las personas con las que desea compartir sus archivos. En mi caso, uso un documento de Pages.
- los archivos que se compartirán NO ESTÁN ya compartidos. De lo contrario, la secuencia de comandos dará errores.
- no te importan los errores ni el estilo. El script no tiene comprobaciones de error. No soy programador.
El script le pedirá que primero identifique la carpeta con los documentos que se compartirán, luego el archivo de Pages donde desea guardar las rutas de los documentos compartidos, y luego abrirá los documentos que se compartirán uno por uno, Compártelos, los guardará, copiará su ruta al documento de Páginas que seleccionó y finalmente saldrá de Números y Páginas. Conceda suficiente tiempo para que el script se ejecute y no interfiera con él. Tenga en cuenta que cuando abre cada archivo de Numbers, puede modificar el script para insertar operaciones específicas que desee realizar en sus archivos, siempre con la misma técnica (por ejemplo, en mi caso, necesito encontrar una celda, buscar un valor, cópielo en otro lugar y guárdelo. Esta parte del procedimiento no se encuentra en el siguiente script. Puede agregar lo que su fantasía lo lleve a inventar como operaciones contorsionadas y complicadas).
Ahora, si alguien encuentra una manera de REVERSAR la operación, no compartir los archivos compartidos, y especialmente, una manera de saber si un archivo ya está compartido o no, para que el script adquiera una generalidad ...
Pego el script a continuación.
-- Beginning of the script
global f
property extension_list : {"numbers"}
tell application "Finder"
set source_folder to choose folder with prompt "Please select directory."
set posixSource_Folder to POSIX path of source_folder
tell application "System Events"
set these_items to POSIX path of disk items of folder posixSource_Folder
end tell
my createList(these_items)
end tell
on createList(these_items)
tell application "System Events"
tell application "Finder"
set f to (choose file with prompt "Choose a file where to store the paths")
end tell
end tell
set posixF to POSIX path of f
delay 2
tell application "Finder" to open file f
delay 1
repeat with i from 1 to the count of these_items
set this_item to item i of these_items
set the item_info to info for this_item
set this_extension to the name extension of item_info
if folder of the item_info is true and (package folder of the item_info is false) and (this_extension is not in the extension_list) then
process_folder(this_item)
else
if (this_extension is in the extension_list) then
process_item(this_item)
end if
end if
end repeat
close_files()
end createList
-- this sub-routine processes folders
on process_folder(this_folder)
-- set these_items to list folder this_folder without invisibles
set posix_this_folder to POSIX path of this_folder
tell application "System Events"
set these_items to POSIX path of disk items of folder posix_this_folder
end tell
repeat with i from 1 to the count of these_items
--set this_item to alias ((this_folder as Unicode text) & (item i of these_items))
set the item_info to info for this_item
set this_extension to the name extension of item_info
--if folder of the item_info is true and (this_extension is not in the extension_list) then
if folder of the item_info is true and (package folder of the item_info is false) and (this_extension is not in the extension_list) then
process_folder(this_item)
else
if (package folder of the item_info is true) and (this_extension is in the extension_list) and (alias of the item_info is false) then
process_item(this_item)
end if
end if
end repeat
end process_folder
-- this sub-routine processes files
on process_item(this_item)
set the item_info to info for this_item
set this_extension to the name extension of item_info
set this_package_folder to the package folder of item_info
set Posix_Item to POSIX path of this_item
set Posix_File to POSIX file Posix_Item
delay 1
--opening the Numbers file
tell application "Finder" to open Posix_File
delay 3
-- going to Numbers and making the file shared
tell application "System Events"
tell process "Numbers"
delay 1
tell menu bar 1
tell menu bar item "Share"
tell menu "Share"
delay 1
click menu item "Share Link via iCloud…"
end tell
end tell
end tell
end tell
-- extra time allowed for non packages
delay 3
end tell
if (this_package_folder is false) and (this_extension is in the extension_list) then
delay 30
end if
--tabs
tell application "System Events"
delay 1
key code 48
delay 1
key code 48
delay 1
-- arrows
key code 124
delay 1
key code 124
delay 3
-- returns
key code 36
-- leave some time for Numbers to actually share the file. Maybe you need more time for your system.
delay 8
-- saving and closing documents
keystroke "s" using {command down}
delay 4
keystroke "w" using {command down}
-- Now returning to the file where the paths have to be pasted
tell application "Finder" to open file f
delay 2
-- pasting the local Unix path
keystroke "v" using {command down}
delay 1
key code 48
delay 2
-- pasting the iCloud remote path of the shared document
set the clipboard to Posix_Item
delay 1
keystroke "v" using {command down}
delay 1
key code 48
key code 36
delay 1
keystroke "s" using {command down}
end tell
end process_item
--closing files
on close_files()
tell application "System Events"
tell process "Numbers"
tell menu bar 1
tell menu bar item "Numbers"
tell menu "Numbers"
delay 1
click menu item "Quit Numbers"
end tell
end tell
end tell
end tell
tell application "Finder" to open file f
delay 2
keystroke "q" using {command down}
delay 1
end tell
end close_files
-- end of the script