2014-09-16 4 views
1

clojure에서 Excel 파일의 내용을 읽으려고합니다. 나는 docjure 라이브러리를 사용한다. REPL에서 샘플 코드를 사용할 때 원하는대로 출력됩니다. 하지만 파일에 삽입 한 후 잘못된 개수의 args - 스프레드 시트/선택 시트 메서드 오류가 발생했습니다. 이 방법Clojure - Docjure : 메서드는 REPL에서는 작동하지만 파일에서는 작동하지 않습니다.

(use 'dk.ative.docjure.spreadsheet) 

(->> (load-workbook (str (System/getProperty "user.dir") "/resources/public/xls/test.xls") 
        (select-sheet "menu") 
        (select-columns {:A :number, :D :name}) 
        )) 

인수가 [name ^Workbook workbook]이다 : 여기

코드이다. 왜 REPL에는 하나의 인수 만 필요하지만 파일에는 두 개의 인수가 필요합니까?

+2

스레딩 매크로에서 괄호가 잘못되었습니다. 'select-sheet'와'select-columns' 폼을'load-workbook' 폼 외부로 가져와야합니다. 여기에 쓰여 있듯이,'(select-sheet menu ")는 평가되고 arg로서 load-workbook에 전달 될 것이다. – Alex

답변

3

마찬가지로 알렉스은 말하기를 팸플릿을 사용했습니다.

는 현재 코드 코드로 평가합니다

여기
(load-workbook (str (System/getProperty "user.dir") 
        "/resources/public/xls/test.xls") 
       (select-sheet "menu") 
       (select-columns {:A :number, :D :name})) 

실제 코드를 같이하는 방법입니다 : 당신이 할 수

(select-columns {:A :number, :D :name} 
       (select-sheet "menu" 
           (load-workbook (str (System/getProperty "user.dir") 
                "/resources/public/xls/test.xls")))) 

:로 평가

(->> "/resources/public/xls/test.xls" 
    (str (System/getProperty "user.dir")) ; prefix it with user.dir 
    load-workbook       ; load .xls workbook 
    (select-sheet "menu")     ; select menu sheet 
    (select-columns {:A :number, :D :name})) ; select some columns 

두 개의 인수를 사용하여 여기에서 select-sheetselect-columns을 호출합니다.

스레드 마지막 매크로 ->>의 작동 방식을 더 잘 이해하려면 see its documentation.

+0

설명해 주셔서 감사합니다. 하지만 REPL에서 왜 평가됩니까? – DanielderGrosse

+0

@DanielderGrosse 안됩니다. REPL 기록을 살펴보면 실제 코드가 다르게 보입니다. 너는 방금 샀던 괄호 중 하나를 잘못 놓았으니 놓치기 쉽다. –

관련 문제