启明办公

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 95|回复: 0

R语言word自动化(二)表格

[复制链接]

2

主题

10

帖子

15

积分

新手上路

Rank: 1

积分
15
发表于 2022-9-22 16:07:58 | 显示全部楼层 |阅读模式
导入包
library(magrittr)
library(officer)
创建docx对象
doc = read_docx()
创建表格数据
data1 =data.frame(
    "name" = c("jack","rose","tom"),
    "age"= c(18,18,22),
    "hobby" = c("game","food","sleep")
)
print(data1)
#   name age hobby
# 1 jack  18  game
# 2 rose  18  food
# 3  tom  22 sleep
添加表格


  • body_add_table函数
body_add_table(
  x,   # doc对象
  value,  # 表格数据 dataframe
  style = NULL,  # 风格
  header = TRUE,  # 显示标题
  alignment = NULL,  # 列对齐,参数长度必须与列长度匹配,left ,right , cneter,也可以首字母
  align_table = "center", # 表格在文档中的对齐方式 left/right/center
  stylenames = table_stylenames(),
)

  • body_add_flextable函数
body_add_flextable(x) # x 为flextable对象
表格属性


  • prop_table函数
prop_table(
  style = NA_character_,  # 用于格式化表格的表格样式
  layout = table_layout(),  # 表格宽度布局
  width = table_width(),  # 文档表格宽度
  stylenames = table_stylenames(), # 列样式格式
  colwidths = table_colwidths(),  # 列宽
  tcf = table_conditional_formatting(), # 定义条件
  align = "center"  # 对齐
)

  • table_stylenames函数
table_stylenames(stylenames = list())有两种形式定义
# 第一种形式
stylenames <- c(
  vs = "centered", am = "centered",
  gear = "centered", carb = "centered"
)
# 第二种形式
stylenames <- list(
  "centered" = c("vs", "am", "gear", "carb")
)
table_stylenames(stylenames = stylenames)

  • table_colwidths函数
table_colwidths(widths = NULL)

  • table_layout函数
table_layout(type = "autofit")
# fixed   固定
# autofit  自动
结合flextable包进行美化表格


  • 构造一个函数
libary(flextable)

get_table = function(data,bg_color,border_color){
    ft = flextable(data)  # 创建flextable对象
    ft = theme_box(ft)  # 添加主题
    # 设置线条颜色
    ft = border(
        ft,
        # "none" or "solid" or "dotted" or "dashed"
        border=fp_border(color=border_color,style="solid",width=0.5),
        part="all")
    # 修改全局字体大小为10
    ft = fontsize(ft,size=10,part="all")
    # 设置边框与文字间距 左右为4  上下为8
    ft = padding(
        ft,
        padding.left=4,
        padding.right=4,
        padding.top=8,
        padding.bottom=8,
        part="all")
    #
    ft = width(ft,width=1.654)
    # 文字对齐方式 'left'、'right'、'center'、'justify'
    ft = align(ft,align="center",part="all")
    # 背景色
    ft = bg(ft,bg=bg_color,part="header")
    # 字体
    ft = font(ft,fontname="微软雅黑",part="all")
    # 返回表格
    return(ft)
}

  • 格式展示
t = get_table(data,"#DDECEE","#0096B2")
doc %>%
    body_add_flextable(t)
print(doc,'1.docx')

flextable还有一些其他常见的函数

  • 合并单元格
# 合并单元格,所有行和列必须是连续的
merge_at(
    x,   # flextable对象
    i = NULL,  # 行
    j = NULL,  # 列
    part = "body" # 表的部分
)

# 当连续单元格具有相同的值时,水平合并
merge_h(
    x,  # flextable对象
    i = NULL, # 行
    part = "body"  # 表的部分
)这些行和列也支持布尔值选择
t = get_table(data,"#DDECEE","#0096B2")
# 合并了年龄等于22的,即tom
t = merge_at(t,i = ~age == 22,part = "body")
doc %>%
    body_add_flextable(t)
print(doc,'1.docx')
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|启明办公

Copyright © 2001-2013 Comsenz Inc.Template by Comsenz Inc.All Rights Reserved.

Powered by Discuz!X3.4

快速回复 返回顶部 返回列表