0

我有一个将 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
4

2 回答 2

1

FileSystemObject 有许多方法,例如GetBaseNameGetFileName。所以,

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

GetFileName将包括扩展名。)

但是,正如哈里森所描述的,您可能希望将工作表名或某个数字包含在文件名中。

您可以考虑使用工作表的索引作为文件名的一部分,而不必发明数字。

于 2013-10-22T19:55:50.653 回答
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

请注意,如果您只想保存第一个工作表而不是在第一个工作表之后使用 Exit For,您可以使用它。

        Call oWB.Sheets(1).SaveAs (oWB.Name & ".txt", xlTXT )
于 2013-10-22T19:58:57.653 回答