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.

Foi útil?

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

objetos 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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top