我需要使用vba读取图片中的数据表。我使用 Msg.Body 来读取正文,但实际上我需要找到第一行作为标题并作为数据字段休息并相应地更新DBMS表。所以可以像我一样读取表格Excel中?
答案 0 :(得分:7)
此示例程序应该有所帮助。我在Excel中重新创建了表格,将其粘贴到Outlook电子邮件中并发送给自己。然后我用这个程序来读取“单元格”值。
Sub GetLines()
Dim msg As Outlook.mailItem
Dim rows As Variant
Dim numberofColumns As Long
Dim numberofRows As Long
Dim headerValues As Variant
Dim headerRow() As String
Dim data() As String
Dim i As Long, j As Long
' get currently selected email
Set msg = ActiveExplorer.Selection.item(1)
' tokenize each line of the email
rows = Split(msg.Body, vbCrLf)
' calculate array size
numberofColumns = Len(rows(0)) - Len(Replace(rows(0), Chr(9), ""))
numberofRows = UBound(rows) + 1
' put header row into array
ReDim headerRow(1 To numberofColumns)
headerValues = Split(rows(0), Chr(9))
For i = 1 To numberofColumns
headerRow(i) = Trim$(headerValues(i - 1))
Next i
' calculate data array size
numberofRows = numberofRows - 1
' put data into array
ReDim data(1 To numberofRows, 1 To numberofColumns)
For i = 1 To numberofRows
For j = 1 To numberofColumns
data(i, j) = Trim$(Split(rows(i), Chr(9))(j - 1))
Next j
Next i
End Sub
首先,我们将电子邮件的每一行标记为一个数组。我们计算数组大小,然后创建一个数组来保存表格的第一行(“标题”)。
然后我们从行计数中减去一个,因为我们将跳过标题行。然后我们遍历每一行,拆分它并循环遍历它的值,然后在我们去的时候将它们分配给我们的2D数组。
最后,可以迭代变量“headerRow”以检索要用于DBMS的字段值。变量“data”仅包含与每个字段对应的值。所以headerRow(1)和data(n,1)应该对应于表格第一列中的值。