2016-09-16 4 views
0

でのApache POI。 Apache POIはJobのための適切なツールだと思われますが、動作させることはできません。 POIコンポーネントとその依存関係をリストしたPageが見つかりました。私はRにXLSX-ファイルを読み込み、Excelの数式を抽出しようとしていますR

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エラーをもたらす:私は、次のコードを試してみました。誰かが私を正しい方向に向けることができますか?

答えて

3

UPDATE

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ファイルがある場合、これはしませんしかし、仕事。

+0

ご協力いただきありがとうございます。あなたのソリューションを 'openxlsx'パッケージに寄与させることを検討すべきです。現在、まったく同じ[thing](https://github.com/awalker89/openxlsx/issues/202)の機能リクエストがあります。 – count

関連する問題