Форум сайта python.su
1
Есть спарсенный словарь значений, лицевых счетов организаций с суммой телефонных разговоров за месяц.
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)
Офлайн
22
book = xlrd.open_workbook(filename) sheet = book.sheet_by_index(index) for row in range(sheet.nrows): ceil = sheet.cell(0, 0).value
Офлайн
1
Я написал такой код.
# 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())
Прикреплённый файлы:
ceha_shablon.xls (45,5 KБ)
Офлайн
1
Все файлы к нему.
Как мне отформатировать ячейки, подскажите пожалуйста, а еще может кто знает как код уменьшить?
Отредактировано ingfa_1981 (Май 6, 2014 16:50:08)
Прикреплённый файлы:
Отчеты.zip (27,2 KБ)
Офлайн