用SQL 语句 取得符合条件的数据集,
要将数据集的某两个字段,写入 excel 中不相邻的两列单元格中.如何进行?
我现在使用的是循环第一行放名称
for J=2 to 数据集的最后一条
     .cells(j,1)=数据集的第一条,第一个字段
     .cells(j,11)=数据集的第一条,第五个字段
next j
这样进行的,发现速度比较慢,还有什么更好的办法么?

解决方案 »

  1.   

    '单独做两个查询
    '记录集rs1只选择原第一个字段
    '记录集rs2只选择原第五个字段
    '不用循环可以批量复制
    .Range("A2").CopyFromRecordset rs1
    .Range("K2").CopyFromRecordset rs2
      

  2.   

    CopyFromRecordset 正解。
    +10086
      

  3.   

    把 Excel 作为 Jet Engine 的外部数据库,直接写 Insert Into ... Select * From ...。
      

  4.   

    感谢指导。继续请教。我在sql 表中的记录有列  如下:
     产生日期  、金额、记录属性、记录时间 、记录人、序号(自增) 
    记录属性有八个类别
    我需要在excel 的每个表中列出四个属性的,如下 :
    表1:
    内销金属   内销塑料  内销木质  内销纸质            内销金属记录序号   内销塑料记录序号  内销木质记录序号  内销纸质记录序号   
    2.00             3.00               10.00    5.00                           12                            14                              16                                   18
    1.00              30.00            5.00       6.00                          13                             15                              17                                    19
    ......
    表2:
    外销金属   外销塑料................................
    类似表的结构。
    产生sql 表中查询后写入excel表
      是定义16个不同的RECORDESET 记录集 ,然后赋值给excel。  还是定义一个记录集,使用不同的SELECT  语句进行16次查询,赋值呢?
    各有什么利弊呢?
      

  5.   

    再或者使用 查询一次产生不同的子记录呢?记录集的 Filter 属性可以过滤记录,“产生“一个临时的记录集:
    ADODC1.Recordset.Filter="成绩=‘合格’"
    n1=ADODC1.Recordset.RecordCount'合格人数
    ADODC1.Recordset.Filter="成绩=‘不合格’"
    n2=ADODC1.Recordset.RecordCount'不合格人数
    n3=n1/(n1+n2)'合格率
    恢复原来的数据:
    ADODC1.Recordset.Filter=“”
      

  6.   

    如果考虑数据量比较大,应该重复利用用同一个记录集,贴完数据就释放可以降低内存需求。
    数据量小两种方式是感觉不出差异的。
    #5的Filter方式也不适合大数据。还有你可以把一个类别的金额、序号一次性选出来输出两列,一张表4个类别输出后再通过Excel自己的列剪切插入功能调整列的次序。
    一次一列太没效率了。
      

  7.   

    使用数组输出,速度最快。但是没办法定制excel的格式,全是文本。