Asignación de filas para la entrada de datos
Para obtener datos agregados a una nueva fila, estaba en el camino correcto con su primer script donde escribió tell the selectedTable to add row below last row
. Simplemente tuvo que hacer referencia a esta fila recién creada cuando configuró los valores de cell 1
, cell 2
y cell 3
, a los que, de lo contrario, se hacía referencia como pertenecientes a selectedTable
en lugar de un row
específico en el selectedTable
:
set dataToAdd to {¬
myDateFromPlist, ¬
myTimeFromPlist, ¬
theIDFromPlist}
tell application "Numbers" to tell ¬
the front document to tell ¬
the active sheet to tell ¬
table 1
set R to add row below last row
tell R to ¬
repeat with i from 1 to count dataToAdd
set value of cell i to ¬
item i in dataToAdd
end repeat
end tell
Decidí ajustar la configuración de los valores de celda dentro de un bucle repeat
porque, en teoría, podría tener 50 celdas para asignar valores a, y esto ahorra un poco de escritura, además de hacer que el código sea un poco más fácil leer.
Sin embargo, tenga en cuenta que cell i
dentro del bucle repeat
es, en sí mismo, parte de una declaración tell R
, donde R
es la referencia al nuevo row
que se acaba de crear. Esto le dice al script que es cell i
de este nuevo row
a los que se les deben asignar los valores almacenados en dataToAdd
, y no simplemente a cell i
de table 1
(supongo que su sheet
solo tiene una tabla , en cuyo caso no hay necesidad de preocuparse por el largo first table whose class of selection range is range
. Si, sin embargo, he asumido erróneamente, entonces es mejor dar nombres a sus tablas, a las que luego puede hacer referencia específicamente desde su script, en lugar de de una esperanza muy tenue de que la tabla seleccionada siempre va a ser la tabla correcta).
Algunos puntos sobre el contenido de tu pregunta y el fragmento de código
En este momento, esta es la mayor ayuda que puedo dar.
Si puedo recomendarte, al publicar una pregunta, si bien es bueno que hayas publicado tu fragmento de código, es mucho más útil que a) publique un fragmento de código que compile (el tuyo no lo hace; < em> Script Editor informa de un final inesperado de archivo al intentar compilarlo, porque su fragmento de código está incompleto); b) incluya suficiente código fuera del conjunto mayor para que pueda ejecutarse en el sistema de otra persona, lo que significa que las variables y tales deben definirse dentro del fragmento de código; actualmente, no tengo idea cuáles son o contienen las variables myDateFromPlist
, myTimeFromPlist
y theIDFromPlist
, por lo que no podemos, por ejemplo, ayudarlo con respecto a por qué aumentó el uso de RAM.
Sospecho que hay un montón de código que precede a este bloque Números , en el que has accedido a tu archivo plist
para recuperar sus datos. Puede ser algo en la forma en que has hecho esto que te consuma la memoria.
Como crítica final, si bien el manejo de errores es una buena idea, lo omitiría hasta que se finalice la secuencia de comandos, ya que sus bloques de trampas actuales incluyen demasiadas líneas de código donde hay errores diferentes podría ser capturado: por ejemplo, si recibe un código de error de 1001, podría ser porque no hay active sheet
; o no hay selection range
; o que algo salió mal al asignar valores a cell
, que podría ser cell 1
, cell 2
o cell 3
, pero puede haber sido el resultado de un problema con row 2
o una de las variables. Además, tienes dos bloques try
anidados uno dentro del otro, lo que es bastante arrogante.
Si quieres más ayuda ...
Si está satisfecho con la solución que esta respuesta brinda a su problema de asignación de filas e inserción de datos, entonces estoy feliz de que fue una solución fácil. Si tiene alguna otra consulta al respecto, deje un comentario y le responderé. Si desea proporcionar más información sobre su secuencia de comandos, variables y lo que no, podemos probar y averiguar de dónde proviene este consumo de memoria. Como dijo en su comentario "con este método , aunque mi RAM salta por la ventana", sería útil saber cuál fue la diferencia entre su primer método y el que generó el consumo de memoria. , lo que puede, por supuesto, requerir que publiques dos scripts.
Lo que puede hacer a los efectos de este es usar una bandeja de pegar en línea. Pastery no requiere nombres de usuario ni contraseñas, y tiene resaltado de sintaxis de AppleScript, pero es uno entre muchos. Paste Bin no requiere ningún tipo de inicio de sesión. Es útil para usar en los sitios web de Stack Exchange cuando desee o necesite proporcionar código adicional que se solicite específicamente, pero en realidad no es necesario para el enfoque principal de la pregunta en sí, cuando ya se proporcionó un bloque de código y proporcionar más podría correr el riesgo de ahogar la Pregunta en un mar de gris.