-
Notifications
You must be signed in to change notification settings - Fork 111
/
Copy pathopenxml_document.R
69 lines (61 loc) · 1.67 KB
/
openxml_document.R
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
# openxml_document --------------------------------------------------------
# This class handle basic operations on a openxml document:
# - initialize
openxml_document <- R6Class(
"openxml_document",
public = list(
initialize = function( dir ) {
private$reldir = dir
private$rels_doc <- relationship$new()
},
feed = function( file ) {
private$filename <- file
private$doc <- read_xml(file)
private$rels_filename <- file.path( dirname(file), "_rels", paste0(basename(file), ".rels") )
if( file.exists(private$rels_filename) )
private$rels_doc <- relationship$new()$feed_from_xml(private$rels_filename)
else private$rels_doc <- relationship$new()
self
},
file_name = function(){
private$filename
},
name = function(){
basename(private$filename)
},
get = function(){
private$doc
},
dir_name = function(){
private$reldir
},
save = function() {
# remove duplicate namespace definitions
private$doc <- read_xml(as.character(private$doc), options = "NSCLEAN")
write_xml(private$doc, file = private$filename)
if( nrow(self$rel_df()) > 0 ){
private$rels_doc$write(private$rels_filename)
}
self
},
remove = function() {
unlink(private$filename)
if( file.exists(private$rels_filename) )
unlink(private$rels_filename)
private$filename
},
rel_df = function(){
private$rels_doc$get_data()
},
relationship = function(){
private$rels_doc
}
),
private = list(
filename = NULL,
rels_filename = NULL,
doc = NULL,
rels_doc = NULL,
reldir = NULL
)
)