【VBA研究】读取Unix下的文本文件到工作表
发布时间
阅读量:
阅读量
一般情况下,在使用VBA编程时处理文件读取问题时会采用Line Input #fileNo, str这种操作方式来实现对数据的获取。这种方法主要通过以下步骤实现:首先打开指定的文本文档并分配一个输入引用;随后设置该输入引用指向待读取的数据行;最后利用适当的函数提取所需的信息并完成数据处理流程。需要注意的是这一操作方式主要针对的是适用于Windows环境下普通文本文件的操作场景,并非所有类型的特殊格式文档都能直接应用此方法进行处理。为了更直观地理解这一过程可以通过以下代码片段作为参考:
Sub ImpData1()
Dim datFullName As String, rline As String
Dim Arr() As String
Dim row1, i, k As Integer
datFullName = ThisWorkbook.Path & "\" & Cells(15, "O") '数据文件名
Open datFullName For Input As #1 ' 打开文件。
row1 = 2
stName = Cells(2, "P")
Do While Not EOF(1) 'EOF(1)中的1是文件号
Line Input #1, rline
Arr = Split(rline, Chr(9)) 'Tab是分隔符
k = UBound(Arr) + 1
For i = 1 To k
Sheets(stName).Cells(row1, i) = Arr(i - 1)
Next i
row1 = row1 + 1
Loop
Close #1
MsgBox "账单数据导入完毕!", vbOKOnly, "中国邮政EMS"
End Sub
AI写代码
但是这种方法无法处理Unix系统的文本文件,原因在于两种系统在换行符处理上有显著差异:在Windows环境下,一个换行操作涉及两个控制字符(即\textbackslash{}CR与\textbackslash{}LF),而在Unix系统中则仅需一个\textbackslash{}CR控制字符即可完成换行操作;实际上这相当于Windows中的软分页功能。
建议使用工具将 Unix 下的文本文件转换为 Windows 下的文档;但更为高效的办法是直接操作 Unix 下的文本文件。借助 FSO 对象来管理这些文件时无需在意它们属于哪个操作系统;ReadLine() 方法能够正确读取两种系统下对应的文档内容。在我们分析某一行的数据时发现其格式属于 Unix 下,并且分隔符采用ASCII码为 01 的字符;相应的代码如下:
'导入银行数据到账单工作表
Sub ImpData()
Dim datFullName As String, rline As String
Dim Arr() As String
Dim row1, i, k As Integer, MaxRow As Long, lineno As Long
Dim fso As Object, ts As Object
'Const ForWriting = 2
'使用fso时,需要在VBA工程中引入:Microsoft Script Runtime库。
Set fso = CreateObject("Scripting.FileSystemObject")
datFullName = ThisWorkbook.Path & "\" & Cells(7, "O") '数据文件名,第7行
Set ts = fso.OpenTextFile(datFullName, ForReading, True)
row1 = 2
stName = Cells(2, "P")
With Sheets(stName)
'清除数据
ExcelRowNo = .Cells.Rows.Count
MaxRow = .Range("A" & ExcelRowNo).End(xlUp).Row
.Rows("2:" & MaxRow).ClearContents '清除行内容,全清用clear
Do While Not ts.AtEndOfStream
rline = ts.ReadLine
Arr = Split(rline, Chr(1)) '分隔符ASCII值为01
k = UBound(Arr) + 1
For i = 1 To k
.Cells(row1, i) = Arr(i - 1)
Next i
row1 = row1 + 1
Loop
ts.Close
End With
MsgBox "账单数据导入完毕!", vbOKOnly, "中国邮政EMS"
End Sub
AI写代码
在使用FSO时,请参考下文中的示意图:应用FSO时,在VBA工程中需要导入Microsoft Scripting Runtime库。

全部评论 (0)
还没有任何评论哟~
