|
|
|
|
@ -2,11 +2,7 @@ |
|
|
|
|
import os |
|
|
|
|
import re |
|
|
|
|
import math |
|
|
|
|
try: |
|
|
|
|
from StringIO import StringIO |
|
|
|
|
except ImportError: |
|
|
|
|
from io import StringIO |
|
|
|
|
|
|
|
|
|
from io import BytesIO |
|
|
|
|
import xlrd |
|
|
|
|
import xlwt |
|
|
|
|
|
|
|
|
|
@ -52,14 +48,14 @@ def render_xls_to_string(request, xls_template, dictionary=None): |
|
|
|
|
# настройки |
|
|
|
|
xls_settings = get_settings(src_book) |
|
|
|
|
apply_page_settings(dst_sheet, xls_settings) |
|
|
|
|
|
|
|
|
|
# import ipdb;ipdb.set_trace() |
|
|
|
|
# заполнить данными |
|
|
|
|
fill_xls(request, dictionary, src_sheet, dst_sheet, style_list, |
|
|
|
|
xls_settings) |
|
|
|
|
|
|
|
|
|
# закрыть исходную книгу и сохранить созданную |
|
|
|
|
src_book.release_resources() |
|
|
|
|
f=StringIO() |
|
|
|
|
f = BytesIO() |
|
|
|
|
dst_book.save(f) |
|
|
|
|
xls_content = f.getvalue() |
|
|
|
|
f.close() |
|
|
|
|
@ -104,10 +100,10 @@ def fill_xls(request, dictionary, src_sheet, dst_sheet, style_list, xls_settings |
|
|
|
|
row_to = row_to or src_sheet.nrows-1 |
|
|
|
|
col_to = col_to or src_sheet.ncols-1 |
|
|
|
|
|
|
|
|
|
for row in xrange(row_from, row_to+1): |
|
|
|
|
for row in range(row_from, row_to+1): |
|
|
|
|
cmd_fix_height = [] |
|
|
|
|
|
|
|
|
|
for col in xrange(col_from, col_to+1): |
|
|
|
|
for col in range(col_from, col_to+1): |
|
|
|
|
cell = src_sheet.cell(row, col) |
|
|
|
|
cell_value = new_value = cell.value |
|
|
|
|
|
|
|
|
|
@ -116,7 +112,7 @@ def fill_xls(request, dictionary, src_sheet, dst_sheet, style_list, xls_settings |
|
|
|
|
cmd_draw_thin_bottom_border = False |
|
|
|
|
|
|
|
|
|
# если в ячейке не строка - пропускаем |
|
|
|
|
if not isinstance(new_value, unicode): |
|
|
|
|
if not isinstance(new_value, str): |
|
|
|
|
continue |
|
|
|
|
|
|
|
|
|
# поискать шаблонные теги и переменные в ячейке |
|
|
|
|
@ -149,7 +145,7 @@ def fill_xls(request, dictionary, src_sheet, dst_sheet, style_list, xls_settings |
|
|
|
|
new_value = new_value.replace(u'@@FIX_HEIGHT@@', u'') |
|
|
|
|
cmd_fix_height.append({ |
|
|
|
|
'col': col, |
|
|
|
|
'value': unicode(new_value), |
|
|
|
|
'value': new_value, |
|
|
|
|
}) |
|
|
|
|
|
|
|
|
|
if new_value != cell_value: |
|
|
|
|
@ -201,7 +197,7 @@ def fill_xls(request, dictionary, src_sheet, dst_sheet, style_list, xls_settings |
|
|
|
|
for r1,r2,c1,c2 in src_sheet.merged_cells: |
|
|
|
|
if r1 != row or c1 != fh['col']: |
|
|
|
|
continue |
|
|
|
|
for colx in xrange(c1, c2): |
|
|
|
|
for colx in range(c1, c2): |
|
|
|
|
width += src_sheet.computed_column_width(colx) |
|
|
|
|
else: |
|
|
|
|
break |
|
|
|
|
@ -410,24 +406,21 @@ def fill_xls(request, dictionary, src_sheet, dst_sheet, style_list, xls_settings |
|
|
|
|
def get_settings(src_book, sheet_name=u'settings'): |
|
|
|
|
"""Загрузить настройки с листа settings.""" |
|
|
|
|
settings = {} |
|
|
|
|
|
|
|
|
|
# import ipdb;ipdb.set_trace() |
|
|
|
|
try: |
|
|
|
|
src_sheet = src_book.sheet_by_name(sheet_name) |
|
|
|
|
except xlrd.XLRDError: |
|
|
|
|
return settings |
|
|
|
|
|
|
|
|
|
for row in xrange(src_sheet.nrows): |
|
|
|
|
for row in range(src_sheet.nrows): |
|
|
|
|
key_cell = src_sheet.cell(row, 0).value |
|
|
|
|
if key_cell: |
|
|
|
|
key_name = unicode(key_cell).strip() |
|
|
|
|
# import ipdb;ipdb.set_trace() |
|
|
|
|
key_name = key_cell.strip() |
|
|
|
|
if not key_name.startswith(u'#'): |
|
|
|
|
val_cell = src_sheet.cell(row, 1).value |
|
|
|
|
if (isinstance(val_cell, unicode) or |
|
|
|
|
isinstance(val_cell, str)): |
|
|
|
|
settings[key_name] = unicode(val_cell) |
|
|
|
|
else: |
|
|
|
|
if isinstance(val_cell, float) or isinstance(val_cell, int): |
|
|
|
|
settings[key_name] = val_cell |
|
|
|
|
|
|
|
|
|
return settings |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|