|
楼主 |
发表于 2009-6-2 16:13
|
显示全部楼层
第10部分 文件操作
技巧171 将数据写入文本文件
在需要时可以将Excel中的数据写入到文本文件中,有以下方法可以实现。
171-1 使用Print # 语句
使用Print # 语句将数据写入文本文件中,如下面的代码所示。- #001 Sub PrintText()
- #002 Dim myFileName As String
- #003 Dim myDataAr() As Variant
- #004 Dim myStr As String
- #005 Dim myRow As Integer
- #006 Dim myCol As Integer
- #007 Dim i As Integer
- #008 Dim j As Integer
- #009 On Error Resume Next
- #010 myFileName = "工资表.txt"
- #011 Kill ThisWorkbook.Path & "" & myFileName
- #012 With Sheet1
- #013 myRow = .Range("A65536").End(xlUp).Row
- #014 myCol = .Range("IV1").End(xlToLeft).Column
- #015 ReDim myDataAr(1 To myRow, 1 To myCol)
- #016 For i = 1 To myRow
- #017 For j = 1 To myCol
- #018 myDataAr(i, j) = .Cells(i, j).Value
- #019 Next
- #020 Next
- #021 Open ThisWorkbook.Path & "" & myFileName For Output As #1
- #022 For i = 1 To UBound(myDataAr, 1)
- #023 myStr = ""
- #024 For j = 1 To UBound(myDataAr, 2)
- #025 myStr = myStr & CStr(myDataAr(i, j)) & ","
- #026 Next
- #027 myStr = Left(myStr, (Len(myStr) - 1))
- #028 Print #1, myStr
- #029 Next
- #030 Close #1
- #031 End With
- #032 MsgBox "文件保存成功!"
- #033 End Sub
复制代码 代码解析:
PrintText过程将工作表中数据写入到文本文件“工资表.txt”中。
第11行代码使用Kill方法删除同一目录中可能存在的同名文本文件。
第13、14行使用单元格的End属性取得工作表中已使用数据的行、列号,关于End属性请参阅技巧3 。
第15行代码重新定义动态数组myDataAr的大小。关于动态数组请参阅技巧169-3。
第16行到第20行代码将工作表数据赋给数组myDataAr。
第21行代码使用Open语句打开文本文件以完成对文本文件的输入。关于Open语句请参阅技巧170-2。
第22行到第29行代码使用Print #语句将数组myDataAr中的所有元素写入到文本文件中。Print #语句将格式化显示的数据写入顺序文件中,语法如下:
Print #filenumber, [outputlist]
Filenumber是必需的,任何有效的文件号。
第30行代码Close语句关闭文本文件。
171-2 另存为文本文件
使用SaveAs方法将工作表另存为文本文件,如下面的代码所示。- #001 Sub SaveText()
- #002 Dim myFileName As String
- #003 myFileName = "工资表.txt"
- #004 On Error Resume Next
- #005 Kill ThisWorkbook.Path & "" & myFileName
- #006 Application.ScreenUpdating = False
- #007 Worksheets("Sheet1").Copy
- #008 ActiveWorkbook.SaveAs Filename:=ThisWorkbook.Path _
- #009 & "" & myFileName, _
- #010 FileFormat:=xlCSV
- #011 MsgBox "文件保存成功!"
- #012 ActiveWorkbook.Close SaveChanges:=False
- #013 Application.ScreenUpdating = True
- #014 End Sub
复制代码 代码解析:
SaveText过程将工作表“Sheet1”保存为文本文件。
第4、5行代码使用Kill方法删除同一目录中可能存在的同名文本文件。
第7行代码使用Copy方法复制工作表“Sheet1”。
第8行到第10行代码使用SaveAs方法将文件保存为文本文件。应用于Workbook对象的SaveAs方法保存对不同文件中的工作表的更改,语法如下:
expression.SaveAs(FileName, FileFormat, Password, WriteResPassword, ReadOnlyRecommended, CreateBackup, AccessMode, ConflictResolution, AddToMru, TextCodepage, TextVisualLayout, Local)
其中参数Filename表示要保存的文件名。可包含完整路径。如果不指定路径,Microsoft Excel 将文件保存到当前文件夹中。
其中参数FileFormat指定保存文件时使用的文件格式,在本例中指定为xlCSV即保存为文本文件。
第12行代码使用Close方法关闭活动工作簿。
170-3 使用OpenText方法
使用OpenText方法载入一个文本文件并将其作为包含单个工作表的工作簿处理,如下面的代码所示。- #001 Sub OpenText()
- #002 Dim myFileName As String
- #003 myFileName = "工资表.txt"
- #004 Sheet1.UsedRange.ClearContents
- #005 Workbooks.OpenText _
- #006 Filename:=ThisWorkbook.Path & "" & myFileName, _
- #007 StartRow:=1, DataType:=xlDelimited, Comma:=True
- #008 With ActiveWorkbook
- #009 With .Sheets("工资表").Range("A1").CurrentRegion
- #010 ThisWorkbook.Sheets("Sheet1").Range("A1").Resize(.Rows.Count, .Columns.Count).Value = .Value
- #011 End With
- #012 .Close False
- #013 End With
- #014 End Sub
复制代码 代码解析:
OpenText过程使用OpenText方法载入“工资表.txt”文本文件并将其数据写入到工作表中。
第5行到第7行代码使用OpenText方法载入“工资表.txt”文本文件。OpenText方法载入一个文本文件,并将其作为包含单个工作表的工作簿进行分列处理,然后在此工作表中放入经过分列处理的文本文件数据,语法如下:
expression.OpenText(FileName, Origin, StartRow, DataType, TextQualifier, ConsecutiveDelimiter, Tab, Semicolon, Comma, Space, Other, OtherChar, FieldInfo, TextVisualLayout, DecimalSeparator, ThousandsSeparator, TrailingMinusNumbers, Local)
其中参数FileName是必需的,指定要载入并作分列处理的文件名称。
参数StartRow是可选的,作分列处理的起始行号,默认值为 1。
参数DataType是可选的,在文件中指定数据的列格式。
参数Comma是可选的,如果该值为True,则将分隔符设为逗号。
其他参数请参阅VBA中的帮助文档。
第9行到第11行代码将作为工作表打开的文本文件中的数据写入到工作表中。
第13行代码使用Close方法关闭打开的文本文件。
[ 本帖最后由 yuanzhuping 于 2009-6-4 07:47 编辑 ] |
|