Уведомления

Группа в Telegram: @pythonsu

#1 Июль 7, 2008 23:01:18

maxim.tashkinov
От:
Зарегистрирован: 2008-07-07
Сообщения: 20
Репутация: +  0  -
Профиль   Отправить e-mail  

Python + Excel + win32com или pyExcelerator

Ситуация: необходимо работать с файлами Excel-я из проограммы на питоне,т.е. генерировать таблицы. Причем не только в виде забивки данных (это легко), но и установки “хитрых” атрибутов ячейкам, как границы ячеек (тоже получаются, но не 100%, не в них сейчас проблема).

Проблема в задании фона ячейки, например.
или как выделить символ в строке и работать с его свойствами? Н2О красиво написать надо, может ещё какие формулы объявятся.

Интерфейс такой, что узнать с помощью dir(), чем я могу управлять - невозможно, практически приходится писать вслепую. Чуть чуть помогают макросы экселя, но в них сложно проследить иерархию объектов. Например, pattern по всей видимости определяет как раз свойства ячеек.

Например



xlApp.ActiveSheet.Range(“C8:C19”).Pattern.ColorIndex = 12
xlApp.ActiveSheet.Range(“C8:C19”).Pattern.Solid = True


вызывает
AttributeError: Range.Pattern

есть вариант работы с pyExcelerator. Но совершенно неизвестно, как делать то, что мне нужно, и гугль плохой помошник - документации пока в природе нет, как я вижу.



Офлайн

#2 Июль 8, 2008 02:55:51

pyuser
От:
Зарегистрирован: 2007-05-13
Сообщения: 658
Репутация: +  36  -
Профиль   Отправить e-mail  

Python + Excel + win32com или pyExcelerator

maxim.tashkinov
Например
xlApp.ActiveSheet.Range(“C8:C19”).Pattern.ColorIndex = 12
xlApp.ActiveSheet.Range(“C8:C19”).Pattern.Solid = True

вызывает
AttributeError: Range.Pattern
Ну это и не удивительно потому как нет у объекта Range свойства Pattern, зато есть свойство Interior, которое в свою очередь имеет свойство Pattern
ЗЫ. очень полезно иногда смотреть на макросы записанные самой Excel



Офлайн

#3 Июль 8, 2008 05:53:27

PooH
От:
Зарегистрирован: 2006-12-05
Сообщения: 1948
Репутация: +  72  -
Профиль   Отправить e-mail  

Python + Excel + win32com или pyExcelerator

http://oreilly.com/catalog/pythonwin32/chapter/ch12.html, глава Early-Bound Automation, сгенери файл для раннего связывания и смотри интерфейс excel по нему. Установи справку по VBA в Excel. Там его объектная модель хорошо расписана.



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

Офлайн

#4 Июль 8, 2008 10:33:18

maxim.tashkinov
От:
Зарегистрирован: 2008-07-07
Сообщения: 20
Репутация: +  0  -
Профиль   Отправить e-mail  

Python + Excel + win32com или pyExcelerator

pyuser
Ну это и не удивительно потому как нет у объекта Range свойства Pattern, зато есть свойство Interior, которое в свою очередь имеет свойство Pattern
ЗЫ. очень полезно иногда смотреть на макросы записанные самой Excel
Спасибо :) почему-то так сделать мне не пришло в голову (про Interior).
Excel-евские макросы смотрю, но вот не всегда получается врубиться сразу.

Как например выделить символ в ячейче и задать его свойства?
эксель подсказывает сделать так:
#ActiveCell.Characters(Start:=1, Length:=1).Font.Subscript = True

xlApp.ActiveCell.Characters(1,1).Font.Subscript = True
Или пробую так:
xlApp.ActiveSheet.Range(“D3”).Characters(1, 1).Font.Subscript = True

посылает вот таким образом:
return self._get_good_object_(self._oleobj_.Invoke(*allArgs),self._olerepr_.defaultDispatchName,None)
pywintypes.com_error: (-2147352573, ‘\xd7\xeb\xe5\xed \xe3\xf0\xf3\xef\xef\xfb \xed\xe5 \xed\xe0\xe9\xe4\xe5\xed.’, None, None)

Что я не учёл?

(К сожалению справку по VB в экселе ещё не нашёл пока)



Отредактировано (Июль 8, 2008 12:47:59)

Офлайн

#5 Июль 8, 2008 11:33:09

estin
От:
Зарегистрирован: 2008-05-31
Сообщения: 19
Репутация: +  0  -
Профиль   Отправить e-mail  

Python + Excel + win32com или pyExcelerator

maxim.tashkinov, тебе надо создавать новый документ? или редактировать существующий, не совсем понятно…

Просто для отчетов я использую такой подход:
1. Создаю шаблон документа так как он должен выглядеть.
2. Сохраняю в html
3. Заполняю html шаблон данными
4. Сохраняю результат как .xls



Офлайн

#6 Июль 8, 2008 12:04:12

Viper
От:
Зарегистрирован: 2006-11-08
Сообщения: 137
Репутация: +  0  -
Профиль   Отправить e-mail  

Python + Excel + win32com или pyExcelerator

Думаю MSDN, как справочник по Excel, может помочь ;).



Офлайн

#7 Июль 8, 2008 12:51:25

maxim.tashkinov
От:
Зарегистрирован: 2008-07-07
Сообщения: 20
Репутация: +  0  -
Профиль   Отправить e-mail  

Python + Excel + win32com или pyExcelerator

estin
maxim.tashkinov, тебе надо создавать новый документ? или редактировать существующий, не совсем понятно…

Просто для отчетов я использую такой подход:
1. Создаю шаблон документа так как он должен выглядеть.
2. Сохраняю в html
3. Заполняю html шаблон данными
4. Сохраняю результат как .xls
Нужен новый документ, поскольку шаблон его будет задаваться пользоватлем…

Сохранение html как .xls - прямо после генерации html-а?



Офлайн

#8 Июль 8, 2008 13:14:29

estin
От:
Зарегистрирован: 2008-05-31
Сообщения: 19
Репутация: +  0  -
Профиль   Отправить e-mail  

Python + Excel + win32com или pyExcelerator

Да.

п2. Когда создал необходимый вид документа в Excel сохраняю его в html
п3. Использую полученный .html как шаблон “шаблонизатора”, т.е. указываю что куда надо вставить
п4. Шаблонизатор + шаблон + данные = заполненый .html код. Записываю полученный результат в файл report.xls (на самом деле “внутри” там html, Excel все прикрасно понимает)



Офлайн

#9 Июль 9, 2008 12:13:15

maxim.tashkinov
От:
Зарегистрирован: 2008-07-07
Сообщения: 20
Репутация: +  0  -
Профиль   Отправить e-mail  

Python + Excel + win32com или pyExcelerator

А как задавать константы, которые в макросах экселя имеют вид xlNone, xlDiagonalDown например, и прочее..?

Где они определены? Мне ж их значения надо присваивать чему-нибудь…

Вот например…
xlApp.ActiveSheet.Range(“A2:I2”).Borders(xlDiagonalDown).LineStyle = xlNone



Офлайн

#10 Июль 9, 2008 12:32:20

maxim.tashkinov
От:
Зарегистрирован: 2008-07-07
Сообщения: 20
Репутация: +  0  -
Профиль   Отправить e-mail  

Python + Excel + win32com или pyExcelerator

Хотя… Они ж константы :) понял, придётся подбирать.. Врядли они выходят за пределы 5-15-20



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version