Запуск VBScript через SSH из Linux в Windows - PullRequest
0 голосов
/ 20 мая 2011

Вот моя дилемма:

У меня есть некоторый код SAS, который в рамках его [несколько] обширной обработки создает отчет о качестве данных в «Excel». Причина кавычек в том, что SAS действительно генерирует только XML-документ, который можно открыть в Excel.

Однако, как выясняется, большинство версий Excel будут жаловаться (через диалоговое окно) при открытии указанного XML-файла, а некоторые версии Excel даже не зайдут так далеко.

Чтобы облегчить это, кто-то должен открыть этот файл "Excel" вручную и сохранить его как настоящий файл Excel перед отправкой другим [важным] людям.

Очевидно, мы хотели бы автоматизировать это. И это даже не проблема. Я создал простую маленькую программу на VBScript, которая открывает файл и сохраняет его как Excel. Boom. Задача решена. Ну, не совсем.

Оказывается, что включение этого VBScript в обычную обработку данных - это PITA, поскольку все, что происходит на Linux Box. Хорошо, пока не кажется плохим. Мы настроили виртуальный сервер терминалов Windows с ограниченным идентификатором использования, который может ssh в поле и выполнить определенную команду Сценарий bash на компьютере linux теперь отправляет файл XML в виртуальную машину Windows в папке вместе с VBScript и пытается удаленно выполнить VBScript с помощью

cscript myscript.vbs myxlsfile.xls

Теоретически должно работать, но выдает ошибку с предупреждением:

Microsoft Excel не может получить доступ к файлу «myxlsfile.xls». Есть несколько возможных причин: и т.д.

Кто-нибудь знает, что может быть не так?

Вот VBScript:

Set oXL = CreateObject("Excel.Application")
Set FSO = CreateObject("Scripting.FileSystemObject")
oXL.DefaultFilePath = "C:\Temp"
oXL.DisplayAlerts = False
oXL.Visible = False
If FSO.FolderExists(oXL.DefaultFilePath) Then
   Set xmlFile = FSO.GetFile(oXL.DefaultFilePath & "\" & TargetFileName)
   oXL.Workbooks.Open(xmlFile.Name)

   ' -4143 is Excel 2003 format
   oXL.ActiveWorkBook.SaveAs xmlFile.Name, -4143
   oXL.ActiveWorkBook.Close SaveChanges = True
   Set oFolder = Nothing
End If
oXL.DisplayAlerts = True
oXL.Quit
Set oXL = Nothing

Спасибо, - A

Редактировать: Может быть, стоит повторить, что когда я запускаю это из командной строки на сервере термина Windows, это, кажется, работает просто отлично. Я также попытался повторить все переменные пути / имени файла, чтобы убедиться, что они идут правильно, и они (в обоих случаях)

Ответы [ 4 ]

1 голос
/ 20 мая 2011

Есть ли у вас какой-либо сценарий входа, который выполняется при входе в систему в интерактивном режиме, но не выполняется клиентом SSH? Если файл существует по сетевому пути (я знаю, что в вашем примере вы указываете c: \ temp ... но на всякий случай), и эти сетевые подключения не создаются, то это может создать вам эту проблему. Это верно даже в том случае, если вы используете UNC-пути ...

1 голос
/ 20 мая 2011

Имеет ли пользователь, выполняющий скрипт, доступ к c:\temp\myxlsfile.xls?

Попробуйте запустить type c:\temp\myxlsfile.xls из сеанса ssh.

0 голосов
/ 30 мая 2011

Я решил эту проблему с помощью виртуальной машины XP, на которой запускался код VBS. Он использует Office 2003. Мы не полностью исключили все переменные, из-за которых это не работало на виртуальной машине Windows 7 с Office 2007, но в данный момент это работает для нас, поэтому мы решили не тратить на это больше времени. Единственным недостатком является то, что преобразованный файл при открытии в последней версии Office открывается в защищенном режиме. Для нас это не большая проблема, так как эта электронная таблица предназначена для людей, которые все равно используют Office 2003.

Спасибо всем за помощь, ребята. Цени это.

- A

0 голосов
/ 26 мая 2011

Если вы еще не решили это, мне немного непонятно, что вы делаете.Вы запускаете SAS в Linux и пишете XML-файл в Windows?Затем Excel читает этот файл XLM.

Это сейчас не принесет вам пользы, но если вы получите интерфейс SAS / Access для форматов файлов ПК (я полагаю, он доступен для Linux), вы будетевозможность назначить libref с механизмом Excel в Linux и указать его в каталоге на коробке Windows, чтобы вы могли писать напрямую из SAS на сервере в книгу Excel.Это то, что мы делаем в нашей среде AIX-Windows.Это не очень быстро, потому что он использует ODBC, но это надежно.Конечно, требуется дополнительное лицензионное вознаграждение за программное обеспечение SAS.

Удачи.

...