Le forum (ô combien francophone) des utilisateurs de Powerbuilder.
Okay, j'ai compris
mais moi je fais du PB que depuis 2mois 1/2
Dernière modification par Mr Pink Eyes (28-08-2007 11:45:43)
Hors ligne
Chrnico a écrit:
Non, mais mon code traite aussi ..., il limite ... il ne ..., il ..., il permet de..., etc...
A lieu de te vanter, ouvre une balise [CODE = pb] et montre nous ça
Mr Pink Eyes a écrit:
Okay, j'ai compris
mais moi je fais du PB que depuis 2mois 1/2
Bruno, ton code répond à tes besoins et je trouve que tu as fait du très bon travail
Hors ligne
Hors ligne
JCZ a écrit:
shahin a écrit:
1) Tu l'enregistre au format html et tu force Excel à l'ouvrir (via OLE)
Cela marche bien mais j'ai un probleme d'ajustement des lignes & colonnes
Les cellules sont complement deformées
Y a t il un moyen de resoudre ce probleme ?
JCZ a écrit:
Avec http://www.desta.com.ua/pb2xls/
qqu 'un a du code pour générer directement un fichier Excel à l'identique d'une DW existante
Hors ligne
Ouai ba évidemment qu'un test sur la proprieté visible de mon champ de DW permet de ne récupérer que les champs visible de ma DW, je suis un peu fatigué today j'aurai du y pensé pfffffff... ok impec pour ca.
sinon suis d'accord pour le :
Wahouuuuu Wazou1812 !
En revanche je ne comprends l'utilité de créer un modele excel sous excel revenir le sauvegarder via PB et retravailler mes cellule et la mise en forme via PB... Etant donné que je pars de PB et que la creation du modele ainsi que la en mise en forme se fera depuis PB... Faut simplement que je puisse parler de mise en forme à mon excel via OLE apres ca devrait aller, non ?
Si ton but etait d'utiliser et de réaliser un modele excel servant de support et préalablement mis en forme (types des cellules, mise en page et definition de la zone d'impression, police, taille, gras, couleur du texte et compagnie...) manuellement, cette solution ne peut convenir car elle conduit à créer un fichier excel support pour chacuns des futurs ecrans que l'on va me demander de réaliser, ce qui ne me convient que très peu.
Mais l'idée pour démarrer est bonne je vais voir comment approfondir la chose...
Hors ligne
L'idée du modèle consiste à faire l'ensemble du design dans Excel, et avec PB de ne remplir que les cellules.
Mais effectivement cela oblige d'avoir un modèle à chaque fois.
Sachant qu'un classeur Excel peut contenir plusieurs feuilles, tu peux également avoir un seul classeur dont chacune des feuilles constituera un modèle. Ainsi cela ne te fera qu'un seul fichier.
Hors ligne
shahin a écrit:
Chrnico a écrit:
Non, mais mon code traite aussi ..., il limite ... il ne ..., il ..., il permet de..., etc...
A lieu de te vanter, ouvre une balise [CODE = pb] et montre nous ça
Mr Pink Eyes a écrit:
Okay, j'ai compris
mais moi je fais du PB que depuis 2mois 1/2Bruno, ton code répond à tes besoins et je trouve que tu as fait du très bon travail
Je veux bien aider qui veut à résoudre ses problèmes ou améliorer son code. De là à diffuser le code de la bibliothèque d'objets de N2I que j'améliore depuis pas mal d'années et qui me permet de gagner ma croute via mon métier d'éditeur, il y a un pas que je suis pas certain de vouloir franchir maintenant. J'espère que tu me comprends...
Hors ligne
Mr Pink Eyes a écrit:
Okay, j'ai compris
mais moi je fais du PB que depuis 2mois 1/2
Début très prometteur !
Hors ligne
Bon, juste un extrait de la fonction (elle fait 400 lignes).
Voir les deux évaluate ci-dessous pour s'en inspirer.
Le premier (celui dont je parlé dans mon premier post), le deuxième pour récupérer la valeur des DDLB et DDDW.
If (ads_param.Describe("Evaluate( "+visibleFormula+",1)") = "0" ) and ( lstr_tri[li_i].s_visible = 'YES') Then setnull(ls_text_tmp) Else CHOOSE CASE lstr_tri[li_i].s_type CASE "ListBox" ls_text_tmp = ads_param.describe( "Evaluate('LookUpDisplay("+ lstr_tri[li_i].s_objet +")', "+string(ll_row)+" )") CASE "char(" , "char" // CHARACTER DATATYPE ls_text_tmp = ads_param.GetItemString ( ll_row, lstr_tri[li_i].s_objet, Primary!, FALSE ) CASE "date" // DATE DATATYPE ls_text_tmp = string(ads_param.GetItemDate ( ll_row, lstr_tri[li_i].s_objet, Primary!, FALSE ) ,shortdate) CASE "datet" // DATETIME DATATYPE if lstr_tri[li_i].s_format <> "" then ls_text_tmp = string(ads_param.GetItemDateTime ( ll_row, lstr_tri[li_i].s_objet, Primary!, FALSE ) ,shortdate) else ls_text_tmp = string(ads_param.GetItemDateTime ( ll_row, lstr_tri[li_i].s_objet, Primary!, FALSE ) , shortdate + "[time]") end if CASE "decim" // DECIMAL DATATYPE ls_text_tmp = string(ads_param.GetItemDecimal ( ll_row, lstr_tri[li_i].s_objet, Primary!, FALSE ) ) CASE "numbe", "long", "ulong", "real" // NUMBER DATATYPE ls_text_tmp = string(ads_param.GetItemNumber ( ll_row, lstr_tri[li_i].s_objet, Primary!, FALSE ) ) CASE "time", "times" // TIME DATATYPE ls_text_tmp = string(ads_param.GetItemTime ( ll_row, lstr_tri[li_i].s_objet, Primary!, FALSE ) ,"[time]" ) END CHOOSE
Hors ligne
Et avec pb tu peux aussi mettre de la couleur sur une ou plusieurs cellule et/ou sur une ligne entière.
//exemple : pour mettre du rouge sur les cellules
Io_Excel.Application.workbooks(ai_workbook).worksheets(as_worksheet).Cells(ai_cell_deb, ai_cell_fin).Interior.Color = RGB(255,0,0)
//exemple : pour mettre du rouge sur toute la ligne
Io_Excel.Application.workbooks(ai_workbook).worksheets(as_worksheet).Rows(ai_cell_deb).Interior.Color = RGB(255,0,0)
Hors ligne
Bon deja la sauvegarde en HTML ne fonctionne pas (essai de la methode saveas en HTML) sur ma DW. Ca commence ... l'execution de ce code apres le remplissage de ma DW avec mes données (50 lignes) PLANTE !
long numcols , numrows , c, r
OLEObject xlapp , xlsub
int ret
string docname
docname = "c:\test.html"
ret = dw_cash_flow.saveas(docname, HTMLTable!, true)
if ret < 1 then
MessageBox("Save Datawindow to Html file failed !",string(ret))
return
end if
Dernière modification par fmxstyle (28-08-2007 13:46:02)
Hors ligne
et tu es dans quelle version de pb ??
Hors ligne
Il plante completement ou il te renvoie un code retour d'erreur ?
Hors ligne
Bon je me dis la chose suivante :
Etant donné la contrainte de ne voir que les colonnes visible ainsi que leurs mises en forme à l'ecran, je ne vais pas passé par un save préalable en EXCEL de ma datawindow (elle sauvegarde toutes les colonnes non visible egalement) mais je vais plutot le créer de toute pièces via l'objet OLE pilotant EXCEL.
Je vais parcourir ma DW par colonnes et par lignes dans une boucle. Je vais recuperere via le DESCRIBE et les EVALUATE chacune des valeurs de mise en forme des cellules dans des variables puis les affecter via OLE dans la cellule d'EXCEL.
Reste le probleme d'afficher les valeurs de mes cellules groupes et les computed fields de calcul de totaux (encore qu'il porte la même entete de nom de colonnes "cf_N" donc je peux les atteindre normalement)...
Pour le moment, je ne saurai qu'insérer les données d'une DW simple avec des champs de type EDIT dans EXCEL, restera également à gérer l'affichage des valeurs d'un champ de type DDDW ou DDLB...
Si quelqu'un peut m'anticiper le probleme d'acces aux valeurs de mes groupes et de mes computed field en footage de ma DW ce serait le top.
Merci à Chrnico pour le rateau de cast des données de la datawindow proposé plus haut, j'y avais pensé pour préparer mes données avant de les insérer dans un format adapté dans EXCEL.
Hors ligne
Suis desormais sous la V10.5 mais te prends pas la tête sur ca, je vais laisser tombé l'idée d'un premier save de ma DW avant l'utilisation de mon nouvel objet OLE puisqu'il y a toutes les colonnes d'affichées ... vu que j'en veux pas lol
Hors ligne
Quelqu'un a une bout de code permettant de définir les proprietes d'une cellule EXCEL (font, couleur, taille, gras, etc...) via OLE dans PB ?
Hors ligne
Pour les computed Field, si tu n'arrives pas a y acceder, tu peux placer une formule sur ta cellule avec un truc du genre :
TaCellule.Formula = "=SUM(E2:E6)"
Mr Pink Eyes a écrit:
Alors, je donne un début de code, qui contient notamment la création de l'objet, l'écriture d'un header et la sauvegarde du document :
Code: pb
xlsub.cells[1,1].font.bold=true //texte en gras xlsub.cells[1,1].Interior.ColorIndex = 36 //cellule avec un fond jaune clair
(...)
Et pour l'autosize :Code: pb
//Loop thru the Excel sheet columns to Autofit for c = 1 to 5 xlsub.cells[1,c].EntireColumn.AutoFit next
La couleur peut etre gerer par la méthode RGB(x,y,z) d'après ce qu'a dit Wazou
Dernière modification par Mr Pink Eyes (28-08-2007 14:27:57)
Hors ligne
fmxstyle a écrit:
Quelqu'un a une bout de code permettant de définir les proprietes d'une cellule EXCEL (font, couleur, taille, gras, etc...) via OLE dans PB ?
la couleur je l'avais mis plus haut , voici pour le gras d'une cellule ou d'une ligne
//Mise en gras de la ligne Io_Excel.Application.workbooks(ai_workbook).worksheets(as_worksheet).Rows(ai_ligne ).Font.Bold = true else //Mise en gras des cellules. Io_Excel.Application.workbooks(ai_workbook).worksheets(as_worksheet).cells(ai_cellule_debut,ai_cellule_fin ).Font.Bold = true
voilà pour mettre des cadres en gras
io_Excel.Application.workbooks(ai_workbook).worksheets(as_worksheet).Range(as_colonne_debut + string(ai_ligne_debut) + ":" + as_colonne_fin+ string(ai_ligne_fin)).borders.Item(ai_item).Weight = 2
Hors ligne
Jette vraiment un oeil sur ce document : http://support.microsoft.com/kb/219151/fr, il est plein de bons trucs
Hors ligne
Ouai je connais bvien cette page car j'ai déjà écrit un programme en VB qui pilotait excel et mettait en forme les cellules d'un classeur... je vois mais faut la bonne syntaxe pour faire fonctionner sous PB... a moins que ce ne soit pareil (je verifie actuellement).
Merci à la modo pour les portions de code, tu semble assez competente et à l'aise sur le sujet du jour...
Hors ligne
fmxstyle a écrit:
Ouai je connais bvien cette page car j'ai déjà écrit un programme en VB qui pilotait excel et mettait en forme les cellules d'un classeur... je vois mais faut la bonne syntaxe pour faire fonctionner sous PB... a moins que ce ne soit pareil (je verifie actuellement).
A une vache près, c'est la même chose. En tout cas pour l'accès aux propriétés.
Hors ligne
Quelqu'un pourrait il me dire comment récuperer aisément les valeurs de mise en forme de la cellule affichée dans ma datawindow. Attention je parle de la cellule non pas de la colonne.
RAPPEL => je travaille ligne à ligne, cellule par cellule donc il me faut pouvoir parler à ma DW sur la cellule elle même
Merci d'avance, je progresse petit à petit...
Hors ligne
fmxstyle a écrit:
Merci à la modo pour les portions de code, tu semble assez competente et à l'aise sur le sujet du jour...
Merci,
Et c'est effectivement ce qui m'avait donné le plus de problème à l'époque, c'était de trouver la bonne syntaxe de pb par rapport à toutes les possibilités que nous avons à notre disposition.
bonne chance.
Hors ligne
fmxstyle a écrit:
Quelqu'un pourrait il me dire comment récuperer aisément les valeurs de mise en forme de la cellule affichée dans ma datawindow. Attention je parle de la cellule non pas de la colonne.
RAPPEL => je travaille ligne à ligne, cellule par cellule donc il me faut pouvoir parler à ma DW sur la cellule elle même
Merci d'avance, je progresse petit à petit...
Utilise l'Evaluate dans le describe comme dit précédement.
Cela permet d'évaluer la valeur d'une propriété d'une colonne pour une ligne donnée, donc d'une cellule !
Hors ligne
J'ai un probleme pour la recup de la valeur de la couleur de fond d'une cellule....
For c = 1 to numcols
colname = dw_cash_flow.describe("#" + string(c) + ".name")
col_VISIBLE = dw_cash_flow.describe("#" + string(c) + ".visible")
if integer(col_VISIBLE) = 1 then
For r = 1 to numrows
col_TYPE = dw_cash_flow.describe(colname + ".coltype")
col_BACKCOLOR = dw_cash_flow.describe("Evaluate("+ "'" + colname + ".BackGround.Color, "+ "'" + string(r) + ")" )
xlsub.cells[r,c] = dw_cash_flow.object.data[r,c]
xlsub.cells[r,c].Interior.Color = long(col_BACKCOLOR)
Next
end if
Next
Qu'est ce qui ne va pas c'est pas COLOR le nom de la propriété pourtant non ?
Hors ligne