Página 1 de 1
Como abrir carpetas?
Publicado: Vie Oct 05, 2018 2:34 pm
por Milor
He probado varios códigos pero sin éxito.
Tengo un formulario que se asocia a varias tablas (relacionadas) uno de esos campo es el ID (que se genera automáticamente), la idea sería que al pulsarlo abriera un carpeta (la creara en caso de no estar) que tiene el mismo nombre que el ID.
Cual sería el directorio donde estaría ese carpeta? En el mismo que esta la base de datos...
Actualmente el código que tengo es:
Código: Seleccionar todo
REM ***** BASIC *****
Sub OpenSpecificFolder(Event As Object)
Dim oForm As Object
Dim idExpediente as string
Dim directorio
idExpediente = Event.Source.Model.Parent.Parent.getByName("fmtID").CurrentValue
directorio = DirectoryNameoutofPath(ThisComponent.Parent.getURL(), "/")
If NOT FileExists(directorio & "/" & idExpediente) Then
print "No existe"
MkDir (directorio & "/" & idExpediente)
Else
print "Existe"
End If
print directorio & "/" & idExpediente
End Sub
El ultimo print tendría que cambiarlo por el "comando" para la carpeta (en principio solo estará en windows pero que fuera compatible con linux tambien). No existe el OpDir no?
Re: Como abrir carpetas?
Publicado: Vie Oct 05, 2018 4:15 pm
por Longi
Buenas!
Mira estos códigos que he recogido de algunas de mis rutinas...
Como es de suponer tendrás que probarlos en tu entorno de trabajo (soy muy dado a meter la pata), pero en un principio debieran funcionar.
Con más florituras los uso para guardar documentos o para luego mostrarlos, pero en general así debiera funcionar.
Si quieres hacer una carpeta en el caso de que no la tengas hecha:
Código: Seleccionar todo
CARPETA= directorio & "/" & idExpediente
oSimpleFileAccess = CreateUnoService( "com.sun.star.ucb.SimpleFileAccess" ) ' Servicio para acceso a archivos
If Not FileExists(CARPETA) Then ' Si la carpeta no existe
oSimpleFileAccess.createFolder(CARPETA) ' La creamos
End if ' Acabamos la condición
Si quieres abrir una carpeta existente:
Código: Seleccionar todo
CARPETA= directorio & "/" & idExpediente
oDialFP=CreateUnoService ("com.sun.star.ui.dialogs.OfficeFilePicker") ' Creamos el servicio FilePicker
oDialFP.setDisplayDirectory (ConvertToURL(CARPETA)) ' Carpeta en la que recogemos el documento escaneado
oDialFP.Title="Escoja un documento" ' Título del cuadro de diálogo
oDialFP.Execute
Este filepicker es algo más feo, pero el que estamos acostumbrados a ver no funciona (o no funcionaba), abriendo siempre en forma genérica. Éste abre la carpeta que le mandas que abra.
También es posible utilizar cualquier otro directorio: el temporal en C, el escritorio o algo que tengas por ahí muy escondido.
Un saludo!
Re: Como abrir carpetas?
Publicado: Lun Oct 08, 2018 9:23 am
por Milor
El problema que tiene este es que sino me equivoco a la que coges un archivo se cierra.
Al final el código que estoy usando es:
Código: Seleccionar todo
REM ***** BASIC *****
Sub OpenSpecificFolder(Event As Object)
GlobalScope.BasicLibraries.loadLibrary("Tools")
Dim oForm As Object
Dim idExpediente as string
Dim directorio
idExpediente = Event.Source.Model.Parent.Parent.getByName("fmtID").CurrentValue
directorio = DirectoryNameoutofPath(ThisComponent.Parent.getURL(), "/")
If NOT FileExists(directorio & "/" & idExpediente) Then
'print "No existe"
MkDir (directorio & "/" & idExpediente)
Else
'print "Existe"
End If
'print directorio & "/" & idExpediente
if GetGUIType() = 4 Then
Shell("pcmanfm",2, directorio & "/" & idExpediente)
Else
print GetGUIType() & "No es linux"
Shell("explorer.exe",2, directorio & "/" & idExpediente)
End If
End Sub
De momento parece funcionar en windows y en lubuntu. Aunque tendré en cuenta tu codigo. El único fallo que le veo es que en windows al menos no me pilla focus, pero tengo que repasar el segundo parametro del comando shell
Re: Como abrir carpetas?
Publicado: Lun Oct 08, 2018 6:06 pm
por Longi
Buenas!
Sobre tu código he hecho variaciones (y he probado) en Windows:
Si la carpeta no existe, la genera.
Después abre un navegador en la carpeta que habríamos hecho (no aparecería nada), o bien si ya estaba hecha, mostraría documentos Writer, calc, excel y csv (me olvidé poner pdf).
Al seleccionar el documento, lo abre, aunque se pueden variar las opciones, como abrir otra carpeta, escoger un documento y asignarle otra ruta para copiarlo o para cambiarlo de carpeta hacia la seleccionad inicialmente (cosa muy útil en el caso de tener una carpeta de escaneos y quieres asignar una carpeta para cada ID de cada registro del formulario principal, por ejemplo):
Código: Seleccionar todo
Sub OpenSpecificFolder(Event As Object)
GlobalScope.BasicLibraries.loadLibrary("Tools")
Dim oForm As Object
Dim idExpediente as string
Dim directorio
idExpediente = Event.Source.Model.Parent.getByName("ID").CurrentValue
directorio = DirectoryNameoutofPath(ThisComponent.Parent.getURL(), "/")
CARPETA= directorio & "/" & idExpediente
oSimpleFileAccess = CreateUnoService( "com.sun.star.ucb.SimpleFileAccess" ) ' Servicio para acceso a archivos
If Not FileExists(CARPETA) Then ' Si la carpeta no existe
oSimpleFileAccess.createFolder(CARPETA) ' La creamos
End if ' Acabamos la condición
if GetGUIType() = 4 Then
Shell("pcmanfm",2, directorio & "/" & idExpediente)
Else
' print GetGUIType() & "No es linux"
' oDialFP=CreateUnoService ("com.sun.star.ui.dialogs.FilePicker") ' Creamos el servicio FilePicker
oDialFP=CreateUnoService ("com.sun.star.ui.dialogs.OfficeFilePicker") ' Creamos el servicio FilePicker
oDialFP.setDisplayDirectory (ConvertToURL(CARPETA)) ' Carpeta
oDialFP.appendFilter( "Documentos","*.ods;*.xls*;*.csv;*.odb;*.odt") ' Filtro
oDialFP.Title="Escoja un documento" ' Título del cuadro de diálogo
oDialFP.Execute
Dim opt(0) As New "com.sun.star.beans.PropertyValue" ' Array de propiedades
Dim doc As Object ' Documento
opt(0).Name = "Hidden" ' No será en segundo plano
opt(0).Value = False ' Ciertamente, en segundo plano
StarDesktop.loadComponentFromURL(oDialFP.Files(0), "_blank", 0, opt()) ' Abre el documento como plantilla
End If
End Sub
Quizá te sirva!
Un saludo!