Использование ADODB для записи в файл Excel - PullRequest
0 голосов
/ 27 сентября 2018

Я надеюсь, что кто-то может дать мне какое-то руководство, используя методы ADODB для достижения моей цели.

Краткое объяснение:

В настоящее время У меня есть код в Outlook VBA, который выполняет поиск по электронной почте.Если электронное письмо соответствует критериям, макрос Outlook открывает книгу Excel, просматривает столбец A, чтобы узнать, существует ли идентификационный номер.Если он это делает, он обновляет другие столбцы (1 или более столбцов), если нет, он создает новую строку и записывает данные в столбцы AC для этой строки.Затем сохраняет и закрывает книгу.

Я хочу, чтобы ускорил процесс, а ограничивающим фактором является открытие книги Excel (расположенной на общем диске).Я использовал простой макрос ADODB для чтения данных в другой книге и видел возможное увеличение скорости.Я хочу реализовать это здесь.

Мне удалось установить соединение с книгой из Outlook и поместить данные в набор записей.НО я не знаю, как «циклически проходить» по первому столбцу, чтобы увидеть, существует ли идентификатор, или нет, и еще больше, как записать данные в столбцы в рабочей книге (команда UPDATE SQL?).

Код ExcelConnection:

Public Sub ExcelConnect(msg As Outlook.MailItem, LType As String)

    Dim lngrow As Long
    Dim SourceFile As Variant   'used
    Dim SourceSheet As String   'used
    Dim SourceRange As String   'used

    SourceFile = "T:\Capstone Proj\TimeStampsOnlyTest.xlsx"
    SourceSheet = "Timestamps"
    SourceRange = "A2:F500"



    Dim rsCon As Object     'used
    Dim rsData As Object    'used
    Dim szConnect As String ' used
    Dim szSQL As String     ' used
    Dim lCount As Long

    If Val(Application.Version) < 12 Then
        szConnect = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
                    "Data Source=" & SourceFile & ";" & _
                        "Extended Properties=""Excel 8.0;HDR=Yes"";"
        Else
            szConnect = "Provider=Microsoft.ACE.OLEDB.12.0;" & _
                        "Data Source=" & SourceFile & ";" & _
                        "Extended Properties=""Excel 12.0;HDR=Yes"";"
        End If

        szSQL = "SELECT * FROM [" & SourceSheet$ & "$" & SourceRange$ & "];"

        Set rsCon = CreateObject("ADODB.Connection")
        Set rsData = CreateObject("ADODB.Recordset")

        rsCon.Open szConnect
        rsData.Open szSQL, rsCon, 0, 1, 1

    '***Need Help implementing a way to find exisiting ID numbers, or if Exisiting = 0 then INSERT new row into worksheet***'

    Select Case LType '// Choose which columns based on Type
    Case "MDIQE"
    '        If columnvalue = 0 Then
    '        Update column value
    Case "MDIQ"
    '        If columnvalue = 0 Then
    '        Update column value
    '        
    '........
    '
    Case "MDIF"
    '        If columnvalue = 0 Then
    '        Update column value
    '        
    End Select

'Error handing & success messagebox

End sub

Спасибо за помощь, Вагнер

1 Ответ

0 голосов
/ 27 сентября 2018

В свой оператор SELECT включите предложение WHERE для поиска идентификатора в столбце A, что-то вроде этого:

SELECT COUNT(*) c
  FROM [sourceSheet$sourceRange]
 WHERE <ColumnAName> = <ID>

обратите внимание, это псевдокод,вам нужно будет правильно собрать оператор так же, как вы это делали, когда присваивали строку szSQL

Затем проверьте свой результирующий набор на значение c, что-то вроде этого:

If rsData.Fields("c").value = 0 Then
  'ID was NOT found, execute SQL INSERT here
Else
  'ID was found, execute SQL UPDATE here
End If

т. Е. Обрабатывать ваш лист Excel как базу данных.

Конечно, было бы лучше, если бы вы могли использовать Access в качестве базы данных (или SQL Server, или Oracle, или ...), поскольку именно для этого они и предназначены.Но я понимаю, что иногда нужно просто катиться с тем, что у тебя есть.

...