Exécution programme hors Environnement [Résolu]

Signaler
Messages postés
213
Date d'inscription
dimanche 5 janvier 2003
Statut
Membre
Dernière intervention
6 janvier 2011
-
Messages postés
213
Date d'inscription
dimanche 5 janvier 2003
Statut
Membre
Dernière intervention
6 janvier 2011
-
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

Messages postés
213
Date d'inscription
dimanche 5 janvier 2003
Statut
Membre
Dernière intervention
6 janvier 2011
1
  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
Messages postés
4719
Date d'inscription
dimanche 26 février 2006
Statut
Modérateur
Dernière intervention
1 février 2021
14
bonsoir,
idée :
si comini est une unité, il faut l'ajouter au projet et non copier le .pas..

cantador
Messages postés
213
Date d'inscription
dimanche 5 janvier 2003
Statut
Membre
Dernière intervention
6 janvier 2011
1
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
Messages postés
213
Date d'inscription
dimanche 5 janvier 2003
Statut
Membre
Dernière intervention
6 janvier 2011
1
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?
Messages postés
3793
Date d'inscription
samedi 22 décembre 2007
Statut
Membre
Dernière intervention
3 juin 2016
9
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 !
Messages postés
4719
Date d'inscription
dimanche 26 février 2006
Statut
Modérateur
Dernière intervention
1 février 2021
14
Font.Style := Font.Style + [bsBold];

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

cantador
Messages postés
3793
Date d'inscription
samedi 22 décembre 2007
Statut
Membre
Dernière intervention
3 juin 2016
9
Ce n'est pas un tableau, un ensemble (set of TFontStyle) non ?

Cordialement, Bacterius !
Messages postés
4719
Date d'inscription
dimanche 26 février 2006
Statut
Modérateur
Dernière intervention
1 février 2021
14
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
Messages postés
213
Date d'inscription
dimanche 5 janvier 2003
Statut
Membre
Dernière intervention
6 janvier 2011
1
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
Messages postés
4719
Date d'inscription
dimanche 26 février 2006
Statut
Modérateur
Dernière intervention
1 février 2021
14
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
Messages postés
3793
Date d'inscription
samedi 22 décembre 2007
Statut
Membre
Dernière intervention
3 juin 2016
9
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 !
Messages postés
213
Date d'inscription
dimanche 5 janvier 2003
Statut
Membre
Dernière intervention
6 janvier 2011
1
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
Messages postés
4719
Date d'inscription
dimanche 26 février 2006
Statut
Modérateur
Dernière intervention
1 février 2021
14
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