Благодарю за приятную подачу! Складывается ощущение тепла и уюта, поэтому хочется смотреть другие видео :)) У меня вопрос: я хочу задеплоить бота на сервер. Подскажите, пожалуйста, какой путь в переменной xlsx_path мне стоит указать? Очень надеюсь на вашу помощь, так как долго не могу сообразить, как мне это сделать🙏
За теплые слова спасибо, приятно ;) В видосе xlsx выкладывается в корень проекта и все должно работать в тч и на сервере (ну правда лучше ос зависимый сепаратор не использовать, а брать os.path.join например). Если вы хотите выложить таблицу в папку вне проекта, то нужно использовать абсолютный путь (/home/web/x.xlsx или c:\tmp\x.xlsx). Также рекомендую полистать например это stackoverflow.com/questions/25389095/python-get-path-of-root-project-structure
@@AzzraelCode благодарю за ответ:)) Я сделал точно так же, как показано в видео, задеплоил на heroku и во view logs выдает ошибку: OSError: [Errno 30] Read-only file system. Если есть такая возможность, подскажите, пожалуйста, что в этом контексте означает ошибка и куда направить внимание?
Я оооочень давно не работал с Heroku. Но, насколько я помню, для root скриптов в Heroku на запись доступна только ./tmp. Т.е. писать даже в папку с проектом нельзя. Соотв. попробуйте указать путь ./tmp/x.xlsx
@@AzzraelCode От души благодарю вас!)))) Наконец-то разобрался и код работает!!! :))) PS код заработал 3 минуты назад, поэтому я счастлив :)))))) Спасибо большое!))
Не получается что-то(( Есть код и очень много строк. По выполнении кода и сохранении в Эксель, выходит ошибка, что превышено максимальное количество строк, поэтому пытался разбить сохранение данных не на один лист, а на несколько. Не получается:(
Не, не, не, это надо, спасибо, таким образом я понимаю как смотреть на библиотеку с другой точки зрения, а еще когда сам знал и смотришь пояснение, это прочнее откладывается в голове, спасибо!
Не понял вопрос. Что значит данные с "первой страницы"? С какой первой страницы? У вас просто массив двумерных данных, вы складываете их в таблицу. Проблемы не вижу.
Добрый день! А как на один лист добавить несколько pd.Series, я так и не нашел информации.И нужна подсказка: мне нужно , чтобы на экран выводилась gui в виде таблицы, которую пользователь заполнял (tkinder явно не походит, но думаю в районе sql искать), и дальше эта таблица фигурировала уже как pd.Series.Спасибо
Серия - это список, те в представлении таблицы - строка или колонка. Датафрейм собирается из серий в нужном порядке и пишется в таблицу. При чтении получаете из таблицы датафрейм, а из дф выбираете нужную серию.
Очень классный формат когда разбирается что может пойти не так! Вопрос: при перезаписи можно ли сохранить формат ячеек, как календарный день, или валюты, например доларный?
В видео несколько вариантов для перезаписи. Если использовать openpyxl напрямую, т.е. по схеме: wb = ox.load_workbook(path) wb[sheet_name].cell(startrow + ir, starcol + ic).value = _df.iloc[ir][ic] то да, формат сохраняется.
Почти ничего не понятно для новичка (из-за скорости пояснений и перепрыгиваний явно знающего человека), но интересно )) Одного не увидел - можно ли при сохранении таблицы в эксель делать форматирование столбцов (центрирование текста, например и автоматическую ширину по тексту делать)? У меня, после csv формата таблица выглядит печально ))
Немного про стилизацию с помощью OpenPyXl у меня есть в ролике th-cam.com/video/dn3Oi7oaMT4/w-d-xo.html Можно что-то найти здесь stackoverflow.com/questions/26671581/horizontal-text-alignment-in-openpyxl -- Ну а что касается скорости, к счастью на TH-cam, есть кнопка кот позволяет адаптировать скорость контента. Сам англоязычные ролики бывает смотрю на 0.75-0.5, нормально заходит.
Почему не удается открыть созданный таким способом файл в экселе? Пишет не удается открыть т.к. формат или расширение недопустимы, расширение указано верно.
wb[sheet_name].cell(startrow + ir, starcol + ic).value = _df.iloc[ir][ic] AttributeError: 'MergedCell' object attribute 'value' is read-only Что то меня сломало.... Возможно, недостаточно внимательно смотрел ролик. Если подскажите, буду благодарен)
По телу ошибки неплохо гуглятся варианты ;) Вот например stackoverflow.com/questions/59663517/openpyxl-attributeerror-mergedcell-object-attribute-value-is-read-only/
В примере в видео, в таблице, нет MergedCell, в вашей таблице, судя по тексту ошибки, есть и вы пытаетесь в записать в ячейку в этом диапазоне. По ссылке на SO есть пример почему это не срабатывает, вылетает ошибка и что с этим делать. Если почти дословно перевести топовый ответ, то вам нужно писать в top-left ячейку объединенного диапазона. Т.е.: - если у вас объединены B2:D2, то писать надо в B2. Е вы попробуете писать в C2 или в D2, то получите ошибку 'MergedCell' object attribute 'value' is read-only. - если B2: Z33, то писать тоже нужно в B2
Помогите пожалуйста, я недавно начал изучать программирование, пытаюсь разобраться. Столкнулся с проблемой: def kal4(freq_info, level_info, sensor2_info, xlsx_path: str, kal4, startcol: int=1, startrow: int=1, sheet_name : str="Калибровка 4"): kal4 = pd.DataFrame({'Время':[today.strftime("%d/%m/%Y-%H:%M.%S")], 'Частота': [freq_info[0:10]], 'P генератора': [level_info[0:6]], 'Датчик 2': [sensor2_info[0:6]]}) print(kal4) xlsx_path = os.path.dirname(__file__) + r" esults.xlsx" wb = ox.load_workbook(xlsx_path) # открываем файл for ir in range(0, len(kal4.iloc[ir])): # перебираем строки for ic in range(0, len(kal4[ir])): # перебираю данные из датафрейма wb['Калибровка 4'].cell(startrow + ir, startcol + ic).value = kal4.iloc[ir][ic] # записываю данные в строки таблицы wb.save(xlsx_path) Взял ваш пример, но у меня не определяются ir ic. Пишет ошибку: UnboundLocalError: local variable 'ir' referenced before assignment. Мне нужно чтобы в мой файлик excel сохранялись и потом добавлялись значения при каждом замере калибровки, а главное чтобы предыдущие данные не стирались. Всего предполагается, что в excel-файле будет 6 разных листов. Изначально вообще сделал через pandas таким способом: old_kal4 = pd.read_excel('kal4.xlsx', sheet_name="Калибровка 4") frames = [old_kal4, kal4] result = pd.concat(frames) result.to_excel("kal4.xlsx", writer, sheet_name="Калибровка 4", index=False) И всё работало, предыдущие данные сохранялись и добавлялись новые. Но у меня получилось сделать только в разных excel файлах в связи с чем их у меня 6 штук, но я хочу сделать в одном. Помогите пожалуйста:)
@@AzzraelCodeЯ просто не понимаю как правильно определить ir и ic. Я думал уже, что эти переменные определяются, когда не датафрейм записываю, а значения из какого-нибудь csv файла? Можете подсказать как правильно должна выглядеть функция?
Для начала, хочется сказать "Спасибо", за такую подачу. Большинство роликов сводится к написанию кода в ролике, из которого новичку все равно, ни чего не понятно. Максимум, что можно сделать, это бездумно переписать. А тут, при минимуме написания кода, максимум информации, что для чего нужно и как это работает . А так же, хочу задать вопрос....Есть форма отчета в XL. C рамочками, формулами и прочим, туда записываются данные при помощи OpenPyXL. Т.к. количество данных может отличаться, форма сделана с запасом строк. После всего, хочется удалить лишние строки, но известные мне способы, не удаляют строку, как это делает XL, а удаляют данные из строки и передвигают остальные данные вверх. В результате, уезжают формулы и рамочки. Если знаете, как этого избежать, укажите хотя бы направление поиска или какими инструментами это можно делать. Дальше я сам))) Заранее спасибо. Если не удобно отвечать здесь, можно кинуть ответ сюда vk.com/id804309
@@AzzraelCode не уверен, что понял..... допустим, исходная таблица в 10 строк, под ней строка с формулами. Заполняются 5 строк в таблице, остальные нужно удалить(что бы было красиво). Если это делать руками в XL ( через "удалить строку") все ок, формулы изменяются корректно. Если удалять при помощи Python, то формулы в XL сохраняются без изменений, но они сместились и стали работать не на те ячейки и диапазоны ячеек. Ну и рамочки всякие, то же сдвинулись, как будто из листа бумаги вырезали середину, а потом скеляли.
Спасибо Автору azzrael.ru/spasibo
Спасибо тебе друг! Измучался я с директорией для сохранения. Это пролило свет на мои ошибки.
Все очень понятно, разложили по полочкам. Спасибо за урок!
Много пересмотрел всего по теме, ваша подача самая адекватная! Респект👍
Оу! Это самое полезное видео за последнюю неделю! И я не шучу ))
вы лучшие
Благодарю за приятную подачу! Складывается ощущение тепла и уюта, поэтому хочется смотреть другие видео :))
У меня вопрос: я хочу задеплоить бота на сервер. Подскажите, пожалуйста, какой путь в переменной xlsx_path мне стоит указать?
Очень надеюсь на вашу помощь, так как долго не могу сообразить, как мне это сделать🙏
За теплые слова спасибо, приятно ;)
В видосе xlsx выкладывается в корень проекта и все должно работать в тч и на сервере (ну правда лучше ос зависимый сепаратор не использовать, а брать os.path.join например). Если вы хотите выложить таблицу в папку вне проекта, то нужно использовать абсолютный путь (/home/web/x.xlsx или c:\tmp\x.xlsx).
Также рекомендую полистать например это stackoverflow.com/questions/25389095/python-get-path-of-root-project-structure
@@AzzraelCode благодарю за ответ:))
Я сделал точно так же, как показано в видео, задеплоил на heroku и во view logs выдает ошибку: OSError: [Errno 30] Read-only file system. Если есть такая возможность, подскажите, пожалуйста, что в этом контексте означает ошибка и куда направить внимание?
Я оооочень давно не работал с Heroku. Но, насколько я помню, для root скриптов в Heroku на запись доступна только ./tmp. Т.е. писать даже в папку с проектом нельзя. Соотв. попробуйте указать путь ./tmp/x.xlsx
@@AzzraelCode От души благодарю вас!)))) Наконец-то разобрался и код работает!!! :)))
PS код заработал 3 минуты назад, поэтому я счастлив :)))))) Спасибо большое!))
Не получается что-то(( Есть код и очень много строк. По выполнении кода и сохранении в Эксель, выходит ошибка, что превышено максимальное количество строк, поэтому пытался разбить сохранение данных не на один лист, а на несколько. Не получается:(
Местами я заглядываю внутрь Pandas, это не то что нужно знать обязательно, можно перематывать, но мне иногда было интересно почему оно так работает...
Не, не, не, это надо, спасибо, таким образом я понимаю как смотреть на библиотеку с другой точки зрения, а еще когда сам знал и смотришь пояснение, это прочнее откладывается в голове, спасибо!
Спасибо за ролик и объяснения!
У меня Append без указания engine (engine="openpyxl") не работает
Ваши комментарии помогли посмотреть причины.
✌💪❤
Добрый день, а где найти видео про датафрейм?Хотел бы узнать, откуда в этом экселе уже появился этот датафрейм
В самом начала видео видно что датафрейм считан из csv файла записан с помощью метода Pandas df.to_excel.
Подскажите, плз, почему при записи данных в excel, сохраняются данные только с первой страницы.
path = 'business.xlsx'
df = pd.DataFrame(items_list)
with ExcelWriter(path, engine='openpyxl', mode='a' if os.path.exists(path) else 'w') as writer:
df.to_excel(writer, sheet_name='New', index=False)
Не понял вопрос. Что значит данные с "первой страницы"? С какой первой страницы? У вас просто массив двумерных данных, вы складываете их в таблицу. Проблемы не вижу.
Добрый день! А как на один лист добавить несколько pd.Series, я так и не нашел информации.И нужна подсказка: мне нужно , чтобы на экран выводилась gui в виде таблицы, которую пользователь заполнял (tkinder явно не походит, но думаю в районе sql искать), и дальше эта таблица фигурировала уже как pd.Series.Спасибо
Серия - это список, те в представлении таблицы - строка или колонка.
Датафрейм собирается из серий в нужном порядке и пишется в таблицу.
При чтении получаете из таблицы датафрейм, а из дф выбираете нужную серию.
Очень классный формат когда разбирается что может пойти не так! Вопрос: при перезаписи можно ли сохранить формат ячеек, как календарный день, или валюты, например доларный?
В видео несколько вариантов для перезаписи. Если использовать openpyxl напрямую, т.е. по схеме:
wb = ox.load_workbook(path)
wb[sheet_name].cell(startrow + ir, starcol + ic).value = _df.iloc[ir][ic]
то да, формат сохраняется.
Я так понимаю, что возможности дозаписать данные в конкретные столбцы силами только ExcelWriter не получится?
Именно ExcelWriter на данный момент нет. Но можно же использовать OpenPyXl.
@@AzzraelCode это да
Почему? Читаем данные, дополняем, перезаписываем
Почти ничего не понятно для новичка (из-за скорости пояснений и перепрыгиваний явно знающего человека), но интересно )) Одного не увидел - можно ли при сохранении таблицы в эксель делать форматирование столбцов (центрирование текста, например и автоматическую ширину по тексту делать)? У меня, после csv формата таблица выглядит печально ))
Немного про стилизацию с помощью OpenPyXl у меня есть в ролике
th-cam.com/video/dn3Oi7oaMT4/w-d-xo.html
Можно что-то найти здесь
stackoverflow.com/questions/26671581/horizontal-text-alignment-in-openpyxl
--
Ну а что касается скорости, к счастью на TH-cam, есть кнопка кот позволяет адаптировать скорость контента. Сам англоязычные ролики бывает смотрю на 0.75-0.5, нормально заходит.
Почему не удается открыть созданный таким способом файл в экселе? Пишет не удается открыть т.к. формат или расширение недопустимы, расширение указано верно.
В видео как минимум 3 способа. Сделайте пастебин/SO вашего кода.
А в контректную ячейку как добавть данные?
Просто формируете двумерный массив с данными в нужной ячейки а потом пишете этот массив в файл.
@@AzzraelCode можно пример увидеть?
А как в существующий файл добавить лист с текущей датой в названии? Т.е. каждый день - новый лист
Например так
title = date.today().strftime("%d/%m/%Y")
wb.create_sheet(title)
openpyxl.readthedocs.io/en/latest/tutorial.html
Как отсортировать файл Эксель , чтобы в столбцах было всё по порядку
wb[sheet_name].cell(startrow + ir, starcol + ic).value = _df.iloc[ir][ic]
AttributeError: 'MergedCell' object attribute 'value' is read-only
Что то меня сломало.... Возможно, недостаточно внимательно смотрел ролик. Если подскажите, буду благодарен)
По телу ошибки неплохо гуглятся варианты ;)
Вот например stackoverflow.com/questions/59663517/openpyxl-attributeerror-mergedcell-object-attribute-value-is-read-only/
@@AzzraelCode я гуглил, нашел в том числе и этот форум, ничего не понял, если честно. Почему ровно тот же код, что из видео может не работать?
В примере в видео, в таблице, нет MergedCell, в вашей таблице, судя по тексту ошибки, есть и вы пытаетесь в записать в ячейку в этом диапазоне. По ссылке на SO есть пример почему это не срабатывает, вылетает ошибка и что с этим делать.
Если почти дословно перевести топовый ответ, то вам нужно писать в top-left ячейку объединенного диапазона. Т.е.:
- если у вас объединены B2:D2, то писать надо в B2. Е вы попробуете писать в C2 или в D2, то получите ошибку 'MergedCell' object attribute 'value' is read-only.
- если B2: Z33, то писать тоже нужно в B2
Как вы посмотрели функцию toExcel?
Это стандартный функционал почти любой IDE. У JetBrains это вот www.jetbrains.com/help/rider/Navigation_and_Search__Go_to_Declaration.html
Зачем выкладывать видео без ссылки на полный код. Типа смотрите как могу!
Уговорили, не буду выкладывать))
Что еще за 'фальш')))))
Помогите пожалуйста, я недавно начал изучать программирование, пытаюсь разобраться. Столкнулся с проблемой:
def kal4(freq_info, level_info, sensor2_info, xlsx_path: str, kal4, startcol: int=1, startrow: int=1, sheet_name : str="Калибровка 4"):
kal4 = pd.DataFrame({'Время':[today.strftime("%d/%m/%Y-%H:%M.%S")],
'Частота': [freq_info[0:10]],
'P генератора': [level_info[0:6]],
'Датчик 2': [sensor2_info[0:6]]})
print(kal4)
xlsx_path = os.path.dirname(__file__) + r"
esults.xlsx"
wb = ox.load_workbook(xlsx_path) # открываем файл
for ir in range(0, len(kal4.iloc[ir])): # перебираем строки
for ic in range(0, len(kal4[ir])): # перебираю данные из датафрейма
wb['Калибровка 4'].cell(startrow + ir, startcol + ic).value = kal4.iloc[ir][ic] # записываю данные в строки таблицы
wb.save(xlsx_path)
Взял ваш пример, но у меня не определяются ir ic. Пишет ошибку: UnboundLocalError: local variable 'ir' referenced before assignment.
Мне нужно чтобы в мой файлик excel сохранялись и потом добавлялись значения при каждом замере калибровки, а главное чтобы предыдущие данные не стирались. Всего предполагается, что в excel-файле будет 6 разных листов.
Изначально вообще сделал через pandas таким способом:
old_kal4 = pd.read_excel('kal4.xlsx', sheet_name="Калибровка 4")
frames = [old_kal4, kal4]
result = pd.concat(frames)
result.to_excel("kal4.xlsx", writer, sheet_name="Калибровка 4", index=False)
И всё работало, предыдущие данные сохранялись и добавлялись новые. Но у меня получилось сделать только в разных excel файлах в связи с чем их у меня 6 штук, но я хочу сделать в одном. Помогите пожалуйста:)
У вас тут ошибка for ir in range(0, len(kal4.iloc[ir])): вы используете ir в iloc до определения ir
@@AzzraelCodeЯ просто не понимаю как правильно определить ir и ic. Я думал уже, что эти переменные определяются, когда не датафрейм записываю, а значения из какого-нибудь csv файла? Можете подсказать как правильно должна выглядеть функция?
@@AzzraelCode пересмотрел код, действительно накосячил в строке:) Спасибо за видос!
Для начала, хочется сказать "Спасибо", за такую подачу. Большинство роликов сводится к написанию кода в ролике, из которого новичку все равно, ни чего не понятно. Максимум, что можно сделать, это бездумно переписать. А тут, при минимуме написания кода, максимум информации, что для чего нужно и как это работает .
А так же, хочу задать вопрос....Есть форма отчета в XL. C рамочками, формулами и прочим, туда записываются данные при помощи OpenPyXL. Т.к. количество данных может отличаться, форма сделана с запасом строк. После всего, хочется удалить лишние строки, но известные мне способы, не удаляют строку, как это делает XL, а удаляют данные из строки и передвигают остальные данные вверх. В результате, уезжают формулы и рамочки.
Если знаете, как этого избежать, укажите хотя бы направление поиска или какими инструментами это можно делать. Дальше я сам))) Заранее спасибо. Если не удобно отвечать здесь, можно кинуть ответ сюда vk.com/id804309
Что если писать в эти ячейки пустой текст?
@@AzzraelCode не уверен, что понял.....
допустим, исходная таблица в 10 строк, под ней строка с формулами. Заполняются 5 строк в таблице, остальные нужно удалить(что бы было красиво). Если это делать руками в XL ( через "удалить строку") все ок, формулы изменяются корректно. Если удалять при помощи Python, то формулы в XL сохраняются без изменений, но они сместились и стали работать не на те ячейки и диапазоны ячеек. Ну и рамочки всякие, то же сдвинулись, как будто из листа бумаги вырезали середину, а потом скеляли.
т.е. получается, что нужен инструмент, который будет эмитировать удаление средствами XL ("удалить строку")