返回列表 发帖

[问题求助] 【已解决】VBS如何合并多个文本至Excel(xls)的各个sheet中?

本帖最后由 elec 于 2014-8-29 08:12 编辑

假设当前有三个文本 aa.txt  bb.txt  cc.txt,文本的行数不定
将3文本合并至同一个Excel中:
将aa.txt的所有数据放在Excel的sheet1的第一列中,并把sheet1命名为aa
将bb.txt的所有数据放在Excel的sheet2的第一列中,并把sheet2命名为bb
将cc.txt的所有数据放在Excel的sheet3的第一列中,并把sheet3命名为cc
...
1

评分人数

    • Batcher: 感谢给帖子标题标注[已解决]字样PB + 2

沙发~
On Error Resume Next
arrTxtFile = Array("aa.txt", "bb.txt", "cc.txt")
txt2excel arrTxtFile
Function txt2excel(ByVal arrTxtFile)
' 创建 Excel 对象
Set objExcel = CreateObject("Excel.Application")
If Not Err.Number = 0 Then
Msgbox "错误:无法创建 Excel 对象,你可能没有安装 Excel 。"
Exit Function
End If
If Not objExcel.application.version >= 12.0 Then
Msgbox "警告:请使用 Office 2007 以上版本。"
End If
' 隐藏运行,屏蔽提示
objExcel.Visible = False
objExcel.DisplayAlerts = False
' 添加工作表
Set objWorkBook = objExcel.Workbooks.Add
' Delete objWorkbook.Sheet(1-2)
Do While objWorkBook.Worksheets.Count > 1
objWorkBook.Worksheets(objWorkBook.Worksheets.Count).Delete
Loop
objWorkBook.Worksheets(objWorkBook.Worksheets.Count).Name = "TempTable"
For i = UBound(arrTxtFile) To 0 STEP -1
objWorkBook.Worksheets.Add.Name = i+1
Next
' 向工作表写入 txt 文件内容
For i = 0 To UBound(arrTxtFile)
AddRow2Sheet objWorkBook.Worksheets(i+1), arrTxtFile(i)
Next
'''' Delete Sheet 3
    If objWorkBook.Worksheets.Count > 1 Then objWorkBook.Worksheets("TempTable").Delete
' 显示 Excel
objExcel.Visible = True
set objExcel = NoThing
End Function
' 向工作表写入 txt 文件内容
Function AddRow2Sheet(ByRef objWorkSheet, ByVal FilePath)
Dim fso, objTxt, strLine
Set fso = CreateObject("Scripting.Filesystemobject")
If Not fso.FileExists(FilePath) Then Exit Function
' 打开 Txt 文件,写入 Excel Sheet
Set objTxt = fso.OpenTextFile(FilePath, 1)
nLeft = 1 :  nTop = 1
nRow = 0  :  nCol = 0
Do Until objTxt.AtEndOfStream
objWorkSheet.Rows(nTop + nRow).Insert
objWorkSheet.Cells(nTop + nRow, nLeft + nCol).Value = objTxt.ReadLine
nRow = nRow + 1
Loop
' Sheet:重命名、名称冲突处理
bReName = True
strSheetName = Left(fso.GetFileName(FilePath), _
Len(fso.GetFileName(FilePath)) - Len(fso.GetExtensionName(FilePath)) - 1)
For Each objWorkSheet2 In objWorkSheet.Application.ActiveWorkBook.WorkSheets
If objWorkSheet2.Name = strSheetName Then bReName = False
Next
If bReName Then objWorkSheet.Name = strSheetName
objTxt.Close
End FunctionCOPY
1

评分人数

    • elec: 非常感谢~技术 + 1
『千江有水千江月』千江有水,月映千江;万里无云,万里青天。    http://yu2n.qiniudn.com/

TOP

返回列表