2013-10-22 86 views
0

我有一個將excel文件轉換爲文本文件的Visual Basic腳本。比方說,我有一個名爲example.xlsx的excel文件;目前,該腳本將其保存爲example.xlsx.txt,這不是我想要的。我需要它保存爲:example.txt保存與Excel文件具有相同名稱的文本文件

任何想法?

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

現在要附加的.txt文件路徑的末尾,你需要真正的改變似乎最簡單的方法是'呼叫oWSH.SaveAs(更換(oFile.Path,「XLSX」」。 txt「),xlTXT)' – engineersmnky

+0

謝謝!如何將所有文本文件保存到不同的文件夾中? – Brandon

+1

看起來您正在爲每個工作表覆蓋文件,因爲您將每個工作表保存爲相同的名稱。所以如果一個工作簿有多個工作表,你將失去除最後一個工作表外的所有工作表。 – Harrison

回答

1

FileSystemObject的具有number of methodsGetBaseNameGetFileName。所以,

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

GetFileName將包括擴展名)。

但是,正如哈里森介紹,你可能會想包括SHEETNAME,或一些號,作爲文件名的一部分。

您可能會考慮使用工作表索引作爲文件名的一部分,而不必發明數字。

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) 
+0

@AndyG,完成:-) – Harrison

相關問題