Клонируйте существующий набор записей в набор записей Excel

StackOverflow https://stackoverflow.com/questions/1456266

Вопрос

У меня есть набор записей, который содержит все данные, необходимые для импорта в файл 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

Спасибо.

Это было полезно?

Решение

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

Set excelRecordset = recordset.clone

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

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

Другие советы

Преуспеть 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 синтаксис , описанный в эта статья Базы знаний

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top