Numbers / Excel / SQL에 AppleScript 내보내기 변수


0

AppleScript로 숫자에 새로운 행을 추가하거나 시트 (또는 SQL 데이터베이스)

내 데이터를 .plist에 저장할 수 있습니다.

set myDateFromPlist to value of property list item "myDate" of p_list

아이디어는 동일한 행에있는 모든 변수를 사용하여 데이터베이스 또는 시트를 만드는 것입니다. (그리고 스크립트를 다시 실행할 때 더 많은 데이터를 가진 새로운 행을 추가하십시오

예 :

날짜 | var1 | var2 | var3 날짜 | var1 | var2 | var3

내가 지금까지 시도한 것

tell application "Numbers"
    activate
    try
        if not (exists document 1) then error number 1000
        tell document 1
            try
                tell active sheet
                    set the selectedTable to ¬
                        (the first table whose class of selection range is range)
                    tell the selectedTable to add row below last row
                    tell the selectedTable to set value of first cell to myDateFromPlist
                    tell the selectedTable to set value of second cell to myTimeFromPlist
                    tell the selectedTable to set value of third cell to theIDFromPlist

                end tell
            on error
                error number 1001
            end try
            tell selectedTable
                -- editing statements go here
            end tell
        end tell

그 문제 :

1 : 번호를 열어야합니다 (하지만 어쨌든 요구 사항 일 수 있습니다).

2 : 데이터가 항상 첫 번째 행에 추가됩니다.


방금 만든 스크립트로 내 스크립트를 업데이트했습니다.
Kevin

답변:


1

데이터 입력에 대한 행 할당

새로운 행에 데이터를 추가하려면, 작성한 첫 번째 스크립트로 올바른 경로에 있어야했습니다. tell the selectedTable to add row below last row. 다음으로 값을 설정할 때이 새로 생성 된 행을 참조해야합니다. cell 1, cell 2, 및 cell 3, 그렇지 않으면에 속하는 것으로 언급되는 selectedTable 특정 대신에 row ~ 안에 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

셀 값의 설정을 repeat 루프, 왜냐하면 이론 상으로는 값을 할당하는 데 50 개의 셀을 사용할 수 있기 때문에 약간의 타이핑이 필요없고 코드를 좀 더 읽기 쉽게 만들 수 있습니다.

그러나, cell i 내부 repeat 루프는 그 자체로 tell R 성명서 R 새로운 것에 대한 참조이다. row 방금 만들었습니다. 이렇게하면 스크립트에 cell i 이 새로운 row 에 저장된 값을 할당해야합니다. dataToAdd, 단순히 cell itable 1 (나는 너의 sheet 단 하나의 테이블 만 가지고 있습니다.이 경우에는 오래 걸릴 필요가 없습니다. first table whose class of selection range is range. 그러나 잘못 가정했다면 테이블 이름을 지정하는 것이 좋습니다.이 테이블 이름은 선택한 테이블이 항상 올바르지 않을 것이라는 매우 희박한 희망이 아니라 스크립트에서 구체적으로 참조 할 수 있습니다. 표).


질문 내용 및 코드 스 니펫에 대한 몇 가지 사항

지금이 순간이 가장 큰 도움이됩니다.

질문을 게시 할 때 코드 스 니펫을 게시하는 것이 좋습니다 만 조언을 해줄 수 있다면 에이) 컴파일하는 코드 스 니펫을 게시하십시오. 스크립트 편집기 코드 스 니펫이 불완전하기 때문에 파일을 컴파일하려고 할 때 예기치 않은 파일 끝을보고합니다. 비) 다른 사람의 시스템에서 실행할 수 있도록 코드 전체를 충분히 포함시켜야합니다. 즉, 변수 등이 코드 스니 j 내에 정의되어야 함을 의미합니다. 현재, 변수 myDateFromPlist, myTimeFromPlist, 및 theIDFromPlist 또는 포함하고 있기 때문에, 예를 들어 RAM 사용이 확대 된 이유와 관련하여 도움을 줄 수는 없습니다.

이 코드 앞에 여러 코드가있는 것 같습니다. 번호 당신이 접근 한 블록 plist 파일을 사용하여 데이터를 검색하십시오. 그것은 당신의 기억력을 소비하는 방식으로 당신이 해낸 방식 일 것입니다.

마지막 비평으로, 오류 처리는 좋은 생각이지만, 스크립트의 마무리가 완료 될 때까지 나는 그것을 버려야한다. 왜냐하면 현재의 포용 차단에는 너무 많은 코드 행이 포함되어 있기 때문이다. 다른 오류 할 수 있었다 예를 들어, 오류 코드 1001이 표시되면 오류 코드가 없기 때문일 수 있습니다. active sheet; 또는 없다 selection range; 또는 값을 할당 할 때 문제가 발생했습니다. cell, 될 수있는 cell 1, cell 2, 또는 cell 3, 문제의 결과 일 수 있습니다. row 2 또는 변수 중 하나. 또한, 당신은 두 가지가 있습니다. try 블록은 서로 안에 중첩되어있어 꽤 무심하다.


더 많은 도움을 받아야할까요?

이 답변을 통해 행 할당 및 데이터 삽입 문제에 만족하는 솔루션을 얻었다면 간단히 해결할 수있어서 기쁩니다. 이 질문에 대한 다른 질문이 있으면 의견을 남겨주세요. 연락 드리겠습니다. 스크립트, 변수 및 그 이외의 정보에 대한 자세한 정보를 제공하려는 경우이 메모리 사용량이 어디에서 왔는지 알아볼 수 있습니다. 당신이 당신의 코멘트에서 말했듯이 " 방법은 있지만 내 RAM이 창 밖으로 뛰고 있습니다. "라고 말하면, 첫 번째 방법과 메모리 소비를 생성 한 방법이 무엇인지 알면 도움이됩니다. 물론 두 가지 스크립트를 게시해야 할 수도 있습니다.

할 수있는 일 이 목적을 위해서 온라인 붙여 넣기 빈을 사용하고 있습니다. 과자류 사용자 이름이나 암호가 필요하지 않으며 AppleScript 구문 강조 표시가 있지만 그 중 하나입니다. 보관함 붙여 넣기 무엇이든 로그인 할 필요가 없습니다. Stack Exchange 웹 사이트에서 특별히 요구되는 추가 코드를 제공하고 싶거나 필요로 할 때 유용하지만 코드 블록이 이미 제공된 질문 자체의 주요 초점에는 실제로 필요하지 않으며 더 많이 제공하면 더 많은 코드 블록이 익사 될 위험이 있습니다. 회색 바다에서 질문.


감사합니다,이 방법은 내 코드보다 더 깨끗하고 자세한 내용은 최대한 자세히 살펴 보겠습니다. 그러나 지금까지는 훌륭하게 작동합니다.
Kevin

0

아마도 최선의 방법은 아니지만 작동하는 것 같습니다.

    tell application "Numbers"
        activate
        try
            if not (exists document 1) then error number 1000
            tell document 1
                try
                    tell active sheet
                        set the selectedTable to ¬
                            (the first table whose class of selection range is range)
tell the selectedTable to set value of cell 1 of row 2 to myDateFromPlist

                    tell the selectedTable to set value of cell 2 of row 2 to myTimeFromPlist

                    tell the selectedTable to set value of cell 3 of row 2 to theIDFromPlist

                    end tell
                on error
                    error number 1001
                end try
                tell selectedTable
                    -- editing statements go here
                end tell
            end tell

이 방법의 문제점은 내 RAM이 창 밖으로 튀어 나오고 (2GB +)
Kevin
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.