2009-11-12 6 views
3

Ce code va lire une ligne d'un fichier texte:Comment lire les lignes d'un fichier texte un par un avec le code Power Point VBA?

set file = CreateObject("Scripting.FileSystemObject").OpenTextFile("c:\number.txt", 1) 
text = file.ReadLine 
MsgBox text 

Comment puis-je faire lire à plusieurs reprises une ligne après l'autre à partir du même fichier? Je suppose, je devrais utiliser une boucle ici, non? J'en ai besoin pour lire la première ligne du fichier à la première itération, la deuxième ligne à la deuxième itération, la troisième à la troisième et ainsi de suite jusqu'à ce que toutes les lignes aient été lues. Comment puis-je le faire? Ajout important: J'ai besoin que le code fonctionne sur chaque ligne une par une - pas toutes en même temps!

Répondre

7

Utilisez la méthode ReadAll():

text = file.ReadAll 

(Peut-être d'intérêt: FileSystemObject Sample Code)

Avec une boucle:

Const ForReading = 1, ForWriting = 2, ForAppending = 8 
Dim fso, MyFile, FileName, TextLine 

Set fso = CreateObject("Scripting.FileSystemObject") 

FileName = "c:\testfile.txt" 

Set MyFile = fso.OpenTextFile(FileName, ForReading) 

'' Read from the file 
Do While MyFile.AtEndOfStream <> True 
    TextLine = MyFile.ReadLine 

    '' Do stuff to TextLine 

Loop 
MyFile.Close 
+0

La réponse parfaite – AymericB

0

Vous pouvez ajouter une référence * à Windows Script Host Modèle objet, il vous aidera avec l'objet FileSystemObject, car vous pouvez alors dire:

Dim fs As FileSystemObject 
Dim f As TextStream 

Ce qui vous permettra d'utiliser intellisense pour voir les différentes propriétés et le navigateur d'objets pour explorer la bibliothèque.

* Dans la fenêtre de code, choisissez Outils, Références et cochez la case à côté de la bibliothèque que vous voulez.

+0

I Je suis désolé, c'est trop compliqué pour moi - je suis juste un noob. Je suis sûr, cependant, qu'il devrait y avoir un moyen dans VBA, quelque chose comme une fonctionnalité réelle. – brilliant

+0

Mitch Blé vous a donné la réponse, ce sont des commentaires supplémentaires, comme vous l'avez mentionné dans un post précédent que vous souhaitez apprendre VBA. Le navigateur d'objets est une grande aide à l'apprentissage, tout comme intellisense. – Fionnuala

2

Si pour une raison quelconque vous souhaitez utiliser l'in-built routines de traitement de fichiers VBA, vous pouvez utiliser le code comme ceci:

Sub ReadAFileLineByLine() 
    Dim InStream As Integer 
    InStream = FreeFile() 
    Open "C:/tmp/fastsynchtoquesttry_quest.txt" For Input As InStream 

    Dim CurrLine As String 
    Do While True 
     Line Input #InStream, CurrLine 
     ' do stuff to CurrLine 
     If EOF(InStream) Then Exit Do 
    Loop 

    Close #InStream 
End Sub 
+0

Merci, Jon. Je suis assez surpris - il semble que vous avez été à une autre question à moi et est venu ici pour partager ce code. (Je l'ai deviné par la première ligne, que j'ai moi-même créée et qui n'était pas ici dans le code de Mitch Wheat sur cette page.) Merci pour ce code que vous avez partagé ici. Il me faudra encore du temps pour l'étudier, mais je suis sûr de le faire. – brilliant

+0

Juste une coïncidence, je pense ... Je ne fais que citer les meilleurs que je peux, mais je suis content que quelqu'un d'autre pense comme moi! Cool de voir que tu fais du powerpoint vba, c'est toujours intéressant quand je fais ça ... –

-1

j'ai écrit une routine VBA qui lit un fichier texte et insérer une nouvelle diapositive pour chaque phrase du texte.

D'abord, à la diapositive n ° 1, ajouter un bouton qui appelle la macro appelée "générer"

code source va:

Const DEFAULT_SLIDE = 1 ' the slide to copy the layout style from 
Const MARGIN = 50  ' margin of the generated textbox 

Sub generate() 
    Dim txtFile As String ' text file name 
    Dim fileNo As Integer ' file handle 
    Dim buffer As String ' temporary string buffer 
    Dim sentence() As String ' the main array to save sentences 
    Dim i, total As Integer 
    Dim myLayout As CustomLayout 
    Dim mySlide As Slide 
    Dim myShape As Shape 
    Dim myWidth, myHeight As Integer 'slide width and height 


    txtFile = "text2sample.txt" 
    txtFile = ActivePresentation.Path & "\" & txtFile 'textfile should be in the same Dir as this ppt 

    If Len(Dir$(txtFile)) = 0 Then 
     MsgBox txtFile & " file not found." 
     Exit Sub 
    End If 

    'Initialize array 
    ReDim sentence(0) 

    'get file handle number 
    fileNo = FreeFile() 
    Open txtFile For Input As #fileNo 

    i = 0 
    Do While Not EOF(fileNo) 
     Line Input #fileNo, buffer 'read & save sentences line by line 
     ReDim Preserve sentence(i + 1) ' increase 1 more array 
     sentence(i) = LTrim(RTrim(buffer)) 
     i = i + 1 
    Loop 
    Close #fileNo 

    total = i 
    Randomize ' for random color 

    With ActivePresentation.PageSetup 
     myWidth = .SlideWidth - MARGIN 'get width and height 
     myHeight = .SlideHeight - MARGIN 
    End With 

    For i = 0 To total 
     Set myLayout = ActivePresentation.Slides(DEFAULT_SLIDE).CustomLayout 
     'add a slide like slide #1 
     Set mySlide = ActivePresentation.Slides.AddSlide(DEFAULT_SLIDE + 1 + i, myLayout) 
     'add a textbox with margin 
     Set myShape = ActivePresentation.Slides(DEFAULT_SLIDE + 1 + i).Shapes. _ 
     AddTextbox(msoTextOrientationHorizontal, MARGIN, MARGIN, myWidth, myHeight) 
     With myShape 
      'add a sentence 
      .TextFrame.TextRange.Text = sentence(i) 
      .TextFrame.TextRange.Font.Size = 60 
      ' color 255 is too bright. Pick a less bright color (200) 
      .TextFrame.TextRange.Font.Color.RGB = RGB(Int(Rnd * 200), Int(Rnd * 200), Int(Rnd * 200)) 
      .TextFrame.TextRange.Font.Bold = msoTrue 
      .TextFrame.TextRange.Font.Shadow = msoTrue 
      ' If you want to change the color of the shape 
      '.Fill.ForeColor.RGB = RGB(Int(Rnd * 200), Int(Rnd * 200), Int(Rnd * 200)) 
      '.Fill.BackColor.RGB = RGB(Int(Rnd * 200), Int(Rnd * 200), Int(Rnd * 200)) 
      '.Fill.Solid 
     End With 
     'add a textbox for slideshow progress ex) 1/100 
     Set myShape = ActivePresentation.Slides(DEFAULT_SLIDE + 1 + i).Shapes. _ 
     AddTextbox(msoTextOrientationHorizontal, 0, 0, 150, 20) 
     With myShape 
      .TextFrame.TextRange.Text = "(" & i & " /" & total & ")" 
      .TextFrame.TextRange.Font.Size = 20 
      .TextFrame.TextRange.Font.Color.RGB = RGB(100, 100, 100) 
     End With 
    Next 

    MsgBox total & " Slides were added.", vbInformation 

End Sub 

Télécharger le fichier: http://konahn.tistory.com/attachment/[email protected]

Questions connexes