Найти - Пользователи
Полная версия: Python + Excel + win32com или pyExcelerator
Начало » Автоматизация бизнеса » Python + Excel + win32com или pyExcelerator
1 2 3
maxim.tashkinov
Ситуация: необходимо работать с файлами 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. Но совершенно неизвестно, как делать то, что мне нужно, и гугль плохой помошник - документации пока в природе нет, как я вижу.
pyuser
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
PooH
http://oreilly.com/catalog/pythonwin32/chapter/ch12.html, глава Early-Bound Automation, сгенери файл для раннего связывания и смотри интерфейс excel по нему. Установи справку по VBA в Excel. Там его объектная модель хорошо расписана.
maxim.tashkinov
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 в экселе ещё не нашёл пока)
estin
maxim.tashkinov, тебе надо создавать новый документ? или редактировать существующий, не совсем понятно…

Просто для отчетов я использую такой подход:
1. Создаю шаблон документа так как он должен выглядеть.
2. Сохраняю в html
3. Заполняю html шаблон данными
4. Сохраняю результат как .xls
Viper
Думаю MSDN, как справочник по Excel, может помочь ;).
maxim.tashkinov
estin
maxim.tashkinov, тебе надо создавать новый документ? или редактировать существующий, не совсем понятно…

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

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

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

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

Вот например…
xlApp.ActiveSheet.Range(“A2:I2”).Borders(xlDiagonalDown).LineStyle = xlNone
maxim.tashkinov
Хотя… Они ж константы :) понял, придётся подбирать.. Врядли они выходят за пределы 5-15-20
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB