Недавно по работе потребовалось перегнать данные из многостраничного документа WORD с множеством таблиц, в MS SQL базу данных. Причем необходимо было перегнать не все данные, а только те строки, в которых в первом столбце встречались коды включающие в себя точку. Например такие 1.2, 1.23.1, 3.32.45 и т.д., т.е. необходимо было не просто скопировать, но и распарсить. Немного поразмыслив и полазив по интернет форумам родился совсем короткий скрипт, который всю эту рутинную работу сделал в секунды.
Код может и не совсем оптимальный, но свою функцию выполняет и, кроме того, он еще отрезает два непечатаемых символа присутствующие в конце каждого копируемого значения таблиц Word.
Sub ParseTable()
Dim oTbl As Table
Dim oRow As Row
Dim sqlstr As String
Dim Conn As New ADODB.Connection
Conn.ConnectionString = "Provider=SQLOLEDB;Data Source=SRV;database=tbl;uid=login;pwd=pass;"
sqlstr = "INSERT INTO table_test (kod, nam, per) VALUES ( '" & Left(oRow.Cells(1).Range.Text, Len(oRow.Cells(1).Range.Text) - 2) & "', '" & Left(oRow.Cells(2).Range.Text, Len(oRow.Cells(2).Range.Text) - 2) & "', '" & Left(oRow.Cells(3).Range.Text, Len(oRow.Cells(3).Range.Text) - 2) & "')"
Conn.Open
For Each oTbl In ThisDocument.Tables
For Each oRow In oTbl.Rows
If oRow.Cells(1).Range.Text Like "*#.#*" Then
Conn.Execute sqlstr
End If
Next
Next oTbl
Conn.Close
End Sub
Единственно, для того чтобы работал данный скрипт необходимо добавить в References библиотеку:
Microsoft ActiveX Data Objects 2.8 Library