Imprimir una Hoja oculta

Sólo un punto de encuentro para ofertas profesionales relacionadas con AOO
Responder
Sistemas
Mensajes: 13
Registrado: Vie Feb 25, 2011 11:12 am

Imprimir una Hoja oculta

Mensaje por Sistemas »

Hola:

Coloqué una pregunta en el foro general hace un mes y aunque tiene cientos de visitas, no hay ni una respuesta, así que la pongo aquí, a ver si alguien se siente interesado. Si alguien lo ve y cree poder ayudarme estoy dispuesto a pagar una cantidad razonable, que me envíen un email y nos ponemos de acuerdo.

Esta es la consulta:

Estoy haciendo unos macros para imprimir una hoja de cálculo y luego cerrarla. No quiero que aparezca la hoja a la vista durante el macro así que la abro con la opción HIDDEN en True pero no imprime nada, no da error pero no hace nada. Si le cambio el HIDDEN a False o si lo omito funciona perfectamente, abre la hoja mostrándola, la imprime y se cierra. He intentado poniéndole los parámetros de impresión asígnado las páginas a imprimir, número de copias, etc pero nada. Simplemente no imprime en modo oculto.

También tengo otro macro para generar un pdf con la hoja el cual si que funciona con la hoja oculta, abro la hoja oculta, defino un parámetro FilterName en calc_pdf_Export y ejecuto un storeToURL y la cierra, todo perfecto porque se ejecuta sin que se vea la hoja.

¿Hay algún truco para imprimir una hoja oculta?

Gracias
 Editado: Editado por el moderador (mauricio): he eliminado la dirección de e-mail ya que la gente que quiera contactarte puede utilizar las herramientas propias del foro (como mensajes privados o incluso un e-mail). Además, a menos que tengas un apetito insaciable por spam, no es buena idea poner la dirección de e-mail en un foro público como este... ;) 
openoffice 3.1, windows xp
Avatar de Usuario
mauricio
Mensajes: 6092
Registrado: Sab Nov 22, 2008 5:36 am
Ubicación: CDMX
Contactar:

Re: Imprimir una Hoja oculta

Mensaje por mauricio »

Hola...

El único truco es darle el tiempo suficiente a la maquina y a la impresora para que tome el trabajo de impresión. En mi equipo funciona bien con diez milisegundos, pero tienes que ir aumentando este valor entre más lento sea el equipo. La siguiente macro hace lo que quieres:

Código: Seleccionar todo

Option Explicit

Sub AbrirImprimir()
Dim sRuta As String
Dim mRuta() As String
Dim sArchivo As String
Dim mOpciones(0) As New com.sun.star.beans.PropertyValue
Dim mOpc(1) As New com.sun.star.beans.PropertyValue
Dim oDoc As Object

	sArchivo = "ArchivoOculto.ods"
	mOpciones(0).Name = "Hidden"
	mOpciones(0).Value = TRUE

	'Construimos la ruta del archivo, debe estar en el mismo directorio
	sRuta = ThisComponent.URL
	mRuta = Split( sRuta, "/" )
	mRuta(UBound(mRuta)) = sArchivo
	sRuta = Join( mRuta, "/" ) 
	If FileExists( sRuta ) Then
		'El número de copias
		mOpc(0).Name = "CopyCount"
		mOpc(0).Value = 1
		'Si se imprimen en juegos
		mOpc(1).Name = "Collate"
		mOpc(1).Value = True
		oDoc = StarDesktop.loadComponentFromURL( sRuta, "_blank", 0, mOpciones() )
		oDoc.Print( mOpc() )
		'Esperamos diez milisegundos
		Wait 10
		oDoc.Close( FALSE )	
	End If
	
End Sub
Toma en cuenta que ArchivoOculto.ods debe estar en el mismo directorio desde donde llamas esta macro.

Por favor, si esto responde tu pregunta, edita el primer mensaje de este hilo y agrega al principio del título la etiqueta [RESUELTO], adicionalmente puedes marcar el icono de la tilde verde, de esta forma conseguiremos un foro más ordenado.

También, si esto resuelve tu problema, puedes hacer una donación razonable a mi asociación: http://www.universolibre.org/node/2

Saludos
Adjuntos
Abrir e imprimir.7z
(10.96 KiB) Descargado 574 veces
______________________________________________
"Todo cuanto no podemos dar nos posee". - André Gide
LibreOffice 6.2 | ArchLinux | Gnome3
No respondo preguntas privadas, por favor, usa el foro
Sistemas
Mensajes: 13
Registrado: Vie Feb 25, 2011 11:12 am

Re: Imprimir una Hoja oculta

Mensaje por Sistemas »

Hola:

Gracias por la respuesta pero no lo logro. Tal vez se me pasó decirte que trabajo sobre visual basic .net y que dichos macros los hago ahí. Te paso el código:

Dim OOC As Object
Dim Escritorio As Object
Dim Libro As Object
Dim arg(0) As Object

OOC = CreateObject("com.sun.star.ServiceManager")
Escritorio = OOC.createInstance("com.sun.star.frame.Desktop")

arg(0) = MakePropertyValue("Hidden", True)
Libro = Escritorio.loadComponentFromURL(ArchivoURL, "_blank", 0, arg)
Dim ParametrosImprimir(0) As Object
ParametrosImprimir(0) = MakePropertyValue("CopyCount", 1)
Libro.Print(ParametrosImprimir)
Sleep(1000)
Libro.Close(False)

Sin tocar nada mas, cambiando el hidden a false ya imprime, mostrando la hoja, dejándolo en true no hace nada, ni imprime ni da error.

Curiosamente, el macro para generar pdf funciona bien:

Dim OOC As Object
Dim Escritorio As Object
Dim Libro As Object
Dim arg(0) As Object

OOC = CreateObject("com.sun.star.ServiceManager")
Escritorio = OOC.createInstance("com.sun.star.frame.Desktop")

arg(0) = MakePropertyValue("Hidden", True)
Libro = Escritorio.loadComponentFromURL(ArchivoURL, "_blank", 0, arg)
Dim SaveParam(0) As Object
SaveParam(0) = MakePropertyValue("FilterName", "calc_pdf_Export")
ArchivoPDF = Environ("Temp") + "\" + Reporte + Format(Rnd() * 1000, "0000") + ".pdf"
ArchivoPDFURL = ConvertToUrl(ArchivoPDF)
Call Libro.storeToURL(ArchivoPDFURL, SaveParam)
System.Diagnostics.Process.Start(ArchivoPDF)
Libro.Close(True)

En la empresa compramos una licencia openoffice de telefónica de españa únicamente para esta incidencia y cuando se la enviamos se quedaron locos y simplemente pasaron de nosotros. También he intentado ponerme en contacto directamente con sun microsystems pero no lo he logrado.

Si hay que pagar se paga, porque la otra solución es cancelar el proyecto del openoffice.

Gracias por tu ayuda
openoffice 3.1, windows xp
Avatar de Usuario
mauricio
Mensajes: 6092
Registrado: Sab Nov 22, 2008 5:36 am
Ubicación: CDMX
Contactar:

Re: Imprimir una Hoja oculta

Mensaje por mauricio »

Hola...

Si, era importante mencionar que usas VB.net ¿Probaste el archivo anexo?, es decir, primero veamos si no es un problema con la versión de OOo que tienes, yo la hice con LibO 3.3.2 sobre ArchLinux y funciona correctamente, ya que comprobemos que funciona bien desde "dentro" de OOo, entonces vemos como hacerlo desde VB.NET desde tu programa, que no debe de haber problema. Por favor, confirmame tu prueba.

Saludos
 Editado: He probado sobre una maquina virtual con Win XP y LibO 3.3.2 y funciona correctamente el ejemplo que te envié, ahora dejame ver como probar desde VB.NET 
 Editado: Probado sobre una maquina virtual con Win XP y OOo 3.3, funciona correctamente el ejemplo 
______________________________________________
"Todo cuanto no podemos dar nos posee". - André Gide
LibreOffice 6.2 | ArchLinux | Gnome3
No respondo preguntas privadas, por favor, usa el foro
Avatar de Usuario
mauricio
Mensajes: 6092
Registrado: Sab Nov 22, 2008 5:36 am
Ubicación: CDMX
Contactar:

Re: Imprimir una Hoja oculta

Mensaje por mauricio »

Hola...

En la misma maquina virtual, instale el VB.NET Express 2010, con el siguiente código pude imprimir sin problemas el archivo abierto de forma oculta.

Código: Seleccionar todo

Public Class Form1

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim OOC As Object
        Dim Escritorio As Object
        Dim Libro As Object
        Dim sRuta As String
        Dim oFCP As Object
        Dim mOpc(0)
        Dim ParametrosImprimir(0)

        sRuta = "C:\ArchivoOculto.ods"
        OOC = CreateObject("com.sun.star.ServiceManager")
        Escritorio = OOC.createInstance("com.sun.star.frame.Desktop")
        oFCP = OOC.createInstance("com.sun.star.ucb.FileContentProvider")
        mOpc(0) = MakePropertyValue("Hidden", True)
        sRuta = oFCP.getFileURLFromSystemPath("", sRuta)
        Libro = Escritorio.loadComponentFromURL(sRuta, "_blank", 0, mOpc)
        ParametrosImprimir(0) = MakePropertyValue("CopyCount", 1)
        Libro.print(ParametrosImprimir)
        System.Threading.Thread.Sleep(1000)
        Libro.Close(False)

    End Sub

    Function MakePropertyValue(ByVal cName, ByVal uValue) As Object

        Dim oPropertyValue As Object
        Dim oSM As Object

        oSM = CreateObject("com.sun.star.ServiceManager")
        oPropertyValue = oSM.Bridge_GetStruct("com.sun.star.beans.PropertyValue")
        oPropertyValue.Name = cName
        oPropertyValue.Value = uValue

        MakePropertyValue = oPropertyValue

    End Function

End Class
Saludos
______________________________________________
"Todo cuanto no podemos dar nos posee". - André Gide
LibreOffice 6.2 | ArchLinux | Gnome3
No respondo preguntas privadas, por favor, usa el foro
Sistemas
Mensajes: 13
Registrado: Vie Feb 25, 2011 11:12 am

Re: Imprimir una Hoja oculta

Mensaje por Sistemas »

Hola Mauricio:

Gracias^10 por tu ayuda. Creo que el problema no proviene de los macros en si, porque básicamente tus macros son iguales que los míos sino de algún otro agente. He hecho la prueba y he instalado el oo 3.3, ya que estaba trabajando con oo 3.1 y ahora, oh misterios de la vida, sale el icono de la impresora abajo como si fuese a imprimir, si tengo abierta la ventana de las impresoras durante un segundo aparece un 1 en el número de trabajos pendientes que desaparece al instante, pero de imprimir no imprime nada. Esto ya es un avance porque antes ni eso. Para terminar de reproducir tu entorno me falta instalar el VB 2010 porque estoy trabajando con VB 2008 pero no supe encontrar en la página de microsoft el enlace para descargarlo, ¿me lo puedes enviar?.

Muchas Gracias.
openoffice 3.1, windows xp
Avatar de Usuario
mauricio
Mensajes: 6092
Registrado: Sab Nov 22, 2008 5:36 am
Ubicación: CDMX
Contactar:

Re: Imprimir una Hoja oculta

Mensaje por mauricio »

Te lo hago llegar de forma privada para no "ensuciar" aquí, jejejeje es broma...

Saludos
______________________________________________
"Todo cuanto no podemos dar nos posee". - André Gide
LibreOffice 6.2 | ArchLinux | Gnome3
No respondo preguntas privadas, por favor, usa el foro
Sistemas
Mensajes: 13
Registrado: Vie Feb 25, 2011 11:12 am

Re: Imprimir una Hoja oculta

Mensaje por Sistemas »

Hola al que quiera leer este tema:

después de meses de trabajo, de dos programadores y de mucha ayuda por parte de este foro y otros hemos llegado a una conclusión:

Desde visual basic .net no es posible imprimir una hoja calc oculta.

Evidentemente es un error de alguien pero no estamos seguros de si se trata de un error del visul basic .net o del openoffice. En cualquier caso no estamos en capacidad de solucionarlo así que lo resolvimos así:

En lugar de imprimir generamos un pdf que si que funciona aún con la hoja oculta.
Luego a través de las funciones del windows mandamos a imprimir dicho pdf

Funciona, solo un problema, normalmente tenemos instalado el acrobat reader para abrir archivos pdf y dicho programa, apartir de la versión 8, cuando se usa para imprimir permanece abierto aún después de terminar de imprimir. No es un error, es a posta por parte de la gente de adobe. Un mal menor dentro de todo que hemos asumido.

Saludos
sistemas
openoffice 3.1, windows xp
Avatar de Usuario
mauricio
Mensajes: 6092
Registrado: Sab Nov 22, 2008 5:36 am
Ubicación: CDMX
Contactar:

Re: Imprimir una Hoja oculta

Mensaje por mauricio »

Sistemas escribió:Desde visual basic .net no es posible imprimir una hoja calc oculta.
sistemas
Pues yo si que pude con el ejemplo que te envíe, por supuesto hay un problema con tu entorno, pero si es poslble.

Saludos
______________________________________________
"Todo cuanto no podemos dar nos posee". - André Gide
LibreOffice 6.2 | ArchLinux | Gnome3
No respondo preguntas privadas, por favor, usa el foro
Sawaa
Mensajes: 4
Registrado: Lun Abr 01, 2013 5:25 pm
Ubicación: Mexico

Re: Imprimir una Hoja oculta

Mensaje por Sawaa »

Hola se que no se debe de resucitar temas de mas de 6 meses de inactividad, pero me ha quedado la gran duda de que es lo que hace exactamente esta funcion:
mauricio escribió:

Código: Seleccionar todo

Public Class Form1
    Function MakePropertyValue(ByVal cName, ByVal uValue) As Object

        Dim oPropertyValue As Object
        Dim oSM As Object

        oSM = CreateObject("com.sun.star.ServiceManager")
        oPropertyValue = oSM.Bridge_GetStruct("com.sun.star.beans.PropertyValue")
        oPropertyValue.Name = cName
        oPropertyValue.Value = uValue

        MakePropertyValue = oPropertyValue

    End Function

End Class
espero no molestar :oops:
OpenOffice.org 3.4
windows 7
Avatar de Usuario
mauricio
Mensajes: 6092
Registrado: Sab Nov 22, 2008 5:36 am
Ubicación: CDMX
Contactar:

Re: Imprimir una Hoja oculta

Mensaje por mauricio »

No es molestia, la tuve cuando no pagaron por el trabajo que se hizo, pero eso, fue ayer...

No se tu nivel de programación así que disculpa si soy muy obvio o digo una tarugada con VB.NET que no conozco...

Para programar en cualquier lenguaje debes de conocer sus reglas y sintaxis.
Para hacer uso de cualquier "componente", debes de conocer sus objetos, métodos y propiedades.
Para enlazar componentes diferentes, debes de tener un modo de hacerlo.

La instrucción que ves es el modo en que puedes tener acceso a todo el API de OpenOffice, desde VB.NET

Código: Seleccionar todo

oSM = CreateObject("com.sun.star.ServiceManager")
en otros lenguajes es muy similar la forma de crear este objeto, ya "dentro", en este caso en especifico, AOO, tiene unas estructuras en pareja de Nombre y Valor para establecer multiples propiedades en mutiples objetos, es lo que hace la siguiente linea:

Código: Seleccionar todo

oPropertyValue = oSM.Bridge_GetStruct("com.sun.star.beans.PropertyValue")
La forma en que esta como función de una clase, es propio de VB.NET que reitero, no conozco...

Saludos
______________________________________________
"Todo cuanto no podemos dar nos posee". - André Gide
LibreOffice 6.2 | ArchLinux | Gnome3
No respondo preguntas privadas, por favor, usa el foro
Sawaa
Mensajes: 4
Registrado: Lun Abr 01, 2013 5:25 pm
Ubicación: Mexico

Re: Imprimir una Hoja oculta

Mensaje por Sawaa »

Gracias por responder y pues si hasta alli le entiendo yo :( que una es para accesar al API de OpenOffice y la segunda para establecer propiedades, ya lo ultimo de lo que contiene las propiedades alli si que no le entendi.
pero muchas gracias por su tiempo :)
OpenOffice.org 3.4
windows 7
Sistemas
Mensajes: 13
Registrado: Vie Feb 25, 2011 11:12 am

Re: Imprimir una Hoja oculta

Mensaje por Sistemas »

Hola Mauricio:

Al leer las últimas modificaciones de este tema vi con cierta sorpresa una queja relacionada con pago. Me ha dolido un poco porque como puedes leer en las publicaciones el problema no se resolvió, al final se aplicó un amaño que ya sugerí desde la primera publicación. Además de eso el proyecto se canceló, la empresa quebró, el gobierno la intervino, pasó a administración judicial, el programa se eliminó y se sustituyó. Puedes hacer búsquedas en internet sobre el caso de "Grupo Playa Sol" en Ibiza y seguro encontrarás un amplio segumiento de este caso.

De todas formas, y a manera de compensación, aún conservo las fuentes del programa que creo que te pueden interesar. El programa está desarrollado en vb.net. Existe un parámetro del usuario en donde dice si quiere trabajar con excel o con calc y el programa genera el reporte según lo solicitado. la verdad es que es una pena que después de tanto trabajo se haya tirado a la basura pero al final funcionaba bien y las hojas generadas en calc eran de gran calidad, marcos, sombras, pie de páginas, en fin, todo.

Si te interesa no tengo problema en enviarte las fuentes con sus explicaciones respectivas.
openoffice 3.1, windows xp
Responder