Mercurial > repos > prog > lcmsmatching
comparison excelhlp.R @ 6:f86fec07f392 draft default tip
planemo upload commit c397cd8a93953798d733fd62653f7098caac30ce
author | prog |
---|---|
date | Fri, 22 Feb 2019 16:04:22 -0500 |
parents | fb9c0409d85c |
children |
comparison
equal
deleted
inserted
replaced
5:fb9c0409d85c | 6:f86fec07f392 |
---|---|
1 if ( ! exists('read.excel')) { # Do not load again if already loaded | |
2 | |
3 source('strhlp.R') | |
4 source('dfhlp.R') | |
5 | |
6 ############### | |
7 # GET NB ROWS # | |
8 ############### | |
9 | |
10 get.nbrows <- function(file, tab) { | |
11 | |
12 library(rJava) | |
13 library(xlsxjars) | |
14 library(xlsx, quietly = TRUE) | |
15 | |
16 df <- read.xlsx(file, tab) | |
17 na_rows <- apply(is.na(df), MARGIN = 1, FUN = all) # look for rows that contain only NA values. | |
18 last_row <- tail(which(! na_rows), n = 1) | |
19 return(last_row) | |
20 } | |
21 | |
22 ############## | |
23 # READ EXCEL # | |
24 ############## | |
25 | |
26 # Read Excel xlsx file | |
27 # file The path to the Excel file. | |
28 # sheet | |
29 # start.row | |
30 # end.row | |
31 # header If TRUE, use first line as header line. | |
32 # check.names If TRUE, correct header (column) names in the data frame, by replacing non-ASCII characters by dot. | |
33 # stringsAsFactors If TRUE, replace string values by factors. | |
34 # trim.header If TRUE, remove whitespaces at beginning and of header titles. | |
35 # trim.values If TRUE, remove whitespaces at beginning and of string values. | |
36 # remove.na.rows If TRUE, remove all lines that contain only NA values. | |
37 read.excel <- function(file, sheet, start.row = NULL, end.row = NULL, header = TRUE, remove.na.rows = TRUE, check.names = TRUE, stringsAsFactors = TRUE, trim.header = FALSE, trim.values = FALSE, col.index = NULL) { | |
38 | |
39 library(rJava) | |
40 library(xlsxjars) | |
41 library(xlsx, quietly = TRUE) | |
42 | |
43 # Check that start row and end row exist | |
44 if ( ! is.null(start.row) || ! is.null(end.row)) { | |
45 nb_rows <- get.nbrows(file, sheet) | |
46 if ( ! is.null(start.row) && start.row > nb_rows) | |
47 return(NULL) | |
48 if ( ! is.null(end.row) && end.row > nb_rows) | |
49 return(NULL) | |
50 } | |
51 | |
52 # Call xlsx package | |
53 df <- read.xlsx(file, sheet, startRow = start.row, endRow = end.row, header = header, check.names = check.names, stringsAsFactors = stringsAsFactors, colIndex = col.index) | |
54 | |
55 # Remove column default names if header was set to false | |
56 if ( ! header) | |
57 colnames(df) <- NULL | |
58 | |
59 # Clean data frame | |
60 df <- df.clean(df, trim.colnames = trim.header, trim.values = trim.values, remove.na.rows = remove.na.rows) | |
61 | |
62 return(df) | |
63 } | |
64 | |
65 ####################### | |
66 # CHECK IF TAB EXISTS # | |
67 ####################### | |
68 | |
69 tab.exists <- function(file, tab) { | |
70 | |
71 if (is.null(file) || is.na(file) || is.null(tab) || is.na(tab)) | |
72 return(FALSE) | |
73 | |
74 library(rJava) | |
75 library(xlsxjars) | |
76 library(xlsx, quietly = TRUE) | |
77 | |
78 wb <- loadWorkbook(file) | |
79 sheets <- getSheets(wb) | |
80 return(tab %in% names(sheets)) | |
81 } | |
82 | |
83 } # end of load safe guard |