从SQL查询中将列名导入Excel

13

我正在使用Excel从SQL数据库中提取数据。我使用了另一个SO问题的代码,它可以正常工作。现在我想除了实际表之外,还要从表中提取列名。我发现我可以使用For Each fld循环获取名称。但是,由于列数可能会改变,因此仍然存在在Excel中水平填充它们的问题 - 所以我认为我需要另一个For Each循环或类似的东西。

Sub GetDataFromADO()

'Declare variables'
    Set objMyConn = New ADODB.Connection
    Set objMyCmd = New ADODB.Command
    Set objMyRecordset = New ADODB.Recordset

'Open Connection'
    objMyConn.ConnectionString = "Provider=SQLOLEDB;Data Source=localhost;User ID=abc;Password=abc;"
    objMyConn.Open

'Set and Excecute SQL Command'
    Set objMyCmd.ActiveConnection = objMyConn
    objMyCmd.CommandText = "select * from myTable"
    objMyCmd.CommandType = adCmdText
    objMyCmd.Execute

'Loop Names'
    ' WHAT TO DO HERE????'

'Open Recordset'
    Set objMyRecordset.ActiveConnection = objMyConn
    objMyRecordset.Open objMyCmd

'Copy Data to Excel'
    ActiveSheet.Range("A1").CopyFromRecordset (objMyRecordset)

End Sub

你不想让表头与数据对齐吗?数据从A1开始,但你似乎将表头范围设置为A4。 - Lance Roberts
是的,你说得对 - 我这边复制粘贴出了问题。 - firedrawndagger
4个回答

24

我的平常代码非常相似:

For intColIndex = 0 To objMyRecordset.Fields.Count - 1 
    Range("A4").Offset(0, intColIndex).Value = objMyRecordset.Fields(intColIndex).Name
Next

我喜欢你的解决方案的“简洁性”。我只是稍微扩展了一下,将标题设置为粗体。 - Vincent Vancalbergh
2
我对没有不使用循环的解决方案感到困惑。 - mvbentes

13

好的,我经过4次尝试之后弄清楚了,这是循环的代码。

 'Loop'
 Dim FieldRange As Range
 Set FieldRange = Range("A4")
 Set TableColumns = Range("A4:H4")
 x = 1

 Range("A4").Select

 For Each fld in objMyRecordset.Fields
      ActiveCell.Value = fld.Name
      ActiveCell.Offset(0, x).Select
      x = x + 1 'tick iterator
 Next

 ActiveSheet.Range("A5").CopyFromRecordset objMyRecordset
 Range("A4").Select

2
你不需要选择单元格,可以使用类似 Range("A4").OffSet(0, x).value = fld.Name 的方法。 - Rafa Barragan

8
为了让它变得非常简单,可以像这样做(使用Sheet1和记录集r)。
    For i = 0 To r.Fields.Count - 1
        Sheet1.Cells(1, i + 1) = r.Fields(i).Name
    Next i

3
您可以将变量"x"设置为0,然后执行以下操作:
x = 0

For Each Field In RS.Fields 'RS being my Recordset variable
    Range("A3").Offset(0, x).Value = Field.Name
    x = x + 1
Next Field

这将使阅读略微简单一些... :)


这个答案难道不是 DAO 而不是 ADO 吗? - John Shaw

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接