使用Clojure Docjure编辑一些Excel单元格

4
我正在尝试使用Clojure Docjure(https://github.com/mjul/docjure)编辑Excel表格中的某些单元格。
Docjure文档介绍了如何创建新电子表格,但我不想这样做。我要做的是读取Excel表格中的一些信息,计算一些新值,然后将它们写回到同一表格的特定单元格中。
前两个步骤已经完成,我只是不知道如何写回值。
我该怎么做?

参见“创建电子表格”示例,将create-workbook更改为从读取示例中的load-workbook - edbond
1个回答

3

通常查看测试非常有用,因为它们也可以在一定程度上记录代码。我发现一个看起来相关的文件:https://github.com/mjul/docjure/blob/master/test/dk/ative/docjure/spreadsheet_test.clj#L126

在那个文件中,我找到了:

(deftest set-cell!-test
  (let [sheet-name "Sheet 1" 
    sheet-data [["A1"]]
    workbook (create-workbook sheet-name sheet-data)
        a1 (-> workbook (.getSheetAt 0) (.getRow 0) (.getCell 0))]
    (testing "set-cell! for Date"
      (testing "should set value"
        (set-cell! a1 (july 1))
        (is (= (july 1) (.getDateCellValue a1))))
      (testing "should set nil"
        (let [^java.util.Date nil-date nil]
          (set-cell! a1 nil-date))
        (is (= nil (.getDateCellValue a1)))))
    (testing "set-cell! for String"
      (testing "should set value"
        (set-cell! a1 "foo")
        (is (= "foo" (.getStringCellValue a1)))))
    (testing "set-cell! for boolean"
      (testing "should set value"
        (set-cell! a1 (boolean true))
        (is (.getBooleanCellValue a1))))
    (testing "set-cell! for number"
      (testing "should set int"
        (set-cell! a1 (int 1))
        (is (= 1.0 (.getNumericCellValue a1))))
      (testing "should set double"
        (set-cell! a1 (double 1.2))
        (is (= 1.2 (.getNumericCellValue a1)))))))

我现在无法进行测试,但这是你寻找的内容吗?

Well set-cell! 对于已经有内容的单元格有效。问题是如果我尝试获取空单元格的内容或者尝试向其中写入内容,它们将返回 nil。 - Kingalione
我通过检查要写入的单元格是否为空来解决了空单元格问题,如果为空,则使用Java调用创建一个新单元格,并将其写入该单元格。 - Kingalione

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接