kolumbou
@kolumbou
python, html, c#

Как выполнить поиск и копирование данных в Excel с помощью Python?

Доброго времени суток.
Пишу в отчаянии.

Уже несколько суток пытаюсь освоить хоть что-нибудь (openpyxl, xlsxwriter, xlrd-xlwt...) что поможет мне выполнить следующий, казалось бы простой алгоритм:

  1. Открыть Excel файл.
  2. Найти в определенном столбце ячейку совпадающую с заранее заданным словом (на русском языке).
  3. Скопировать всю строку вместе с этой ячейкой и всеми данными в этой строке (ряду).
  4. Создать новый файл Excel и записать туда все это (все ряды, в которых нашлось то заранее заданное слово).


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

Вот допустим последний неудавшийся пример с использованием win32com:

import win32com.client
Excel = win32com.client.Dispatch("Excel.Application")

text = 'Блендер'
counter = 2

def write(val, pos):
    wb = Excel.Workbooks.Add()
    ws = wb.ActiveSheet
    i = 1
    for rec in val:
        ws.Cells(pos,i).value = rec
        i = i + 1
    wb.SaveAs('test.xlsx')
    wb.Close()
    Excel.Quit()


def search():
    wb = Excel.Workbooks.Open(u'C:/Users/User/Desktop/excel.xlsx')
    sheet = wb.ActiveSheet
    srch = [r[0].value for r in sheet.Range("B2:B13")]
    for items in srch:
        if text in items:
            global counter
            print ('Found')
            found = sheet.Range("A%s:D%s" % (counter,counter)).Value
            print (found)
            write(found,counter)
        counter += 1
    
search()


Наверняка этот код настолько неидеален, насколько это вообще возможно.
Но пусть там будет хоть овер999 костылей, лишь бы работало, а он не работает даже с этим - при виде русскоязычного текста впадает истерику и кричит 'OLE error NONE NONE'. А даже без русских символов один фиг записывает только первую ячейку.

Буду бесконечно рад любой помощи.
  • Вопрос задан
  • 7547 просмотров
Решения вопроса 1
saboteur_kiev
@saboteur_kiev Куратор тега Python
software engineer
openpyxl вроде проще некуда. Вот на коленке простенький вариант.
Для копирования всей строки только почитайте доку, ну или циклом все ячейки в строке.

from openpyxl import Workbook,load_workbook

wbSearch = Workbook()
wbSearch = load_workbook("search.xlsx")
wsSearch = wbSearch.active

wbResult = Workbook()
wsResult = wbResult.active
resultRow = 1

lookFor = 'Блендер'

for i in range(1,21):
   value=wsSearch.cell(row=i, column=1).value
   if value == lookFor:
       wsResult.cell(row=resultRow, column=1).value=value

wbResult.save("result.xlsx")
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы