Office中国论坛/Access中国论坛

标题: 数据导出后,控制EXCEL出现了问题 [打印本页]

作者: kent_73    时间: 2014-11-13 15:08
标题: 数据导出后,控制EXCEL出现了问题
将ACCESS中的数据导出到EXCEL后,需要格式化导出的数据,只是在红字处,出现了错误,不知道怎么改了。请帮忙看看,该怎么改动。谢谢!

Sql = "SELECT * from 表"
rs.Open Sql, mydb, adOpenStatic, adLockReadOnly

If rs.EOF = False Then
    Set xlApp = CreateObject("Excel.Application")

    xlApp.Workbooks.Add
    xlApp.Visible = True
With xlApp
    For n1 = 0 To rs.Fields.Count - 1
         Set fld = rs.Fields(n1)
         xlApp.Cells(2, n1 + 1) = fld.Name
    Next
   .Range("a3").CopyFromRecordset rs
   
    Set rng = .Sheets("sheet1").Range("a1").CurrentRegion
    sAddress = rng.Address(0, 0)

    If rs.State = 1 Then rs.Close
    cnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties=Excel 8.0;Data Source=" & ThisWorkbook.FullName   '''ThisWorkbook.FullName出现问题了
    Sql = "TRANSFORM sum(数量) SELECT 字段1,字段2 FROM [sheet1$ & " & sAddress & "] GROUP BY 字段1,字段2 PIVOT 字段1"  '''sheet1$这里也有错误
    rs.Open (Sql), cnn, adOpenKeyset, adLockReadOnly
end with


作者: 这是我的小号    时间: 2014-11-13 15:44
第一个问题:请确认Excel版本是否2003的。第二个问题,正确的写法是: select * from [sheet1$A2:C1000],而且第二行必须为表头,区域内不能有合并单元格,且每列字段类型必须一致。
作者: kent_73    时间: 2014-11-13 15:58
这是我的小号 发表于 2014-11-13 15:44
第一个问题:请确认Excel版本是否2003的。第二个问题,正确的写法是: select * from [sheet1$A2:C1000], ...

谢谢回复。
1、office版本是2003的。2、这句sql语句是交叉表,提示不能用"select *"的。excel没有合并单元格的,字段类型是不同的,有文本、有数值。
作者: roych    时间: 2014-11-13 16:21
贴附件看看吧。
作者: kent_73    时间: 2014-11-13 16:22
我整理一下吧
作者: todaynew    时间: 2014-11-13 19:25
set wkbook=xlApp.Workbooks.Add
....
cnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties=Excel 8.0;Data Source=" & wkbook.FullName   
作者: todaynew    时间: 2014-11-13 19:30
本帖最后由 todaynew 于 2014-11-13 19:33 编辑

Sql = "TRANSFORM sum(数量) SELECT 字段1,字段2 FROM in " & wkbook.FullName & "![sheet1$!" & sAddress & "] GROUP BY 字段1,字段2 PIVOT 字段1"  
作者: kent_73    时间: 2014-11-14 08:24
todaynew 发表于 2014-11-13 19:30
Sql = "TRANSFORM sum(数量) SELECT 字段1,字段2 FROM in " & wkbook.FullName & "![sheet1$!" & sAddress  ...

谢谢回复。这句sql语句提示:运行时错误'-2147217900(80040e14)':FROM子句语法错误。
现传上附件,请帮忙改改。

[attach]55012[/attach]


作者: todaynew    时间: 2014-11-14 10:09
本帖最后由 todaynew 于 2014-11-14 10:33 编辑
kent_73 发表于 2014-11-14 08:24
谢谢回复。这句sql语句提示:运行时错误'-2147217900(80040e14)':FROM子句语法错误。
现传上附件,请帮 ...

Sql = "TRANSFORM sum(数量) SELECT 字段1,字段2 FROM [sheet1$!" & sAddress & "] in " & wkbook.FullName & " GROUP BY 字段1,字段2 PIVOT 字段1"
其实有个更简单的办法,是将Excel表的数据区域命名,由于这个命名在表中是唯一的,所以可以直接引用,且与sheet无关。

比如,假设这个区域命名为data,则sql语句可写为:
Sql = "TRANSFORM sum(数量) SELECT 字段1,字段2 FROM data$ in " & wkbook.FullName & " GROUP BY 字段1,字段2 PIVOT 字段1"
或者
Sql = "TRANSFORM sum(数量) SELECT 字段1,字段2 FROM [Excel 8.0;DATABASE=" & wkbook.FullName & ".data$  GROUP BY 字段1,字段2 PIVOT 字段1"

作者: kent_73    时间: 2014-11-14 10:32
todaynew 发表于 2014-11-14 10:09
Sql = "TRANSFORM sum(数量) SELECT 字段1,字段2 FROM [sheet1$!" & sAddress & "] in " & wkbook.FullNa ...

还是有错的。[attach]55013[/attach]


作者: todaynew    时间: 2014-11-14 10:34
本帖最后由 todaynew 于 2014-11-14 10:40 编辑
kent_73 发表于 2014-11-14 10:32
还是有错的。

这不明摆着没扩展名嘛

给你几段红尘如烟总结的处理方法:
导入数据(导入数据时第一行必须是字段名):
DoCmd.RunSQL "Insert INTO 表名 Select * FROM [Excel 8.0;DATABASE=E:\桌面\测试数据.xls].[Sheet1$]"
DoCmd.RunSQL "Insert INTO 表名 Select * FROM [Sheet1$] IN 'E:\桌面\测试数据.xls'[EXCEL 8.0;]"
DoCmd.RunSQL "Insert INTO 表名 Select * FROM [Sheet1$] IN 'E:\桌面\测试数据.xls' 'EXCEL 8.0;'"


导出数据:
DoCmd.RunSQL "Select * INTO [Excel 8.0;DATABASE=E:\桌面\测试数据.xls].[Sheet1] FROM 表名"
DoCmd.RunSQL "Select * INTO [Sheet1] IN 'E:\桌面\测试数据.xls'[EXCEL 8.0;] FROM 表名"
DoCmd.RunSQL "Select * INTO [Sheet1] IN 'E:\桌面\测试数据.xls' 'EXCEL 8.0;' FROM 表名"








欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3