Мне обычно нужно извлечь текст из файлов, которые выглядят так:

Скриншот файла в Excel

В идеале двумя способами:

  1. Только отдельные строки текста

    Пример:
    сделано у нас на самом деле есть публикация

    этих данных, и мы работаем над

    больше данных, которые были недавно представлены на

  2. В форме абзаца (объединение текста из разных строк в один блок текста, который я могу редактировать в Word, Google Docs и т.д.)

    Пример:
    сделано у нас на самом деле есть публикация из этих данных, и мы работаем над большим количеством данных, которые были недавно представлены на

Когда я получаю файлы, все в столбце А. Есть две строки чисел, которые мне не нужны, затем строка нужного мне текста, а затем пустая строка, после которой шаблон повторяется для тысяч строк.

Очевидно, что выполнение этого вручную занимает много времени, поэтому любая помощь будет принята с благодарностью.

3 ответа3

1

Чтобы упростить удаление нежелательных строк в диапазоне, лучше сначала отсортировать их, чтобы f.ex. все пустые строки сгруппированы вместе. Довольно просто использовать встроенную сортировку ячеек, но для поддержания первоначального порядка текстов требуется несколько дополнительных шагов.

Я буду ссылаться на ваши данные как на диапазон A1:A200 в качестве примера. Отрегулируйте по мере необходимости к вашим фактическим данным.

  1. Вставьте цифру 1 в ячейку B1 и цифру 2 в ячейку B2 . Выберите ячейки B1:B200 и примените fill функцию linear , чтобы в столбце B от 1 до 200. Позже это поможет вернуть тексты в их первоначальном порядке.

  2. Выберите диапазон A1:B200 и примените сортировку. Теперь у вас будут сгруппированы числовые строки, а также строки временного интервала, строки текста и пустые строки. Таким образом, легко выбрать и удалить строки, которые вы не хотите сохранять. После удаления ненужных строк у вас должен быть диапазон, скажем, A1:B50 с текстами и их исходными номерами строк в столбце B

  3. Чтобы восстановить правильный порядок текстов, выберите диапазон A1:B50 и отсортируйте его по столбцу B

Чтобы скопировать текст в Word для дальнейшей обработки, выберите, скопируйте и вставьте в Word . Удалите форматирование таблицы и объедините строки с помощью поиска и замены (найдите paragraph и замените space).

1

Я не думаю, что есть простой способ сделать это, который не включает в себя написание некоторого кода. Вероятно, вы можете сделать это с VBA в Excel, но у меня нет большого опыта с этим.

Вот пример того, как вы можете сделать это в Python. Этот сценарий будет проходить через ячейки в данном столбце и печатать значение в файл, если он не начинается с цифры.

Лист Excel:

Образец изображения листа Excel

Выход:

Here's the first string and the second now a third

Код:

from openpyxl import load_workbook # package for working with xls files
import re # regex package

workbookName = 'test.xlsx'
sheetName = 'Sheet1'
column = 'A'
maxRow = 50
outputFile = 'excelOutput.txt'

# Open the workbook
wb = load_workbook(workbookName)
# Create a file to put the data into
fh = open(outputFile, 'w')

# Loop through all the rows
for kk in range(1,maxRow):
    # Grab the cell's value
    cellValue = wb[sheetName][column+str(kk)].value
    # If the cell isn't empty
    if cellValue != None:
        # If the cell doesn't start with a number
        if not re.search("\\d",str(cellValue)[0]):
            # Write the value from the cell into the text file
            fh.write(cellValue)
# Close the file
fh.close()
1

Кажется, вам нужно извлечь данные из каждой третьей строки столбца A, то есть A3, A7, A10 ....

Во-первых, пожалуйста, напишите 3, 7 в первые две ячейки столбца B и перетащите вниз, чтобы получить серию, подобную 3, 7, 10, 13 .....

Теперь напишите формулу = INDIRECT("A" & B1) в C1, которая покажет текст ячейки A3. Скопируйте формулу вниз, чтобы показать текст A7, A10 и так далее.

Чтобы объединить весь текст, вы можете использовать функции CONCAT или TEXTJOIN, если у вас есть Excel 2016. Преимущество TEXTJOIN заключается в том, что вы можете использовать разделитель как пробел или запятую между текстами. Вы также можете игнорировать пустые клетки. В следующем примере пробел использовался как разделитель, а True использовался для игнорирования пустых ячеек.

=TEXTJOIN(" ",TRUE,C1:C11)

Для более ранних версий вы можете использовать функцию CONCATENATE, но вы должны записывать все ссылки на ячейки одну за другой.

=CONCATENATE(C1,C2,C3,C4,C5,C6,C7,C8).  

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .