Spanish (Solucionado)escribir en excel

TheFalcon

Active Member
Licensed User
Longtime User
Buenas, es una pregunta tonta pero estoy trasteando el ejemplo de erel y no consigo hacer lo mas simple, escribir en el Excel, consigo crear un excel pero no meter contenido, lo que intento es simple meter ya una linea escrita

B4X:
    Dim newWorkbook As WritableWorkbook
    newWorkbook.Initialize(File.DirRootExternal, "2.xls")
    Dim sheet1 As WritableSheet
    sheet1 = newWorkbook.AddSheet("prueba", 0)
    

    Dim cell As WritableCell
    
    cell.InitializeText(1, 0, "Hola Probando")
    sheet1.AddCell(cell)

el documento 2.xls me lo crea, pero no consigo meter nada dentro.
un saludo
 

IdasI4A

Active Member
Licensed User
Longtime User
Prueba a poner al final ( despues de sheet1.AddCell(cell))
B4X:
    'Must call write and close to save the data.
   newWorkbook.Write
   newWorkbook.Close
 

TheFalcon

Active Member
Licensed User
Longtime User
Perdona que estuve de vacaciones, funciono perfecto, seguiré probando y ya planteare mas dudas, muchísimas gracias
 

dvd12

Member
alguien sabe como escribir en una celda de excel? Puedo leer datos y agregar hojas, pero quiero escribir en una celda un dato. Es posible?
 

dhernandez

Active Member
Licensed User
Longtime User
Prueba con esto:

B4X:
Dim cell As WritableCell
cell.InitializeText(1, 0, "Hello")
sheet1.AddCell(cell)
 

dvd12

Member
1581491752471.png


Sub Button_acierto_Click
Dim newWorkbook As WritableWorkbook
newWorkbook.Initialize(File.DirRootExternal, "libro1.xls")
Dim sheet1 As WritableSheet
sheet1=newWorkbook.GetSheet (1)

Dim cell As WritableCell
cell.InitializeText(1, 0, "Hola Probando")
sheet1.AddCell(cell)

newWorkbook.Write
newWorkbook.Close

End Sub


Me da el error que te pongo arriba y te he copiado el texto del botón.

Gracias de antemano.
1581491752471.png
 

IdasI4A

Active Member
Licensed User
Longtime User
Prueba con esto:
B4X:
Sub Button_acierto_Click
    Dim newWorkbook As WritableWorkbook
    Dim sheet1 As WritableSheet
    
    newWorkbook.Initialize(File.DirRootExternal, "MiLibro1.xls")
    
    sheet1=newWorkbook.AddSheet("Mi Hoja1",0)

    Dim cell As WritableCell
    cell.InitializeText(0, 0, "Hola Probando")
    
    sheet1.AddCell(cell)
    
    
    newWorkbook.Write
    newWorkbook.Close
    Log("Escrito")
End Sub
 

josejad

Expert
Licensed User
Longtime User
Hola @dvd12 :

Por favor, para futuras ocasiones, procura abrir un hilo nuevo para que el foro sea más claro.
Utiliza también para poner tu código las etiquetas [ code] [/ code] (sin espacios). Pon tu código y los errores entre estas etiquetas, eso lo hace más legible que usar imágenes para los errores.
Indica el error además que es la línea 121, con lo cual estaría bien que indicaras qué hay en esa línea

El error que te está dando (no lo puedo copiar porque lo has pegado como imagen) es que hay un índice fuera de rango. Probablemente el cell.Iinitialize(1, 0...)
Se me ocurre que probablemente no esté pudiendo leer tu "libro1.xls", ya que al tenerlo en File.DirRootExternal tienes que solicitar permiso para leer en esa carpeta
Property_501.png
File. DirRootExternal As String [read only]

Returns the root folder of the external storage media.
This folder requires the WRITE_EXTERNAL_STORAGE permission. Only use it if you really need to access this folder.
You should probably use File.DirInternal or RuntimePermissions.GetSafeDirDefaultExternal instead.

Como indica la última línea, deberías usar File.DirInternal or RuntimePermissions.GetSafeDirDefaultExternal para leer tu archivo.
 

dvd12

Member
Prueba con esto:
B4X:
Sub Button_acierto_Click
    Dim newWorkbook As WritableWorkbook
    Dim sheet1 As WritableSheet
   
    newWorkbook.Initialize(File.DirRootExternal, "MiLibro1.xls")
   
    sheet1=newWorkbook.AddSheet("Mi Hoja1",0)

    Dim cell As WritableCell
    cell.InitializeText(0, 0, "Hola Probando")
   
    sheet1.AddCell(cell)
   
   
    newWorkbook.Write
    newWorkbook.Close
    Log("Escrito")
End Sub

Esto ya lo probé y funciona. Pero claro este código es para crear una hoja nueva y escribir. Mi problema es que simplemente quiero escribir algo en una celda de una hoja de un libro que ya existe. Leo los datos, añado hojas y escribo pero no consigo "escribir en una celda de una hoja existente", algo supuestamente simple pero que no doy con la tecla.

La app en el movil que es donde lo pruebo tiene el permiso de almacenamiento activado.
 

dvd12

Member
Hola @dvd12 :

Por favor, para futuras ocasiones, procura abrir un hilo nuevo para que el foro sea más claro.
Utiliza también para poner tu código las etiquetas [ code] [/ code] (sin espacios). Pon tu código y los errores entre estas etiquetas, eso lo hace más legible que usar imágenes para los errores.
Indica el error además que es la línea 121, con lo cual estaría bien que indicaras qué hay en esa línea

El error que te está dando (no lo puedo copiar porque lo has pegado como imagen) es que hay un índice fuera de rango. Probablemente el cell.Iinitialize(1, 0...)
Se me ocurre que probablemente no esté pudiendo leer tu "libro1.xls", ya que al tenerlo en File.DirRootExternal tienes que solicitar permiso para leer en esa carpeta
Property_501.png
File. DirRootExternal As String [read only]

Returns the root folder of the external storage media.
This folder requires the WRITE_EXTERNAL_STORAGE permission. Only use it if you really need to access this folder.
You should probably use File.DirInternal or RuntimePermissions.GetSafeDirDefaultExternal instead.

Como indica la última línea, deberías usar File.DirInternal or RuntimePermissions.GetSafeDirDefaultExternal para leer tu archivo.

Gracias Jose, soy nuevo en este foro. He probado lo que dices y nada.
La app en el movil que es donde lo pruebo tiene el permiso de almacenamiento activado.


Me vuelve a dar error, este es el código:

B4X:
Sub Button_acierto_Click
    Dim newWorkbook As WritableWorkbook
    newWorkbook.Initialize(File.DirInternal, "libro1.xls")
    Dim sheet1 As WritableSheet
    sheet1=newWorkbook.GetSheet (1) '<<-- esta es la línea 122
   
    Dim cell As WritableCell
    cell.InitializeText(1, 0, "Hola Probando")
    sheet1.AddCell(cell)
       
    newWorkbook.Write
    newWorkbook.Close

y este es el error:

B4X:
Error occurred on line: 122 (Main)
java.lang.IndexOutOfBoundsException: Index: 1, Size: 0
    at java.util.ArrayList.get(ArrayList.java:437)
    at jxl.write.biff.WritableWorkbookImpl.getSheet(WritableWorkbookImpl.java:408)
    at anywheresoftware.b4a.objects.WorkbookWrapper$WritableWorkbookWrapper.GetSheet(WorkbookWrapper.java:131)
    at b4a.example.main._button_acierto_click(main.java:436)
    at java.lang.reflect.Method.invoke(Native Method)
    at anywheresoftware.b4a.shell.Shell.runMethod(Shell.java:732)
    at anywheresoftware.b4a.shell.Shell.raiseEventImpl(Shell.java:348)
    at anywheresoftware.b4a.shell.Shell.raiseEvent(Shell.java:255)
    at java.lang.reflect.Method.invoke(Native Method)
    at anywheresoftware.b4a.ShellBA.raiseEvent2(ShellBA.java:144)
    at anywheresoftware.b4a.BA.raiseEvent2(BA.java:180)
    at anywheresoftware.b4a.BA.raiseEvent(BA.java:176)
    at anywheresoftware.b4a.objects.ViewWrapper$1.onClick(ViewWrapper.java:80)
    at android.view.View.performClick(View.java:6614)
    at android.view.View.performClickInternal(View.java:6587)
    at android.view.View.access$3100(View.java:787)
    at android.view.View$PerformClick.run(View.java:26122)
    at android.os.Handler.handleCallback(Handler.java:873)
    at android.os.Handler.dispatchMessage(Handler.java:99)
    at android.os.Looper.loop(Looper.java:201)
    at android.app.ActivityThread.main(ActivityThread.java:6820)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:547)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:922)
 

josejad

Expert
Licensed User
Longtime User
¿Qué te muestra en el log esta línea?
B4X:
Log(File.Exists(File.DirInternal, "1.xls"))

¿Puedes subir subir tu proyecto para ver el error? (Archivo->Exportar como Zip)
 
Last edited:

josejad

Expert
Licensed User
Longtime User
Según leo no se puede editar un excel????
Correcto, me temo que es así.
Tampoco es tanta bestialidad, digamos que tu excel original sería la plantilla, y a partir de esta vas creando otros archivos.
Prueba lo que te comenta@IdasI4A, probablemente te funcione.
 

deizliel

Member
Correcto, me temo que es así.
Tampoco es tanta bestialidad, digamos que tu excel original sería la plantilla, y a partir de esta vas creando otros archivos.
Prueba lo que te comenta@IdasI4A, probablemente te funcione.
hola @dvd12 estoy deseando poder hacer exactamente lo pedías aca, lo lograste hacer de alguna forma? (Reescribir en una hoja de un libro ya existente)
 

josejad

Expert
Licensed User
Longtime User
Has probado el ejemplo?

Si es así, por favor, crea un hilo nuevo y muestra como texto (con etiquetas [CODE]tu código aquí[/CODE]) el error que recibas.

saludos,
 

deizliel

Member
Has probado el ejemplo?

Si es así, por favor, crea un hilo nuevo y muestra como texto (con etiquetas [CODE]tu código aquí[/CODE]) el error que recibas.

saludos,
Gracias por tu pronta respuesta, si revise el ejemplo, hice mi codigo a partir de el, no tuve ningun error, luego de muchos intentos vi q realmente no se puede reescribir un archivo existente, siempre hay q crear un archivo nuevo. Bien a partir de esta conclusion quiero plantear otra cosa: se puede LEER un archivo (en dir.assets) y copiar solamente el formato de toda la hoja (del area imprimible)? Para guardarlo como una rutina y luego aplicarlo sobre el archivo nuevo q se crea.

Otra pregunta: se puede agregar imagenes al excel?
 

josejad

Expert
Licensed User
Longtime User
Por favor, crea un hilo nuevo con el asunto de lo que quieres saber.
De otra forma, una persona con tus mismas dudas quizás no revise este hilo.
 
Top