Spanish (Solucionado)escribir en excel

TheFalcon

Active Member
Licensed 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

Member
Licensed 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
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
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

Member
Licensed 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
 

José J. Aguilar

Well-Known Member
Licensed 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
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
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)
 

José J. Aguilar

Well-Known Member
Licensed 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:
Top