如何将Excel工作簿中的所有工作表保存为一个文本文件?

时间:2017-01-19 00:59:04

标签: python excel vba text

我有一个包含多个工作表的Excell工作簿。我想将所有工作表的文本导出到一个文本文件。我已经看到多个解决方案(主要使用VBA - 下面的示例)将每个工作表导出为自己的文本文件,但尚未找到将所有工作表导出为一个文本文件的解决方案。关于如何使用VBA(或Python)完成此任务的任何想法?

Sub ExportSheetsToText()
Dim xWs As Worksheet
Dim xTextFile As String
For Each xWs In Application.ActiveWorkbook.Worksheets
    xWs.Copy
    xTextFile = CurDir & "\" & xWs.Name & ".txt"
    Application.ActiveWorkbook.SaveAs Filename:=xTextFile, FileFormat:=xlText
    Application.ActiveWorkbook.Saved = True
    Application.ActiveWorkbook.Close
Next
End Sub

1 个答案:

答案 0 :(得分:2)

生成这些文本文件后,您可以使用Windows Command Prompt轻松地将多个文本文件合并为一个文本文件。例如,假设您的所有文件名在其名称中都有一些模式。即*.txt但我建议你给他们一些额外的模式,比如temp_something.txt:

xTextFile = CurDir & "\temp_" & xWs.Name & ".txt"

然后将它们合并到命令提示符下的一个文本文件中,如下所示:

type temp_*.txt >> mergedFile.txt

copy temp_*.txt mergedFile.txt

如果要在VBA例程中完全自动化操作,可以将命令集成到其中,如下所示:

For Each xWs In Application.ActiveWorkbook.Worksheets
    xWs.Copy
    xTextFile = CurDir & "\temp_" & xWs.Name & ".txt"
    Application.ActiveWorkbook.SaveAs Filename:=xTextFile, FileFormat:=xlText
    Application.ActiveWorkbook.Saved = True
    Application.ActiveWorkbook.Close
Next

Dim shl As Object: Set shl = CreateObject("WScript.shell")
shl.CurrentDirectory = CurDir
shl.Run "cmd /C copy temp_*.txt " & ThisWorkbook.name & ".txt" ' merge the temporary text files

shl.Run "cmd /C del temp_*.txt" ' clean up the temporary text files

最后,您会收到一个与您的工作簿名称相同的文本文件以及扩展名.txt