Как определить стиль зачеркивания из файла xlsx в R - PullRequest
0 голосов
/ 31 августа 2018

При импорте файла Excel в R

необходимо проверить данные, которые содержат формат * зачеркивание .

Есть ли у нас какой-либо метод для их обнаружения? Добро пожаловать на R и Python подход

Ответы [ 3 ]

0 голосов
/ 31 августа 2018

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   
0 голосов
/ 03 сентября 2018

Ниже представлен небольшой пример программы, которая отфильтровывает текст с применением зачеркивания с использованием пакета 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, b, c, d, e в первых пяти строках столбца A, где я применил форматирование зачеркивания к b и d. Эта программа отфильтровывает ячейки в столбце A, для которых был применен зачеркнутый шрифт, а затем печатает ячейку, строку и значения оставшихся. Свойство col_idx возвращает числовое значение столбца на основе 1.

0 голосов
/ 31 августа 2018

Я нашел метод ниже:

'# Предполагая, что столбец от 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') 

Но это не говорит о местоположении (в данном случае это номера строк), что трудно понять, где содержится «зачеркнутый», когда есть много результатов, как я могу векторизовать результат оператора?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...