Page 1 sur 1

Pour ceux qui Cherche a importer un fichier Excel

MessagePublié: 23 Mars 2011 à 09:36
par madani
Bonjour,

Voilà j'ai cherché et fait ce programme en cherchant à gauche et à droite.

Je poste ceci :

Voici un programme qui fonctionne et qui importe un fichier Excel dans lotus.
Bien évidemment le fichier Excel doit correspondre au masque (document) dans lotus note.

Fonction en V8 et V7.

A mettre dans un bouton d'une vue simple.
Si sa peut aidé: (le code n'est pas forcément bien écris mais fonctionne)
Code : Tout sélectionner
Sub Click(Source As Button)
   Const DEFAUTREP="c:\" 'le chemin par défaut a ouverture de la boite de dialogue
   Const DEFAUTEXT="Fichiers Excel|*.xls|Tous|*.*" ' le type de fichier que la personne a le droit de séléctionner
   Dim fichier As Variant
   Dim view As NotesView
   Dim create( 1 To 16) As String'on créer un tableau
   Dim i As Integer
   Dim ws As New NotesUIWorkspace
   '---------------------------------------
   Dim session As NotesSession
   Dim db As NotesDatabase
   Dim doc As NotesDocument
   Dim XLApp As Variant
   Dim  XLWorkBook As Variant
   Dim ActiveWorkBook As Variant
   Dim Sheet As Variant
   Dim Cellule As Variant
   Dim colonne As Long
   Dim ligne As Long
   On Error Goto Erreur
'// Initialisation de la session, base actuelle et vue
   Set session=New NotesSession
   Set db = session.CurrentDatabase
   Set view = db.GetView("Tous documents")
'   // Initialisation de l'objet OLE ou Instance OLE
'   // Ouverture de l'application Excel sans ouverture de classeur
   '// On fourni le fichier
   fichier = ws.OpenFileDialog(False, "Liste des fichiers", DEFAUTEXT, DEFAUTREP)
   If Isempty(fichier) Then Exit Sub  '// cas si l'utilisateur abandonne la sélection du fichier   
   
   Set XLApp = CreateObject("Excel.Application")
   XLApp.Visible = False
   XLApp.DisplayAlerts = False
   Set XLWorkBook=XLApp.workbooks
   XLWorkBook.Open  fichier
' Ou mettre en dure le chemin du fichier Excel "C:\\modèle\Classeur1.xls"
   Set ActiveWorkBook=XLApp.ActiveWorkBook
   Set Sheet=ActiveWorkBook.ActiveSheet
   Set Cellule=Sheet.Cells
   'initialisation des variables pour le traitement
   Ligne=2 'je commence à la ligne 2 généralement ligne 1 réserve le nom des colonnes
   Colonne=1
   i=1
   Do While Not Isempty(Cellule(Ligne,Colonne).Value)
      For Colonne=1 To 16
         'Print Cellule(Ligne,Colonne).Value
         Create(i)=Trim(Cellule(Ligne,Colonne).Value)
                         'on insère les valeurs dans un tableau
         i=i+1
      Next
      Call createDocument(create(),db)'on appel la fonction pour créer le document
      i=1 'on reinitialise i car on crée un autre tableau pour un autre document
      Colonne = 1'on remet colonne a 1
      Ligne=Ligne + 1 'on passe a la ligne suivante
      Print"Nombre de Lignes lus :" & Cstr(Ligne-2)
   Loop
   Call view.Refresh 'on rafraichit la vue
   ActiveWorkBook.Close
   XLApp.Quit
   Set xlapp=Nothing 'Stop l'automation excel
   Set db=Nothing
   Exit Sub
Erreur:
   XLApp.Quit
   Set xlapp=Nothing 'Stop l'automation excel
   Set db=Nothing
   Exit Sub
End Sub




Ma fonction celle-ci est spécifique à mon masque adapté pour le votre:

Code : Tout sélectionner
Function createDocument(FieldArray() As String, db As notesdatabase) As Integer
   On Error Goto Erreur
   'Fonction qui crée un document et insère les différents informations
   'Dim session As New notessession
   'Dim db As notesdatabase
   'Set db = session.currentdatabase
   Dim doc As New notesdocument(db)
   If FieldArray(1) <> ""   Then 'And FieldArray(1)<309999
      doc.Form = "Document"
      Call doc.ReplaceItemValue("E_Responsable_Commercial",FieldArray(1))
      Call doc.ReplaceItemValue("E_pays",FieldArray(2))
      Call doc.ReplaceItemValue("E_region",FieldArray(3))
      Call doc.ReplaceItemValue("E_Departement",FieldArray(4))
      Call doc.ReplaceItemValue("E_Ville",FieldArray(5))
      Call doc.ReplaceItemValue("E_Categorie",FieldArray(6))
      Call doc.ReplaceItemValue("E_Societe",FieldArray(7))
      Call doc.ReplaceItemValue("E_nom",FieldArray(8))
      Call doc.ReplaceItemValue("E_prenom",FieldArray(9))
      Call doc.ReplaceItemValue("E_fonction",FieldArray(10))
      Call doc.ReplaceItemValue("E_numero_fixe",FieldArray(11))
      Call doc.ReplaceItemValue("E_fax",FieldArray(12))
      Call doc.ReplaceItemValue("E_numero_portable",FieldArray(13))
      Call doc.ReplaceItemValue("E_mail",FieldArray(14))
      Call doc.ReplaceItemValue("E_addresse",FieldArray(15))
      Call doc.ReplaceItemValue("E_Date_Derniere_Visite",FieldArray(16))
      Call doc.save(1,0)
   End If
Erreur:
   'Set db=Nothing
   Exit  Function
End Function



Si quelqu'un a un programme qui permet de créer un masque spécifique au fichier Excel je suis preneur.

voilà bonne journée a tous

MessagePublié: 23 Mars 2011 à 09:56
par Michael DELIQUE
salut

Si quelqu'un a un programme qui permet de créer un masque spécifique au fichier Excel je suis preneur.


désolé je comprend pas

MessagePublié: 23 Mars 2011 à 10:18
par madani
Désolé je me suis mal exprimé même si je pense que c'est pas possible.

Si quelqu'un a un programme qui permet de créer un modèle de document spécifique au fichier Excel.

Exemple fichier Excel comprend 1 colonne nom , 1 colonne prénom.

Alors je voudrais importer sans créer de document au préalable que sa crée un document qui correspond a mon fichier.

Mais je ne pense pas que sa soit possible.

MessagePublié: 23 Mars 2011 à 10:27
par Michael DELIQUE
importer sans créé de document ?

MessagePublié: 23 Mars 2011 à 11:01
par madani
Nan pas exactement mais crée un document spécifique si j'ai 5 fichier Excel, je voudrais qu'il me crée 5 documents différer mais sans avoir changé de masque.

Mais je ne pense pas que sa soit faisable ne t'embête pas avec ma question mais merci comme même.

Une autre question qui a rien a voir si tu peux m'aider :

je dois envoyer des mails et problème de carnet addresse résolue a moitié.

Je fais partir mes mails depuis mon serveur avec un agent et j'exécute dans mon document un bouton se bouton comporte ceci :

Code : Tout sélectionner
@Command([EditDocument]; "1");
@Command( [ToolsRunMacro] ;"(Refus envoie mail)" );
@Command([FileSave]) & @Command([FileCloseWindow])


Et j'aimerai savoir s'il y a possibilité de faire actionner un cette agent par une notre manière car cette manière ne permet pas de laisser le document ouvert @Command( [ToolsRunMacro] est toujours suivie de @Command([FileSave]) & @Command([FileCloseWindow]) dans un document sinon il fonctionne pas.

Je cherche je ne trouve pas on parle en lotuscript de agentrunonserver mais sa marche pas.

Si tu as une idée je suis preneur merci Michael.

MessagePublié: 23 Mars 2011 à 11:20
par Michael DELIQUE
re,

Nan pas exactement mais crée un document spécifique si j'ai 5 fichier Excel, je voudrais qu'il me crée 5 documents différer mais sans avoir changé de masque.


je vois pas le probleme : autant de doc que de fichier suffit de rajouter une boucle

pour le second ouvre un autre post ça sera plus simple

MessagePublié: 29 Mars 2011 à 23:01
par roubech
madani a écrit:si j'ai 5 fichier Excel, je voudrais qu'il me crée 5 documents différer

si je comprends bien ta question, tu aimerai coder un import de fichier Excel sans connaitre au préalable le nombre de colonne et le nom des champs correspondant et sans créer de masque correspondant.
C'est possible, si tu considère que la premièer ligne du fichier Excel contient le nom des champs (sans accents, sans espace), tu peux créer des documents pour chacune des lignes qui suivent, avec un code qui ressemblera au tiens. Par contre, sans masque dans la base, tu ne pourra pas afficher les documents créés.
Sinon, tu peux utiliser toujours les mêmes nom de champs, par exemple champ1, champ2, ... et stocker le nom des champ dans des champs libelle1, libelle2, ... et dans ce cas, un masque générique qui affiche libelle1 : champ1 ...

Sinon, as-tu regardé sur OpnNTF le projet Data Moving Animal
http://www.openntf.org/internal/home.ns ... 2F003D4BA7