我只是尝试在clojure中读取excel文件的内容。我使用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中只需要一个参数,而文件中只需要两个?
正如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-sheet
和select-columns
都是用两个参数调用的。
要更好地了解线程最后一个宏->>
的工作原理,请参阅其文档。