Уведомления

Группа в Telegram: @pythonsu

#1 Май 13, 2018 16:29:39

Alex_tut
Зарегистрирован: 2018-05-13
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Добавление записей в EXCEL через модуль xlsxwriter

Доброго дня!
Есть типовой код для создания НОВОГО файла и добавления НОВОГО листа в книгу EXCEL:

import xlsxwriter

workbook = xlsxwriter.Workbook('EXCEL_TEST_1.xlsx')
worksheet = workbook.add_worksheet('sheet_1')
worksheet.write(0,0,'Hello')
workbook.close()


Но как добавить запись в существующую книгу?
Пробовал вариант:
worksheet = workbook.worksheets('sheet_1') (без add - вместо workbook.add_worksheet('sheet_1')

Выводит ошибку:

TypeError: worksheets() takes 1 positional argument but 2 were given

Вроде бы как должно быть 2 аргумента для worksheets()

Порылся в документации, поискал в инете (и на форуме) - не нашёл ответа…

Офлайн

#2 Май 13, 2018 17:55:35

Alex_tut
Зарегистрирован: 2018-05-13
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Добавление записей в EXCEL через модуль xlsxwriter

Поюзал на форуме - через модуль import win32com.client как-то попроще и интуитивно понятнее работать:

#Импортируем библиотеку
import win32com.client

#Создаем COM объект
Excel = win32com.client.Dispatch(“Excel.Application”)

#Получаем доступ к активному листу EXCEL_TEST_1

wb=Excel.ActiveWorkbook

sheet = wb.ActiveSheet

#Запишем новое значение в ячейку A3 активного листа
sheet.Cells(3,1).value = ‘A3Value’

#Сохраним
wb.Save()

#Закроем файл
wb.Close()

#Закроем COM объект
Excel.Quit()

Офлайн

#3 Май 13, 2018 18:12:34

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  252  -
Профиль   Отправить e-mail  

Добавление записей в EXCEL через модуль xlsxwriter

Alex_tut
через модуль import win32com.client как-то попроще
только оно работает через com и поэтому раз в 100 медленнее. Значительные объемы не автоматизируешь. У нас через com вордовый документ минут 5 шкурился на задаче поиск замена.



Офлайн

#4 Май 13, 2018 18:21:15

Alex_tut
Зарегистрирован: 2018-05-13
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Добавление записей в EXCEL через модуль xlsxwriter

Если через import xlsxwriter, то надо менять:
workbook = xlsxwriter.Workbook('EXCEL_TEST_1.xlsx')
Это действие создаёт НОВУЮ книгу.
Если так:
workbook = .Workbook('EXCEL_TEST_1.xlsx') (без xlsxwrite)
то выдаёт ошибку:
NameError: name ‘Workbook’ is not defined




Офлайн

#5 Май 14, 2018 01:54:12

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9873
Репутация: +  853  -
Профиль   Отправить e-mail  

Добавление записей в EXCEL через модуль xlsxwriter

Можно и так получить листы - как список объектов
http://xlsxwriter.readthedocs.io/workbook.html#workbook-worksheets
И по имени листа получить лист
http://xlsxwriter.readthedocs.io/workbook.html#workbook-get-worksheet-by-name



Офлайн

#6 Май 19, 2018 12:26:57

Alex_tut
Зарегистрирован: 2018-05-13
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Добавление записей в EXCEL через модуль xlsxwriter

Я пробовал этот метод:
for worksheet in workbook.worksheets():
worksheet.write('A1', ‘Hello’)

Но дело в том, что, прежде чем воспользоваться workbook.worksheets()
надо обозначить workbook:
workbook = xlsxwriter.Workbook('EXCEL_TEST_1.xlsx')
А это обозначение создаёт НОВУЮ книгу!!! (Мне же нужно добавить запись в уже существующую).
Нужно каким-то другим способом обозначить книгу workbook.

Офлайн

#7 Май 19, 2018 14:33:30

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9873
Репутация: +  853  -
Профиль   Отправить e-mail  

Добавление записей в EXCEL через модуль xlsxwriter

Alex_tut
А это обозначение создаёт НОВУЮ книгу!!! (Мне же нужно добавить запись в уже существующую).
Как оказалось, это модуль такой, который даёт только создавать новые книги.
Можешь использовать модули openpyxl, xlwings.

Здесь написано
http://xlsxwriter.readthedocs.io/tutorial01.html
Note

XlsxWriter can only create new files. It cannot read or modify existing files.



Отредактировано py.user.next (Май 19, 2018 14:34:54)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version