Text aus Powerpoint auslesen

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
saimen
Beiträge: 172
Registriert: 26.01.2005 10:44
Wohnort: Passau
Kontaktdaten:

Beitrag von saimen »

hab daraus eine exe gemacht, so dass ich eine ppt öffnen kann und mir der String in einem Messagerequester angezeigt wird, sie auf einem mit Office ausgestattetem PC getestet, und festgestellt dass wenn die Presentation mehr als eine Folie hat, dass prog abstürzt.
Woran kann das liegen?

Hab leider nicht die möglichkeit zu programmieren und gleichzeitig zu testen.
Benutzeravatar
Kiffi
Beiträge: 10711
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag von Kiffi »

saimen hat geschrieben:und festgestellt dass wenn die Presentation mehr als eine Folie hat, dass prog abstürzt.
bestätigt. Kann ich erst heute Abend in Ruhe testen. Melde mich dann wieder.

Grüße ... Kiffi
a²+b²=mc²
Benutzeravatar
saimen
Beiträge: 172
Registriert: 26.01.2005 10:44
Wohnort: Passau
Kontaktdaten:

Beitrag von saimen »

schon eine Lösung gefunden?
Benutzeravatar
Kiffi
Beiträge: 10711
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag von Kiffi »

saimen hat geschrieben:schon eine Lösung gefunden?
verzeitung, hatte ich total verschwitzt.

Hier der korrigierte Code (ich hatte oSlides zu früh freigegeben):

Code: Alles auswählen

IncludePath #PB_Compiler_Home + "comate"
XIncludeFile "comate.pbi"

EnableExplicit

Procedure.s PPT2TXT(PPTFile.s)
  
  Protected oApp.COMateObject  ; Application
  Protected oPres.COMateObject ; Presentation
  
  Protected oSlides.COMateEnumObject ; Slides
  Protected oShapes.COMateEnumObject ; Shapes
  
  Protected oSld.COMateObject ; Slide Object
  Protected oShp.COMateObject ; Shape Object
  
  Protected ReturnString.s
  
  oApp = COMate_CreateObject("PowerPoint.Application")
  
  If oApp
    
    PPTFile = ReplaceString(PPTFile, "'", "$0027")
    
    oPres = oApp\GetObjectProperty("Presentations\Open('" + PPTFile + "', #Optional, #Optional, #False)")
    
    If oPres
      
      oSlides = oPres\CreateEnumeration("Slides")
      
      If oSlides
        
        oSld = oSlides\GetNextObject()
        
        While oSld
          
          oShapes = oSld\CreateEnumeration("Shapes")
          
          If oShapes
            
            oShp = oShapes\GetNextObject()
            
            While oShp
              
              If oShp\GetIntegerProperty("HasTextFrame")
                If oShp\GetIntegerProperty("TextFrame\HasText")
                  ReturnString + oShp\GetStringProperty("TextFrame\TEXTRANGE")
                EndIf
              EndIf
              
              oShp\Release()
              oShp = oShapes\GetNextObject()
              
            Wend
            
            oShapes\Release()
            
          EndIf
          
          oSld\Release()
          oSld = oSlides\GetNextObject()
          
        Wend
        
        oSlides\Release()
        
      EndIf
      
      oPres\Invoke("Close")
      oPres\Release()
      
    Else ; !oPres
      
      Debug "!oPres"
      Debug COMate_GetLastErrorDescription()
      
    EndIf ; oPres
    
    oApp\Invoke("Quit")
    oApp\Release()
    
  Else ; !oApp
    
    Debug "!oApp"
    Debug COMate_GetLastErrorDescription()
    
  EndIf ; oApp
  
  ProcedureReturn ReturnString
  
EndProcedure
 
Debug PPT2TXT("C:\Programme\Microsoft SDKs\Windows\v6.1\Samples\winui\Shell\AppPlatform\SearchFolder\TractatosUrbanitas.ppt")
Grüße ... Kiffi
a²+b²=mc²
Benutzeravatar
saimen
Beiträge: 172
Registriert: 26.01.2005 10:44
Wohnort: Passau
Kontaktdaten:

Beitrag von saimen »

Danke, schaus mir heute abend mal an...
Benutzeravatar
saimen
Beiträge: 172
Registriert: 26.01.2005 10:44
Wohnort: Passau
Kontaktdaten:

Beitrag von saimen »

So, das script funktionier jetzt :)
Hab jetzt mit pb 4.2 eine dll erzeugt und diese folgendermaßen in mein mit pb3.94 projekt eingebunden:

Code: Alles auswählen

If OpenLibrary(0, "config\pb420.dll")
   DateiName$ = OpenFileRequester("blabla", "", "", 0)
   text$=CallFunction(0, "PPT2TXT", DateiName$)
   MessageRequester("Information 16778832", text$, #PB_MessageRequester_Ok)
   CloseLibrary(0)
EndIf
Da bekomme ich aber schon die erste Fehlermeldung in der Zeile wo ich in die text$ schreibe:
"Trying to write a numeric value into string variable" ???
Der Rückgabewert ist doch ein String???
Benutzeravatar
Kiffi
Beiträge: 10711
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag von Kiffi »

der Rückgabewert von CallFunction() ist immer eine Zahl.

Ich kenne den Source Deiner DLL nicht, aber versuch mal:

Code: Alles auswählen

ReturnValue = CallFunction(...)
text$ = PeekS(ReturnValue)
Grüße ... Kiffi
a²+b²=mc²
Benutzeravatar
saimen
Beiträge: 172
Registriert: 26.01.2005 10:44
Wohnort: Passau
Kontaktdaten:

Beitrag von saimen »

ok, super, danke :)
Benutzeravatar
saimen
Beiträge: 172
Registriert: 26.01.2005 10:44
Wohnort: Passau
Kontaktdaten:

Beitrag von saimen »

noch was... wie erkenne ich einen Seitenwechsel? würd an der Stelle wo ein Seitenwechsel ist in die txt Datei gern ein "-" einbauen...
Benutzeravatar
Kiffi
Beiträge: 10711
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag von Kiffi »

saimen hat geschrieben:noch was... wie erkenne ich einen Seitenwechsel?

Code: Alles auswählen

[...]
EndIf

ReturnString + "#Seitenwechsel#" ; <-- das hier einfügen
         
oSld\Release()
[...]
Grüße ... Kiffi
a²+b²=mc²
Antworten