You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将带红色strikethrough标记的Excel文件导入R并标记数据(无需重排data frame)

当然有办法!我们可以用openxlsx包直接读取Excel里的单元格格式信息,完全不用提前重排数据框。下面是一步步的实现方案:

步骤1:安装并加载依赖包

openxlsx是处理Excel格式的绝佳工具,先安装并加载它:

install.packages("openxlsx")
library(openxlsx)

步骤2:读取Excel数据与格式信息

我们需要同时读取原始数据和单元格的样式,这样才能判断哪些单元格是红色带删除线的:

# 替换成你的Excel文件路径
file_path <- "your_file.xlsx"

# 加载工作簿对象(包含格式信息)
wb <- loadWorkbook(file_path)
# 获取第一个工作表的名称(如果有多个表,可自行调整)
target_sheet <- getSheetNames(file_path)[1]
# 读取原始数据到dataframe
df <- read.xlsx(wb, sheet = target_sheet)
# 获取工作簿里的所有样式集合
all_styles <- getStyles(wb)

步骤3:标记符合条件的单元格

接下来遍历每个单元格,检查它的字体是否是红色,并且带有删除线:

# 创建一个和数据框结构一致的标记矩阵,初始全为FALSE
marked_cells <- matrix(FALSE, nrow = nrow(df), ncol = ncol(df))

# 遍历每一行每一列
for (row_idx in 1:nrow(df)) {
  for (col_idx in 1:ncol(df)) {
    # 获取当前单元格的样式ID
    cell_style_id <- getCellStyles(wb, sheet = target_sheet, rows = row_idx, cols = col_idx)
    
    if (!is.na(cell_style_id)) {
      # 提取对应样式的详细信息
      current_style <- all_styles[[cell_style_id]]
      # 检查两个条件:字体为红色(RGB #FF0000)、有删除线
      is_red <- current_style$font$color == "#FF0000"
      has_strike <- current_style$font$strike
      
      # 同时满足就标记为TRUE
      if (is_red && has_strike) {
        marked_cells[row_idx, col_idx] <- TRUE
      }
    }
  }
}

步骤4:生成目标向量

最后从标记好的单元格里提取值,转成向量:

# 提取所有符合条件的值,转成向量
marked_vector <- unlist(df[marked_cells])

# 查看结果
print(marked_vector)

一些注意事项

  • 如果你Excel里的红色不是标准的#FF0000,可以用openxlsx的getColors()函数查看工作簿里的所有颜色值,替换判断条件。
  • 如果工作表里有合并单元格,可能需要额外处理,但一般不影响格式判断。
  • 这个方法完全保留原始数据框的结构,不需要提前重排,所有格式判断都是在原始数据基础上做的。

内容的提问来源于stack exchange,提问作者QuinnHenoch

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 12:32:32