ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 4025|回复: 11

通过ADO将CSV文件转换为XLSX文件后快速修改的问题

[复制链接]

TA的精华主题

TA的得分主题

发表于 2015-5-5 22:23 | 显示全部楼层 |阅读模式
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 lzhqlj 于 2015-5-5 22:23 编辑

通过ADO 使用SQL将 当前目录下的csv快速转换为SQL代码如下Private Sub CommandButton1_Click()

Dim s, name As String
Dim r As Range
Dim lk As Long


Application.ScreenUpdating = False
    p = ThisWorkbook.Path & "\"
    s = ThisWorkbook.Path
s = Right(s, 8)

s = Mid(s, 1, 4) & "-" & Mid(s, 5, 2) & "-" & Mid(s, 7, 2)



    Set Fso = CreateObject("Scripting.FileSystemObject")
    Set cnn = CreateObject("adodb.connection")
    cnn.Open "provider=Microsoft.Ace.OLEDB.12.0;Extended Properties =Excel 12.0;Data Source=" & ThisWorkbook.FullName
    For Each File In Fso.GetFolder(ThisWorkbook.Path).Files

        If File.name Like "*.csv" Then
            f = Replace(File, ".csv", ".xlsx")

            If Fso.FileExists(f) Then Fso.DeleteFile (f)
        Sql = "SELECT * INTO [Excel 12.0 xml;Database=" & f & ";]." & Replace(File.name, ".csv", "") & " FROM [Text;FMT=Delimited;HDR=Yes;DATABASE=" & p & ";]." & File.name


      'cnn.Execute Sql


    Next


MsgBox "OK"
End Sub
-----------
CSV无列名格式如下
92501
8.03
S
500
92501
8.03
S
500
92501
8.03
S
500
92501
8.03
S
1400
92501
8.03
S
8000
92501
8.03
S
27600
92501
8.03
S
200
92501
8.03
S
900
92501
8.03
S
1600
92501
8.03
B
500
需要转换成xlsx格式如下
时间
价格
方向
数量
日期
代码
92501
8.03
S
500
2014/6/7
6001
92501
8.03
S
500
2014/6/7
6001
92501
8.03
S
500
2014/6/7
6001
92501
8.03
S
1400
2014/6/7
6001
92501
8.03
S
8000
2014/6/7
6001
92501
8.03
S
27600
2014/6/7
6001
92501
8.03
S
200
2014/6/7
6001
92501
8.03
S
900
2014/6/7
6001
92501
8.03
S
1600
2014/6/7
6001
92501
8.03
B
500
2014/6/7
6001
-------------------------------------

现在可以将CSV转换成XLSX 但是转换的xlsx文件无列名 和后加的日期、代码列;现在使用

    .Sheets(1).Cells(1, 1) = "成交时间"等实现 速度比较慢
尝试使用  Sql = " alter table [Excel 12.0 xml;Database=" & f & ";]." & Replace(File.name, ".csv", "") & " add  File.name varchar(30)"

             MsgBox Sql
             cnn.Execute Sql
提示自动化错误,我觉的用sql语句可以实现,哪位大神能指导下小弟 谢谢




TA的精华主题

TA的得分主题

发表于 2015-5-5 23:15 | 显示全部楼层
请参考:
  1. SQL = "SELECT * INTO [Excel 12.0 xml;Database=" & f & ";]." & Replace(File.Name, ".csv", "") & " FROM (SELECT f1 as 时间,f2 as 价格,f3 as 方向,f4 as 数量,'2014/6/7' as 日期,6001 as 代码 FROM [Text;FMT=Delimited;HDR=no;DATABASE=" & p & ";]." & File.Name & ")"
复制代码

TA的精华主题

TA的得分主题

发表于 2015-5-5 23:20 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 zhaogang1960 于 2015-5-5 23:23 编辑

下面代码已经按照1楼数据测试成功:
a.rar (16.9 KB, 下载次数: 51)
  1. Sub Macro1()
  2.     Dim cnn As Object, SQL$, p$, f$, Fso As Object, File As Object
  3.     p = ThisWorkbook.Path & ""
  4.     Set cnn = CreateObject("adodb.connection")
  5.     cnn.Open "provider=Microsoft.Ace.OLEDB.12.0;Extended Properties =Excel 12.0;Data Source=" & ThisWorkbook.FullName
  6.     Set Fso = CreateObject("Scripting.FileSystemObject")
  7.     For Each File In Fso.GetFolder(ThisWorkbook.Path).Files
  8.         If File.Name Like "*.csv" Then
  9.             f = Replace(File, ".csv", ".xlsx")
  10.             If Fso.FileExists(f) Then Fso.DeleteFile (f)
  11.             SQL = "SELECT * INTO [Excel 12.0 xml;Database=" & f & ";]." & Replace(File.Name, ".csv", "") & " FROM (SELECT f1 as 时间,f2 as 价格,f3 as 方向,f4 as 数量,'2014/6/7' as 日期,6001 as 代码 FROM [Text;FMT=Delimited;HDR=no;DATABASE=" & p & ";]." & File.Name & ")"
  12.             cnn.Execute SQL
  13.         End If
  14.     Next
  15.     Set Fso = Nothing
  16.     cnn.Close
  17.     Set cnn = Nothing
  18.     MsgBox "ok"
  19. End Sub
复制代码

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-5-6 14:35 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
多谢版主
测试成功
我现在需要列的数据 代码 转为变量
  name = Mid(name, 3, 6)
Sql = "SELECT * INTO [Excel 12.0 xml;Database=" & f & ";]." & Replace(File.name, ".csv", "") & " FROM (SELECT f1 as 成交时间,f2 as 成交价格,f3 as 成交方向,f4 as 成交数量数量,'s' as 日期, "&name&" as 代码 FROM [Text;FMT=Delimited;HDR=no;DATABASE=" & p & ";]." & File.name & ")"
显示编译错误:语法错误

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-5-6 14:46 | 显示全部楼层
改成 " & name & " 提示自动化错误
MSGBOX sql 观察 已经转换为需要的字段

TA的精华主题

TA的得分主题

发表于 2015-5-6 18:49 | 显示全部楼层
lzhqlj 发表于 2015-5-6 14:46
改成 " & name & " 提示自动化错误
MSGBOX sql 观察 已经转换为需要的字段

如果name 是数字:
SQL = "SELECT * INTO [Excel 12.0 xml;Database=" & f & ";]." & Replace(File.name, ".csv", "") & " FROM (SELECT f1 as 时间,f2 as 价格,f3 as 方向,f4 as 数量,'2014/6/7' as 日期," & name & " as 代码 FROM [Text;FMT=Delimited;HDR=no;DATABASE=" & p & ";]." & File.name & ")"

TA的精华主题

TA的得分主题

发表于 2015-5-6 18:52 | 显示全部楼层
如果name是文本
SQL = "SELECT * INTO [Excel 12.0 xml;Database=" & f & ";]." & Replace(File.name, ".csv", "") & " FROM (SELECT f1 as 时间,f2 as 价格,f3 as 方向,f4 as 数量,'2014/6/7' as 日期,'" & name & "' as 代码 FROM [Text;FMT=Delimited;HDR=no;DATABASE=" & p & ";]." & File.name & ")"

两个程序都在下面附件中:
a.rar (18.07 KB, 下载次数: 37)

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-5-6 21:43 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
大神给力
这个问题解决了 在实践中又萌生了一个想法 就是将 xlsx文件导入SQL SERVER数据库
也是用SQL


Sql = "SELECT * INTO [Excel 12.0 xml;Database=" & f & ";]." & Replace(file.name, ".csv", "") & " FROM [Excel 12.0 xml;Database=" & f & ";]." & Replace(file.name, ".csv", "") & ""
我理解应该是改变标红的字符串
我的数据库名 股票 用户名 sa 密码123456
这应该是这个程序的最后一个问题了 多谢啊

点评

我没有见过SQL SERVER数据库,歉  发表于 2015-5-6 22:07

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-5-6 22:10 | 显示全部楼层
本帖最后由 lzhqlj 于 2015-5-6 22:13 编辑

Set cnn2 = CreateObject("adodb.connection")
myname = "sa"
myDataBase = "股票"
mypassword = "123456"
serverip = "127.0.0.1"
cnn2.Open "Provider=SQLOLEDB;Initial Catalog=" & myDataBase & ";User ID=" & myname & ";Password=" & mypassword & ";Data Source=" & serverip
Sql = "SELECT * INTO 逐笔数据 FROM [Excel 12.0 xml;Database=" & f & ";]." & Replace(file.name, ".csv", "") & ""


cnn2.Execute Sql
显示自动化错误

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-5-6 22:12 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
逐笔数据是目标  数据库里的数据表名
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-22 14:20 , Processed in 0.044646 second(s), 15 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表