#excel #powershell #vba
#excel #powershell #vba
Вопрос:
Я хотел бы получить некоторые числовые значения, которые я получаю с помощью сценария PowerShell, на листе Excel. Я уже могу вернуть значение, но оно поступает в электронную таблицу в виде строки, и каким-то образом Excel не позволяет мне преобразовать его в число. Надеюсь, я просто пропустил шаг, и это не невозможно.
Это часть VBA
strCommand = (PsCommand)
Set wshshell = CreateObject("WScript.Shell")
Set WshShellexec = wshshell.Exec(strCommand)
stroutput = WshShellexec.StdOut.ReadAll
Sheets("Sheet1").Cells(i, 2).Value = stroutput
Sheets("Sheet1").Cells(i, 2).NumberFormat = "0"
Я предполагаю, что это проблема:
Set WshShellexec = wshshell.Exec(strCommand)
Комментарии:
1.
Exec
выполняет команды асинхронно, но посколькуReadAll
блокируется, это не должно быть проблемой здесь (если только внешняя команда не генерирует избыточный вывод, поэтому буфер заполнен). Что такоеPsCommand
?2.
.Value = Val(stroutput)
?3. PsCommand = «Powershell -File c:scriptFolderSizeCheckFolderSizev2.ps1 » amp; Целевая папка
4. Как я могу вернуть целое число вместо строки? Целевая папка может содержать пробел. Но они также были идентифицированы сценарием.
Ответ №1:
ReadAll
всегда возвращает строку. Чтобы преобразовать числовую строку в целое число, используйте CInt
или CLng
:
Sheets("Sheet1").Cells(i, 2).Value = CLng(stroutput)
Обратите внимание, что строка должна состоять только из числа (допустимы начальные и конечные пробелы). Другие символы в строке приведут к ошибке. В таком случае вам нужно сначала проанализировать значение из строки, прежде чем преобразовывать его в целое число.
Комментарии:
1. Я попробовал это и, похоже, это та часть кода, которую я искал. Большое спасибо за помощь !!! 🙂