title: “Learning R—xlsx”
author: “刘栋”
date: “2018年7月10日”
output: word_document
knitr::opts_chunk$set(eval = FALSE, include = FALSE)
1.需求
工作中需要把单变量分析的结果保存在Excel中,结果分为:数据和图片。利用xlsx
这个包,可以完成大部分工作。
2.环境配置
依赖的包为'tidyverse', 'rJava', 'xlsxjars', 'xlsx'
,其中rJava
需要配置java
环境。具体可以参考:https://blog.csdn.net/wendaomudong_l2d4/article/details/80984247。其余不赘~
3.xlsx包的使用
直接贴代码,原理我也不清楚~
3.1 新建Excel
# Setup
x <- c('tidyverse', 'rJava', 'xlsxjars', 'xlsx')
sapply(X=x, FUN = require, character.only = TRUE)
excel_path <- "../Data/test.xlsx"
# 新建Excel和Sheet
wb <- createWorkbook()
sheet1 <- createSheet(wb, "Sheet1")
sheet2 <- createSheet(wb, "Sheet2")
sheet3 <- createSheet(wb, "Sheet3")
#保存Excel
saveWorkbook(wb, excel_path)
结果:
3.2 载入Excel,增删Sheet
# 设置路径&载入数据
excel_path <- "../Data/test.xlsx"
wb <- loadWorkbook(excel_path)
# 查看sheet个数
wb$getNumberOfSheets()
# 查看sheet名字
names(getSheets(wb))
# 新增sheet4
addsheet <- createSheet(wb, sheetName="Sheet4")
# 删除原有的sheet1
removeSheet(wb, sheetName="Sheet1")
# 保存修改之后的结果
saveWorkbook(wb, excel_path)
3.3 载入Excel,保存图片
# 新建图片
# Create graph---------
dcs <- ggplot(mtcars) +
geom_point(aes(cyl, disp))
# Export Pic -----------
# 貌似要求
pic_path <- "../Picture/dcs.jpeg"
png(filename = pic_path)
plot(dcs)
dev.off()
# 载入Excel
excel_path <- "../Data/test.xlsx"
wb <- loadWorkbook(excel_path)
# 获取Sheet2
ws <- getSheets(wb)$Sheet2
# 添加图片
addPicture(
file = "../Picture/dcs.jpeg",
sheet = ws, # 图片保存的sheet
startRow = 2,# 在sheet中的位置
startColumn = 2
)
saveWorkbook(wb, excel_path)
# 删除图片
# unlink(pic_path)
3.4 保存数据到Excel
# 载入Excel
excel_path <- "../Data/test.xlsx"
wb <- loadWorkbook(excel_path)
# 新增sheet5
Sheet5 <- createSheet(wb, sheetName="Sheet5")
addDataFrame(
x = mtcars,# 要保存的数据框
sheet = Sheet5,# 保存的位置
col.names = TRUE,# 是否保留列名
row.names = TRUE,# 是否保留行名
startRow = 1,#数据保存的起始位置
startColumn = 1,#数据保存的起始位置
colStyle = NULL,# 默认是NULL,如果是时间类型数据,保存时自动转换格式
colnamesStyle = NULL,# 列名的格式
rownamesStyle = NULL,# 行名的格式
showNA = FALSE,# 空值是否展示,默认不展示,即保留为空白格
characterNA = "",# NA展示位空字符串和上面showNA参数有关系
byrow = FALSE
)
saveWorkbook(wb, excel_path)
3.5 改变数据格式,保存数据到Excel
# 载入Excel
excel_path <- "../Data/test.xlsx"
wb <- loadWorkbook(excel_path)
# 新增sheet6
Sheet6 <- createSheet(wb, sheetName = "Sheet6")
cs1 <-CellStyle(wb) + Font(wb, isItalic = TRUE)# rowcolumns
cs2 <- CellStyle(wb) + Font(wb, color = "blue")#蓝色
cs3 <- CellStyle(wb) + Font(wb, isBold = TRUE) + Border() # header加粗
addDataFrame(
x = mtcars,# 要保存的数据框
sheet = Sheet6,# 保存的位置
col.names = TRUE,# 是否保留列名
row.names = TRUE,# 是否保留行名
startRow = 1,#数据保存的起始位置
startColumn = 1,#数据保存的起始位置
colStyle=list(`2`=cs2, `3`=cs2),# 第二、三列蓝色
colnamesStyle = cs3,# 列名的格式
rownamesStyle = cs1,# 行名的格式
showNA = FALSE,# 空值是否展示,默认不展示,即保留为空白格
characterNA = "",# NA展示位空字符串和上面showNA参数有关系
byrow = FALSE
)
saveWorkbook(wb, excel_path)
3.6 更多的样式
Excel常见的格式可以在R中进行设置,如字体、文本位置、填充背景色、加边框等等。
library(xlsx)
xl_path <- "../Data/test.xlsx"
wb <- loadWorkbook(xl_path)
sheet <- createSheet(wb, "type")
## 设置样式
cs1 <-
CellStyle(wb) +
Alignment(horizontal = "ALIGN_CENTER",
vertical = "VERTICAL_CENTER") + # 对齐方式,水平&竖直居中
Border(
color = "black",
position = c("TOP", "RIGHT" , "LEFT", "BOTTOM"),
pen = c("BORDER_THIN",
"BORDER_THIN",
"BORDER_THIN",
"BORDER_THIN")) + # 所有边框加框线&黑色框线
Font(wb, isItalic = TRUE, isBold = TRUE)+ # 字体加粗、Italic字体
Fill(
foregroundColor = "cornflowerblue",
backgroundColor = "cornflowerblue",
pattern = "SOLID_FOREGROUND"
) #背景色为矢车菊蓝
## 另外一个样式,其实逻辑一样的
cs2 <-
CellStyle(wb) + Border(
color = "black",
position = c("TOP", "RIGHT" , "LEFT", "BOTTOM"),
pen = c("BORDER_THIN", "BORDER_THIN", "BORDER_THIN", "BORDER_THIN")
)+#黑色细框线
Fill(
foregroundColor = "lightblue",
backgroundColor = "lightblue",
pattern = "SOLID_FOREGROUND"
)# 浅蓝色填充
cs3 <-
CellStyle(wb) + Border(
color = "black",
position = c("TOP", "RIGHT" , "LEFT", "BOTTOM"),
pen = c("BORDER_THIN", "BORDER_THIN", "BORDER_THIN", "BORDER_THIN")
)#黑色细框线
addDataFrame(
x=mtcars,
sheet=sheet,
row.names = TRUE,
colnamesStyle = cs1,# 列名应用cs1样式
colStyle = list(`1`=cs2,`2`=cs3,`3`=cs3,`4`=cs3,`5`=cs3,`6`=cs3,`7`=cs3,`8`=cs3,`9`=cs3,`10`=cs3,`11`=cs3)
)
## 路径注意一下
saveWorkbook(wb, "../Data/test.xlsx")
2018-07-10 于南京建邺区新城科技园