Уведомления

Группа в Telegram: @pythonsu

#1 Апрель 22, 2015 15:31:21

Metallikus
Зарегистрирован: 2014-11-26
Сообщения: 39
Репутация: +  1  -
Профиль   Отправить e-mail  

Ширина столбцов при использовании ezodf

Кто-нибудь пытался реализовать экспорт данных в ods табличку с помощью ezodf? Мне бы хоть какую-нибудь информацию про то, как мне задать ширину столбца и высоту строки. Пытался сделать через стили:

doc1.inject_style("""<style:style style:name="hehehe" style:family="table-column"><style:table-column-properties fo:break-before="auto" style:column-width="45.47mm"/></style:style>"""
sheet.column_info(0).style_name="hehehe"
Эффект нулевой. Распаковал ods и перенёс полученный стиль из style.xml в content.xml в область между <office:automatic-styles> и </office:automatic-styles>, запаковал всё обратно - стиль применился. А с помощью ezodf никак нельзя стиль пихнуть именно в automatic-styles? Или, может быть, найдётся способ задавать width и height без использования стилей? Помогите кто-нибудь, пожалуйста.

Добавлено. А кто чем ещё пользуется для ods? Ширину столбцов получается менять?

Отредактировано Metallikus (Апрель 22, 2015 17:53:33)

Офлайн

#2 Апрель 23, 2015 08:54:38

Metallikus
Зарегистрирован: 2014-11-26
Сообщения: 39
Репутация: +  1  -
Профиль   Отправить e-mail  

Ширина столбцов при использовании ezodf

Попытался сделать так:

        parser = lxml.etree.XMLParser(recover=True)
        doc1.styles.automatic_styles.xmlnode = lxml.etree.fromstring("""<office:automatic-styles>
<style:style style:name="co1" style:family="table-column">
<style:table-column-properties fo:break-before="auto" style:column-width="82mm"/>
</style:style>
<style:style style:name="co2" style:family="table-column">
<style:table-column-properties fo:break-before="auto" style:column-width="22.58mm"/>
</style:style>
<style:style style:name="ro1" style:family="table-row">
<style:table-row-properties style:row-height="16.32mm" fo:break-before="auto" style:use-optimal-row-height="false"/>
</style:style>
<style:style style:name="ro2" style:family="table-row">
<style:table-row-properties style:row-height="4.52mm" fo:break-before="auto" style:use-optimal-row-height="true"/>
</style:style>
<style:style style:name="ta1" style:family="table" style:master-page-name="Default">
<style:table-properties table:display="true" style:writing-mode="lr-tb"/>
</style:style>
</office:automatic-styles>""", parser=parser)
     sheet.style_name = "ta1"
     sheet.column_info(0).style_name="co1"
     sheet.row_info(row).style_name="ro1"

В сгенерированном content.xml всё равно указано
<office:automatic-styles/>

Офлайн

#3 Апрель 23, 2015 10:21:11

Metallikus
Зарегистрирован: 2014-11-26
Сообщения: 39
Репутация: +  1  -
Профиль   Отправить e-mail  

Ширина столбцов при использовании ezodf

Извиняюсь за оверпостинг. Я победил!!!
Вот как добавил стили:

        co1 = ezodf.xmlns.fake_element("""<style:style style:name="co1" style:family="table-column">
<style:table-column-properties fo:break-before="auto" style:column-width="82mm"/>
</style:style>""") #столбец
        ro1 = ezodf.xmlns.fake_element("""<style:style style:name="ro1" style:family="table-row">
<style:table-row-properties style:row-height="16.32mm" fo:break-before="auto" style:use-optimal-row-height="false"/>
</style:style>""") #строка
        ta1 = ezodf.xmlns.fake_element("""<style:style style:name="ta1" style:family="table" style:master-page-name="Default">
<style:table-properties table:display="true" style:writing-mode="lr-tb"/>
</style:style>""") #табличка, хз нужен ли он
        ce1 = ezodf.xmlns.fake_element("""<style:style style:name="ce1" style:family="table-cell" style:parent-style-name="Default"> #ячейка
<style:table-cell-properties fo:wrap-option="wrap" fo:border="0.06pt solid #000000" style:vertical-align="middle"/>
</style:style>""")
        doc1.content.automatic_styles.xmlnode.append(co1.xmlnode)
        doc1.content.automatic_styles.xmlnode.append(ro1.xmlnode)
        doc1.content.automatic_styles.xmlnode.append(ta1.xmlnode)
        doc1.content.automatic_styles.xmlnode.append(ce1.xmlnode)
Ну и назначил их соответствующим элементам (строкам, столбцам и ячейкам) как и в предыдущих сообщениях. Теперь стили попали в content.xml, что сделало их рабочими. Имхо, как-то слишком низкоуровневый способ для python, но работает наконец. Я счастлив

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version