2016-07-21 7 views
0

Ich habe dieses Skript, das gut mit xls, aber ich wollte es für xlsx verwenden. Ich habe die Erweiterung in .xlsx geändert und den Link obj.workbook auf 51 geändert. Es führt die offene Operation nicht durch, aber ich bin nicht sicher, was ich vermisse.öffnen und speichern xlsx als csv-Datei mit vscript

WorkingDir = "C:\Test\Excel" 
savedir="C:\Test\"  
Extension = ".xlsx" 

Dim fso, myFolder, fileColl, aFile, FileName, SaveName 
Dim objExcel, objWorkbook 

Set fso = CreateObject("Scripting.FilesystemObject") 
Set myFolder = fso.GetFolder(WorkingDir) 
Set fileColl = myFolder.Files 

Set objExcel = CreateObject("Excel.Application") 

objExcel.Visible = False 
objExcel.DisplayAlerts = False 

For Each aFile In fileColl 
ext = Right(aFile.Name,4) 
name= Left(aFile.Name,Len(aFile.Name)-3)   REM changed 
If UCase(ext) = UCase(extension) Then 
'open excel 
FileName = Left(aFile,InStrRev(aFile,".")) 
Set objWorkbook = objExcel.Workbooks.Open(aFile) 
SaveName = savedir & name & "csv"   REM changed 
objWorkbook.SaveAs SaveName,51 
objWorkbook.Close 
End If 
Next 
Set objWorkbook = Nothing 
Set objExcel = Nothing 
Set myFolder = Nothing 
Set fileColl = Nothing 
fso.DeleteFile(WorkingDir&"\*"&Extension) REM changed 
Set fso = Nothing 

Antwort

0

@Wezel: Haben Sie die folgenden Zeilen als Generika und das gleiche verursacht Sie das Problem, wenn es Änderung der Erweiterung als die Länge variiert

Alter Code

ext = Right(aFile.Name,4) 
name= Left(aFile.Name,Len(aFile.Name)-3) 

überarbeitete Code

ext = Right(aFile.Name,Len(Extension)) 
name= Left(aFile.Name,Len(aFile.Name)-Len(Extension)) 

Haben Sie den Code so allgemein wie derjenige unten, so dass es für alle Situationen arbeiten und nur müssen Sie die ersten vier Zeilen variieren nach Ihrem Bedarf

Modified-Code

WorkingDir = "C:\Test\Excel" 
savedir="C:\Test\"  
Extension = ".xlsx" 
neededextension= ".csv" 
Dim fso, myFolder, fileColl, aFile, FileName, SaveName 
Dim objExcel, objWorkbook 

Set fso = CreateObject("Scripting.FilesystemObject") 
Set myFolder = fso.GetFolder(WorkingDir) 
Set fileColl = myFolder.Files 

Set objExcel = CreateObject("Excel.Application") 

objExcel.Visible = False 
objExcel.DisplayAlerts = False 

For Each aFile In fileColl 
ext = Right(aFile.Name,Len(Extension))  REM changed 
name= Left(aFile.Name,Len(aFile.Name)-Len(Extension))   REM changed 

If UCase(ext) = UCase(extension) Then 
'open excel 
FileName = Left(aFile,InStrRev(aFile,".")) 
Set objWorkbook = objExcel.Workbooks.Open(aFile) 
SaveName = savedir & name & neededextension   REM changed 
objWorkbook.SaveAs SaveName,51 
objWorkbook.Close 
End If 
Next 
Set objWorkbook = Nothing 
Set objExcel = Nothing 
Set myFolder = Nothing 
Set fileColl = Nothing 
fso.DeleteFile(WorkingDir&"\*"&Extension) REM changed 
Set fso = Nothing 

Bitte lassen Sie mich wissen, wenn dies wie Generika wie Sie

+0

Danke nochmal! Ich habe es einfach repurposed, um die 4-Zeichen-Erweiterung statt 3 zu behandeln. Das ist viel sauberer und ich werde das sicher verwenden. Außerdem ist 51 nicht der Konvertierungscode für eine CSV-Datei. Es ist 23, wenn es jemand anderes braucht. – Wezel

0

Sie zahlen den Preis für Dateispezifikation Parsing 'Ihre eigenen roll':

>> Extension = ".xlsx" 
>> WScript.Echo Len(Extension) 
>> ext = Right("a.xlsx", 4) 
>> WScript.Echo Len(ext) 
>> WScript.Echo CStr(UCase(ext) = UCase(extension)) 
>> 
5 
4 
False 
>> 

Sehen sie sich diese Methoden Filesystem:

>> sFSpec = "C:\Some\Where\whaterver.xlsx" 
>> WScript.Echo goFS.GetParentFolderName(sFSpec) 
>> WScript.Echo goFS.GetBaseName(sFSpec) 
>> WScript.Echo goFS.GetExtensionName(sFSpec) 
>> 
C:\Some\Where 
whaterver 
xlsx 
>> 
+0

Ich sehe, was du meinst. Danke, dass Sie mich in die richtige Richtung weisen. – Wezel

Verwandte Themen