你怎么能读excel与sheetjs在Clojurescript?



我有一个excel文件。我导入了sheetjs (https://sheetjs.com/)。我想读到表格数据。你怎么能读excel与sheetjs在Clojurescript?

用https://github.com/day8/re-frame

编写的项目

这应该把你放在正确的方向上-它打开一个名为datadump.xlsx的文件,该文件与index.html(应用程序的根文件夹)在同一个文件夹中。很容易适应通过表单上传文件。在主命名空间中,您只需调用(data/read-local-file)

(ns data
(:require [reagent.core :as r]
[reagent.dom :as rd]
[re-frame.core :as rf]
["xlsx" :as XLSX]))
(defn read-sheet [wb sheet-name]
(let [sheet (aget (. wb -Sheets) sheet-name)
data (XLSX/utils.sheet_to_json sheet #js {:header 1})
dataclj (js->clj data)
kk (map keyword (first dataclj))
outdata (into [] (for [line (rest dataclj)] (zipmap kk line)))]
(rf/dispatch [:source-data outdata])))
(defn read-local-file []
(let [xhr (js/XMLHttpRequest.)]
(.open xhr "GET" "datadump.xlsx" true)
(set! (.-responseType xhr) "blob")
(set! (.-onload xhr)
(fn []
(let [reader (js/FileReader.)]
(.readAsArrayBuffer reader (.-response xhr))
(set! (.-onload reader)
(fn [evt]
(let [ab (-> evt .-target .-result)
wb (XLSX/read ab #js {:type "array" :cellDates true})
sn (. wb -SheetNames)]
(read-sheet wb (first sn))))))))
(.send xhr)))

最新更新