Clone de registros existente para excel registros
-
12-09-2019 - |
Pergunta
Eu tenho um conjunto de registros que contém todos os dados necessários para a importação para um arquivo do Excel. Existe uma maneira que eu posso clonar o meu conjunto de registros ao vivo para o que foi criado quando eu abrir um arquivo do Excel?
Aqui está o que estou tentando agora sem sorte.
Dim connection : Set connection = Server.CreateObject("ADODB.Connection")
connection.Open "Driver={Microsoft Excel Driver (*.xls)}; DriverId=790;
Dbq=c:\MyExcel.xls;" & _
"DefaultDir=c:\; ReadOnly=False;"
Dim excelRecordset : Set excelRecordset = Server.CreateObject("ADODB.Recordset")
excelRecordset.Open "[SHEET1$]", connection, 2, 3
excelRecordset.AddNew
Set excelRecordset = recordset.clone
excelRecordset.Update
excelRecordset.Close
Obrigado.
Solução
Quando você fizer isso: -
Set excelRecordset = recordset.clone
Você substituir a referência ao conjunto de registros aberto na planilha excel (e fecha) com uma referência ao novo conjunto de registros. Este novo conjunto de registros não é de forma alguma ligado à planilha excel.
Usando conjuntos de registros você realmente não tem muita escolha a não ser For Each
pelo conjunto de registros fonte, AddNew
sobre o destino, atribuir a cada campo de origem para o destino e Update
.
Outras dicas
Range
Excel tem um método CopyFromRecordset
que deve fazer o trabalho. Se você pode criar um objeto Excel.Application
e abra o livro que você quer escrever para, em seguida, você deve ser capaz de usar isso.
Então, se o conjunto de registros existente é chamado rs
e já foi preenchida, o código no VBA seria:
Worksheets("SHEET1").Cells(2, 1).CopyFromRecordset rs
Você pode então iterar sobre rs.Fields
para preencher os nomes de campo
Dim fld As Field
Dim i As Integer
i = 1
With Worksheets("SHEET1")
For Each fld in rs.Fields
.Cells(1, i).Value = fld.Name
i = i + 1
Next fld
End With
Não tenho certeza o quão fácil seria para traduzir para seu cenário embora.
Como alternativa, se ele está disponível com o driver que você está usando, você pode querer olhar para a sintaxe SELECT INTO
e INSERT INTO
descrito em este artigo da base de Conhecimento