gpt4 book ai didi

java - R 中的 Apache POI

转载 作者:行者123 更新时间:2023-12-01 21:18:29 26 4
gpt4 key购买 nike

我正在尝试将 xlsx 文件读入 R 并提取 Excel 公式。看来 Apache POI 是完成这项工作的正确工具,但我无法让它工作。我找到了这个Page其中列出了 POI 组件及其依赖项。我尝试了以下代码:

require(rJava)
.jinit()
.jaddClassPath("poi-3.11-20141221.jar")
.jaddClassPath("poi-ooxml-3.11-20141221.jar")
.jaddClassPath("poi-ooxml-schemas-3.11-20141221.jar")
.jaddClassPath("xmlbeans-2.6.0.jar")

inputStream <- .jnew("java/io/FileInputStream", path.expand(file.path))

xfile <- .jnew("org/apache/poi/xssf/eventusermodel/XSSFWorkbook",
.jcast(inputStream,"java/io/InputStream"))
wext <- .jnew("org/apache/poi/xssf/extractor/XSSFExcelExtractor", xfile)

text <- .jcall(wext, "Ljava/lang/String;", "getText")

这会导致java.lang.ClassNotFoundException错误。有人能指出我正确的方向吗?

最佳答案

更新

devtools::install_git("https://gitlab.com/hrbrmstr/xlsxtractr.git")

devtools::install_github("hrbrmstr/xlsxtractr")

然后:

doc <- read_xlsx(system.file("extdata/wb.xlsx", package="xlsxtractr"))

extract_formulas(doc, 1)
## # A tibble: 3 × 3
## sheet cell f
## <dbl> <chr> <chr>
## 1 1 A4 SUM(A1:A3)
## 2 1 B4 SUM(B1:B3)
## 3 1 D4 SUM(A4:B4)

从所有带有公式的工作表中提取所有公式:

purrr::map_df(seq_along(doc), ~extract_formulas(doc, .))

它只提取 formlua,但现在它是其他功能的基础,这些功能可能是其他(等等......)excel借出包中缺少的。

<小时/>

这可以很容易地适应一个小包或函数,以获取 xlsx 文件的路径并从中提取公式:

library(xml2)
library(purrr)

# need to write code to do the unzipping and also to work with all the
# sheets from the xlsx file.

sheet <- read_xml("~/dir/wb/xl/worksheets/sheet1.xml")
ns <- xml_ns_rename(xml_ns(sheet), d1 = "x")
xml_find_all(sheet, ".//x:row", ns) %>%
map_df(function(row) {
xml_find_all(row, ".//x:c", ns) %>%
map_df(function(col) {
xml_find_all(col, ".//x:f", ns) %>%
xml_text() -> f
if (length(f) > 0) {
data_frame(cell=xml_attr(col, "r"), f=f)
} else {
NULL
}
})
})
## # A tibble: 2 × 2
## cell f
## <chr> <chr>
## 1 B2 SUM(A1:A3)
## 2 C2 SUM(A1:A3)*SUM(A1:A3)

如果您有 xls 文件,则此操作将不起作用。

关于java - R 中的 Apache POI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39529302/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com