Seite 2 von 3

Verfasst: 24.11.2008 19:06
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.

Verfasst: 24.11.2008 19:11
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

Verfasst: 26.11.2008 14:24
von saimen
schon eine Lösung gefunden?

Verfasst: 26.11.2008 14:45
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

Verfasst: 26.11.2008 15:19
von saimen
Danke, schaus mir heute abend mal an...

Verfasst: 28.11.2008 18:50
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???

Verfasst: 28.11.2008 18:58
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

Verfasst: 28.11.2008 20:24
von saimen
ok, super, danke :)

Verfasst: 03.12.2008 18:28
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...

Verfasst: 03.12.2008 18:33
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