[SCRIPT VB] Lecture d'un fichier Excel

La section pour partager vos scripts et demander de l'aide dans vos scénarios.

Modérateur: HoMIDoM

[SCRIPT VB] Lecture d'un fichier Excel

Messagede MathPan » 12 Mar 2015, 09:04

Suite à l’intérêt que porte plusieurs personnes à lire des données personnalisé j'ai créé ce petit scrpt qui évitera de faire un driver spécifique et difficilement générique.

Le but est de lire les cellules d'un fichier au format csv qui se li avec excel ou autre open office.

Dans l'exemple j'ai un fichier de 365 lignes (jour de l'année) et 4 colonnes (heures et minutes début jour, heures et minutes fin jour ,) intitulé heuresoleil2.csv:

Capture heuresoleil2.JPG
Capture heuresoleil2.JPG (53.68 Kio) Vu 4001 fois


Le scriptVB récupère le tableau de donnée complet et suivant le jour de l'année met les 4 cellules correspondantes dans 4 composants. A vous de comparer ces composants au heures en cours pour déclencher des evènements (now.hour et now.minut), ce qui donne ceci dans les logs, pour aujourd'hui 72eme jour de l'année:

12/03/2015 00:11:33 DEBUG SERVEUR Macro:Action Lancement de la macro Heure Soleil Aujourd'hui
12/03/2015 00:11:34 INFO SCRIPT Macro TEST Excel HeureDebut = 7
12/03/2015 00:11:34 INFO SCRIPT Macro TEST Excel MinuteDebut = 21
12/03/2015 00:11:34 INFO SCRIPT Macro TEST Excel HeureFin = 19
12/03/2015 00:11:34 INFO SCRIPT Macro TEST Excel MinuteFin = 6

N'oubliez pas de renseigner:
- l'ID de vos composants
- le nom de votre fichier csv (filepath)
- le nombre de colonnes de votre fichier (nb_col)
- le nombre de lignes de votre fichier (nb_lig)
- la dimension de la table (nb_lig,nb_col)
- la dimension de la ligne (nb_lig)



Voici le script:
Code: Tout sélectionner
Imports System
Imports System.IO
Imports System.Windows.Forms
Imports Microsoft.VisualBasic
Imports Homidom
Namespace Dynam
'Ne pas supprimer cette class
Public Class DynamicCode

'Ne pas supprimer cette function
Public Function ExecuteCode(paramarray prmParameters() as object) as object
Dim Serveur as Homidom.Homidom.server
Serveur=prmParameters(0)

Dim filepath As String
filepath = "C:\heure_soleil2.csv"
Dim separateur As String
separateur = ";"

Dim ligne_de_titre As Boolean
ligne_de_titre = False

Dim nb_col As Integer
nb_col = 4
Dim nb_lig As Integer
nb_lig = 365

Dim table(365, 4) As String

Dim ligne(4) As String

Dim element

Dim index_ligne As Integer
If ligne_de_titre Then index_ligne = 1 Else index_ligne = index_ligne
   
Dim index_col As Integer
index_col = 0

Dim monfichier_existe As Boolean
monfichier_existe = My.Computer.FileSystem.FileExists(filepath)
       
If monfichier_existe Then
    dim lirecsv = new Microsoft.VisualBasic.FileIO.TextFieldParser(filepath)
    lirecsv.SetDelimiters (separateur)
    Do While (Not lirecsv.EndOfData)  'tant que pas fin de fichier

        ligne = lirecsv.ReadFields() ' on lit tous les champs de la ligne en cours
        'Ă©limine la premiĂ©re ligne si c'est la ligne des titres
        If Not ligne_de_titre Then ' au premier cycle on ne fait rien
            For Each element In ligne
                table(index_ligne, index_col) = element
                index_col = index_col + 1
                If index_col > nb_col Then
                    Serveur.log(1, 2, "Macro TEST Excel", "trop de colonnes dans le fichier")
                    Exit Function
                End If
            Next
            index_ligne = index_ligne + 1
            index_col=0
            If index_ligne > nb_lig Then
                Serveur.log(1, 2, "Macro TEST Excel", "trop de lignes dans le fichier")
                Exit Function
            End If
        End If
        ' mise Ă  vrai lorsque la premiĂ©re ligne est passĂ©
        ligne_de_titre = False
    Loop
Else
    Serveur.log(1, 2, "Macro TEST Excel", "impossible de trouver le fichier")
End If

' Day of Year
Dim doy as integer= DateDiff("d", DateValue("01/01/" & Format$(Now, "yyyy")), Now) + 1

Dim HeureDebut as integer =table(doy,0)
Dim MinuteDebut as integer =table(doy,1)
Dim HeureFin as integer =table(doy,2)
Dim MinuteFin as integer =table(doy,3)

Serveur.ChangeValueOfDevice("123456789","xxxxxxxxxxxxxxxxxxxxxxxxx",HeureDebut)
Serveur.ChangeValueOfDevice("123456789","xxxxxxxxxxxxxxxxxxxxxxxxx",MinuteDebut)
Serveur.ChangeValueOfDevice("123456789","xxxxxxxxxxxxxxxxxxxxxxxxx",HeureFin)
Serveur.ChangeValueOfDevice("123456789","xxxxxxxxxxxxxxxxxxxxxxxxx",MinuteFin)

Serveur.log(1, 2, "Macro TEST Excel", "HeureDebut = " & HeureDebut)
Serveur.log(1, 2, "Macro TEST Excel", "MinuteDebut = " & MinuteDebut)
Serveur.log(1, 2, "Macro TEST Excel", "HeureFin = " & HeureFin)
Serveur.log(1, 2, "Macro TEST Excel", "MinuteFin = " & MinuteFin)

End function

End class
End Namespace
HoMIDoM- Le système complet et gratuit de domotique pour la maison
ModbusTCP avec automates WAGO pour gestion Ă©clairage, prise, VMCDF, Chauffage elec, volet de toute la maison
RFXtrx pour gestion des télécommandes, des sondes et pinces ampèremétrique
Téléinfo EDF - Station Netatmo - Thermostat et détecteur Nest
Client Imperihome - HoMIWpf - SARAH - IFTTT - RPI avec KODI - GoogleCalendar
Avatar de l’utilisateur
MathPan
Guru de domotique
 
Messages: 124
Inscription: 16 AoĂ» 2012, 16:14

Re: [SCRIPT VB] Lecture d'un fichier Excel

Messagede MathPan » 12 Mar 2015, 10:33

Pour créer un fichier csv à partire d'excel:

-Faire "Enregistrer sous" puis sélectionner le Type "CSV (Séparateur:Point Virgule)(*.csv)"

CaptureenregCSV.JPG
CaptureenregCSV.JPG (12.85 Kio) Vu 3991 fois


-Cliquer sur "Enregistrer" et vous aurez ce message:

Capturemsg1csv.JPG
Capturemsg1csv.JPG (29.4 Kio) Vu 3991 fois


-Cliquer sur "Ok" et vous aurez ce message:

Capturemsg2csv.JPG
Capturemsg2csv.JPG (30.86 Kio) Vu 3991 fois


Cliquez sur "OUI"

ATTENTION:
Fermer le fichier sans faire enregistrer et Excel vous demande si vous voulez enregistrer au format excel et la répondez "NON"

Pour contrĂ´ler que votre fichier csv est correcte ouvrer le avec blocNote et vous aurez des points virgules Ă  la place des colonnes.
HoMIDoM- Le système complet et gratuit de domotique pour la maison
ModbusTCP avec automates WAGO pour gestion Ă©clairage, prise, VMCDF, Chauffage elec, volet de toute la maison
RFXtrx pour gestion des télécommandes, des sondes et pinces ampèremétrique
Téléinfo EDF - Station Netatmo - Thermostat et détecteur Nest
Client Imperihome - HoMIWpf - SARAH - IFTTT - RPI avec KODI - GoogleCalendar
Avatar de l’utilisateur
MathPan
Guru de domotique
 
Messages: 124
Inscription: 16 AoĂ» 2012, 16:14


Retourner vers Scripts VB

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 2 invités

Copyright © 2011 - Touteladomotique.com - Tous droits rĂ©servĂ©s
Les blogs partenaires : Abavala, Domo-Blog, Domotique34, Maison et Domotique


cron