保存与Excel文件同名的文本文件

时间:2013-10-22 19:13:53

标签: vba

我有一个将Excel文件转换为文本文件的Visual Basic脚本。假设我有一个名为example.xlsx的excel文件;目前,该脚本将其保存为example.xlsx.txt,这不是我想要的。我需要它保存为:example.txt

有什么想法吗?

Option Explicit

    Dim oFSO, myFolder
Dim xlTXT

myFolder="C:\..."


Set oFSO = CreateObject("Scripting.FileSystemObject")
xlTXT = 21 'Excel TXT format enum
Call ConvertAllExcelFiles(myFolder)
Set oFSO = Nothing

Call MsgBox ("Done!")


Sub ConvertAllExcelFiles(ByVal oFolder)
Dim targetF, oFileList, oFile
Dim oExcel, oWB, oWSH

    Set oExcel = CreateObject("Excel.Application")
    oExcel.DisplayAlerts = False
    Set targetF = oFSO.GetFolder(oFolder)
    Set oFileList = targetF.Files
    For Each oFile in oFileList
        If (Right(oFile.Name, 4) = "xlsx") Then
            Set oWB = oExcel.Workbooks.Open(oFile.Path)
            For Each oWSH in oWB.Sheets
                Call oWSH.SaveAs (oFile.Path & ".txt", xlTXT )
                Exit For
            Next
            Set oWSH = Nothing
            Call oWB.Close
            Set oWB = Nothing
        End If
    Next
    Call oExcel.Quit
    Set oExcel = Nothing

End Sub

2 个答案:

答案 0 :(得分:1)

FileSystemObject有一个number of methods,例如GetBaseNameGetFileName。所以,

Call oWSH.SaveAs (myFolder & "\" & oFile.GetBaseName & ".txt", xlTXT)

GetFileName将包含扩展名。)

但是,正如哈里森所描述的那样,您可能希望将工作表名称或某些数字作为文件名的一部分包含在内。

您可以考虑将工作表的索引用作文件名的一部分,而不必创建数字。

答案 1 :(得分:0)

由于退出foreach循环,因此只保存第一张工作表。要保存所有工作表

替换

        For Each oWSH in oWB.Sheets
            Call oWSH.SaveAs (oFile.Path & ".txt", xlTXT )
            Exit For
        Next

        For Each oWSH in oWB.Sheets
            Call oWSH.SaveAs (oWB.Name & "_" & oWSH.Name & ".txt", xlTXT )
        Next

请注意,如果您只想保存第一张工作表,而不是在第一张工作表之后使用“退出”,则可以使用此工作表。

        Call oWB.Sheets(1).SaveAs (oWB.Name & ".txt", xlTXT )