2014-10-16 2 views
0

У меня есть макрос в VBA (Excel 2007).
Он открывает файл exe с вводом значения HEX в качестве переменной.
Exe дает выход (также номер HEX).
Я делаю все с командой «shell», и результаты сохраняются в txt-файле. Затем я пишу это в Excel.Получение вывода cmd в Excel

RetVal = Shell ("cmd.exe/с C: \ ААББ \ app.exe 0x5110> C: \ ААББ \ output.txt", vbNormalFocus)

Это сложный и трудоемкий.
Я бы предпочел получить результат непосредственно в Excel без промежуточного файла типа txt или подобного.

Когда я использую output.xlsx в качестве выходного адресата, файл создается и записывается значение. Но я не могу прочитать его с помощью Excel. Я вижу значение, когда открываю xlsx с помощью Блокнота.

Мои вопросы:

1) Можно ли записать результат непосредственно в XLSX, особенно клетки-мишени, например, A10

2) Почему, когда я использую xlsx в качестве назначения в команде оболочки, я не могу открыть его с помощью Excel? Он дает сообщение об ошибке «файл-формат или расширение файла недействительно. Данные могут быть повреждены».

+0

Вы можете мне помочь? http://stackoverflow.com/questions/16240070/can-an-excel-macro-pull-output-from-a-command-line-directly-into-a-heet – Teknix1982

+1

Когда вы используете «выход». xlsx "в качестве файла назначения, это не означает, что app.exe знает, как записать файл xlsx. Приложение должно поддерживать вывод в разных форматах, иначе оно всегда будет записывать значения в виде обычного текста независимо от того, какое расширение вы используете для адресата. –

ответ

0

Я думаю, вы не можете сделать это с объектом оболочки. вы можете сделать это с помощью WSHExec с функцией StdOut.ReadLine(). Вам нужно перейти к ссылке и выбрать «Объектная модель хоста Windows Script», чтобы вы могли объявить объект WshExec. чем метод yourWshExecObject.StdOut.ReadLine().

Для построения WshExec: Сначала объявить WshShell объект, и вы построить его так:

Dim WshShellObject as WshShell 
Dim WshExecObject as WshExec 

Set WshShellObject = New WshShell 

Set WshExecObject = WshShellObject.Exec("your .exe filename"). 

WshExecObject.StdOut TextStream будет читать все, что вы пишете в консоли.
Я сделал это с .exe, скомпилированным с C++.

Вы также можете использовать WshExecObject.StdOut.ReadAll, чтобы читать все строки сразу.

Надеюсь, что это поможет.

Смежные вопросы