Dmitriy Shesterkin 9 years ago
parent 107f7684df
commit f9121c9c16
  1. 6
      src/commons/xls/__init__.py
  2. 21
      src/commons/xls/get_xlwt_style_list.py
  3. 41
      src/commons/xls/useful_tools.py

@ -1,3 +1,3 @@
from commons.xls.useful_tools import * from commons.xls.useful_tools import * # noqa
from commons.xls.get_xlwt_style_list import * from commons.xls.get_xlwt_style_list import * # noqa
from commons.xls.xls_to_response import * from commons.xls.xls_to_response import * # noqa

@ -5,13 +5,9 @@ def get_xlwt_style_list(rdbook):
wt_style_list = [] wt_style_list = []
for rdxf in rdbook.xf_list: for rdxf in rdbook.xf_list:
wtxf = xlwt.Style.XFStyle() wtxf = xlwt.Style.XFStyle()
#
# number format # number format
#
wtxf.num_format_str = rdbook.format_map[rdxf.format_key].format_str wtxf.num_format_str = rdbook.format_map[rdxf.format_key].format_str
#
# font # font
#
wtf = wtxf.font wtf = wtxf.font
rdf = rdbook.font_list[rdxf.font_index] rdf = rdbook.font_list[rdxf.font_index]
wtf.height = rdf.height wtf.height = rdf.height
@ -20,24 +16,22 @@ def get_xlwt_style_list(rdbook):
wtf.outline = rdf.outline wtf.outline = rdf.outline
wtf.shadow = rdf.outline wtf.shadow = rdf.outline
wtf.colour_index = rdf.colour_index wtf.colour_index = rdf.colour_index
wtf.bold = rdf.bold #### This attribute is redundant, should be driven by weight # This attribute is redundant, should be driven by weight
wtf._weight = rdf.weight #### Why "private"? wtf.bold = rdf.bold
# Why "private"?
wtf._weight = rdf.weight
wtf.escapement = rdf.escapement wtf.escapement = rdf.escapement
wtf.underline = rdf.underline_type #### wtf.underline = rdf.underline_type
# wtf.???? = rdf.underline #### redundant attribute, set on the fly when writing # wtf.???? = rdf.underline #### redundant attribute, set on the fly when writing
wtf.family = rdf.family wtf.family = rdf.family
wtf.charset = rdf.character_set wtf.charset = rdf.character_set
wtf.name = rdf.name wtf.name = rdf.name
#
# protection # protection
#
wtp = wtxf.protection wtp = wtxf.protection
rdp = rdxf.protection rdp = rdxf.protection
wtp.cell_locked = rdp.cell_locked wtp.cell_locked = rdp.cell_locked
wtp.formula_hidden = rdp.formula_hidden wtp.formula_hidden = rdp.formula_hidden
#
# border(s) (rename ????) # border(s) (rename ????)
#
wtb = wtxf.borders wtb = wtxf.borders
rdb = rdxf.border rdb = rdxf.border
wtb.left = rdb.left_line_style wtb.left = rdb.left_line_style
@ -52,17 +46,13 @@ def get_xlwt_style_list(rdbook):
wtb.diag_colour = rdb.diag_colour_index wtb.diag_colour = rdb.diag_colour_index
wtb.need_diag1 = rdb.diag_down wtb.need_diag1 = rdb.diag_down
wtb.need_diag2 = rdb.diag_up wtb.need_diag2 = rdb.diag_up
#
# background / pattern (rename???) # background / pattern (rename???)
#
wtpat = wtxf.pattern wtpat = wtxf.pattern
rdbg = rdxf.background rdbg = rdxf.background
wtpat.pattern = rdbg.fill_pattern wtpat.pattern = rdbg.fill_pattern
wtpat.pattern_fore_colour = rdbg.pattern_colour_index wtpat.pattern_fore_colour = rdbg.pattern_colour_index
wtpat.pattern_back_colour = rdbg.background_colour_index wtpat.pattern_back_colour = rdbg.background_colour_index
#
# alignment # alignment
#
wta = wtxf.alignment wta = wtxf.alignment
rda = rdxf.alignment rda = rdxf.alignment
wta.horz = rda.hor_align wta.horz = rda.hor_align
@ -74,6 +64,5 @@ def get_xlwt_style_list(rdbook):
wta.shri = rda.shrink_to_fit wta.shri = rda.shrink_to_fit
wta.inde = rda.indent_level wta.inde = rda.indent_level
# wta.merg = ???? # wta.merg = ????
#
wt_style_list.append(wtxf) wt_style_list.append(wtxf)
return wt_style_list return wt_style_list

@ -1,8 +1,7 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
def copy_cells(src_sheet, dst_sheet, style_list, def copy_cells(src_sheet, dst_sheet, style_list, row_from=0, row_to=None, dst_row_shift=0,
row_from=0, row_to=None, dst_row_shift=0,
col_from=0, col_to=None, dst_col_shift=0): col_from=0, col_to=None, dst_col_shift=0):
""" """
Скопировать блок ячеек из диапазона строк [row_from, row_to] и колонок Скопировать блок ячеек из диапазона строк [row_from, row_to] и колонок
@ -27,13 +26,11 @@ def copy_cells(src_sheet, dst_sheet, style_list,
height_rows(src_sheet, dst_sheet, row_from, row_to, dst_row_shift) height_rows(src_sheet, dst_sheet, row_from, row_to, dst_row_shift)
# объединить ячейки # объединить ячейки
merge_cells(src_sheet, dst_sheet, style_list, merge_cells(src_sheet, dst_sheet, style_list, row_from,
row_from, row_to, dst_row_shift, row_to, dst_row_shift, col_from, col_to, dst_col_shift)
col_from, col_to, dst_col_shift)
def height_rows(src_sheet, dst_sheet, def height_rows(src_sheet, dst_sheet, row_from=0, row_to=None, dst_row_shift=0):
row_from=0, row_to=None, dst_row_shift=0):
"""Задать в диапазоне строк [row_from, row_to] высоту как в исходном листе. """Задать в диапазоне строк [row_from, row_to] высоту как в исходном листе.
""" """
row_to = row_to or src_sheet.nrows - 1 row_to = row_to or src_sheet.nrows - 1
@ -44,9 +41,8 @@ def height_rows(src_sheet, dst_sheet,
dst_sheet.row(row + dst_row_shift).height_mismatch = True dst_sheet.row(row + dst_row_shift).height_mismatch = True
def merge_cells(src_sheet, dst_sheet, style_list, def merge_cells(src_sheet, dst_sheet, style_list, row_from=0,
row_from=0, row_to=None, dst_row_shift=0, row_to=None, dst_row_shift=0, col_from=0, col_to=None, dst_col_shift=0):
col_from=0, col_to=None, dst_col_shift=0):
""" """
Объединить ячейки в заданном блоке нового листа, ограниченном строками Объединить ячейки в заданном блоке нового листа, ограниченном строками
[row_from, row_to] и колонками [col_from, col_to], если в исходном листе [row_from, row_to] и колонками [col_from, col_to], если в исходном листе
@ -64,20 +60,6 @@ def merge_cells(src_sheet, dst_sheet, style_list,
cell = src_sheet.cell(r1, c1) cell = src_sheet.cell(r1, c1)
style = style_list[cell.xf_index] style = style_list[cell.xf_index]
# сохранить границы "крайней" ячейки
# нафиг пока эту фичу - из-за нее повылазили какие-то границы,
# которых не было вообще
# brd_1 = style.borders
# cell_2 = src_sheet.cell(r2-1, c2-1)
# brd_2 = style_list[cell_2.xf_index].borders
# print r1,c1,r2,c2,
# print 'borders 1 (left, right, top, bottom)',
# print brd_1.left, brd_1.right, brd_1.top, brd_1.bottom,
# print 'border 2 (same)',
# print brd_2.left, brd_2.right, brd_2.top, brd_2.bottom
# brd_1.right = brd_2.right
# brd_1.right_colour = brd_2.right_colour
dst_sheet.merge( dst_sheet.merge(
r1 + dst_row_shift, r2 + dst_row_shift - 1, r1 + dst_row_shift, r2 + dst_row_shift - 1,
c1 + dst_col_shift, c2 + dst_col_shift - 1, c1 + dst_col_shift, c2 + dst_col_shift - 1,
@ -104,10 +86,7 @@ def horz_page_break(dst_sheet, row):
dst_sheet.horz_page_breaks.append((row, 0, 255)) dst_sheet.horz_page_breaks.append((row, 0, 255))
# -------------------------------------------------------------- прочие хелперы def clone_row(src_sheet, dst_sheet, style_list, src_row, n_times=1, dst_row_shift=0):
def clone_row(src_sheet, dst_sheet, style_list,
src_row, n_times=1, dst_row_shift=0):
""" """
Размножить n_times раз строку из исходного листа, с сохранением стилей Размножить n_times раз строку из исходного листа, с сохранением стилей
форматирования. форматирования.
@ -138,7 +117,8 @@ def merge_cells_in_row(src_sheet, dst_sheet, style_list, src_row, dst_row):
def sum_src_heights(src_sheet, row_from, row_to): def sum_src_heights(src_sheet, row_from, row_to):
"""Суммарная высота всех строк диапазона [row_from, row_to] """
Суммарная высота всех строк диапазона [row_from, row_to]
исходного листа. исходного листа.
""" """
result = 0 result = 0
@ -150,7 +130,8 @@ def sum_src_heights(src_sheet, row_from, row_to):
def sum_dst_heights(dst_sheet, row_from, row_to): def sum_dst_heights(dst_sheet, row_from, row_to):
"""Суммарная высота всех строк диапазона [row_from, row_to] """
Суммарная высота всех строк диапазона [row_from, row_to]
на новом листе. на новом листе.
""" """
result = 0 result = 0

Loading…
Cancel
Save