gpt4 book ai didi

macos - 使用 applescript 在特定工作表上的 iWork 编号中创建新表格

转载 作者:行者123 更新时间:2023-12-01 06:49:09 29 4
gpt4 key购买 nike

我在使用 Applescript 在特定工作表上创建新表格时遇到问题,除非我想要插入新表格的工作表是新的或当前选择的。
我使用的代码的一般形式是:

    tell application "Numbers"
tell document 1
tell sheet "This is the sheet I want to use"
make new table with properties {name:"A new table"}
end tell
end tell
end tell

有没有人在实现这一目标方面取得更大的成功?在我看来,这对于 Numbers 中的一些高级电子表格脚本来说有点问题。

最佳答案

好的。我的第一个答案被接受并且无法删除,但不够充分,所以我决定编辑它并添加一些确实解决问题的代码!

此代码来自 Yvan Koenig,他归功于 Nigel Garvey。两者都活跃在 applescript-users list ,顺便说一句,这很棒,尤其是因为这两位先生以及许多其他伟大的 AppleScripters 的事件。

它依赖于 GUI 脚本(不得不依靠它总是一件可怕的事情,但这就是我们所拥有的)。

调用 my activateGUIscripting()可能会导致提示输入管理员密码。如果你绝对知道 如果您启用了 GUI 脚本(系统偏好设置-> 通用访问-> 启用辅助设备的访问) - 那么您可以省略此行。

接下来的两行只是示例调用,因此您需要一个名为“Sheet 1”的工作表才能使这些示例调用工作。

这将允许您在任何文档的任何工作表中创建表格,而不管选择的是什么或最前面的内容。

--EXAMPLE CALLS
my activateGUIscripting()
my selectsheet(1, "Sheet 1")
my createNewTable(1, "Sheet 1", "myNewTable", 69, 13)

--NUMBERS UTILS
on createNewTable(dName, sName, newTable, nb_rows, nb_columns)
tell application "Numbers" to tell document dName to tell sheet sName
make new table with properties {name:newTable, row count:nb_rows, column count:nb_columns}
end tell
end createNewTable

--=====
on activateGUIscripting()
(* to be sure than GUI scripting will be active *)
tell application "System Events"
if not (UI elements enabled) then set (UI elements enabled) to true
end tell
end activateGUIscripting
--=====
(*
==== Uses GUIscripting ====
*)
on selectsheet(theDoc, theSheet)
script myScript
property listeObjets : {}
local maybe, targetSheetRow
--+++++
-- set log_report to "point 2 : " & (current date) & return
--+++++
tell application "Numbers"
activate
set theDoc to name of document theDoc (* useful if the passed value is a number *)
tell document theDoc to set my listeObjets to name of sheets
end tell -- "Numbers"…

set maybe to theSheet is in my listeObjets
set my listeObjets to {} -- So it will not be saved in the script *)
if not maybe then
error "The sheet “" & theSheet & "” is unavailable in the spreadsheet “" & theDoc & "” !"
end if -- not maybe

set maybe to 5 > (system attribute "sys2")
tell application "System Events" to tell application process "Numbers"
tell outline 1 of scroll area 1 of splitter group 1 of splitter group 1 of window theDoc
if maybe then (* macOS X 10.4.x
'(value of attributes contains 0)': '(value of attribute "AXDisclosureLevel" is 0)' sometimes works in Tiger, sometimes not.
The only possible instances of 0 amongst the attributes are the disclosure level of a sheet row and the index of the first row, which represents a sheet anyway.
Another possibility is '(value of attribute -1 is 0)', which makes me uneasy. *)
set targetSheetRow to first row where ((value of attributes contains 0) and (value of first static text is theSheet))
else (* macOS X 10.5.x or higher *)
set targetSheetRow to first row where ((value of attribute "AXDisclosureLevel" is 0) and ((groups is {}) and (value of first static text is theSheet)) or (value of first group's first static text is theSheet))
end if -- maybe…
(*
Handler modified to accomodate sheets requiring a lot of time to get the focus
*)
tell targetSheetRow to set value of attribute "AXSelected" to true
set cnt to 0
repeat (*
Must way that Numbers becomes ready to receive the value *)
try
tell targetSheetRow to set value of attribute "AXDisclosing" to true
exit repeat
on error
set cnt to cnt + 1
delay 0.5 -- half a second
end try
end repeat
end tell -- outline…
end tell -- "System Events"…
--+++++
-- set log_report to log_report & "point 3, cnt = " & cnt & return & (current date) & return
--+++++
tell application "Numbers" to tell document theDoc to tell sheet theSheet to tell table 1
with timeout of 20 * 60 seconds (*
WITH this setting, the script will be able to wait 20 minutes for the asked value.
I hope that the document will not be so huge that this delay prove to be too short. *)
value of cell "A1"
end timeout
end tell -- "Numbers"…
--+++++
-- set log_report to log_report & "point 4 : " & (current date) & return
--+++++
tell application "System Events" to tell application process "Numbers" (*
Do the trick one more time to be sure that the sheet is open *)
tell targetSheetRow to set value of attribute "AXDisclosing" to true
end tell -- "System Events"…
--+++++
-- return log_report & "point 5 : " & (current date) & return
--+++++
(*
End of the modified piece of code
*)
end script
run myScript
end selectsheet

关于macos - 使用 applescript 在特定工作表上的 iWork 编号中创建新表格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/516805/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com