如何从R中的xlsx文件检测“删除线”样式

时间:2018-08-31 02:12:33

标签: python r excel strikethrough

在R中导入excel文件时,我必须检查包含“ 删除线”格式的数据

我们有什么方法可以检测到它们吗? 欢迎使用R和Python方法

3 个答案:

答案 0 :(得分:3)

R解决方案

tidyxl软件包可以帮助您...

示例test.xlsx,数据在第一张纸的A1:A4上。以下是一个excel屏幕截图:

enter image description here

library(tidyxl)

formats <- xlsx_formats( "temp.xlsx" )
cells <- xlsx_cells( "temp.xlsx" )

strike <- which( formats$local$font$strike )
cells[ cells$local_format_id %in% strike, 2 ]

# A tibble: 2 x 1
#   address
#   <chr>  
# 1 A2     
# 2 A4   

答案 1 :(得分:2)

我在下面提供了一个小示例程序,该程序使用openpyxl包过滤了应用了删除线的文本(我在2.5.6版的Python 3.7.0上对其进行了测试)。抱歉,花了很长时间才回复您。

import openpyxl as opx
from openpyxl.styles import Font


def ignore_strikethrough(cell):
    if cell.font.strike:
        return False
    else:
        return True


wb = opx.load_workbook('test.xlsx')
ws = wb.active
colA = ws['A']
fColA = filter(ignore_strikethrough, colA)
for i in fColA:
    print("Cell {0}{1} has value {2}".format(i.column, i.row, i.value))
    print(i.col_idx)

我在带有默认工作表的新工作簿上对其进行了测试,在A列的前五行中使用字母a,b,c,d,e,其中我对b和d应用了删除线格式。该程序过滤掉已删除线应用于字体的columnA中的单元格,然后打印其余单元格,行和值。 col_idx属性返回从1开始的数字列的值。

答案 2 :(得分:0)

我在下面找到了一种方法:

'#假设1-10中的列的值为:A,则第5个A包含“删除线”

TEST_wb = load_workbook(filename = 'TEST.xlsx')
TEST_wb_s =  TEST_wb.active

for i in range(1, TEST_wb_s.max_row+1):
    ck_range_A = TEST_wb_s['A'+str(i)] 
    if ck_range_A.font.strikethrough == True:
        print('YES')
    else:
        print('NO') 

但是它没有告诉位置(这种情况是行号),当有很多结果时,很难知道哪里包含“删除线”,我该如何向量化语句的结果?