Pas de problème (pb), que du PowerBuilder (PB) ^^

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 03-02-2010 15:54:58

ggjedi54  
Bienfaiteur du site
Date d'inscription: 15-06-2009
Messages: 14
Pépites: 60
Banque: 0

[RESOLU] Compter les lignes d'une feuille Excel

Bonjour,

j'ai trouvé un morceau de code sur votre forum qui permets de compter le nombre de ligne d'une feuille excel ouverte à partir d'un lien OLE

Code: pb

ll_nbrlignes  = lole_excel.application.workbooks(ls_file).worksheets(1).UsedRange.Rows.Count

mais j'ai lemessage suivant : Error calling external object function workbooks at lin50  ( ci dessus )

Auriez vous une idée ?

Merci d'avance ...

Dernière modification par ggjedi54 (04-02-2010 09:33:12)

Hors ligne

 

#2 03-02-2010 16:59:41

erasorz  
Admin
Lieu: Babylone
Date d'inscription: 23-11-2006
Messages: 5121
Pépites: 97,197
Banque: 2,147,483,647

Re: [RESOLU] Compter les lignes d'une feuille Excel

Bonjour, as-tu d'abord ouvert le fichier ?

Code: pb

lo_ole = CREATE oleobject
lo_ole.ConnectToNewObject("excel.application")
lo_ole.workbooks.open(ls_file)

N'envoyez jamais un humain faire le travail d'un programme.

Hors ligne

 

#3 04-02-2010 08:23:18

ggjedi54  
Bienfaiteur du site
Date d'inscription: 15-06-2009
Messages: 14
Pépites: 60
Banque: 0

Re: [RESOLU] Compter les lignes d'une feuille Excel

oui j'ai repris une fonction que j'ai trouvé sur le forum ...
j'ai verifié pour l'initialisation et l'ouvertre du fichier cela semble correcte..

pourtant le probléme persiste ...
J'ai essayé ça  :

Code: pb

lole_sheet = CREATE oleobject
lole_sheet.ConnectToNewObject("excel.application")
lole_sheet.workbooks.open(ls_docname)
lole_sheet.application.workbooks(ls_docname).worksheets(ls_docname).UsedRange.Rows.Count

code de la fonction troué sur le forum :

Code: pb

long       ll_nbrlignes, ll_nbrcols, ll_nbrsheet, ll_nbrclasseur
long      ll_i, ll_j
string    ls_waitmsg, ls_path, ls_file, ls_range, ls_columnname
any      ls_columncontent[]

s_filedata  lstr_filedata[]
OLEObject  lole_excel

lole_excel = CREATE OLEObject


 IF lole_excel.ConnectToObject( as_filename ) = 0 THEN
    
  // Récupération informations sur le fichier excel
  
  // Remarque : Il faut préciser nominativement le nom du classeur (workbooks) et non mettre l'indice 1
  // En cas d'instance d'excel ouverte avec un fichier, on importe ce fichier et non celui désiré

  // Nombre de colonneslole_sheet = lole_excel_taux.application.workbooks(1).worksheets(1)
  ll_nbrcols    =10
  // Nombre de lignes
  ll_nbrlignes  = lole_excel.application.workbooks(as_filename).worksheets(1).UsedRange.Rows.Count
  
  IF ll_nbrcols = 0 OR ll_nbrlignes = 0 THEN 
    lole_excel.DisconnectObject()
    DESTROY lole_excel
    RETURN -4 // Feuille de calcul vide
  END IF  
  
  
  FOR ll_j = 1 TO ll_nbrcols
        
    // Nom de la colonne sous la forme : $A:$A
    ls_columnname = lole_excel.application.workbooks(ls_file).worksheets(1).Columns(ll_j).Address
    // Extraction de la dénomination alphabétique uniquement de la colonnne : $A:$A => A
    ls_columnname = Mid( ls_columnname, 2, Pos(ls_columnname, ':') - 2)
    
    // Construction de la plage de données à extraire de la colonne => ex : "A1:A3300"
    ls_range = ls_columnname + '1:' + ls_columnname + string(ll_nbrlignes)
    
    // Extraction du contenu de la colonne
    ls_columncontent = lole_excel.application.workbooks(ls_file).worksheets(1).Range(ls_range).Value
      
    FOR ll_i = 1 TO ll_nbrlignes
            
      lstr_filedata[ll_i].ss_data[ll_j] = trim(string(ls_columncontent[ll_i]))
            
      // Cas particulier de l'import du plan comptable API
      // Colonne contenant la valeur VRAI ou FAUX => EXCEL l'interprète comme la valeur logique
      // En lecture, on obtient les valeurs true ou false et non la chaîne VRAI ou FAUX
      CHOOSE CASE lower(lstr_filedata[ll_i].ss_data[ll_j])
        CASE "false"
          lstr_filedata[ll_i].ss_data[ll_j] = "0"
        CASE "true"
          lstr_filedata[ll_i].ss_data[ll_j] = "1"
      END CHOOSE    
      
     IF IsNull(lstr_filedata[ll_i].ss_data[ll_j]) THEN lstr_filedata[ll_i].ss_data[ll_j] = ""
      
    
    NEXT
    
    
  NEXT
  
  lole_excel.DisconnectObject()
ELSE
  RETURN -1
END IF  

DESTROY lole_excel

astr_filedata = lstr_filedata

RETURN (1)

Dernière modification par ggjedi54 (04-02-2010 09:32:51)

Hors ligne

 

#4 04-02-2010 08:43:27

Aloneg  
Membre Geek
Date d'inscription: 14-02-2007
Messages: 30
Pépites: 1,182
Banque: 37,934,892,619

Re: [RESOLU] Compter les lignes d'une feuille Excel

Chez moi ceci fonctionne bien :

ll_nb_ligne  = l_ole.Application.ActiveSheet.UsedRange.Rows.Count

Hors ligne

 

#5 04-02-2010 09:08:27

ggjedi54  
Bienfaiteur du site
Date d'inscription: 15-06-2009
Messages: 14
Pépites: 60
Banque: 0

Re: [RESOLU] Compter les lignes d'une feuille Excel

Aloneg a écrit:

Chez moi ceci fonctionne bien :

ll_nb_ligne  = l_ole.Application.ActiveSheet.UsedRange.Rows.Count

Genial sa fonctionne  !!!


MErci beaucoup pour l'info

Hors ligne

 

#6 04-02-2010 09:23:05

erasorz  
Admin
Lieu: Babylone
Date d'inscription: 23-11-2006
Messages: 5121
Pépites: 97,197
Banque: 2,147,483,647

Re: [RESOLU] Compter les lignes d'une feuille Excel

 


N'envoyez jamais un humain faire le travail d'un programme.

Hors ligne

 

#7 04-02-2010 09:45:04

ggjedi54  
Bienfaiteur du site
Date d'inscription: 15-06-2009
Messages: 14
Pépites: 60
Banque: 0

Re: [RESOLU] Compter les lignes d'une feuille Excel

c'est fais  ...

Hors ligne

 

#8 04-02-2010 10:00:30

wazou1812  
Modératrice
Award: bf
Date d'inscription: 24-05-2006
Messages: 610
Pépites: 2,097
Banque: 3,536,631,712,504

Re: [RESOLU] Compter les lignes d'une feuille Excel

ggjedi54 a écrit:

oui j'ai repris une fonction que j'ai trouvé sur le forum ...
j'ai verifié pour l'initialisation et l'ouvertre du fichier cela semble correcte..

pourtant le probléme persiste ...
J'ai essayé ça  :

Code: pb

lole_sheet = CREATE oleobject
lole_sheet.ConnectToNewObject("excel.application")
lole_sheet.workbooks.open(ls_docname)
lole_sheet.application.workbooks(ls_docname).worksheets(ls_docname).UsedRange.Rows.Count

code de la fonction troué sur le forum :

L'erreur dans la partie supérieure est que le fichier (workbook) et la feuille (worksheet) ne s'appellent surement pas pareil.



Code: pb

long       ll_nbrlignes, ll_nbrcols, ll_nbrsheet, ll_nbrclasseur
long      ll_i, ll_j
string    ls_waitmsg, ls_path, ls_file, ls_range, ls_columnname
any      ls_columncontent[]

s_filedata  lstr_filedata[]
OLEObject  lole_excel

lole_excel = CREATE OLEObject


 IF lole_excel.ConnectToObject( as_filename ) = 0 THEN
    
  // Récupération informations sur le fichier excel
  
  // Remarque : Il faut préciser nominativement le nom du classeur (workbooks) et non mettre l'indice 1
  // En cas d'instance d'excel ouverte avec un fichier, on importe ce fichier et non celui désiré

  // Nombre de colonneslole_sheet = lole_excel_taux.application.workbooks(1).worksheets(1)
  ll_nbrcols    =10
  // Nombre de lignes
  ll_nbrlignes  = lole_excel.application.workbooks(as_filename).worksheets(1).UsedRange.Rows.Count
  
  IF ll_nbrcols = 0 OR ll_nbrlignes = 0 THEN 
    lole_excel.DisconnectObject()
    DESTROY lole_excel
    RETURN -4 // Feuille de calcul vide
  END IF  
  
  
  FOR ll_j = 1 TO ll_nbrcols
        
    // Nom de la colonne sous la forme : $A:$A
    ls_columnname = lole_excel.application.workbooks(ls_file).worksheets(1).Columns(ll_j).Address
    // Extraction de la dénomination alphabétique uniquement de la colonnne : $A:$A => A
    ls_columnname = Mid( ls_columnname, 2, Pos(ls_columnname, ':') - 2)
    
    // Construction de la plage de données à extraire de la colonne => ex : "A1:A3300"
    ls_range = ls_columnname + '1:' + ls_columnname + string(ll_nbrlignes)
    
    // Extraction du contenu de la colonne
    ls_columncontent = lole_excel.application.workbooks(ls_file).worksheets(1).Range(ls_range).Value
      
    FOR ll_i = 1 TO ll_nbrlignes
            
      lstr_filedata[ll_i].ss_data[ll_j] = trim(string(ls_columncontent[ll_i]))
            
      // Cas particulier de l'import du plan comptable API
      // Colonne contenant la valeur VRAI ou FAUX => EXCEL l'interprète comme la valeur logique
      // En lecture, on obtient les valeurs true ou false et non la chaîne VRAI ou FAUX
      CHOOSE CASE lower(lstr_filedata[ll_i].ss_data[ll_j])
        CASE "false"
          lstr_filedata[ll_i].ss_data[ll_j] = "0"
        CASE "true"
          lstr_filedata[ll_i].ss_data[ll_j] = "1"
      END CHOOSE    
      
     IF IsNull(lstr_filedata[ll_i].ss_data[ll_j]) THEN lstr_filedata[ll_i].ss_data[ll_j] = ""
      
    
    NEXT
    
    
  NEXT
  
  lole_excel.DisconnectObject()
ELSE
  RETURN -1
END IF  

DESTROY lole_excel

astr_filedata = lstr_filedata

RETURN (1)

Hors ligne

 

#9 04-02-2010 10:22:39

ggjedi54  
Bienfaiteur du site
Date d'inscription: 15-06-2009
Messages: 14
Pépites: 60
Banque: 0

Re: [RESOLU] Compter les lignes d'une feuille Excel

Effectivement c'est une erreur suite à un copier/coller  ...
Mais j'ai une erreur même avec cette correction

Merci quand même

Hors ligne

 

Pied de page des forums

Propulsé par FluxBB 1.2.22