Error en 1 línea de macro al ejecutar ods con Android
Publicado por Tito (1 intervención) el 01/08/2016 10:02:04
Dado que no sé programar para Android, he creado un programa (como macro) dentro de un fichero ods (para ejecutar con la apk AndrOpen, el equivalente de OpenOffice para Linux y Windows).
Cuando he necesitado algún programa para ejecutarlo con Android he recurrido a ese método con éxito (ejecutar un fichero con macro creado con AndrOpen).
Pero en el caso que ahora me ocupa se produce un error en la línea que pretende abrir un fichero (a pesar de que la ruta es correcta, el fichero existe y no está con permisos especiales). Dicha línea la he resaltado usando formato "negrita".
El mismo fichero ods que contiene dicha macro funciona perfectamente corriendo bajo Windows (con OpenOffice), con simplemente cambiar la ruta (indicando, en vez de la ruta del móvil una ruta válida en el pc).
Transcribo a continuación el código. Adjunto también ese fichero ods que, si se ejecuta, pide una palabra a buscar y pulsando el botón de búsqueda muestra una lista con todas las líneas que contienen la palabra, tras buscar en una serie de líneas contenidas en el fichero que se lee (además de que elimina usa serie de caracteres especiales que contienen dichas líneas) :
Se intenta acceder al fichero Tasks.txt con Open ... For Input ...
El error que notifica es :
"Error en tiempo de ejecución de BASIC. Error de E/S del dispositivo. Aceptar"
El código de la macro es :
REM ***** BASIC *****
Sub Main
HojaActiva = ThisComponent.getCurrentController.getActiveSheet()
Dim Celda As Object
Dim todo as string
Dim aaa as string
Dim Fila as Long, Columna as Long
Dim iNumero As Integer
Dim sLinea As String
Dim aArchivo As String
Dim sMensaje as String
dim donde as integer
aArchivo = "\mnt\sdcard\exportTasks\tasks.txt"
iNumero = Freefile
Columna = 1
Fila = 2
todo = ""
Open aArchivo For Input As iNumero
While not eof(iNumero)
Line Input #iNumero, sLinea
Celda = HojaActiva.getCellByPosition(Columna,Fila)
sMensaje = Celda.getString
sMensaje=rtrim$(sMensaje)
donde=instr(1,sLinea,sMensaje)
IF donde<>0 and mid$(sLinea,26,1) <> "1" then
donde=instr(8,sLinea,"###")
aaa=left$(sLinea,donde-1) & right$(sLinea,len(sLinea)-donde-34+1)
aaa=left$(aaa,len(aaa)-19)
donde=instr(1,sLinea,"###")
aaa=right$(aaa,len(aaa)-donde-2)
aaa=right$(aaa,2) & "/" & mid$(aaa,len(aaa)-4,2) & "/" & mid$(aaa,len(aaa)-9,4) & " " & left$(aaa,len(aaa)-10)
todo = todo & aaa & chr$(13)
end if
wend
Close #iNumero
msgbox todo
End Sub
Adjunto el fichero en cuestión (que, según lo dicho, puede probarse bajo Windows sin problema, cambiando la ruta "mnt/sdcard/..." a una ruta del ordenador.
Agradeceré comentarios acerca del motivo del error, pues si logro obviarlo todo lo demás funciona perfectamente.
Muchas gracias a tod@s por vuestras valiosas aportaciones.
Cuando he necesitado algún programa para ejecutarlo con Android he recurrido a ese método con éxito (ejecutar un fichero con macro creado con AndrOpen).
Pero en el caso que ahora me ocupa se produce un error en la línea que pretende abrir un fichero (a pesar de que la ruta es correcta, el fichero existe y no está con permisos especiales). Dicha línea la he resaltado usando formato "negrita".
El mismo fichero ods que contiene dicha macro funciona perfectamente corriendo bajo Windows (con OpenOffice), con simplemente cambiar la ruta (indicando, en vez de la ruta del móvil una ruta válida en el pc).
Transcribo a continuación el código. Adjunto también ese fichero ods que, si se ejecuta, pide una palabra a buscar y pulsando el botón de búsqueda muestra una lista con todas las líneas que contienen la palabra, tras buscar en una serie de líneas contenidas en el fichero que se lee (además de que elimina usa serie de caracteres especiales que contienen dichas líneas) :
Se intenta acceder al fichero Tasks.txt con Open ... For Input ...
El error que notifica es :
"Error en tiempo de ejecución de BASIC. Error de E/S del dispositivo. Aceptar"
El código de la macro es :
REM ***** BASIC *****
Sub Main
HojaActiva = ThisComponent.getCurrentController.getActiveSheet()
Dim Celda As Object
Dim todo as string
Dim aaa as string
Dim Fila as Long, Columna as Long
Dim iNumero As Integer
Dim sLinea As String
Dim aArchivo As String
Dim sMensaje as String
dim donde as integer
aArchivo = "\mnt\sdcard\exportTasks\tasks.txt"
iNumero = Freefile
Columna = 1
Fila = 2
todo = ""
Open aArchivo For Input As iNumero
While not eof(iNumero)
Line Input #iNumero, sLinea
Celda = HojaActiva.getCellByPosition(Columna,Fila)
sMensaje = Celda.getString
sMensaje=rtrim$(sMensaje)
donde=instr(1,sLinea,sMensaje)
IF donde<>0 and mid$(sLinea,26,1) <> "1" then
donde=instr(8,sLinea,"###")
aaa=left$(sLinea,donde-1) & right$(sLinea,len(sLinea)-donde-34+1)
aaa=left$(aaa,len(aaa)-19)
donde=instr(1,sLinea,"###")
aaa=right$(aaa,len(aaa)-donde-2)
aaa=right$(aaa,2) & "/" & mid$(aaa,len(aaa)-4,2) & "/" & mid$(aaa,len(aaa)-9,4) & " " & left$(aaa,len(aaa)-10)
todo = todo & aaa & chr$(13)
end if
wend
Close #iNumero
msgbox todo
End Sub
Adjunto el fichero en cuestión (que, según lo dicho, puede probarse bajo Windows sin problema, cambiando la ruta "mnt/sdcard/..." a una ruta del ordenador.
Agradeceré comentarios acerca del motivo del error, pues si logro obviarlo todo lo demás funciona perfectamente.
Muchas gracias a tod@s por vuestras valiosas aportaciones.
- busquedas.rar(8,3 KB)
Valora esta pregunta


0