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:
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