1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159
|
'Il faut un Tableau de String ce qui permet de copier par une seule
'instruction ce tableau dans un range destination global
'(copies par boucle prennent plus de temps si le fichier texte comporte
'beaucoup de donnnees)
Imports System
Imports System.IO
Imports System.Windows
Imports OXL = Microsoft.Office.Interop.Excel
Public Class frmTexteExcel
Private appExcel As OXL.Application
Private wbk As OXL.Workbook
Private feuilleExcel As OXL.Worksheet
Private rngGlobal As OXL.Range
Private tableString As String(,)
Private Sub btnOuvrirFichier_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnOuvrirFichier.Click
Dim fichierChemin As String = ""
Me.OpenFileDialog1.Filter = "Fichier Texte(*.txt)|*.txt"
If Me.OpenFileDialog1.ShowDialog = DialogResult.OK Then
fichierChemin = Me.OpenFileDialog1.FileName
If Len(fichierChemin) = 0 Then
MessageBox.Show("erreur fichier...")
Exit Sub
Else
tableString = LitFichier(fichierChemin, tableString)
Call TransfertVersExcel(tableString)
End If
End If
End Sub
'Lit le Fichier avec separateur point virgule
Private Function LitFichier(ByVal cheminfichier As String, ByVal objString As String(,)) As String(,)
Dim strLigne As String()
Dim nbCol As Integer = 0
Dim nbLig As Integer = 0
Using monReader As New _
Microsoft.VisualBasic.FileIO.TextFieldParser(cheminfichier)
monReader.TextFieldType = FileIO.FieldType.Delimited
monReader.SetDelimiters(";")
While Not monReader.EndOfData
Try
strLigne = monReader.ReadFields()
nbCol = 0
For Each champCourant As String In strLigne
nbCol = nbCol + 1
Next
'ligne suivante
nbLig = nbLig + 1
Catch ex As Microsoft.VisualBasic.FileIO.MalformedLineException
MsgBox("Ligne " & ex.Message & _
"non valide,sera saute....")
End Try
End While
End Using
ReDim Preserve objString(nbLig, nbCol)
Using monReader As New _
Microsoft.VisualBasic.FileIO.TextFieldParser(cheminfichier)
monReader.TextFieldType = FileIO.FieldType.Delimited
monReader.SetDelimiters(";")
Dim numLig As Integer = 0
While Not monReader.EndOfData
Try
strLigne = monReader.ReadFields()
Dim numCol As Integer = 0
For Each champCourant As String In strLigne
objString(numLig, numCol) = champCourant 'champ suivant
numCol = numCol + 1
Next
'ligne suivante
numLig = numLig + 1
Catch ex As Microsoft.VisualBasic.FileIO.MalformedLineException
MsgBox("Ligne " & ex.Message & _
"non valide,sera saute....")
End Try
End While
End Using
Return objString
End Function
Private Sub TransfertVersExcel(ByVal objString As String(,))
'Si Excel est ouvert le fermer
If appExcel IsNot Nothing Then
appExcel.Quit()
appExcel = Nothing
End If
appExcel = New OXL.Application
wbk = appExcel.Workbooks.Add()
wbk.Activate()
feuilleExcel = wbk.Worksheets(1)
'Copie en bloc vers un Range Global
Dim celluleDepart As OXL.Range = feuilleExcel.Cells(1, 1)
Dim celluleFin As OXL.Range = feuilleExcel.Cells(objString.GetUpperBound(0) + 1, objString.GetUpperBound(1) + 1)
rngGlobal = feuilleExcel.Range(celluleDepart, celluleFin)
rngGlobal.Value = objString
'Mise en forme du Range
rngGlobal.Interior.Color = ColorTranslator.ToOle(Color.Yellow)
rngGlobal.BorderAround(LineStyle:=OXL.XlLineStyle.xlDouble, Weight:=OXL.XlBorderWeight.xlMedium, ColorIndex:=Microsoft.Office.Interop.Excel.XlColorIndex.xlColorIndexAutomatic, Color:=ColorTranslator.ToOle(Color.Yellow))
rngGlobal.Font.Name = "Times New Roman"
rngGlobal.Font.Size = 12
rngGlobal.Font.Bold = True
rngGlobal.Font.Color = ColorTranslator.ToOle(Color.Red)
'Affiche Excel
appExcel.Visible = True
End Sub
'Enregistre le fichier avec separateur point virgule
Private Sub btnEnregFichier_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnEnregFichier.Click
Dim fichierChemin As String = ""
Me.SaveFileDialog1.Filter = "Fichier Texte(*.txt)|*.txt"
If Me.SaveFileDialog1.ShowDialog = DialogResult.OK Then
fichierChemin = Me.SaveFileDialog1.FileName
If Len(fichierChemin) = 0 Then
MessageBox.Show("erreur fichier...")
Exit Sub
Else
If appExcel IsNot Nothing Then
Call EcritFichier(fichierChemin)
Else
MsgBox("Il n' y a aucune donne à sauvegarder Recharger Classeur SVP....")
End If
End If
End If
End Sub
'Ecrit Classeur vers Fichier Texte
Private Sub EcritFichier(ByVal cheminfichier As String)
Dim MonWriter As System.IO.StreamWriter = New System.IO.StreamWriter(cheminfichier, False)
Dim strLigne As String = ""
Dim sep As String = ";"
Try
For i As Integer = 1 To rngGlobal.Rows.Count - 1
For j As Integer = 1 To rngGlobal.Columns.Count - 1
strLigne = strLigne & rngGlobal.Item(i, j).value & sep
Next
MonWriter.WriteLine(strLigne)
strLigne = ""
Next
MonWriter.Close()
Catch ex As Microsoft.VisualBasic.FileIO.MalformedLineException
MsgBox("Ligne " & ex.Message & _
"non valide,sera saute....")
End Try
End Sub
Private Sub btnFermeClasseur_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnFermeClasseur.Click
rngGlobal = Nothing
wbk.Close(SaveChanges:=False)
wbk = Nothing
appExcel.Quit()
appExcel = Nothing
End Sub
End Class |
Partager