Уведомления

Группа в Telegram: @pythonsu

#1 Май 5, 2014 21:50:13

ingfa_1981
Зарегистрирован: 2014-01-25
Сообщения: 200
Репутация: +  1  -
Профиль   Адрес электронной почты  

Как из шаблона exl прочитать данные и сравнить их с ячейкой из шаблона

Есть спарсенный словарь значений, лицевых счетов организаций с суммой телефонных разговоров за месяц.
dictionary = {'1000': 1100.00, ‘1001’: 1200.00, ‘1002’: 1300.00, ‘1003’: 1400.00, ‘1004’: 1500.00}

Необходимо:
Прочитать файл шаблон.xls и определить наличии ячейки в нулевом столбце со значением лицевого счета
и если он есть записать в файл filename.xls A1=лицевой счет B1= сума переговоров за месяц
,если в том месте пробел пропустить, записать пустую строку.

Я набросал код как мог но только на запись данных, дальше не знаю как, прошу не пинать сильно.

# coding: utf8
import xlwt
# Создаем книгу
book = xlwt.Workbook('utf8')
# Добавляем лист
sheet = book.add_sheet('Название листа')
# Создаем шрифт
font = xlwt.easyxf('font: height 500,name Arial,colour_index black, bold off,\
    italic off; align: wrap on, vert top, horiz left;\
    pattern: pattern solid, fore_colour blue;')
font_red = xlwt.easyxf('font: height 500,name Arial,colour_index black, bold off,\
    italic off; align: wrap on, vert top, horiz left;\
    pattern: pattern solid, fore_colour red;')
i = 0
dictionary = {'1000': 1100.00, '1001': 1200.00, '1002': 1300.00, '1003': 1400.00, '1004': 1500.00}
slovar = sorted(dictionary.items())
for key1, value1 in slovar:
    # Заполняем ящейку (Строка, Колонка, Текст, Шрифт)
    sheet.write(i,0,key1,font)
    sheet.write(i,1,value1,font_red)
    i = i + 1
sheet.row(0).height = 500
sheet.col(0).width = 3000
sheet.row(1).height = 500
sheet.col(1).width = 3000
sheet.row(2).height = 500
sheet.row(3).height = 500
sheet.row(4).height = 500
# Высота строки
#sheet.row(0).height = 2500
# Ширина колонки
#sheet.col(0).width = 20000
# Лист в положении "альбом"
#sheet.portrait = False
# Масштабирование при печати
#sheet.set_print_scaling(85)
# Сохраняем в файл
book.save('filename.xls')

Поможите…

Отредактировано ingfa_1981 (Май 5, 2014 22:04:08)

Офлайн

#2 Май 6, 2014 07:29:20

ilnur
От: Казань
Зарегистрирован: 2009-01-06
Сообщения: 524
Репутация: +  22  -
Профиль   Отправить e-mail  

Как из шаблона exl прочитать данные и сравнить их с ячейкой из шаблона

book = xlrd.open_workbook(filename)
sheet = book.sheet_by_index(index)
for row in range(sheet.nrows):
    ceil = sheet.cell(0, 0).value
пример чтения xls файла

Офлайн

#3 Май 6, 2014 16:46:43

ingfa_1981
Зарегистрирован: 2014-01-25
Сообщения: 200
Репутация: +  1  -
Профиль   Адрес электронной почты  

Как из шаблона exl прочитать данные и сравнить их с ячейкой из шаблона

Я написал такой код.

# coding: utf8
import re
import xlwt
from xlrd import open_workbook,XL_CELL_TEXT, cellname
from tempfile import TemporaryFile
from xlwt import Workbook
"""Шаблон цеха"""
book_shablon_ceha = open_workbook('ceha_shablon.xls')
ceha_shablon = book_shablon_ceha.sheet_by_index(0)
"""Шаблон подряд"""
book_shablon_podryad = open_workbook('podryad_shablon.xls')
podryad_shablon = book_shablon_podryad.sheet_by_index(0)
"""Файл цехов на запись"""
book_ceha = xlwt.Workbook('utf8')
ceha = book_ceha.add_sheet('Отчет по цехам')
"""Файл подрядных на запись"""
book_podryad = xlwt.Workbook('utf8')
podryad = book_podryad.add_sheet('Отчет по подрядным')
"""Фонты"""
font_red = xlwt.easyxf('font: height 240,name Arial,colour_index black, bold off,italic on; align: wrap on, vert top, horiz left;pattern: pattern solid, fore_colour white;')
font_blue = xlwt.easyxf('font: height 240,name Arial,colour_index black, bold off,italic on; align: wrap on, vert top, horiz left;pattern: pattern solid, fore_colour white;')
font_green = xlwt.easyxf('font: height 240,name Arial,colour_index black, bold off,italic on; align: wrap on, vert top, horiz left;pattern: pattern solid, fore_colour white;')
font_400 = xlwt.easyxf('font: height 400,name Arial,colour_index black, bold off,italic on; align: wrap on, vert top, horiz left;pattern: pattern solid, fore_colour white;')
font_240_i = xlwt.easyxf('font: height 240,name Arial,colour_index black, bold off,italic on; align: wrap on, vert top, horiz left;pattern: pattern solid, fore_colour white;')
"""Пустой словарь"""
lic_scheta = {}
"""Открываем файл и парсим его, получаем словарь с ключем лицевого счета и значением суммы переговоров за месяц"""
for line in open('0414p.prn'):
    str_lic_scheta = re.findall(r'(^\d{1,4})', line)
    float_dengi = re.findall(r'\d{1,6}\.\d{1,2}', line)
    obsh = str_lic_scheta + float_dengi
    key = int(obsh[0])
    value1 = float(obsh[1])
    lic_scheta[key] = value1
    spisok_kortejey = sorted(lic_scheta.items())
""""Прочитали столбик 1 с 7 до 107 ячейки, загнали в список и отсортировали список """
nomer_pervoy_yacheyki_shablona_ceha = 7
spisok_dlya_licev_schetov_ceha = []
spisok_vseh_summ = []
for iterator_schetov_ceha in range(nomer_pervoy_yacheyki_shablona_ceha,107):
    yacheyka_ceha = int(ceha_shablon.cell(iterator_schetov_ceha,1).value)
    #print iterator_schetov_ceha, "номер ячейки"
    #print yacheyka_ceha
    spisok_dlya_licev_schetov_ceha.append(yacheyka_ceha)
    spisok_lic_scheta_ceha_shablon = sorted(spisok_dlya_licev_schetov_ceha)
""""Из списка счетов цехов получим поочереди каждый номер лицевого счета и сравним его со словарем напарсенным, если он есть запишем в файл ceha_otchet.xls"""
for schet, summa in spisok_kortejey:
    if schet in spisok_lic_scheta_ceha_shablon:
        #print schet, summa
        ceha.write(nomer_pervoy_yacheyki_shablona_ceha, 1, schet , font_green)
        ceha.write(nomer_pervoy_yacheyki_shablona_ceha, 3, summa , font_green)
        spisok_vseh_summ.append(summa)
        obshaya_summa_chehov = sum(spisok_vseh_summ)
        nomer_pervoy_yacheyki_shablona_ceha = nomer_pervoy_yacheyki_shablona_ceha + 1
ceha.write(nomer_pervoy_yacheyki_shablona_ceha +1, 3, obshaya_summa_chehov, font_green)
ceha.write(nomer_pervoy_yacheyki_shablona_ceha +1, 2, "Итого: ", font_240_i )
ceha.write(6, 2,"НАЗВАНИЕ ПОДРЯДНОЙ ОРГАНИЗАЦИИ",font_400)
ceha.write(6, 3, "Сумма, руб.", font_240_i)
ceha.write(6, 1,"№ л.с",font_400)
ceha.col(3).width = 3000
ceha.col(2).width = 20000
book_ceha.save('otchet_ceha.xls')
book_ceha.save(TemporaryFile())
""""Прочитали столбик 1 с 7 до 38 ячейки, загнали в список и отсортировали список """
nomer_pervoy_yacheyki_shablona_podryad = 7
spisok_dlya_licev_schetov_ceha_podryad = []
spisok_vseh_summ_podryad = []
for iterator_schetov_ceha_podryad in range(nomer_pervoy_yacheyki_shablona_podryad,38):
    yacheyka_ceha_podryad = int(podryad_shablon.cell(iterator_schetov_ceha_podryad,1).value)
    #print iterator_schetov_ceha, "номер ячейки"
    #print yacheyka_ceha
    spisok_dlya_licev_schetov_ceha_podryad.append(yacheyka_ceha_podryad)
    spisok_lic_scheta_ceha_shablon_podryad = sorted(spisok_dlya_licev_schetov_ceha_podryad)
""""Из списка счетов цехов получим поочереди каждый номер лицевого счета и сравним его со словарем напарсенным, если он есть запишем в файл ceha_otchet.xls"""
for schet1, summa1 in spisok_kortejey:
    if schet1 in spisok_lic_scheta_ceha_shablon_podryad:
        #print schet, summa
        podryad.write(nomer_pervoy_yacheyki_shablona_podryad, 1, schet1 , font_green)
        podryad.write(nomer_pervoy_yacheyki_shablona_podryad, 3, summa1 , font_green)
        spisok_vseh_summ_podryad.append(summa1)
        obshaya_summa_chehov_podryad = sum(spisok_vseh_summ_podryad)
        nomer_pervoy_yacheyki_shablona_podryad = nomer_pervoy_yacheyki_shablona_podryad + 1
podryad.write(nomer_pervoy_yacheyki_shablona_podryad +1, 3, obshaya_summa_chehov_podryad, font_green)
podryad.write(nomer_pervoy_yacheyki_shablona_podryad +1, 2, "Итого: ", font_240_i )
podryad.write(6, 2,"НАЗВАНИЕ ПОДРЯДНОЙ ОРГАНИЗАЦИИ",font_400)
podryad.write(6, 3, "Сумма, руб.", font_240_i)
podryad.write(6, 1,"№ л.с",font_400)
podryad.col(3).width = 3000
podryad.col(2).width = 20000
book_podryad.save('otchet_podryad.xls')
book_podryad.save(TemporaryFile())

Прикреплённый файлы:
attachment ceha_shablon.xls (45,5 KБ)

Офлайн

#4 Май 6, 2014 16:48:08

ingfa_1981
Зарегистрирован: 2014-01-25
Сообщения: 200
Репутация: +  1  -
Профиль   Адрес электронной почты  

Как из шаблона exl прочитать данные и сравнить их с ячейкой из шаблона

Все файлы к нему.
Как мне отформатировать ячейки, подскажите пожалуйста, а еще может кто знает как код уменьшить?

Отредактировано ingfa_1981 (Май 6, 2014 16:50:08)

Прикреплённый файлы:
attachment Отчеты.zip (27,2 KБ)

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version