1

我有我正在尝试导出到 Word 表的 Access 数据。该表有 3 列,第一行和第一列都是标题。

我正在尝试遍历记录集并用数据填充第 2 列和第 3 列。我可以从第 2 行开始并填充第 2 列和第 3 列,但我不知道如何移动到下一行。

 iTbl = 1
 irow = 2
 iCol = 1

 Do Until recSet2.EOF
    If irow > wDoc.Tables(iTbl).Rows.Count Then
        wDoc.Tables(iTbl).Rows.Add
    End If

    For Each fld In recSet2.Fields
        On Error Resume Next
        iCol = iCol + 1
        wDoc.Tables(iTbl).Cell(irow, iCol).Range.Text = Nz(fld.Value)
    Next fld
    recSet2.MoveNext
    irow = irow + 1
    iCol = 1
 Loop
4

2 回答 2

0

在 Word 中创建表格(尤其是具有大量数据的表格)的最佳方法是首先将数据写入以字符分隔的字符串格式。将字符串分配给 Word 中的 Range,然后使用 ConvertToTable 方法将其转换为表格。这将在操作对象模型时省去很多麻烦,并且是最有效的方法(执行速度最快)。

下面的代码演示了这个原理。该过程Test创建一个新的 Word 实例,在 Word 应用程序中创建一个新文档,然后将字符分隔的字符串分配给文档内容。然后将其变成表格。如果您需要格式化该表,请使用tbl对象来执行此操作。此代码的编写方式需要引用 Word 对象库(早期绑定)。请注意,也可以使用后期绑定——你会发现很多例子。

第二个过程concatData被调用Test以创建字符分隔的字符串。它使用Tab字符作为字段分隔符并使用回车符作为记录分隔符。Word 几乎可以接受任何内容作为字段分隔符;记录分隔符必须是回车符 (ANSI 13)。

Sub Test()
    Dim wd As Word.Application
    Dim doc As Word.Document
    Dim rng As Word.Range
    Dim tbl As Word.Table

    Set wd = New Word.Application
    wd.Visible = True
    Set doc = wd.Documents.Add
    Set rng = doc.Content
    rng.Text = concatData()
    Set tbl = rng.ConvertToTable       
End Sub

Public Function concatData() As String
    Dim retVal As String
    Dim rsHeader As Long, rsCounter As Long        
    Dim rs As Recordset

    Set rs = CurrentDb.OpenRecordset("nameOfRecordset", dbOpenDynaset)
    'Get headers
    For rsHeader = 0 To rs.Fields.Count - 1
        retVal = retVal & rs.Fields(rsHeader).Name & vbTab
    Next
    'Replace last TAb with a carriage return
    retVal = Left(retVal, Len(retVal) - 1) & vbCr

    Do While Not rs.EOF
       'Get all records
        For rsCounter = 0 To rs.Fields.Count - 1
            retVal = retVal & rs.Fields(rsCounter).Value & vbTab
        Next
        retVal = Left(retVal, Len(retVal) - 1) & vbCr
        rs.MoveNext
    Loop
    concatData = retVal
End Function
于 2018-07-16T13:28:33.057 回答
0

感谢所有的帮助。我设法弄清楚并且工作得很好。它不会向下移动到下一行,而是尝试将数据写入不存在的 column(4),然后引发错误。这是我使用的代码:

iTbl = 1
iRow = 2
iCol = 1

For Each fld In recSet2.Fields
iCol = iCol + 1
    If iCol < 4 Then
        wDoc.Tables(iTbl).Cell(iRow, iCol).Range.Text = Nz(fld.value)
    Else
        If iCol > 3 Then
            iCol = iCol - 2
            iRow = iRow + 1
            wDoc.Tables(iTbl).Cell(iRow, iCol).Range.Text = Nz(fld.value)
        End If
    End If
Next fld
于 2018-07-16T16:29:21.000 回答