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