Ci-joint une version modifiée de l'exportation en format CSV des comptes.
Utilisant Ma Tirelire sur mon Palm, je modifie l'export de BP en fonction de mes besoins afin d'y importer mes comptes.
N'hésitez pas à compléter la liste des idées d'évolution...
-- Fabrice
#Version 1.4 Fabrice 25/08/05 - Séparateur Catégories/Sous-Catégories
#Version 1.3 Fabrice 22/08/05 - "Chèque" plutôt que "Chq XXXXXX"
#Version 1.2 Fabrice 22/08/05 - En-tête optionnel
#Version 1.1 Fabrice 19/08/05 - Export tous comptes
#Version 1.0 Fabio
import BP
global categ_names
def GetCategName(index, sep, CreateSubCategs):
valid_indexes = range(len(categ_names))
if index in valid_indexes:
# Ajoute le séparateur de sous-catégorie...
if SeparateSubCategs:
sep = EditSepCategs
CreateSubCategs = 1
# Renvoi la sous-catégorie si pas de séparateur
if CreateSubCategs and len(sep) > 0:
parent_index = BP.CategParent[index]
if parent_index in valid_indexes and parent_index != index:
return "%s%s%s" %(categ_names[parent_index], sep, categ_names[index])
else:
return "%s%s" %(categ_names[index], sep)
else: return categ_names[index]
else:
if CreateSubCategs: return sep
else: return ""
def parse(value):
lines = value.replace("\r\n", "\n").replace("\r", "\n").split("\n")
d = {}
for line in lines:
i = line.find("=")
if i > -1: d[line[:i]] = line[i + 1:]
return d
def ExportAccount(account, AllAccounts):
categs = BP.OperationCateg[account]
categs = [GetCategName(index, sep, CreateSubCategs) for index in categs]
dates = BP.OperationDate[account]
dates = [d.replace("-", "/") for d in dates]
people = BP.Operationthirdparty[account]
people = [p.replace(sep, " ") for p in people]
details = BP.OperationDetails[account]
details = [d.replace(sep, " ") for d in details]
if ReplaceCheck:
# Modes... sans numéro de chèque
modes = []
for m in BP.OperationMode[account]:
m.replace(sep, " ")
if m.find("Chq") == 0:
m = "Chèque"
modes.append(m)
else:
# Modes... original
modes = BP.OperationMode[account]
modes = [m.replace(sep, " ") for m in modes]
values = BP.OperationAmount[account]
values = [str(v).replace(".", ",") for v in values]
lines = zip(dates, modes, people, details, categs, values)
records = []
if IncludeHeader: records.append(sep.join(titles))
i = 0
visible_lines = BP.VisibleLines()
for line in lines:
if AllAccounts:
if i in visible_lines:
records.append(sep.join(line))
i += 1
else:
records.append(sep.join(line))
csv_file = BP.BankPerfectFileName()
if csv_file[-3:] == ".bp": csv_file = csv_file[:-3]
csv_file = "%s-%s.csv" %(csv_file, BP.AccountName[account])
try:
open(csv_file, "w").write("\n".join(records))
BP.MsgBox("Le fichier %s a été créé" %csv_file, 0)
except:
BP.MsgBox("Impossible de créer le fichier %s" %csv_file, 0)
return ""
#_______________________________________________________________________________
form = """
checkbox=CheckBoxAllAccounts;Left=20;Top=6;Width=224;Anchors=tl;Caption=Exporter tous les comptes;Checked=0
label=LabelSep;Left=20;Top=32;Width=104;Anchors=tl;Caption=Séparateur à utiliser :;
combo=ComboSep;Left=136;Top=28;Width=56;Anchors=tl;Text=\s\\r\\n,\\r\\nTAB\\r\\n;ItemIndex=0
radio=RadioSepSubCategs;Left=20;Top=52;Width=206;Anchors=tl;Caption=Séparateur Catégories/Sous-catégories;Checked=0
edit=EditSepCategs;Left=232;Top=50;Width=20;Anchors=tl;Text=/;
radio=RadioCreateSubCategs;Left=20;Top=72;Width=226;Anchors=tl;Caption=Créer une colonne pour les sous-catégories;Checked=1
checkbox=CheckBoxHeader;Left=20;Top=94;Width=224;Anchors=tl;Caption=Inclure l'en-tête;Checked=1
checkbox=CheckBoxCheck;Left=20;Top=114;Width=224;Anchors=tl;Caption=Remplacer "Chq XXXXXX" par "Chèque";Checked=0
button=ButtonCancel;Left=55;Top=150;Width=90;Height=25;Anchors=tl;Caption=Annuler;
button=ButtonNext;Left=155;Top=150;Width=90;Height=25;Anchors=tl;Caption=Exporter >>;
"""
result = parse(BP.CustomForm("Paramètres de l'export", form, 300, 220))
print result
if result["SelectedButton"] == "ButtonNext":
categ_names = BP.CategName
CreateSubCategs = result["RadioCreateSubCategs"] == "1"
AllAccounts = result["CheckBoxAllAccounts"] == "1"
IncludeHeader = result["CheckBoxHeader"] == "1"
ReplaceCheck = result["CheckBoxCheck"] == "1"
SeparateSubCategs = result["RadioSepSubCategs"] == "1"
EditSepCategs = result["EditSepCategs"]
# Si séparateur de catégories, ajoute les sous-catégories
if len(EditSepCategs) > 0:
ExportSubCategs = 1
if CreateSubCategs: titles = ["Date", "Mode", "Tiers", "Détails", "Catégorie", "Sous-catégorie", "Montant"]
else: titles = ["Date", "Mode", "Tiers", "Détails", "Catégorie", "Montant"]
seps = [";", ",", "\t"]
sep = seps[int(result["ComboSep"])]
if AllAccounts:
for account in range(len(BP.Accounts())):
ExportAccount(account, AllAccounts)
else:
ExportAccount(BP.AccountCurrent(), AllAccounts)
23/08/05
22/08/05
21/08/05
Pour modifier le fichier .csv plus aisément, je vous conseille CSVed, un superbe éditeur de fichier CSV gratuit sous Windows.

-- Fabrice