Geloest :Makro brint OOo zum Absturz

Programmierung unter AOO/LO (StarBasic, Python, Java, ...)

Moderator: Moderatoren

keksi1970
*****
Beiträge: 464
Registriert: So, 27.01.2008 11:47
Wohnort: DU

Geloest :Makro brint OOo zum Absturz

Beitrag von keksi1970 »

Hi Leute,

also folgendes :

Ich habe per Makro-AUfzeichnung ein Makro gespeichert, welches ich in einer Schleife immer wieder aufrufe.
Ich rufe per Makro eine Datei auf, durchsuche in den Tabellen bestimmte Zellen, ud wenn diese einen bestimmten Wert haben, will ich diesen Druckbereich drucken

Das Makro :

Code: Alles auswählen

REM  *****  BASIC  *****

REM  *****  BASIC  *****
Dim druckdoc as object
dim drucksheet as object
dim ladesheet as object
dim speichername as string
dim speicherort as string
dim myurl as string
dim odoc1 as object

sub Druckvorbereitung

Dim myFileProp1(0) As New com.sun.star.beans.PropertyValue ' properties für neuerstellung
Dim Tournummer as integer


oDesktop =   createUnoService("com.sun.star.frame.Desktop")
oDoc1 = thisComponent
Ladesheet = oDoc1.Sheets(0)
datum

for y = 2 To 100 
	spezi = ladesheet.getcellrangebyname("AO"&y)
	namencheck = spezi.string
	If namencheck = "" then 
	exit sub
	end if
	Speichername = (Namecheck+"_"+Speicherdatum) 	
	Speicherort = ("file:///C:/Test/" & Speicherdatum2 & "/" &  Speicherdatum & "/")
	myUrl=  Speicherort & Speichername & ".ods"
	sSourceFile = myUrl
	
	myfileProp1(0).Name = "Hidden"
	myFileProp1(0).value = false
	
	oDocument = oDesktop.loadComponentFromURL( sSourceFile, "_blank", 0, myFileProp1() ) 
	for i = 0 to 29
		Drucksheet = odocument.sheets(i)
		Druckzelle = Drucksheet.getcellrangebyname("$H$4")
		Druckwert = Druckzelle.value
	
		if Druckwert > 4 and Druckwert < 6 then
			Druck
		End if
	
	next i
	
odocument.close(false)
		
next y
end sub

Sub Druck
rem ----------------------------------------------------------------------
rem define variables
dim document   as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

rem ----------------------------------------------------------------------
dim args2(0) as new com.sun.star.beans.PropertyValue
args2(0).Name = "Printer"
args2(0).Value = "HP Photosmart 2570 series"

dispatcher.executeDispatch(document, ".uno:Printer", "", 0, args2())

End Sub[
das Ganze bringt OOo jedenfalls jedesmal zum Absturz, hat einer eine Ahnung, warum ???

Gru�Andreas
Zuletzt geändert von keksi1970 am Di, 22.04.2008 07:43, insgesamt 1-mal geändert.
Toxitom
********
Beiträge: 3769
Registriert: Di, 12.08.2003 18:07
Wohnort: Wiesbaden
Kontaktdaten:

Re: Makro brint OOo zum Absturz

Beitrag von Toxitom »

Hey Andreas,

grober Schuss: "oDocument.Close(false)" Warum? In dem Fall dürfte sich das Dokument nicht schliessen - der Druckprozess ist sicher zu dem Zeitpunkt noch nicht fertig - legt also ein Veto ein. Mit False übernimmst du jetzt selbst die Verantwortung, das Dokument zu schliessen - tust du aber nicht, so das du irgendwann 200 hidden Dokumente offen hast - schätze, damit überforderst du OOo.

Übergib dem Druckprozess die undokumentiert Eigenschaft "Wait" , dann wartet der Basicprozess, bis der Druckvorgang beendet ist - und du kannst in Ruhe das Dokument schliessen.

Viele Grüße
Thomas
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
keksi1970
*****
Beiträge: 464
Registriert: So, 27.01.2008 11:47
Wohnort: DU

Re: Makro brint OOo zum Absturz

Beitrag von keksi1970 »

ich werds ausprobieren und das Ergebnis Montag Abend mal hier reinstellen

daran hab ich nu überhaupt nicht gedacht

Gruß

Andreas

PS : weitere Ideen willkommen :D
keksi1970
*****
Beiträge: 464
Registriert: So, 27.01.2008 11:47
Wohnort: DU

Re: Geloest :Makro brint OOo zum Absturz

Beitrag von keksi1970 »

Reicht dir ein Danke ??

Gruß Andreas

Edit

EIN wait reicht nicht

habe 3 genommen, je 1000

in der IF abfrage, also nach dem Aufruf der Druckroutine

eine vor dem oDocument.close(false)

und eine in der Druck-routine selbst. Anderfalls Absturtz, da ich vermute, das die Netzwerkleitung nicht so schnell ist, bzw, der Drucker das Ganze so schnell nicht verarbeiten kann.
Antworten