fawor1t
12-07-2017, 12:56
Всем привет, не смог считать значение ячейки в файле xls через bat файл и залез в неведомые дебри vbs .Извините заранее если вопросы получились глупыми или неуместными
Логическая структура у меня получилась такая
цикл перебора всех файлов xls в определенной папке:
для каждого файла:
-открыть ,считать содержимое ячейки (например R4C36) и записать в переменную1
-открыть из папки txt файл с именем переменной1
-записать содержимое txt (1 строку в переменную2 ,2 строку в переменную3)
-запустить архиватор где пароль переменная2 ,имя файла переменная3)
Далее сам код ,помимо ошибок в синтаксисе не смог разобраться вот в таких моментах
1) При переборе через For Each oFile In oFSO.GetFolder(sFolder).Files , oFile является ли переменной которая содержит имя файла ?
2) Если да,то как использовать значение oFile в пути открытии книги? Workbooks.Open "C:\???.xls" '
3) Если нет,то как передать имя найденного файла в текущем цикле в переменную?
4) какой правильный синтаксис указания переменной в пути? & CStr(переменная) верно ли? "U:\ZP\zip\& CStr(переменная) &.zip"
5) Действительно ли этим var oWshShell = new ActiveXObject("WScript.Shell") можно запустить exe файл с параметрами?
Dim sFolder
sFolder = "U:\ZP\xls\"
Set oFSO = CreateObject("Scripting.FileSystemObject")
For Each oFile In oFSO.GetFolder(sFolder).Files
If UCase(oFSO.GetExtensionName(oFile.Name)) = "xls" Then
ProcessFiles oFSO, oFile
End if
Next
Set oFSO = Nothing
Sub ProcessFiles(FSO, File)
dim excel
UserForm_Initialize()
Workbooks.Open "C:\.xls" ' как вставить содержимое ofile в путь к файлу?
Workbooks(1).Worksheets(1).Cells(13, 1).Value = excel
Option Explicit
Dim strFileName
Dim arrContent
Dim pass, mail
strFileName = "& CStr(excel) &.txt"
With WScript.CreateObject("Scripting.FileSystemObject")
If .FileExists(strFileName) Then
With .OpenTextFile(strFileName)
arrContent = Split(.ReadAll(), vbCrLf)
.Close
End With
If UBound(arrContent) >=1 Then
pass = arrContent(0)
mail = arrContent(1)
WScript.Echo anyValueA, anyValueB
Else
WScript.Echo "Not enough lines [" & CStr(UBound(arrContent) + 1) & "] in [" & strFileName & "]"
End If
Else
WScript.Echo "Can't find file [" & strFileName & "]"
End If
End With
WScript.Quit
var oWshShell = new ActiveXObject("WScript.Shell");
oWshShell.Run("\"C:\Program Files\7-Zip\7z.exe" a -tzip -p& CStr(pass) & "U:\ZP\zip\& CStr(mail) &.zip" >> U:\ZP\log\log_zip.txt ); 'удастся ли вставить переменные в этой конструкции?
end sub
Логическая структура у меня получилась такая
цикл перебора всех файлов xls в определенной папке:
для каждого файла:
-открыть ,считать содержимое ячейки (например R4C36) и записать в переменную1
-открыть из папки txt файл с именем переменной1
-записать содержимое txt (1 строку в переменную2 ,2 строку в переменную3)
-запустить архиватор где пароль переменная2 ,имя файла переменная3)
Далее сам код ,помимо ошибок в синтаксисе не смог разобраться вот в таких моментах
1) При переборе через For Each oFile In oFSO.GetFolder(sFolder).Files , oFile является ли переменной которая содержит имя файла ?
2) Если да,то как использовать значение oFile в пути открытии книги? Workbooks.Open "C:\???.xls" '
3) Если нет,то как передать имя найденного файла в текущем цикле в переменную?
4) какой правильный синтаксис указания переменной в пути? & CStr(переменная) верно ли? "U:\ZP\zip\& CStr(переменная) &.zip"
5) Действительно ли этим var oWshShell = new ActiveXObject("WScript.Shell") можно запустить exe файл с параметрами?
Dim sFolder
sFolder = "U:\ZP\xls\"
Set oFSO = CreateObject("Scripting.FileSystemObject")
For Each oFile In oFSO.GetFolder(sFolder).Files
If UCase(oFSO.GetExtensionName(oFile.Name)) = "xls" Then
ProcessFiles oFSO, oFile
End if
Next
Set oFSO = Nothing
Sub ProcessFiles(FSO, File)
dim excel
UserForm_Initialize()
Workbooks.Open "C:\.xls" ' как вставить содержимое ofile в путь к файлу?
Workbooks(1).Worksheets(1).Cells(13, 1).Value = excel
Option Explicit
Dim strFileName
Dim arrContent
Dim pass, mail
strFileName = "& CStr(excel) &.txt"
With WScript.CreateObject("Scripting.FileSystemObject")
If .FileExists(strFileName) Then
With .OpenTextFile(strFileName)
arrContent = Split(.ReadAll(), vbCrLf)
.Close
End With
If UBound(arrContent) >=1 Then
pass = arrContent(0)
mail = arrContent(1)
WScript.Echo anyValueA, anyValueB
Else
WScript.Echo "Not enough lines [" & CStr(UBound(arrContent) + 1) & "] in [" & strFileName & "]"
End If
Else
WScript.Echo "Can't find file [" & strFileName & "]"
End If
End With
WScript.Quit
var oWshShell = new ActiveXObject("WScript.Shell");
oWshShell.Run("\"C:\Program Files\7-Zip\7z.exe" a -tzip -p& CStr(pass) & "U:\ZP\zip\& CStr(mail) &.zip" >> U:\ZP\log\log_zip.txt ); 'удастся ли вставить переменные в этой конструкции?
end sub