[Risolto] Inserimento multiplo di righe

Creare una macro - Scrivere uno script - Usare le API
Rispondi
c.spaziani
Messaggi: 21
Iscritto il: lunedì 16 gennaio 2012, 12:48

[Risolto] Inserimento multiplo di righe

Messaggio da c.spaziani »

Salve a tutti,
sto scrivendo un ciclo per inserire una riga (LineShape) su ogni pagina di un documento writer:

Codice: Seleziona tutto

Dim oDoc
Dim oVcursor
Dim oCursor
Dim oText
Dim oLine
Dim oLinePos As New com.sun.star.awt.Point
Dim oLineSize As New com.sun.star.awt.Size 

	oDoc = ThisComponent 
	oLinePos.x = 800
	oLinePos.y = 23560
	oLineSize.Width = 19400
	oLine = oDoc.createInstance("com.sun.star.drawing.LineShape")
	oLine.AnchorType = com.sun.star.text.TextContentAnchorType.AT_PAGE
	oLine.HoriOrient = com.sun.star.text.HoriOrientation.NONE
	oLine.VertOrient = com.sun.star.text.VertOrientation.NONE
	oLine.Size = oLineSize
	oLine.Position = oLinePos
	oVcursor = oDoc.CurrentController.getViewCursor
	oVcursor.jumpToFirstPage
	oText = oDoc.Text	
	Do
		oCursor = oText.createTextCursorByRange(oVcursor)
'		oText.insertString(oCursor, "ciao", False) ' Per il testo funziona perfettamente
		oText.insertTextContent(oCursor, oLine, False) ' alla seconda iterazione da errore
		oCursor.gotoEnd(False)
	Loop While oVcursor.jumpToNextPage
Viene inserita una riga sulla prima pagina e poi da errore su insertTextContent (IllegalArgumentException).
Mi rendo conto che inserire una linea come se fosse testo può creare problemi, ma almeno ho il cursore per posizionarmi in una pagina specifica...
Ho provato a fare lo stesso con drawPage.add(oLine), ma non sono riuscito a spostarmi dalla prima pagina...
Qualche suggerimento?
Ultima modifica di c.spaziani il sabato 25 febbraio 2012, 20:01, modificato 1 volta in totale.
OpenOffice 3.4.1
LibreOffice 3.6.1.2
Microsoft Windows 7 (6.1) x64 Ultimate Edition Service Pack 1 (Build 7601)
Avatar utente
Mizio1961
Messaggi: 841
Iscritto il: mercoledì 5 ottobre 2011, 22:55
Località: Roma

Re: Inserimento multiplo di righe

Messaggio da Mizio1961 »

Premetto che macro su Writer ne ho scritte poche però a me ha funzionato facendo un paio di modifiche che hanno portato la tua macro alla forma seguente:
Public Sub CSpaziani_20120225
' Problema su Writer
Dim oDoc
Dim oVcursor
Dim oCursor
Dim oText
Dim oLine
Dim oLinePos As New com.sun.star.awt.Point
Dim oLineSize As New com.sun.star.awt.Size
dim I as integer ' CONTATORE PAGINE
oDoc = ThisComponent
oLinePos.x = 800
oLinePos.y = 23560
oLineSize.Width = 19400
'-------------------------------------------------------------------
oLine = oDoc.createInstance("com.sun.star.drawing.LineShape")
oLine.AnchorType = com.sun.star.text.TextContentAnchorType.AT_PAGE
oLine.HoriOrient = com.sun.star.text.HoriOrientation.NONE
oLine.VertOrient = com.sun.star.text.VertOrientation.NONE
oLine.AnchorPageNo = 1
oLine.Size = oLineSize
oLine.Position = oLinePos
oVcursor = oDoc.CurrentController.getViewCursor
oVcursor.jumpToFirstPage
oText = oDoc.Text
I = 1 ' IMPOSTA CONTA PAGINE
Do
oCursor = oText.createTextCursorByRange(oVcursor)
oText.insertTextContent(oCursor, oLine, False) ' alla seconda iterazione da errore
oCursor.gotoEnd(False)
'-----------------------------------------' INIZIO MIA PROVA
I = I + 1 ' INCREMENTA N. PAGINA
' CREAZIONE NUOVA ISTANZA DI LINEA
oLine = oDoc.createInstance("com.sun.star.drawing.LineShape")
oLine.AnchorType = com.sun.star.text.TextContentAnchorType.AT_PAGE
oLine.HoriOrient = com.sun.star.text.HoriOrientation.NONE
oLine.VertOrient = com.sun.star.text.VertOrientation.NONE
oLine.AnchorPageNo = I ' INCREMENTA PAG. LINEA
oLine.Size = oLineSize
oLine.Position = oLinePos
'-----------------------------------------' FINE MIA PROVA
Loop While oVcursor.jumpToNextPage
End Sub ' FINE

Vedi un pò se funziona anche dalla tue parti... ;)
OpenOffice Windows - Libre su Ubuntu Desktop e Notebook WiFi
Per cortesia, inserisci [Risolto] nel Titolo iniziale se il tuo problema è stato risolto. ;-)
c.spaziani
Messaggi: 21
Iscritto il: lunedì 16 gennaio 2012, 12:48

Re: Inserimento multiplo di righe

Messaggio da c.spaziani »

Grazie mille!
Mi era sfuggita la proprietà AnchorPageNo di LineShape.
In questo modo non ho alcun problema a posizionarmi su una pagina specifica e inserire la linea tramite la drawpage!
Il codice risulta quindi:

Codice: Seleziona tutto

Sub InsertLines

Dim oDoc
Dim oLine
Dim oLinePos As New com.sun.star.awt.Point
Dim oLineSize As New com.sun.star.awt.Size
Dim nPage%

	oDoc = ThisComponent
	oLinePos.x = 800
	oLinePos.y = 23560
	oLineSize.Width = 19400	
	For nPage = 1 to oDoc.CurrentController.PageCount
		oLine = oDoc.createInstance("com.sun.star.drawing.LineShape")
		With oLine
			.AnchorType = com.sun.star.text.TextContentAnchorType.AT_PAGE
			.HoriOrient = com.sun.star.text.HoriOrientation.NONE
			.VertOrient = com.sun.star.text.VertOrientation.NONE
			.Size = oLineSize
			.Position = oLinePos
			.AnchorPageNo = nPage
		End With
		oDoc.DrawPage.add(oLine)
	Next nPage

End Sub
OpenOffice 3.4.1
LibreOffice 3.6.1.2
Microsoft Windows 7 (6.1) x64 Ultimate Edition Service Pack 1 (Build 7601)
Rispondi