如何实现多个TXT文件文件(N个)导入到一个EXCEL文件的对应数目(N个)的SHEET中

我想要实现的目的是:
我每天会得到一个固定格式的TXT文件,由于EXCEL数据处理较方便,所以我希望把每一天的的这个TXT数据导入到EXCEL中,要求每一天的TXT对应一个EXCEL的SHEET,如果一天导一个,工作量不大,但是基本每天很忙,我希望月末的时候一次性将30个TXT导入到一个EXCEL报表的30个SHEET中,我在网上搜了一下,好像说上述程序能够帮助我实现该功能,我的问题是:
1)这段程序我不懂,能否请专家帮我解释一下?
2)我前期该如何操作才能使用上这段程序?
Sub D20合并文本()
'made by fxw

Dim fd As FileDialog
Set fd = Application.FileDialog(msoFileDialogFilePicker)

Dim newwb As Workbook
Set newwb = Workbooks.Add
newwb.Application.ActiveWindow.Caption = "MergeTXT.xls"

With fd

.Filters.Clear
.Filters.Add "文本文件", "*.txt", 1
.Filters.Add "所有文件", "*.*", 2
.Title = " 请选择要合并的txt文件 "
If .Show = -1 Then

Application.ScreenUpdating = False

Dim vrtSelectedItem As Variant
Dim i As Integer
i = 1

For Each vrtSelectedItem In .SelectedItems
Dim tempwb As Workbook
Set tempwb = Workbooks.Open(vrtSelectedItem)

tempwb.Worksheets(1).Copy Before:=newwb.Worksheets(i)
newwb.Worksheets(i).Name = VBA.Replace(tempwb.Name, ".txt", "")

tempwb.Close savechanges:=False

i = i + 1

Next vrtSelectedItem

Else:
newwb.Close savechanges:=False
Exit Sub

End If

End With

Set fd = Nothing

If ActiveWorkbook.Sheets.Count > 3 Then

Sheets("Sheet1").Select
Application.DisplayAlerts = False
ActiveWindow.SelectedSheets.Delete
Application.DisplayAlerts = True

Sheets("Sheet2").Select
Application.DisplayAlerts = False
ActiveWindow.SelectedSheets.Delete
Application.DisplayAlerts = True

Sheets("Sheet3").Select
Application.DisplayAlerts = False
ActiveWindow.SelectedSheets.Delete
Application.DisplayAlerts = True

End If

Sheets(1).Select
Application.ScreenUpdating = True

End Sub
啊,突然发现问题快过期了,可是下面各位提出的方案我还没有尝试呢,怎么延期呢?

不用这么麻烦呀?
EXCEL本身就有类似数据库的数据导入功能的。

按你所述,你可以这样:
①建一模板XLS文件,文件名比如为201100.xls
②在模板文件中建31个SHEET,名称比如为1,2……31
③在每个SHEET中都做如下操作(别告诉我你不会用复制):定位在需要的格(比如A1)>数据>导入外部数据>导入数据,选择与SHEET名日期对应的TXT文件,按数据分列的操作方法设置数据和列属性等,点新窗口中的属性按钮,勾选”打开工作簿时,自动刷新“等需要的项(注意设置的TXT文件的地址是绝对地址还是相对地址)(注意”保存查询定义“一定要勾选),确定。
④请反复操作第③步,确认你了解了每一步的功能后设置完成此31个表。保存,将模板文件201100.xls设为只读。
⑤每月底,打开201100.xls,确认刷新(你要是设为确认刷新31次可够你烦的,呵呵),另存为当月文件。

当然用VBA程序也可以完成这个任务,不过显然没有我的方法学习难度低,呵呵。

给分吧

特别提醒一句:此方法的数据源是极为宽泛的(想当年某会员网站只提供网页查询功能,我用这个功能半天时间把网站的几万行数据全部导到了本地,呵呵,省了上千元的会员费)
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-06-21
这个VB文件很长啊,试试下面这个VBA(省略了定义语句),原理基本一样:在保存宏命令所在表格文件的路径中,逐个打开全部文本文件(扩展名为.TXT,注意,文件名不能太长27位以内,否则不被导入),同时将它们逐一移到宏命令所在文件。
创建方法:自建一表格文件(文件名不限),保存后,在VBA开发工具中,选中该文件,插入“模块”,将下面的宏命令复制到模板编辑区,再次保存。
使用方法:将自建文件保存到要导入的TXT文件同一文件夹中,打开(建议将宏安全性设置为中,需要时就启用宏,不需要时不启用),按键Alt+F8,执行宏“导入本地文件夹TXT文件”即可。

Sub 导入本地文件夹TXT文件()
路径全名 = ThisWorkbook.FullName
命令文件 = ThisWorkbook.Name
路径名称 = Left(路径全名, Len(路径全名) - Len(命令文件)) '取得命令文件所在路径
If Right(路径名称, 1) <> "\" Then 路径名称 = 路径名称 + "\"
文件类型 = "*.txt"
Set s = CreateObject("Scripting.FileSystemObject") '为VBA创建文件系统
Set d = s.GetFolder(路径名称) '为VBA指定文件夹
Set f = d.Files '将文件夹中全部文件作为处理对象
For Each k In f '逐个文件处理
m = k.Name '提取文件名(短文件名)
If (LCase(Right(m, 3)) = "txt") Then '如果是txt文件,就打开它
文本长名 = 路径名称 + k.Name
Application.StatusBar = "正打开文件:" + k.Name '在状态栏提示处理进度
Workbooks.OpenText Filename:=文本长名
On Error GoTo 出错提示 '防止因文本文件名称过长,影响表单移动
ActiveSheet.Move Before:=ThisWorkbook.Sheets(1) '以移动代替导入
On Error GoTo 0
End If
Next k
Set f = Nothing
Set d = Nothing
Set s = Nothing
MsgBox "当前文件夹中TXT文件收集完毕!", vbOKOnly, "处理结果"
Exit Sub
出错提示:
MsgBox "移动表单出错!(TXT文件名可能太长了)"
ActiveWorkbook.Close False
Resume Next
End Sub
第2个回答  2011-06-20
可以尝试自已编个程序来实现先读取oracle中的,再导入到excel文件中 应该不能倒吧,SQL server是可以的,但是好象也不能按照特定的格式如果真的要倒也
第3个回答  2011-06-20
这个不难,你发两个TXT样本给我,再发整理后的最终格式的EXCEL表格给我,我帮你写好代码。
[email protected]
相似回答