English 中文(简体)
How to read lines from a text file one by one with Power Point VBA code?
原标题:

This code will read a line from a text file:

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

How can I make it read repeatedly one line after another from the same file? I guess, I should use a loop here, right? I need it to read the first line from the file at the first iteration, the second line at the second iteration, the third one at the third and so on till all the lines have been read. How can I do it?

Important addition: I need the code to operate on each line one by one - not all at once!

最佳回答

Use the ReadAll() method:

text = file.ReadAll

(Might be of interest: FileSystemObject Sample Code)

With a loop:

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

Set fso = CreateObject("Scripting.FileSystemObject")

FileName = "c:	estfile.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
问题回答

If for some reason you want to use the in-built VBA file handling routines, you would use code like this:

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

You can add a reference* to the Windows Script Host Object Model, it will help you with the FileSystemObject Object, because you can then say:

Dim fs As FileSystemObject
Dim f As TextStream

Which will allow you to use intellisense to see the various properties and the Object Browser to explore the library.

* In the code window, choose Tools, References and tick the box beside the library you want.

I wrote a VBA routine that reads a text file and insert a new slide for each sentence in the text.

First, in slide #1, add a button that calls the macro named "generate"

Source code goes:

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

Download file: http://konahn.tistory.com/attachment/cfile8.uf@2175154C573D3BC02A2DFA.pptm





相关问题
Command Line Parameters

I m trying to add my file in Visual Studio as command line parameters. I know my code works since when I use fopen("whole path here", "r"), it runs. I then add the file as a command line parameter ...

Read from File, or STDIN

I ve written a command line utility that uses getopt for parsing arguments given on the command line. I would also like to have a filename be an optional argument, such as it is in other utilities ...

R - capturing elements of R output into text files

I am trying to run an analysis by invoking R through the command line as follows: R --no-save < SampleProgram.R > SampleProgram.opt For example, consider the simple R program below: mydata =...

热门标签