RPackage006---xlsx


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)

  结果:
p1

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)

p2

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)

p3

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)

p4

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)

p5

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")

Picture6
                           2018-07-10 于南京建邺区新城科技园

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值