Clojure - Docjure:方法在REPL中工作,但在File中不起作用

时间:2014-09-16 19:05:22

标签: excel clojure read-eval-print-loop

我只是尝试在clojure中读取excel文件的内容。我使用docjure库。当我在REPL中使用示例代码时,输​​出就像我想要的那样。但是在将其插入文件后,我得到了错误数量的args - 电子表格/选择表方法的错误。

以下是代码:

(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中只需要一个参数,而文件中只有两个参数?

1 个答案:

答案 0 :(得分:3)

正如 Alex 在评论中所说,你和parens搞混了。

现在您的代码代码评估为:

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

以下是您的实际代码的样子:

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

如您所见,此处使用两个参数调用select-sheetselect-columns

要更好地了解线程最后一个宏->>的工作原理,see its documentation