Excel

Ciao a tutti

Sto creando una applicazione che mi permette estrarre dei dati da un db sqlite che gira in una applicazione fatta con xojo ed esportarli ad un foglio di excel

ecco il codice

Dim excel as new ExcelApplication // creo un nuovo oggetto
Dim rs as RecordSet

// Get all of the information for the selected customer record
rs = Principale.MasterDatabase.SQLSelect(“SELECT * FROM Cliente WHERE ID = '”+ ListaCliente.Cell(ListaCliente.ListIndex, 0) +"’")

if Principale.MasterDatabase.error = true then
Principale.displayDatabaseError false
return
end

excel.Visible = true // apri la applicazioni excel
excel.Workbooks.Add // aggiungi un workboos alla applicazione

// aggiungo dei dati
excel.Range(“A1”).Value = rs.Field(“Email”).StringValue

excel = Nil // set oggetto su NIL

exception err as OLEException // verifico eventuali errori
MsgBox err.message

rs.close

L’unico problema e’ che mi esporta un solo dato alla volta aprendo sempre un workbook nuovo!
Come faccio ad esportare una intera colonna di un db in un solo workbook e sempre nello stesso foglio?

Grazie in anticipo a tutti

Ciao,

dovresti mettere il tutto in un ciclo While…Wend. ad esempio

Dim excel as new ExcelApplication // creo un nuovo oggetto
Dim rs as RecordSet

// Get all of the information for the selected customer record
rs = Principale.MasterDatabase.SQLSelect("SELECT * FROM Cliente WHERE ID = '"+ ListaCliente.Cell(ListaCliente.ListIndex, 0) +"'")


if Principale.MasterDatabase.error = true then
Principale.displayDatabaseError false
return
end


excel.Visible = true // apri la applicazioni excel
excel.Workbooks.Add // aggiungi un workboos alla applicazione

Dim i As Integer

// aggiungo dei dati con un ciclo
While not rs.EOF
excel.Range("A"+ str(i)).Value = rs.Field("Email").StringValue
i = i+1
rs.MoveNext
Wend

excel = Nil // set oggetto su NIL

exception err as OLEException // verifico eventuali errori
MsgBox err.message 

rs.close

In teoria dovrebbe funzionare… sono andato un p a memoria… e sono pure le 5:30 di mattina :slight_smile:

Ciao Matteo

Innanzitutto grazie!
Qui da me sono le quasi la mezzanotte (ora Colombia)

Dim excel as new ExcelApplication // creo un nuovo oggetto
Dim rs as RecordSet

// Get all of the information for the selected customer record
rs = Principale.MasterDatabase.SQLSelect(“SELECT * FROM Cliente WHERE ID = '”+ ListaCliente.Cell(ListaCliente.ListIndex, 0) +"’")

if Principale.MasterDatabase.error = true then
Principale.displayDatabaseError false
return
end

excel.Visible = true // apri la applicazioni excel
excel.Workbooks.Add // aggiungi un workboos alla applicazione

Dim i As Integer

// aggiungo dei dati con un ciclo
While not rs.EOF
excel.Range(“A”+ str(i)).Value = rs.Field(“Email”).StringValue
i = i+1
rs.MoveNext
Wend

excel = Nil // set oggetto su NIL

exception err as OLEException // verifico eventuali errori
MsgBox err.message

rs.close

In teoria dovrebbe funzionare… sono andato un p a memoria… e sono pure le 5:30 di mattina :slight_smile:

mi va in crash(segnala il bug) sulla parte che ti ho evidenziato in “negrita” e non ce nessuna copia!

Mentre se aggiungo 1 al Range A quindi A1 mi copia il contenuto(un solo valore) 10 righe piu in basso nella colonna 1

Domenico

Ciao Matteo

Ho trovato questo in giro per il forum:

Dim SQL As String
sql= " SELECT * FROM Cliente"

Dim RS As RecordSet
Dim excel As New ExcelApplication
Dim book As ExcelWorkbook

excel.Visible = True
book = excel.Workbooks.Add
excel.ActiveSheet.Name = “Transfert rencontre”

rs = Principale.MasterDatabase.sqlSelect(sql)

excel.Range(“A1”, “A1”).value =“id”

For i As Integer = 1 To RS.RecordCount
excel.Range(“A” + str(i + 1), “A” + str(i + 1)).value = RS.Field(“Email”).StringValue

RS.MoveNext

Next

RS.close
RS = Nil

Funziona ok

Grazie comunque ed a buon rendere

Domenico