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拡張子が含まれます。)

しかし、Harrison が説明しているように、ファイル名の一部としてシート名または何らかの番号を含めたいと思うでしょう。

数字を発明するのではなく、ワークシートのインデックスをファイル名の一部として使用することを検討してください。

于 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 に答える