Exécution programme hors Environnement

Résolu
cs_couf Messages postés 213 Date d'inscription dimanche 5 janvier 2003 Statut Membre Dernière intervention 6 janvier 2011 - 15 juin 2009 à 17:46
cs_couf Messages postés 213 Date d'inscription dimanche 5 janvier 2003 Statut Membre Dernière intervention 6 janvier 2011 - 18 juin 2009 à 16:09
Bonjour Les amis

j'ai le programme suivant

program excel;

{$APPTYPE CONSOLE}

uses

   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs,comobj, ExtDlgs, StdCtrls,strutils,shellapi,inifiles,comini;

var
chimg,chrep,nblig, celprod, Vinttostr,Nonmcel :string;
vcellimage,vfont,vCell,vcellfusion,vWorksheet,vXLWorkbook, vMSExcel,vXLWorkbooks,vMS1Excel : variant;
 avalue, arange,aSheetName ,vFileName : AnsiString;
r, i,rom: integer;
 d : real;
 FileIni  : TIniFile;

begin
try
 fileIni:= Tinifile.Create('C:\infoc\Xcel.ini');
 chrep:=fileini.ReadString('chemin','repoting','')  ;
 chimg:=fileini.ReadString('chemin','image','');
 finally

end;
  { TODO -oUser -cConsole Main : Insert code here }
   rom:=67;
  vMSExcel := CreateOleObject('Excel.Application');
    vMSExcel.Visible := true;
    vFileName := chrep;
    vXLWorkbooks := vMSExcel.Workbooks;
    vXLWorkbook := vXLWorkbooks.Open(vFileName);
    aSheetName := ' Reporti';
    vWorksheet := vXLWorkbook.WorkSheets[aSheetName];
    //insertion de 4 lignes

    //nombre de ligne utilisées
    i:= vworksheet.usedrange.rows.count  ;
    nblig:=inttostr(i);
    // écriture  2 ligne en Bas
     Vinttostr:= inttostr(i+2);
     for r := 0 to 5 do
      begin
      // rom c'est la valeur numérique du caractère ascii
      rom:=rom+1;
     celprod := char(rom) + nblig;
      aRange := char(rom)+Vinttostr;
    vCell := vWorksheet.Range[aRange];
    //mise en forme résultat
    vcell.font.bold:=true;
    //Taille police
    vcell.font.size:='13';
    //interieur cellule     en gris
    {
# 'Aqua => 8, 28, 33, 34, 42
# 'Black =)> 1, 51, 52
# 'Blue =)> 5, 32, 41, 49
# 'Fuchsia =)> 7, 26
# 'Gray =)> 16, 46, 47, 48, 56
# 'Green =)> 10, 43
# 'Lime =)> 4
# 'Maroon =)> 9, 30, 53
# 'Navy =)> 11, 25, 55
# 'Olive =)> 12, 44, 45
# 'Purple =)> 13, 18, 21, 29, 54
# 'Red =)> 3
# 'Silver =)> 15, 17, 20, 22, 24, 35, 36, 37, 38, 39
# 'Teal =)> 14, 23, 31, 50
# 'White =)> 2, 19, 40
# 'Yellow =)> 6, 27 }
    vcell.interior.colorIndex:=16;
   // vcell.formula:='=sum(A1:A3)';
   //somme
      aValue := '=sum('+ char(rom)+'2:'+ celprod +')';
    vCell.Value := aValue;

     end   ;
     // fusion des 3 premières cellules
     vcellfusion:=vworksheet.Range[char(65)+Vinttostr,char(67)+Vinttostr] ;
    vcellfusion.merge(FALSE);
    //Mise en gras et taille police
    vcellfusion.font.bold:=true;
    vcellfusion.font.size:='12';
    vcellfusion.value:='TOTAL'   ;
    vcellfusion.interior.colorIndex:=3;
    //alignement des valeurs
    {xlRight = -4152
    xlLeft = -4131
    xlCenter = -4108
    xlJustify = -4130}
    vcellfusion.HorizontalAlignment:= -4108;
      {arange:='E29';
      vCell := vWorksheet.Range[aRange];
      vcell.value:=i;  }
   //Insertion lignes
      vcell:=vworksheet.Cells.Item[1,1]  ;

    vcell.EntireRow.Insert;
    vcell.EntireRow.Insert;
    vcell.EntireRow.Insert;
    vcell.EntireRow.Insert;

    // Insertion d'une image  en haut

    vcellimage:=vworksheet.range['A1'];
  vWorksheet.Pictures.Insert(chimg).Select;
  vMSExcel.Selection.Top:=1;
  vMsExcel.selection.left:=1;
  // Mise en forme  largeur (width) hauteur (height)
  vmsexcel.selection.width:= 96;
  vmsexcel.selection.height :=   40  ;
  // fusion des 3 premières lignes
   vcellfusion:=vworksheet.Range['A1','I4'] ;
    vcellfusion.merge(FALSE);

   //saugarde du travail et on quitte l'instance
     vXLWorkbook.Save;
    vMSExcel.Quit;
    vMSExcel := unassigned;

    {'CoInitialize has not been called'}
end.

Le Problème me direz vous ?
Il s'execute parfaitement sur mon PC (windows XP)
j'ai l'image ou je veux etc etc.....
 Lorsque je l'exécute sur le PC cible (windows 2000 mais même version du pack office) avec des droits administrateur , en ayant pris soin de bien copier comini dans le même répertoire d'exécution bin ......... il ouvre juste mon fichier excel , et puis rien ne se passe.
Auriez vous une idée s'il vous plait de ce que j'aurais pu oublier?

Merci d'avance

couf

13 réponses

cs_couf Messages postés 213 Date d'inscription dimanche 5 janvier 2003 Statut Membre Dernière intervention 6 janvier 2011 1
18 juin 2009 à 16:09
  Bonjour à tous les 2,

 J'ai une solution qui me convient mais c'est à demi teinte
après avoir cherché en vain faire marché la propriété de l'objet  font.bold
j'ai tout simplement fais ceci "vcell.font.name :='Arial  Black';"
à la place de "vcell.font.bold:=true;"
 cela foctionne sur Tout mes PCs
 C'est un peu une solution Batarde mais je pense que les utilisateurs ne verront pas la différence.
   Mais nooooooooooooonnnnnnnnnnn Cantador tu n'es pas pauvre

   Je sais toujours pas pourquoi la propriété de l'objet ne fonctionnait pas.
 
couf
3
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
15 juin 2009 à 22:23
bonsoir,
idée :
si comini est une unité, il faut l'ajouter au projet et non copier le .pas..

cantador
0
cs_couf Messages postés 213 Date d'inscription dimanche 5 janvier 2003 Statut Membre Dernière intervention 6 janvier 2011 1
16 juin 2009 à 11:31
Merci Cantador

  j'avais bien mis l'unité
en désespérance de cause hier soir  j'ai recompilé avec Delphi 7
qui ma de suite mis en avant une erreur Eole (que je n'ai pas avec la version 2005)

méthode font.bold non comprise
je pense que cela doit venir de là, je vais plutôt chercher dans ce sens.

couf
0
cs_couf Messages postés 213 Date d'inscription dimanche 5 janvier 2003 Statut Membre Dernière intervention 6 janvier 2011 1
16 juin 2009 à 14:24
Re,

  Effectivement
J'ai commenté ces 2 lignes

vcell.font.bold:=true;

vcellfusion.font.bold:=true;

Et là mon programme s'excécute mais ma dernière ligne n'est plus en gras

quelqu'un aurait une idée à me soumettre s'il vous plait?

par quoi pourrais je remplacer font.bold?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
16 juin 2009 à 22:03
Si ce sont des objets TFont Windows, alors c'est Font.Style := Font.Style + [bsBold];
Si il s'agit d'un objet fonte COM, alors je ne sais pas ...

Cordialement, Bacterius !
0
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
16 juin 2009 à 22:42
Font.Style := Font.Style + [bsBold];

je ne crois pas que ça soit un tableau sinon, il y aurait un plantage...

cantador
0
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
16 juin 2009 à 22:54
Ce n'est pas un tableau, un ensemble (set of TFontStyle) non ?

Cordialement, Bacterius !
0
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
17 juin 2009 à 10:00
pour moi, c'est la même chose..
mais ça ne marche pas ici, car si l'écriture
vcellfusion.font.bold:= true;
était fausse, le compilo ne la prendrait pas
or d'après couf , ça compile..
ici, on est en en système OLE
(vMSExcel : = CreateOleObject('Excel.Application');)
c'est-à-dire on pilote EXCEL avec delphi

donc il faut trouver autre chose..

cantador
0
cs_couf Messages postés 213 Date d'inscription dimanche 5 janvier 2003 Statut Membre Dernière intervention 6 janvier 2011 1
17 juin 2009 à 18:17
Bonjour

  J'ai donc essayé
vcellfusion.font.fontstyle  :='bold';
cela ne plante pas fonctionne bien sur mon PC
mais arrivé sur le serveur  cette fois mon programme se déroule normalement
sauf que les cellules ne se mettent pas en gras
Autre chose je ne sais pas si cela vien de ma version d'excel
pour mettre en gras une cellule  sans passer par mon programme
j'ai du passer par cette manip

http://support.microsoft.com/kb/966565/fr
maintenant une question supplémentaire
le fait d'écrire
vcellfusion.font.underline:= 'xlUnderlineStyleSingle';
ne compile pas me renvoie un message d'erreur
Méthode 'selection' not supported by automation.

couf
0
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
17 juin 2009 à 19:12
vcellfusion.font.fontstyle  :='bold';

non, çà j'y crois pas, tu ne peux pas mettre du texte...
essaie ce code :
vcellfusion:=vworksheet.Range[char(65)+Vinttostr,char(67)+Vinttostr].select;

cantador
0
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
17 juin 2009 à 19:16
Pourquoi pas Cantador ? J'ai remarqué que les objets OLE et COM faisaient une utilisation soutenue des chaînes de caractères ... moi ça ne m'etonnerais pas.

Cordialement, Bacterius !
0
cs_couf Messages postés 213 Date d'inscription dimanche 5 janvier 2003 Statut Membre Dernière intervention 6 janvier 2011 1
17 juin 2009 à 19:27
Re

Ohhhhhh mon pauvre Cantador j''ai dejàbien essayé ce que tu m'as dis (nuits d'insommmnie)
 mias la réponse reste toujours brut et méchante "Undeclared identifier at line 87"
 
  Par contre et là ce sera je pense plus difficile à résoudre
mon étonnement quand
cette méthode :vcellfusion.font.underline:= true  ;
fonctionna sur le serveur, alors que  "vcellfusion.font.bold:=true;" ne fonctionne pas
comment à votre avis puis je contourner ce problème?
Faut il importer des polices dans mon programme?

couf
0
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
17 juin 2009 à 19:56
Ohhhhhh mon pauvre Cantador j''ai dejàbien essayé ce que tu m'as dis (nuits d'insommmnie)



D'abord je ne suis pas pauvre et du reste, tu as souhaité que l'on te donne des idées..donc j'essaie de mon côté..
et le select n'est pas du tout culcul la praline puisque :

InstanceDeExcel.Range[Cellules].Select;
marche très bien

et plus tu donnes d'infos, plus on a le sentiment que le problème serait ailleurs !

cantador
0
Rejoignez-nous