3 votos

AppleScript no puede obtener una fecha como cadena

Se advirtió, soy muy nuevo para AppleScript y la mayor parte de la programación en general. El propósito básico de la secuencia de comandos que he estado trabajando es en la lectura de la información de los archivos de Excel en una base de datos FileMaker Pro. Todo funciona bien hasta ahora, excepto cuando se intenta obtener el valor de las celdas que contienen las fechas. Dado que las fechas en el archivo de Excel ya están formateados correctamente (mm/dd/aa) para la base de datos que se ponga, me gustaría simplemente leer y escribir como cadenas.

El problema que se plantea aquí, donde AppleScript salidas de los valores como las fechas en el formato (día de la semana, mes, dd, aaaa a las 12:00:00 AM) a pesar de mi intento de leer como cadenas. A continuación es una versión abreviada de la secuencia de comandos que muestra dónde se está produciendo el problema.

    tell application "Finder"
    activate application "Microsoft Excel"
    open the first file in folder "Macintosh HD⁩:⁨Users:⁨theUser⁩:Documents⁩:⁨attachments test"
    tell application "Microsoft Excel"
        tell active sheet
            tell used range
                set rowCount to count of rows

                repeat with i from 2 to rowCount

                    set colA to "A" & i & ":A" & i
                    set theDate to get value of range colA as string

                    set rowB to "B" & i & ":B" & i
                    set theTime to get value of range rowB as real

                    set colC to "C" & i & ":C" & i
                    set serialNo to get value of range colC as integer

                    set colD to "D" & i & ":D" & i
                    set pH to get value of range colD as real

                    set colE to "E" & i & ":E" & i
                    set theVolume to get value of range colE as real


                    display dialog "The serial number of row " & i & " is: " & serialNo & " and the pH value is: " & pH & " and the volume is: " & theVolume & " and the date is: " & theDate & " and the time is: " & theTime



                end repeat

            end tell
        end tell
    end tell
end tell

También probé otro método para lidiar con el problema mediante el ajuste de una variable para cada día, mes, y año, pero se encontró con otro problema que un mes no se reconoce como un púrpura palabra (sea lo que debe ser llamado) y en lugar de azul (de nuevo, no puedo encontrar lo que estos términos son llamados en cualquier lugar). En la imagen de abajo son de tres diferentes maneras he tratado de obtener estos valores a partir de la fecha en el formato (día de la semana, mes, dd, aaaa a las 12:00:00 AM), para que puedan luego ser reorganizado de forma manual.

blue is a good color, but I wanted purple Mi única suposición para el problema inicial es que 'as string' no funciona cuando se coloca después de las otras partes de la línea, pero no tengo ni idea de por qué mes se niega a cooperar. Cualquier orientación sería muy apreciada!

1voto

wch1zpink Puntos 11

Puede que no sea una solución directa o la respuesta que está buscando, pero el siguiente código AppleScript proporciona ejemplos de cómo convertir una cadena de fecha corta dada en una fecha real, cómo extraer los elementos de la fecha, editar y establecer la fecha y valores de tiempo, y para crear su propia fecha y hora personalizadas como una cadena. Espero que esto ayude.

 set dateAsText to "9/23/16"

-- converts dateAsText into an actual date
set someDate to date dateAsText -- date "Friday, September 23, 2016 at 12:00 AM"

-- extract the short date from someDate... as a string
set shortDate to short date string of someDate -- "09/23/16"

-- change the time value of someDate from "12:00 AM" to "5:00 PM"
set adjustedDate to date "5:00 PM" of someDate -- date "Friday, September 23, 2016 at 5:00 PM"


-- extract elements from adjustedDate... as strings
set theTime to time string of adjustedDate -- "5:00 PM"

set theWeekday to weekday of adjustedDate -- Friday
set theWeekday to (weekday of adjustedDate) as string -- "Friday"

set theDay to day of adjustedDate -- 23
set theDay to (day of adjustedDate) as string -- "23"

set theMonth to month of adjustedDate -- September
set theMonth to (month of adjustedDate) as string -- "September"

-- edit values of adjustedDate
set day of adjustedDate to 14 -- date "Wednesday, September 14, 2016 at 5:00 PM"
set year of adjustedDate to 1978 -- date "Thursday, September 14, 1978 at 5:00 PM"

------------
set customDate to short date string of adjustedDate & space & theTime -- "09/14/78 5:00 PM"
 

1voto

Łukasz Sromek Puntos 1347

Parece string value (no value) es el término que estás buscando. Excel almacena las células en su formato raw (p. ej., fecha, número, etc.) pero, a continuación, se ha separado la capacidad de dar formato a los valores. Así, por ejemplo, se puede almacenar el número 2.33423 , pero la pantalla como 2.3 , mostrando sólo un decimal.

En Applescript, esta es la diferencia entre el término value (que es el valor bruto de la forma en que Excel guardado) y string value que es la forma en que Excel muestra de ello.

tell application "Microsoft Excel"
    get value of active cell
    -- date "Sunday, May 19, 2019 at 12:00:00 AM"

    get string value of active cell
    -- "5/19/19"
end tell

Ahora, siempre que ya han fijado el objetivo de formato en la celda, puede establecer el contenido de la celda, simplemente, por algo como esto:

tell application "Microsoft Excel"
    set value of active cell to "6/18/2019"
end tell

Siempre esta celda con formato de una fecha, que se interpreta como tal.

Volviendo al problema original en la mano, usted puede revisar AppleScript las definiciones de clase de la clase date -- desplácese hacia abajo hasta encontrar la descripción de todo. La razón por la que month aparece de manera diferente, es que es una constante no es un entero. La fecha es un tipo de clase en el interior de AppleScript, que tiene propiedades asociadas usted puede obtener o manipular.

Por ejemplo: Uno podría llegar el mes como un número entero de la siguiente manera (de lo contrario, será una constante).

tell application "Microsoft Excel"
    set theDate to value of active cell as date
    get (month of theDate) as integer
end tell

Referencias adicionales:

  • Excelente discusión sobre AppleScript tiempo y formato de fecha.
  • Adicional código de ejemplo en la configuración de la fecha en una celda de Excel. No estoy seguro de que esto es necesario, pero le muestra cómo usted puede hacerlo.

0voto

Chris Norman Puntos 46

Tome la fecha que Excel le está dando actualmente y vuelva a aplicar el formato que necesita para poner en Filemaker de esta manera:

     tell theDate to set dateList to {its month as integer as text, day as text, year as text}
set {saveTID, AppleScript's text item delimiters} to {AppleScript's text item delimiters, {"/"}}
set newDate to dateList as string
set AppleScript's text item delimiters to saveTID
 

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X