Text aus Powerpoint auslesen
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.
Woran kann das liegen?
Hab leider nicht die möglichkeit zu programmieren und gleichzeitig zu testen.
[PB4.30]
http://www.worshipdatenbank.de
http://www.worshipdatenbank.de
verzeitung, hatte ich total verschwitzt.saimen hat geschrieben:schon eine Lösung gefunden?
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")
a²+b²=mc²
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:
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???

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
"Trying to write a numeric value into string variable" ???
Der Rückgabewert ist doch ein String???
[PB4.30]
http://www.worshipdatenbank.de
http://www.worshipdatenbank.de
der Rückgabewert von CallFunction() ist immer eine Zahl.
Ich kenne den Source Deiner DLL nicht, aber versuch mal:
Grüße ... Kiffi
Ich kenne den Source Deiner DLL nicht, aber versuch mal:
Code: Alles auswählen
ReturnValue = CallFunction(...)
text$ = PeekS(ReturnValue)
a²+b²=mc²
noch was... wie erkenne ich einen Seitenwechsel? würd an der Stelle wo ein Seitenwechsel ist in die txt Datei gern ein "-" einbauen...
[PB4.30]
http://www.worshipdatenbank.de
http://www.worshipdatenbank.de
saimen hat geschrieben:noch was... wie erkenne ich einen Seitenwechsel?
Code: Alles auswählen
[...]
EndIf
ReturnString + "#Seitenwechsel#" ; <-- das hier einfügen
oSld\Release()
[...]
a²+b²=mc²