Уведомления

Группа в Telegram: @pythonsu

#1 Дек. 10, 2013 14:56:32

Razor
Зарегистрирован: 2012-09-11
Сообщения: 127
Репутация: +  2  -
Профиль   Отправить e-mail  

Создание n числа переменных

Доброго времени суток. Возникла проблема с библиотекой XlsxWriter. Точнее, не совсем с ней. К примеру, имеем подобный код:

import xlsxwriter
workbook  = xlsxwriter.Workbook('filename.xlsx')
worksheet = workbook.add_worksheet()
worksheet.write(0, 0, 'Hello Excel')

Но предположим, что мне нужно создать N-ое количество листов для записи:

worksheet1 = workbook.add_worksheet()
worksheet2 = workbook.add_worksheet()
worksheet3 = workbook.add_worksheet()
worksheet4 = workbook.add_worksheet()
...
worksheetN = workbook.add_worksheet()

Возможно, я невнимательно прочел докуметацию, но как создать N-ое количество листов (или элементов) средствами Python'а?

Средства exec, eval, compile, выглядят весьма топорно и увеличивают код в разы.

Спасибо!

Офлайн

#2 Дек. 10, 2013 15:09:01

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Создание n числа переменных

Ну а циклы на что?

for _ in xrange(100):
    sheet = workbook.add_worksheet()
    sheet.write(0, 0, 'Hello Excel')



Отредактировано FishHook (Дек. 10, 2013 15:10:21)

Офлайн

#3 Дек. 10, 2013 15:15:10

Razor
Зарегистрирован: 2012-09-11
Сообщения: 127
Репутация: +  2  -
Профиль   Отправить e-mail  

Создание n числа переменных

FishHook
Ну а циклы на что?

Вся прелесть в том, что код и так в цикле, но вместо создания нового листа, он перезаписывает старый. В итоге, имеем последний записанный лист.

Офлайн

#4 Дек. 10, 2013 15:18:16

Budulianin
От:
Зарегистрирован: 2011-10-18
Сообщения: 1218
Репутация: +  33  -
Профиль   Отправить e-mail  

Создание n числа переменных

Razor
как создать N-ое количество листов (или элементов) средствами Python'а?

for i in range(10):
     locals()['worksheet{}'.format(i)] = 'your worksheet'

Лучше пользоваться openpyxl, так как , он кроме писать xlsx/xlsm, ещё и читать их умеет



Офлайн

#5 Дек. 10, 2013 15:31:51

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Создание n числа переменных

Razor
Вся прелесть в том, что код и так в цикле, но вместо создания нового листа, он перезаписывает старый. В итоге, имеем последний записанный лист.
Ерунда какая-то,
ну ладно, добавляй листы в список,
плодить переменные это крайняя стадия дебилизма.



Офлайн

#6 Дек. 10, 2013 15:33:36

Razor
Зарегистрирован: 2012-09-11
Сообщения: 127
Репутация: +  2  -
Профиль   Отправить e-mail  

Создание n числа переменных

Budulianin
Лучше пользоваться openpyxl, так как , он кроме писать xlsx/xlsm, ещё и читать их умеет.

for i in range(10):
    workbook = xlsxwriter.Workbook('Total.xlsx') 
    locals()['worksheet{}'.format(book)] = '{}'.format(i.string)
    """ Это тоже придется помечать locals """
    worksheet.set_column('A:A', 7) # Ширина строки A
    worksheet.set_column('B:B', 70) # Ширина B
    worksheet.write('B1', i.string)

Ужасно, не правда ли?

В целом, библиотека показалась удобной, но вот такое недочеты меня убивают. Что ж, попробую освоить openpyxl - на перспективу. )

Офлайн

#7 Дек. 10, 2013 15:36:27

Razor
Зарегистрирован: 2012-09-11
Сообщения: 127
Репутация: +  2  -
Профиль   Отправить e-mail  

Создание n числа переменных

FishHook
Razor
Вся прелесть в том, что код и так в цикле, но вместо создания нового листа, он перезаписывает старый. В итоге, имеем последний записанный лист.
Ерунда какая-то,
ну ладно, добавляй листы в список,
плодить переменные это крайняя стадия дебилизма.

К сожалению, эти правила придуманы не мной. Чуть выше я предоставил код. Если вы считаете, что можете найти более изящное решения, избегая N-го количество переменных - подскажите. Я именно для этого тут и нахожусь: спрашиваю совета у более опытных программистов.

Офлайн

#8 Дек. 10, 2013 15:48:20

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Создание n числа переменных

Razor
можете найти более изящное решения, избегая N-го количество переменных
sheets = list()
for _ in xrange(100):
    sheets.add(workbook.add_worksheet())



Офлайн

#9 Дек. 10, 2013 16:00:15

Razor
Зарегистрирован: 2012-09-11
Сообщения: 127
Репутация: +  2  -
Профиль   Отправить e-mail  

Создание n числа переменных


FishHook
sheets = list()
for _ in xrange(100):
    sheets.add(workbook.add_worksheet())

Я правильно понял: list() - это список названия листов? Если да, то что за атрибут add?

Офлайн

#10 Дек. 10, 2013 16:08:51

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Создание n числа переменных

append, естественно.



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version