Files
projects/ReportDokladyPojišťovna.py
michaela.buzalkova b45a8b2d00 Initial commit
2025-09-30 08:22:44 +02:00

115 lines
3.9 KiB
Python

import os
import fdb
import csv,time,pandas as pd
import openpyxl
PathToSaveCSV=r"u:\NextCloudOrdinace\Reporty\testy"
timestr = time.strftime("%Y-%m-%d %H-%M-%S ")
CSVname="Výkony pojišťovna.xlsx"
# PathToSaveCSV=r"//tower/tempspeed"
con = fdb.connect(
host='localhost', database=r'u:\MEDICUS 3\data\medicus.FDB',
user='sysdba', password='masterkey',charset='WIN1250')
# Create a Cursor object that operates in the context of Connection con:
cur = con.cursor()
# import openpyxl module
import openpyxl
import xlwings as xw
wb = openpyxl.Workbook()
sheet = wb.active
# wb.save("sample.xlsx")
#Načtení dokladů pojišťovny
# cur.execute("select davka, rok, typ, poj,dokladh.rodcis,prijmeni||', '||jmeno, datose,kod,pocvyk,ddgn from dokladh "
# "join dokladd on dokladd.idhlav=dokladh.idhlav "
# "join kar on kar.rodcis=dokladh.rodcis "
# " order by datose desc;") # where dokladh.rodcis=7401270052 Schořálek
cur.execute("select davka, CAST(rok AS FLOAT) as rok, dokladh.typ, dokladh.poj,dokladh.rodcis,kar.prijmeni||', '||kar.jmeno as jmenokomplet,datose,kod,pocvyk,ddgn from dokladh "
"join dokladd on dokladh.idhlav=dokladd.idhlav "
"join kar on kar.rodcis=dokladh.rodcis "
"order by datose desc;") # Schořálek where dokladh.rodcis=7401270052
nacteno=cur.fetchall()
pocet_radku=len(nacteno)
print(len(nacteno))
sheet.title="Doklady pojišťovny"
sheet.append(["Dávka","Rok","Typ","Pojišťovna","Rodné číslo","Jméno","Datum výkonu","Kód","Počet","Dg."])
#nacteno jsou výkony pro pojišťovnu
print("Zapisuji data do excelu")
for row in nacteno:
sheet.append(row)
wb.save(os.path.join(PathToSaveCSV ,timestr+CSVname))
# autofilter
print("Aplikuji autofilter")
for ws in wb.worksheets:
# Get the maximum number of rows and columns
max_row = ws.max_row
max_column = ws.max_column
ws.auto_filter.ref = f"A1:{openpyxl.utils.get_column_letter(max_column)}{max_row}"
# ws.auto_filter.ref = ws.dimensions
print("Aplikuji format datumu dd.mm.yyyy")
for row in ws.iter_rows(min_col=6, max_col=6):
for cell in row:
if cell.value: # Only format cells with values
cell.number_format = 'DD.MM.YY'
print("aplikuji ohraničení")
from openpyxl.styles import Border,Side,Alignment,PatternFill,Font,numbers
#Definition of border
thin_border = Border(left=Side(style='thin'),right=Side(style='thin'),top=Side(style='thin'),bottom=Side(style='thin'))
#Definition of yellow fill
yellow_fill = PatternFill(start_color='FFFF00', # Yellow color code
end_color='FFFF00',
fill_type='solid')
min_row=1
max_row=pocet_radku+1
min_column=1
max_column=10
for row in ws.iter_rows(min_row=min_row,max_row=max_row,min_col=min_column,max_col=max_column): #(min_row=1, max_col=3, max_row=2):
for cell in row:
cell.border = Border(left=Side(style='thin'),
right=Side(style='thin'),
top=Side(style='thin'),
bottom=Side(style='thin'))
cell.alignment=Alignment(horizontal='center', vertical='center')
#Aplikace yellow line a bold jen na první řádek
if cell.row==1:
cell.fill=yellow_fill
cell.font = Font(bold=True)
# if cell.column in (2,4,5,7): #Aplikuji číselný formát '0'
# cell.number_format = '0'
if cell.column in (2,4,5,8): #Aplikuji textový formát '@'
cell.number_format = numbers.FORMAT_TEXT
cell.value=cell.value
wb.save(os.path.join(PathToSaveCSV ,timestr+CSVname))
# Tento modul je pouze na autofit jednotlivych sloupcu na vsech listech workbooku
print("Aplikuji autofit")
file = os.path.join(PathToSaveCSV ,timestr+CSVname)
with xw.App(visible=False) as app:
wb = xw.Book(file)
for sheet in range(len(wb.sheets)):
ws = wb.sheets[sheet]
ws.autofit()
wb.save()
wb.close()