2009-11-12 1 views
3

Этот код будет читать строки из текстового файла:Как читать строки из текстового файла один за другим с помощью кода Power Point VBA?

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

Как я могу сделать его прочитать несколько раз на одну строку за другой из того же файла? Наверное, я должен использовать петлю здесь, верно? Мне нужно, чтобы он читал первую строку из файла на первой итерации, вторую строку на второй итерации, третий на третьей и так далее, пока все строки не были прочитаны. Как мне это сделать?

Важное дополнение: Мне нужен код для работы по каждой линии один за другим - не все сразу!

ответ

7

Используйте ReadAll() метод:

text = file.ReadAll 

(Может быть интересны: FileSystemObject Sample Code)

С петлей:

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

Идеальный ответ – AymericB

0

Вы можете добавить ссылку * в сценариев Windows Script Host Object Model, это поможет вам с объектом FileSystemObject, потому что вы можете сказать:

Dim fs As FileSystemObject 
Dim f As TextStream 

Это позволит вам использовать intellisense для просмотра различных свойств и обозревателя объектов для изучения библиотеки.

* В окне кода выберите «Инструменты», «Ссылки» и поставьте галочку рядом с библиотекой, которую вы хотите.

+0

I извините, это слишком сложно для меня - я просто нуб. Я уверен, однако, что в VBA должен быть какой-то способ, как функция realall. – brilliant

+0

Митч Пшеница дал вам ответ, это дополнительные комментарии, как вы упомянули в более раннем посте, что вы хотели узнать VBA. Обозреватель объектов - отличная помощь для обучения, как и intellisense. – Fionnuala

2

Если по какой-то причине вы хотите использовать встроенные VBA обработки файлов процедуру, вы будете использовать такой код:

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

Спасибо, Джон. Я очень удивлен - кажется, вы были на моем другом вопросе, а затем пришли сюда, чтобы поделиться этим кодом. (Я догадался, что на первой строчке, которую я создал сам, и которая не была здесь в коде Митча Пшеница на этой странице.) Благодарим вас за этот код, который вы поделили здесь. Мне все равно потребуется время, чтобы изучить его, но я обязательно это сделаю. – brilliant

+0

Просто совпадение, я думаю ... Я просто назвал субтитры лучшим, что могу, но я рад, что кто-то думает, как я! Прохладный, чтобы видеть, что вы делаете powerpoint vba, всегда интересно, когда я это делаю ... –

-1

я написал подпрограмму VBA, который читает текстовый файл и вставить новый слайд для каждого предложения в тексте.

Во-первых, в слайд № 1, добавить кнопку, которая вызывает макрос с именем "генерировать"

Исходный код идет:

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 

Скачать файл: http://konahn.tistory.com/attachment/[email protected]