Skip to content

Commit 1d8f14b

Browse files
committed
wrap all public workbook methods
1 parent 7aa824f commit 1d8f14b

26 files changed

+5424
-4178
lines changed

R/class-workbook-add-data.R

Lines changed: 119 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,119 @@
1+
workbook_add_data <- function(
2+
self,
3+
private,
4+
sheet = current_sheet(),
5+
x,
6+
startCol = 1,
7+
startRow = 1,
8+
dims = rowcol_to_dims(startRow, startCol),
9+
array = FALSE,
10+
xy = NULL,
11+
colNames = TRUE,
12+
rowNames = FALSE,
13+
withFilter = FALSE,
14+
name = NULL,
15+
sep = ", ",
16+
applyCellStyle = TRUE,
17+
removeCellStyle = FALSE,
18+
na.strings
19+
) {
20+
# TODO copy over the actual write_data()
21+
write_data(
22+
wb = self,
23+
sheet = sheet,
24+
x = x,
25+
startCol = startCol,
26+
startRow = startRow,
27+
dims = dims,
28+
array = array,
29+
xy = xy,
30+
colNames = colNames,
31+
rowNames = rowNames,
32+
withFilter = withFilter,
33+
name = name,
34+
sep = sep,
35+
applyCellStyle = applyCellStyle,
36+
removeCellStyle = removeCellStyle,
37+
na.strings = na.strings
38+
)
39+
40+
invisible(self)
41+
}
42+
43+
workbook_add_data_table <- function(
44+
self,
45+
private,
46+
sheet = current_sheet(),
47+
x,
48+
startCol = 1,
49+
startRow = 1,
50+
dims = rowcol_to_dims(startRow, startCol),
51+
xy = NULL,
52+
colNames = TRUE,
53+
rowNames = FALSE,
54+
tableStyle = "TableStyleLight9",
55+
tableName = NULL,
56+
withFilter = TRUE,
57+
sep = ", ",
58+
firstColumn = FALSE,
59+
lastColumn = FALSE,
60+
bandedRows = TRUE,
61+
bandedCols = FALSE,
62+
applyCellStyle = TRUE,
63+
removeCellStyle = FALSE,
64+
na.strings
65+
) {
66+
write_data_table(
67+
wb = self,
68+
sheet = sheet,
69+
x = x,
70+
startCol = startCol,
71+
startRow = startRow,
72+
dims = dims,
73+
xy = xy,
74+
colNames = colNames,
75+
rowNames = rowNames,
76+
tableStyle = tableStyle,
77+
tableName = tableName,
78+
withFilter = withFilter,
79+
sep = sep,
80+
firstColumn = firstColumn,
81+
lastColumn = lastColumn,
82+
bandedRows = bandedRows,
83+
bandedCols = bandedCols,
84+
applyCellStyle = applyCellStyle,
85+
removeCellStyle = removeCellStyle,
86+
na.strings = na.strings
87+
)
88+
89+
invisible(self)
90+
}
91+
92+
93+
workbook_add_formula <- function(
94+
self,
95+
private,
96+
sheet = current_sheet(),
97+
x,
98+
startCol = 1,
99+
startRow = 1,
100+
dims = rowcol_to_dims(startRow, startCol),
101+
array = FALSE,
102+
xy = NULL,
103+
applyCellStyle = TRUE,
104+
removeCellStyle = FALSE
105+
) {
106+
write_formula(
107+
wb = self,
108+
sheet = sheet,
109+
x = x,
110+
startCol = startCol,
111+
startRow = startRow,
112+
dims = dims,
113+
array = array,
114+
xy = xy,
115+
applyCellStyle = applyCellStyle,
116+
removeCellStyle = removeCellStyle
117+
)
118+
invisible(self)
119+
}

R/class-workbook-add-worksheet.R

Lines changed: 226 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,226 @@
1+
workbook_add_worksheet <- function(
2+
self,
3+
private,
4+
sheet = next_sheet(),
5+
gridLines = TRUE,
6+
rowColHeaders = TRUE,
7+
tabColour = NULL,
8+
zoom = 100,
9+
header = NULL,
10+
footer = NULL,
11+
oddHeader = header,
12+
oddFooter = footer,
13+
evenHeader = header,
14+
evenFooter = footer,
15+
firstHeader = header,
16+
firstFooter = footer,
17+
visible = c("true", "false", "hidden", "visible", "veryhidden"),
18+
hasDrawing = FALSE,
19+
paperSize = getOption("openxlsx2.paperSize", default = 9),
20+
orientation = getOption("openxlsx2.orientation", default = "portrait"),
21+
hdpi = getOption("openxlsx2.hdpi", default = getOption("openxlsx2.dpi", default = 300)),
22+
vdpi = getOption("openxlsx2.vdpi", default = getOption("openxlsx2.dpi", default = 300))
23+
) {
24+
visible <- tolower(as.character(visible))
25+
visible <- match.arg(visible)
26+
orientation <- match.arg(orientation, c("portrait", "landscape"))
27+
28+
# set up so that a single error can be reported on fail
29+
fail <- FALSE
30+
msg <- NULL
31+
32+
private$validate_new_sheet(sheet)
33+
34+
if (is_waiver(sheet)) {
35+
if (sheet == "current_sheet") {
36+
stop("cannot add worksheet to current sheet")
37+
}
38+
39+
# TODO openxlsx2.sheet.default_name is undocumented. should incorporate
40+
# a better check for this
41+
sheet <- paste0(
42+
getOption("openxlsx2.sheet.default_name", "Sheet "),
43+
length(self$sheet_names) + 1L
44+
)
45+
}
46+
47+
sheet <- as.character(sheet)
48+
sheet_name <- replace_legal_chars(sheet)
49+
private$validate_new_sheet(sheet_name)
50+
51+
if (!is.logical(gridLines) | length(gridLines) > 1) {
52+
fail <- TRUE
53+
msg <- c(msg, "gridLines must be a logical of length 1.")
54+
}
55+
56+
if (!is.null(tabColour)) {
57+
tabColour <- validateColour(tabColour, "Invalid tabColour in add_worksheet.")
58+
}
59+
60+
if (!is.numeric(zoom)) {
61+
fail <- TRUE
62+
msg <- c(msg, "zoom must be numeric")
63+
}
64+
65+
# nocov start
66+
if (zoom < 10) {
67+
zoom <- 10
68+
} else if (zoom > 400) {
69+
zoom <- 400
70+
}
71+
#nocov end
72+
73+
if (!is.null(oddHeader) & length(oddHeader) != 3) {
74+
fail <- TRUE
75+
msg <- c(msg, lcr("header"))
76+
}
77+
78+
if (!is.null(oddFooter) & length(oddFooter) != 3) {
79+
fail <- TRUE
80+
msg <- c(msg, lcr("footer"))
81+
}
82+
83+
if (!is.null(evenHeader) & length(evenHeader) != 3) {
84+
fail <- TRUE
85+
msg <- c(msg, lcr("evenHeader"))
86+
}
87+
88+
if (!is.null(evenFooter) & length(evenFooter) != 3) {
89+
fail <- TRUE
90+
msg <- c(msg, lcr("evenFooter"))
91+
}
92+
93+
if (!is.null(firstHeader) & length(firstHeader) != 3) {
94+
fail <- TRUE
95+
msg <- c(msg, lcr("firstHeader"))
96+
}
97+
98+
if (!is.null(firstFooter) & length(firstFooter) != 3) {
99+
fail <- TRUE
100+
msg <- c(msg, lcr("firstFooter"))
101+
}
102+
103+
vdpi <- as.integer(vdpi)
104+
hdpi <- as.integer(hdpi)
105+
106+
if (is.na(vdpi)) {
107+
fail <- TRUE
108+
msg <- c(msg, "vdpi must be numeric")
109+
}
110+
111+
if (is.na(hdpi)) {
112+
fail <- TRUE
113+
msg <- c(msg, "hdpi must be numeric")
114+
}
115+
116+
if (fail) {
117+
stop(msg, call. = FALSE)
118+
}
119+
120+
newSheetIndex <- length(self$worksheets) + 1L
121+
private$set_current_sheet(newSheetIndex)
122+
sheetId <- private$get_sheet_id_max() # checks for self$worksheet length
123+
124+
# check for errors ----
125+
126+
visible <- switch(
127+
visible,
128+
true = "visible",
129+
false = "hidden",
130+
veryhidden = "veryHidden",
131+
visible
132+
)
133+
134+
# Order matters: if a sheet is added to a blank workbook, we add a default style. If we already have
135+
# sheets in the workbook, we do not add a new style. This could confuse Excel which will complain.
136+
# This fixes output of the example in wb_load.
137+
if (length(self$sheet_names) == 0) {
138+
# TODO this should live wherever the other default values for an empty worksheet are initialized
139+
empty_cellXfs <- data.frame(numFmtId = "0", fontId = "0", fillId = "0", borderId = "0", xfId = "0", stringsAsFactors = FALSE)
140+
self$styles_mgr$styles$cellXfs <- write_xf(empty_cellXfs)
141+
}
142+
143+
self$append_sheets(
144+
sprintf(
145+
'<sheet name="%s" sheetId="%s" state="%s" r:id="rId%s"/>',
146+
sheet_name,
147+
sheetId,
148+
visible,
149+
newSheetIndex
150+
)
151+
)
152+
153+
## append to worksheets list
154+
self$append("worksheets",
155+
wbWorksheet$new(
156+
tabColour = tabColour,
157+
oddHeader = oddHeader,
158+
oddFooter = oddFooter,
159+
evenHeader = evenHeader,
160+
evenFooter = evenFooter,
161+
firstHeader = firstHeader,
162+
firstFooter = firstFooter,
163+
paperSize = paperSize,
164+
orientation = orientation,
165+
hdpi = hdpi,
166+
vdpi = vdpi,
167+
printGridLines = gridLines
168+
)
169+
)
170+
171+
# NULL or TRUE/FALSE
172+
rightToLeft <- getOption("openxlsx2.rightToLeft")
173+
174+
# set preselected set for sheetview
175+
self$worksheets[[newSheetIndex]]$set_sheetview(
176+
workbookViewId = 0,
177+
zoomScale = zoom,
178+
showGridLines = gridLines,
179+
showRowColHeaders = rowColHeaders,
180+
tabSelected = newSheetIndex == 1,
181+
rightToLeft = rightToLeft
182+
)
183+
184+
185+
## update content_tyes
186+
## add a drawing.xml for the worksheet
187+
if (hasDrawing) {
188+
self$append("Content_Types", c(
189+
sprintf('<Override PartName="/xl/worksheets/sheet%s.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml"/>', newSheetIndex),
190+
sprintf('<Override PartName="/xl/drawings/drawing%s.xml" ContentType="application/vnd.openxmlformats-officedocument.drawing+xml"/>', newSheetIndex)
191+
))
192+
} else {
193+
self$append("Content_Types",
194+
sprintf(
195+
'<Override PartName="/xl/worksheets/sheet%s.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml"/>',
196+
newSheetIndex
197+
)
198+
)
199+
}
200+
201+
## Update xl/rels
202+
self$append("workbook.xml.rels",
203+
sprintf(
204+
'<Relationship Id="rId0" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet" Target="worksheets/sheet%s.xml"/>',
205+
newSheetIndex
206+
)
207+
)
208+
209+
## create sheet.rels to simplify id assignment
210+
new_drawings_idx <- length(self$drawings) + 1
211+
self$drawings[[new_drawings_idx]] <- ""
212+
self$drawings_rels[[new_drawings_idx]] <- ""
213+
214+
self$worksheets_rels[[newSheetIndex]] <- genBaseSheetRels(newSheetIndex)
215+
self$vml_rels[[newSheetIndex]] <- list()
216+
self$vml[[newSheetIndex]] <- list()
217+
self$isChartSheet[[newSheetIndex]] <- FALSE
218+
self$comments[[newSheetIndex]] <- list()
219+
self$threadComments[[newSheetIndex]] <- list()
220+
221+
self$append("sheetOrder", as.integer(newSheetIndex))
222+
private$set_single_sheet_name(newSheetIndex, sheet_name, sheet)
223+
224+
invisible(self)
225+
226+
}

0 commit comments

Comments
 (0)