如何让Excel运行时自动加载csv文件(在线等)
为了提高应用中Excel导出的效率,现在项目有这么一个需求:让excel模板运行时,自动加载csv文件中的数据,填充模板中的变量。不知道该怎么实现,求高手帮忙解决下。
[解决办法]
在你的 excel模板 的 Workbook_Open() 事件代码中,打开文件并读取数据就行了。
[解决办法]
参考代码:
Private Sub Workbook_Open() Dim i& Workbooks.Open "X:\TEMP\book2.csv" For i = 1 To 5 Debug.Print Cells(i, 1).Value NextEnd Sub
[解决办法]
在excel的vba中的
Thisworkshop中的
Private Sub Workbook_Open()
// 打开文件并读取数据
End Sub
[解决办法]
2楼正解.
[解决办法]
如果明确要取的数据在工作表的区域和数据比较多的话,用内存数组做吧,快多了。
Private Sub Workbook_Open()
Dim i&, ar As Variant, wk As Workbook
Set wk = Workbooks.Open(ThisWorkbook.Path & "\book1.csv")
ar = wk.Sheets("sheet1").Range("a1:a5")
For i = 1 To UBound(ar)
Debug.Print ar(i, 1)
Next
wk.Close False
End Sub
[解决办法]
6楼的意思是,而你的采集模板的工作表格式是定好的,不同单元格的值可能要从 你的 数据表上采集,而且可能是不连续的,但是6楼如何知道 你的模块的 A1 单元格 的值 采自于 数据表 的哪个 单元格?他这是举个例子而已, 你自己都在搞项目了,难道这点简单道理都不知道?VBA 是比较简单的。
[解决办法]
'假设在你的C盘有个 csv 文件 数据库.csv ,在表名为 Sheet1 第 1 行是标题, 里面有 四个字段 A列(studentname),B列(sex),C列(id), D列(adress),数据从第 2 行开始到第100行
'举2种比较常用的
'第一种方法 ADO
Private Sub Workbkook_Open() '快
Dim cnn As New ADODB.Connection
cnn.Open "Driver={Microsoft Text Driver (*.txt; *.csv)};DBQ=C:\;Extensions=asc,csv,tab,txt;Persist Security Info=True"
'而你的表是 A列(id),B列(studentname),C列(sex),D列(adress),而且想在 a5单元格填入数据,那么如下, 注意顺序
Range("a5").CopyFromRecordset cnn.Execute("select id,studentname,sex,adress from [book1.csv]")
cnn.Close
End Sub
'第二种方法 ,内存数组, 2个字 " 特快 "
Private Sub Workbook_Open()
Dim i&, ar As Variant, wk As Workbook
Dim k As Long, arr()
Set wk = Workbooks.Open("c:\book1.csv")
ar = wk.Sheets("Sheet1").Range("a2:d100") '记住工作表中得到的数组下标为1
wk.Close False
For i = 1 To UBound(ar)
If ar(i, 1) = "张三" Then
k = k + 1
ReDim Preserve arr(1 To 4, 1 To k) '注意这个数组需要转置
arr(1, k) = ar(i, 1)
arr(2, k) = ar(i, 2)
arr(3, k) = ar(i, 3)
arr(4, k) = ar(i, 4)
End If
Next
Range("a5").Resize(k, 4) = Application.Transpose(arr)
End Sub
'第三种就是 利用工作表的 导入外部连接 等等....方法有好几种
'如果是企业用,尽量让科室的搞EXCEL,WORD,ACCESS等等的到 <<< WWW.EXCELHOME.NET >>>
'那个网站也有很多战友在这个CSDN上有注册,是好几届 的 MVP
'上面的代码我随便写了两个例子,具体的你可去这个网站
[解决办法]
'第一种方法 ADO
Private Sub Workbkook_Open() '快
这里
为测试多了个字母,改成下面的
Private Sub Workbook_Open() '快