Keynote v9.1+macOS 10.14.6上でAppleScriptのプログラムを組んでいたら「行数が正しくない」といったエラーになるので、徹底的に調べてみました。
Keynote v9.2でも修正されていないことを確認しました。
Keynote v9.2.1でも修正されていないことを確認しました。
▲5行の表を作ろうとするとエラー。4行でも6行でも大丈夫なのに5行の表を作るとエラー
tell application "Keynote"
tell front document
tell current slide
set aTable to make new table with properties {header column count:0, header row count:0, row count:5, column count:3}
end tell
end tell
end tell
★Click Here to Open This Script
すると、なんと「特定のセルサイズ(行数、列数)の表を作成させた場合にのみエラーになる」ことが判明。
make new table with propertiesコマンドで行/列を指定して作成するとエラーになる組み合わせは以下のとおり。
{{xNum:2, yNum:5}, {xNum:3, yNum:5}, {xNum:4, yNum:2}, {xNum:4, yNum:3}, {xNum:4, yNum:4}, {xNum:4, yNum:5}, {xNum:4, yNum:6}, {xNum:4, yNum:7}, {xNum:4, yNum:8}, {xNum:4, yNum:9}, {xNum:4, yNum:10}, {xNum:4, yNum:11}, {xNum:4, yNum:12}, {xNum:4, yNum:13}, {xNum:4, yNum:14}, {xNum:4, yNum:15}, {xNum:4, yNum:16}, {xNum:4, yNum:17}, {xNum:4, yNum:18}, {xNum:4, yNum:19}, {xNum:4, yNum:20}, {xNum:4, yNum:21}, {xNum:4, yNum:22}, {xNum:4, yNum:23}, {xNum:4, yNum:24}, {xNum:4, yNum:25}, {xNum:4, yNum:26}, {xNum:4, yNum:27}, {xNum:4, yNum:28}, {xNum:4, yNum:29}, {xNum:4, yNum:30}, {xNum:5, yNum:5}, {xNum:6, yNum:5}, {xNum:7, yNum:5}, {xNum:8, yNum:5}, {xNum:9, yNum:5}, {xNum:10, yNum:5}}
さらに、上記サイズでエラー発生時に追試を行い、安全なサイズの表(3×3)を作成したあとにリサイズを行ってもエラーになるのが、
{xNum:3, yNum:5}, {xNum:4, yNum:3}
の組み合わせであるようです。なんでやねーん、と関西人でもないのにツッコンでしまいました。いやー、作ろうとしないとできないバグなんでは?
特定サイズの表をAppleScript側から作らせないようにしているのでしょうか? とても不思議なパターンのバグです。思わず「わざとなのか?」と思ってしまったほどです。何かのイースターエッグなんでしょうか、とても不愉快なイースターエッグですが。
Core i5のマシンでも追試を行ってみて、同様にエラーが再現することを確認しました。Xeonでのみ発生するエラーということではないようです(それはそれでちょっと見てみたい)。
追試で、Keynote v8.1+macOS 10.12.6上で同じことをやってみたら、とくにエラーにはなりませんでした。
AppleScript名:keynoteTableTest.scptd |
— – Created by: Takaaki Naganoya – Created on: 2019/08/09 — – Copyright © 2019 Piyomaru Software, All Rights Reserved —
use AppleScript version "2.4" — Yosemite (10.10) or later, use framework "Foundation" use scripting additions
set erList1 to {} set erList2 to {}
tell application "Keynote" make new document end tell
repeat with x from 2 to 10 repeat with y from 2 to 30 tell application "Keynote" tell front document tell current slide delete every table set errorF to false –First trial (make new table command) try set aTable to make new table with properties {header column count:0, header row count:0, row count:y, column count:x} on error set errorF to true set the end of erList1 to {xNum:x, yNum:y} end try if errorF = true then –Second trial (Make safe size table and change its size after generation) delete every table set aTable to make new table with properties {header column count:0, header row count:0, row count:3, column count:3} try set column count of aTable to y set row count of aTable to x on error set the end of erList2 to {xNum:x, yNum:y} end try end if end tell end tell end tell end repeat end repeat
return {erList1, erList2} |
★Click Here to Open This Script
|