我有一个将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
答案 0 :(得分:1)
FileSystemObject有一个number of methods,例如GetBaseName
,GetFileName
。所以,
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 )