这是我的第一篇文章,它与Vbscript有关。我是全新的,我能够将我在本网站上找到的两段代码混合在一起,以实现我想要的目标,但是我不理解代码的一部分,而且我不知道。如果可能的话,请帮忙。请看下面的代码,以及我的困惑。
基本上,此代码查看特定目录并提取该目录中文件的名称。然后我使用它在Excel中打开文件并将Excel转换为多个csv文件(excel中每个选项卡一个)。
我在我不明白的部分添加了****。基本上我想创建一个对象,它只是该目录中1文件的名称。显然在VBScript中看起来不可能,因为你要创建对象" objFolder.Files",这是对objFSO.Getfolder("目录)的直接调用。
我对此返回的项目类型感到困惑?它不是一个数组,但它有多个元素......我知道它有多个元素,因为除非在FOR循环内部分配该变量,否则我无法为其赋值。
NOte我分配了变量" Brandon"在for循环中,以获取文件的名称...我怎么能这样做?为什么我需要For循环呢?我想抓住第一个元素' objFolder.Files对象。
如果我的问题没有意义,请告诉我!
代码从此开始:
Dim strFilename
Dim objFSO
Set objFSO = CreateObject("scripting.filesystemobject")
objStartFolder = "C:\test files\population file"
Set objFolder = objFSO.GetFolder(objStartFolder)
Set colFiles = objFolder.Files
****For Each objFile in colFiles
brandon=objFile.Name
Next
strFilename = objStartFolder & "\" & brandon
If objFSO.fileexists(strFilename) Then
Call Writefile(strFilename)
Else
wscript.echo "no such file!"
End If
Set objFSO = Nothing
Sub Writefile(ByVal strFilename)
Dim objExcel
Dim objWB
Dim objws
Set objExcel = CreateObject("Excel.Application")
Set objWB = objExcel.Workbooks.Open(strFilename)
For Each objws In objWB.Sheets
objws.Copy
objExcel.ActiveWorkbook.SaveAs "C:\test files\csv files\" & objws.Name & ".csv", 6
objExcel.ActiveWorkbook.Close False
Next
objWB.Close False
objExcel.Quit
Set objExcel = Nothing
End Sub
答案 0 :(得分:2)
您可以使用GetFile()
的{{1}}方法检索特定的File对象:
FileSystemObject
(顺便说一句,我已将您的Set objFile = objFSO.GetFile(strStartFolder & "\somefile.txt")
WScript.Echo objFile.Path
更改为objStartFolder
。它毕竟只是一个字符串,而不是对象引用。)
当您在Files对象上使用Folder属性时,就像您在示例中所做的那样,您将返回strStartFolder
的集合对象。如果你想迭代文件夹中的所有文件,这很有用。
如果您知道文件夹中有单个文件,但不知道其名称,那么您仍然需要迭代File
集合。虽然VBScript集合做提供Files
属性,但它不允许使用整数索引。换句话说,你不能这样做:
Item()
您需要使用Set objFile = objFSO.GetFolder(strStartFolder).Files.Item(0)
循环,然后在第一次迭代后退出。
For Each ... In ...