Powerbuilder pour les completement Geeks !

Le forum (ô combien francophone) des utilisateurs de Powerbuilder.

Recherche rapide

Annonce

Certaines rubriques, dont des cours, sont uniquement visibles par les membres du forum ^^.
Dans la rubrique Liens & Références, vous avez accès à un sommaire de téléchargement, profitez-en !
Il existe maintenant un nouveau TOPIC "Votre CV en Ligne" accessible uniquement par demande.

#1 04-11-2013 16:16:26

Worldinmyeyes  
Membre Geek
Date d'inscription: 22-04-2010
Messages: 23
Pépites: 97
Banque: 0

[RESOLU] Sauvegarde d'un blob dans fichier Excel

Bonjour,

j'ai une application qui contient des documents word et excel lié à des dossiers

Ces documents sont enregistrés dans une base SQL server 2000 sous forme de blob

1) Le passage Excel/Word ==> Blob fonctionne
2) Si je charge un blob (SELECTBLOB) dans un OLE (word ou excel), le document s'ouvre sans souci, son réenregistrement en base également

Par contre si je veux enregistrer mes documents sous la forme de fichier j'ai un souci :

- Pour les documents Word, aucun problème, les fichiers générés sur le disque sont lisibles et correct
- Par contre pour les fichiers Excel, le "contenu" (si je l'ouvre via NotePad ++ par exemple) à l'air correct, mais en voulant l'ouvrir sur Excel, impossible, par de page chargé ni message d'erreur, rien

J'ai essayé avec 2 méthodes
1) Enregistrer le blob obtenu via SELECTBLOB directement dans un nouveau fichier (FileOpen, FileWriteEx, FileClose)
2) Charger le blob dans un OLE Excel, puis SaveAs de cet OLE dans un nouveau fichier

Dans les 2 cas, j'ai bien un fichier non vide (Entre 40 et 50 Ko) contenant apparement mes données (vu en forme Hexa, je retrouve le contenu des cellules), mais Excel n'ouvre pas le fichier

Merci de  votre aide, car moi je sèche (surtout comme je l'ai dit plus haut, pour les blobs Word aucun souci)

Environnement : PowerBuilder 12, SQL Server 2000

Dernière modification par Worldinmyeyes (08-11-2013 16:51:53)

Hors ligne

 

#2 04-11-2013 16:26:34

rincevent  
Modérateur
Award: bf
Lieu: Belgique
Date d'inscription: 06-02-2007
Messages: 722
Pépites: 100,002,023
Banque: 0

Re: [RESOLU] Sauvegarde d'un blob dans fichier Excel

Salut,

ce serait pas tout bêtement une question d'extension de nom de fichier pour le fichier excel ?

genre tu serais parti de fichier.xls présent sur le HDD, que t'aurais enregistré dans un blob puis le blob tu le resauve ailleurs sur le HDD mais en tant que fichier.xlsx cette fois ci et donc quand tu essayes de l'ouvrir avec Excel après ben il pense que le fichier doit être formaté comme un .xlsx et se plante car en fait il est formaté comme un .xls


http://img114.imageshack.us/img114/8519/userbar175801nb.gif
Pourquoi ne puis-je vivre comme n'importe quel être humain ? Pourquoi mon destin est-il de ne pouvoir cesser de me battre ?

Hors ligne

 

#3 04-11-2013 16:38:05

Worldinmyeyes  
Membre Geek
Date d'inscription: 22-04-2010
Messages: 23
Pépites: 97
Banque: 0

Re: [RESOLU] Sauvegarde d'un blob dans fichier Excel

Non je suis resté tout le temps en fichier XLS
D'ailleurs si je change l'extension en XLS, là j'ai une erreur d'Excel me disant que le format ou l'extension n'est pas valide

Comment d'ailleurs puis je connaitre l'extension du fichier dans mon Blob ?
J'ai essayé la fonction String(BlobMid(<blob>, 1,3), EncodingAnsi!) , mais ca me ramène des caractères bizarre (les mêmes que sur un blob Word d'ailleurs)

Hors ligne

 

#4 04-11-2013 21:27:30

rincevent  
Modérateur
Award: bf
Lieu: Belgique
Date d'inscription: 06-02-2007
Messages: 722
Pépites: 100,002,023
Banque: 0

Re: [RESOLU] Sauvegarde d'un blob dans fichier Excel

Mmm... tout ce que je peux te conseiller c'est de faire une comparaison entre un fichier excel de départ et un fichier excel sauvé depuis un blob dans l'espoir de trouver où ça coince.

Je te conseillerai de créer un nouveau fichier excel ( avec juste "test" dans la 1ère cellule pour dire d'avoir quelquechose)  c'est en tout cas ma technique quand j'ai aucune idée d'où peut venir le problème j'essaye de simplifier la question ^^


http://img114.imageshack.us/img114/8519/userbar175801nb.gif
Pourquoi ne puis-je vivre comme n'importe quel être humain ? Pourquoi mon destin est-il de ne pouvoir cesser de me battre ?

Hors ligne

 

#5 05-11-2013 08:27:58

Geo  
Membre completement Geek
Lieu: Binche
Date d'inscription: 15-12-2008
Messages: 119
Pépites: 378
Banque: 0

Re: [RESOLU] Sauvegarde d'un blob dans fichier Excel

Worldinmyeyes a écrit:

Ces documents sont enregistrés dans une base SQL server 2000 sous forme de blob

Tu passes par un objet OLE pour sauvegarder ton document en DB ?


Rien ne sert de courir, il faut partir à point .

Hors ligne

 

#6 05-11-2013 09:30:51

Worldinmyeyes  
Membre Geek
Date d'inscription: 22-04-2010
Messages: 23
Pépites: 97
Banque: 0

Re: [RESOLU] Sauvegarde d'un blob dans fichier Excel

@rincevent : OK j'essaierai de comparer un fichier généré d'un fichier test

@Geo : Oui via des OLE, car documents doivent pouvoir être enregistrés/visualisés/envoyés par mail/imprimés

Hors ligne

 

#7 05-11-2013 10:02:13

Worldinmyeyes  
Membre Geek
Date d'inscription: 22-04-2010
Messages: 23
Pépites: 97
Banque: 0

Re: [RESOLU] Sauvegarde d'un blob dans fichier Excel

Je viens de faire l'observation suivante

Pour un même fichier XLS stocké en base :

Si je l'ouvre via l'OLE et que je fais "Enregistrer sous ..." via Excel, le fichier fait 56Ko et es parfaitement lisible par Excel

Si je l'enregistre via le SaveAs du controle OLE ou un FileWriteEx du blob, le fichier ne fait plus que 32 Ko et ne s'ouvre pas


Donc le pb n'est pas la source (blob) mais bien la méthode d'enregistrement

Quand j'ouvre ces 2 fichiers via NotePad ++, je vois que seules 2 premières lignes sont identiques

Hors ligne

 

#8 05-11-2013 13:19:03

Geo  
Membre completement Geek
Lieu: Binche
Date d'inscription: 15-12-2008
Messages: 119
Pépites: 378
Banque: 0

Re: [RESOLU] Sauvegarde d'un blob dans fichier Excel

Ok, on a constaté les mêmes problèmes (ça allait même jusqu'à fonctionner sur certains postes clients et pas sur d'autre pour le même document joint).
On a donc choisis de sauvegarder le document directement dans un blob (fileopen, FileReadEx, FileClose) pour le sauvegarder en DB, donc sans utiliser d'OLE.
Pour la récupération, idem à partir du blob (fileopen, FileWriteEx, FileClose).
Pour les visualisation, impression et autres, on est passé par des ShellExecute (comme ça l'OS se débrouille pour lancer l'outil associé).

En fait il semble que dans certains cas (mais on n'a pas identifié le pourquoi), des informations concernant l'OLE (visionneuse ?) soient ajoutées au document. Donc lorsqu'on essaie de réouvrir le document avec l'outil associé, la structure du document n'est plus correcte. On a également sauvegardé le nom du document (pour retrouver son extension et proposer un nom à la sauvegarde).

Voilà, pas de solution miracle mais j'espère que ça t'aidera .


Rien ne sert de courir, il faut partir à point .

Hors ligne

 

#9 05-11-2013 15:23:27

Worldinmyeyes  
Membre Geek
Date d'inscription: 22-04-2010
Messages: 23
Pépites: 97
Banque: 0

Re: [RESOLU] Sauvegarde d'un blob dans fichier Excel

Justement quand le document est récupéré de la base de donnée via un blob et stocké sur la visionneuse, et en sauvegardant sur le disque via la visionneuse cela me donner un fichier totalement viable.

Le fait de l'enregistrer via FileWriteEx me donne un fichier "incomplet'

Ce que je vais tenter c'est une fois le blob chargé dans l'OLE c'est de faire un SaveAs via un ActiveDocument, cela devrait donc fonctionner

Ce que je ne comprend pas c'est pourquoi je n'ai pas ce problème avec les documents Word

Hors ligne

 

#10 05-11-2013 15:51:35

_francois_  
Bienfaiteur du site
Lieu: TOULOUSE
Date d'inscription: 25-03-2010
Messages: 151
Pépites: 178,983,268,111
Banque: 9,223,372,036,854,776,000

Re: [RESOLU] Sauvegarde d'un blob dans fichier Excel

Tu pourrais nous donner ton code pour voir si il y a quelque chose qui nous saute aux yeux ?
Et peut être nous mettre les fichiers (bons et pas bons) à disposition si ils ne sont pas confidentiels.

Logiquement il ne devrait pas y avoir de problèmes avec les FileWriteEx... Mais dans notre métier nous devons parfois faire un peu de magie noire

Hors ligne

 

#11 08-11-2013 08:45:34

Worldinmyeyes  
Membre Geek
Date d'inscription: 22-04-2010
Messages: 23
Pépites: 97
Banque: 0

Re: [RESOLU] Sauvegarde d'un blob dans fichier Excel

Bon alors je sais ce qui manque dans le fichier généré via le SaveAS : la feuille en elle-même
Les données sont bien là, mais je n'ai ni feuille ni onglet dans mon document !

En passant par un OLEObject et non un OleControl j'arrive à générer un fichier qui peut s'ouvrir (donc avec onglet et feuille)

Code: pb

lole_xls = CREATE OLEObject
lole_xls.ConnectToNewObject("excel.application")
  
lole_xls.Workbooks.Add
lole_xls.Application.ActiveWorkBook.WorkSheets.Add
lole_xls.Application.ActiveWorkBook.SaveAs(ls_str_dir)

Il ne reste plus qu'à remplir l'OLEObject avec mon blob. Quelqu'un sais commetn on fait ca ? Je sais le faire avec un OLeControl (ole_1.objectData = <MonBlob>), mais comment fait on pour remplir directement l'OLEObject ?

Hors ligne

 

#12 08-11-2013 16:51:24

Worldinmyeyes  
Membre Geek
Date d'inscription: 22-04-2010
Messages: 23
Pépites: 97
Banque: 0

Re: [RESOLU] Sauvegarde d'un blob dans fichier Excel

Bon j'ai trouvé une solution qui fonctionne : un copy/paste de mon OLE Control sur le workbook de l'OLEObject

Code: pb

ole_temp_xls.objectdata = lb_document
ole_temp_xls.Copy()
    
lole_xls = CREATE OleObject
lole_xls.Connecttonewobject("excel.application")
lole_xls.WorkBooks.Add
lole_xls.Application.workbooks(1).worksheets(1).Paste
lole_xls.Application.workbooks(1).worksheets(1).SaveAs(ls_str_dir)
lole_xls.Application.WorkBooks(1).Close()

lole_xls.Application.quit()
DESTROY(lole_xls)


Hors ligne

 

Pied de page des forums

Propulsé par FluxBB 1.2.22