课程咨询 加我微信EXCEL880B 试学网址http://v.excel880.com
有些朋友在工作中可以会遇到要将Excel内容导出为txt文本文件的情况,如果内容很少可以直接复制或者另存为txt即可,但如果遇到需要将每一行数据都保存为txt的情况那就比较困难了。今天我们来看下怎样利用excel vba来达到上述目的。我们先来看一下直接把整个sheet1保存为txt文件的例子。当然你可以通过录制宏功能来看一下直接另存为是什么效果,这里我来讲用Print语句实现的方法。如示例文件所示,我有一个Excel的工资表,现在要将其保存为txt格式,我们来看下面的代码
Sub 导出txt()
Dim file As String, arr, i
'定义文本文件的名称
file = ThisWorkbook.Path & "/新工资表.txt"
'判断是否存在同名文本文件,存在先行删除
If Dir(file) <> "" Then Kill file
'使用print语句将数组中所有数据写入文本文件
Open file For Output As #1
For i = 1 To Range("A65536").End(xlUp).Row '从第1行开始依次输出
Print #1, Range("A" & i) & "," & Range("B" & i) & "," & Range("C" & i) '同一行的内容用逗号连接
Next
'关闭文本文件
Close #1
End Sub
在这里我们要将Excel中的内容保存成一个名叫“新工资表.txt”的文件,在对Excel进行操作时都要用到Open方法,如代码中 Open file For Output As #1,其中file是一个完整的路径,如果文件存在则直接打开,如果文件不存在则新建并打开,所以我们在代码中不必再体现出新建txt文件的代码。Open file For Output As #1从字面意思可以理解为打开file这个文件以便于输出,并将其标识为1,这里的1只是一个必要的标识,你也可以写成2,3,4等等。打开txt文件之后就要对其进行写入操作了,print方法表示对文本文件进行按行写入,可以看出代码中我对Excel的每一行进行了一次写入,所以新生成的txt中自然也就分行了。Close #1把标识为1的文件关掉,没什么好说的了。
在这里Range("A" & i) & "," & Range("B" & i) & "," & Range("C" & i)表示将工作表中同一行的数据连接到一起,我们的示例文件中只有3列,所以这样写起来并不麻烦,但是如果你的表是几十列的话这样写效率就太低了。这里提供另一种连接每行数据的方法,即Join函数。看下面的代码
Sub 导出txt1()
Dim file As String, arr, i
'定义文本文件的名称
file = ThisWorkbook.Path & "/新工资表.txt"
'判断是否存在同名文本文件,存在先行删除
If Dir(file) <> "" Then Kill file
'将当前的数据读入数组
arr = Sheet1.Range("a1").CurrentRegion
'使用print语句将数组中所有数据写入文本文件
Open file For Output As #1
For i = 1 To UBound(arr)
Print #1, Join(Application.Index(arr, i), ",")
Next
'关闭文本文件
Close #1
End Sub
上面的代码中先用 arr = Sheet1.Range("a1").CurrentRegion将sheet1表中的所有内容放到一个名为arr的数组中,arr现在就成为了一个2维数组,再利用Join(Application.Index(arr, i), ",")将数组的每一行连接起来,连接符是“,”这样写起来就简单多了,Join函数就是将一个数组中的数连接起来,Application.Index是调用的工作表函数中的Index,参数i是行值。
本节示例文件下载地址http://pan.baidu.com/s/1i3pAQah