Клонировать существующий набор записей в Excel - PullRequest
1 голос
/ 21 сентября 2009

У меня есть набор записей, который содержит все данные, необходимые для импорта в файл Excel. Есть ли способ, которым я могу клонировать свой живой набор записей в тот, который создается при открытии файла Excel?

Вот то, что я пытаюсь сейчас без удачи.

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

Спасибо.

Ответы [ 2 ]

1 голос
/ 22 сентября 2009

Когда вы делаете это: -

Set excelRecordset = recordset.clone

Вы заменяете ссылку на набор записей, открытый в электронной таблице Excel (и она закрывается), ссылкой на новый набор записей. Этот новый набор записей никоим образом не связан с таблицей Excel.

Используя наборы записей, у вас нет особого выбора, кроме For Each через исходный набор записей, AddNew в месте назначения, назначьте каждое поле от источника до места назначения и Update.

0 голосов
/ 23 сентября 2009

Excel Range объекты имеют метод CopyFromRecordset, который должен выполнять эту работу. Если вы можете создать объект Excel.Application и открыть рабочую книгу, в которую хотите написать, вы сможете использовать это.

Таким образом, если ваш существующий набор записей называется rs и уже заполнен, код в VBA будет выглядеть следующим образом:

Worksheets("SHEET1").Cells(2, 1).CopyFromRecordset rs

Затем вы можете перебрать rs.Fields, чтобы заполнить имена полей

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

Не уверен, насколько легко это было бы перевести на ваш сценарий.

В качестве альтернативы, если он доступен с драйвером, который вы используете, вы можете изучить синтаксис SELECT INTO и INSERT INTO, описанный в этой статье базы знаний

...