Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > Python
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.06.2022, 11:45   #1
AleksandrB00
Пользователь
 
Регистрация: 30.05.2022
Сообщений: 37
По умолчанию Запись значений циклом в Excel

У меня есть лог файлы из которых надо вытащить определённые строки, я выполняю поиск нужных и они мне приходят, после я записываю их в файл Excel. Не могу записать каждое найденное значение в отдельную строку, вообще не могу понять как это сделать.

Код:
from openpyxl import load_workbook

vocabulary = ['[main] D [a] New route: Route(code=']
wb = load_workbook(filename='test.xlsx')
ws = wb['Лист1']
f = open('2.txt', 'r', encoding='UTF-8' )
for line in f.readlines():
    if vocabulary[0] in line:
        for r in range(0, 10):
          ws.cell(row=r+1,column=1).value=line[:19]
          wb.save('test.xlsx')
AleksandrB00 вне форума Ответить с цитированием
Старый 07.06.2022, 13:06   #2
AleksandrB00
Пользователь
 
Регистрация: 30.05.2022
Сообщений: 37
По умолчанию

Удалось нормально записать первое значение в столбец А, теперь надо второе значение записать в столбец В.

Код:
from openpyxl import load_workbook

vocabulary = ['[main] D [a] New route: Route(code=']
wb = load_workbook(filename='test.xlsx')
ws = wb['Лист1']
f = open('2.txt', 'r', encoding='UTF-8' )
for line in f.readlines():
    if vocabulary[0] in line:
        for row in range(1):
          ws.append([line[:19]]) #это первое значение, записывается в столбец А
        for row in range(1):
          ws.append([line[line.find("г"):line.find(", tar")]])  #это значение надо записать в столбец В, но оно пишется в А
          wb.save('test.xlsx')
AleksandrB00 вне форума Ответить с цитированием
Старый 08.06.2022, 15:13   #3
Ципихович Эндрю
Старожил
 
Регистрация: 24.01.2011
Сообщений: 3,040
По умолчанию

Цитата:
Сообщение от AleksandrB00 Посмотреть сообщение
for row in range(1):
это что имелось ввиду, цикл по чему идёт своими шагами?
а разве во втором случае будет не
Код:
for row in range(2):
?
Ципихович Эндрю вне форума Ответить с цитированием
Старый 08.06.2022, 15:24   #4
AleksandrB00
Пользователь
 
Регистрация: 30.05.2022
Сообщений: 37
По умолчанию

Нет, заполнение происходит с первого столбца. Range имеет следующий вид range(start, stop, step), если записать range(2) то будет заполнен первый столбец начиная с 3 строки. А надо чтоб запись происходила во второй столбец начиная со второй строки.
AleksandrB00 вне форума Ответить с цитированием
Старый 08.06.2022, 15:33   #5
Ципихович Эндрю
Старожил
 
Регистрация: 24.01.2011
Сообщений: 3,040
По умолчанию

так почему Вы называете "в столбец" если речь идёт про ячейку?
Ципихович Эндрю вне форума Ответить с цитированием
Старый 08.06.2022, 16:14   #6
AleksandrB00
Пользователь
 
Регистрация: 30.05.2022
Сообщений: 37
По умолчанию

Потому что запись идёт циклом, я не знаю сколько строк данных мне придёт из лог файла, поэтому рассматриваю запись в столбец, а не в отдельно взятую ячейку
AleksandrB00 вне форума Ответить с цитированием
Старый 08.06.2022, 16:19   #7
Ципихович Эндрю
Старожил
 
Регистрация: 24.01.2011
Сообщений: 3,040
По умолчанию

так может определиться сколько нужного пришло и писать по факту?
Ципихович Эндрю вне форума Ответить с цитированием
Старый 08.06.2022, 16:23   #8
AleksandrB00
Пользователь
 
Регистрация: 30.05.2022
Сообщений: 37
По умолчанию

Если можете описать описать как это сделать в рамках работы с openpyxl буду признателен, такой вариант не рассматривал, так как вариант с циклом кажется более простым.
AleksandrB00 вне форума Ответить с цитированием
Старый 08.06.2022, 16:44   #9
Ципихович Эндрю
Старожил
 
Регистрация: 24.01.2011
Сообщений: 3,040
По умолчанию

так вы же недавно сами выкладывали код:
Код:
from openpyxl import load_workbook, Workbook
f = '1.xlsx'
wb = load_workbook(f)  # Файл с которым работаем
ws = wb['Лист1']  # Имя листа с которым работаем или определяем лист по номеру: ws = wb.worksheets[0]
ws['A2'] = '123456'  # Записываем в в эту же ячейку новое значение
wb.save(f)
что сложного в цикле менять ячейку на +1?
Ципихович Эндрю вне форума Ответить с цитированием
Старый 08.06.2022, 16:53   #10
AleksandrB00
Пользователь
 
Регистрация: 30.05.2022
Сообщений: 37
По умолчанию

сложного нет ничего, просто вы не можете прибавить 1 к ws['B1'], а если привязать всё это к строкам и задать номер столбца выходит ошибка ValueError: Row numbers must be between 1 and 1048576
AleksandrB00 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сравнение двух столбцов Excel и вывод на другой лист общих значений - MS Excel MupoH4uk1989 Microsoft Office Excel 2 09.04.2018 07:48
Макрос для Excel с циклом перебора страниц silhouette69 Фриланс 4 26.04.2015 09:28
Запись значений в таблицу Scorpuha БД в Delphi 25 14.11.2013 16:55
Запись из ListBox в .txt циклом (Delphi7) Frost56 Общие вопросы Delphi 3 09.03.2013 11:17
Excel с циклом Alkifr Помощь студентам 1 30.10.2010 08:38