2011-05-19 59 views
0

這裏是我的困境:運行一個VBScript通過SSH在Linux到Windows

我有一些SAS代碼爲[有些]粗放處理的一部分產生在「創先爭優」數據質量報告。引用的原因是SAS僅生成可以在Excel中打開的XML文檔。

但事實證明,當打開所述XML文件時,大多數版本的Excel都會抱怨(通過對話框),而某些版本的Excel甚至不會走得那麼遠。

爲了緩解這種情況,有人必須手動打開這個「excel」文件,並在將其發送給其他[重要]人員之前將其保存爲真正的excel文件。

很明顯,我們想自動化這個。這甚至不是問題。我創建了一個簡單的小VBScript程序來打開文件,並將其保存爲Excel。繁榮。問題解決了。那麼,不是真的。

原來,將這個VBScript整合到正常的數據處理中是一種PITA,因爲所有這些都發生在Linux Box上。好的,看起來還不錯。我們建立了一個虛擬的windows終端服務器,它有一個有限的使用ID,可以打開盒子並運行某個命令。在Linux中,現在的SCP的XML文件到Windows虛擬機,使用VBScript以及文件夾中的一個bash腳本,並嘗試使用

cscript myscript.vbs myxlsfile.xls 

這種遠程執行VBScript中,從理論上講,應該工作,但它出錯的警告:

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 

感謝, - 一個

編輯:也許它值得重申的是,當我運行這個從窗戶項服務器上的命令行,這似乎工作很好。我也嘗試回顯所有各種路徑/文件名變量,以確保它們正確進入並且它們(在這兩種情況下)

+0

您是否曾經爲此找到過解決方案?除了使用XP?我遇到了完全相同的情況 – isJustMe 2015-10-06 18:03:45

+0

Naw ..就像我在我發佈的答案中所說的那樣,我們創建了一個XP虛擬機,它已經運行了4年,現在我們沒有任何問題,所以我們不會碰它:) – Adnan 2015-10-07 18:41:51

+0

謝謝!我們能夠弄清楚改變dcom設置,從那時起一直工作正常,但我仍然會分享它。 – isJustMe 2015-10-19 20:06:54

回答

0

我通過使用運行VBS代碼的XP虛擬機解決了這個問題。它使用的是Office 2003.我們並沒有詳盡排除所有導致此問題在Office 2007的Windows 7虛擬機上無法運行的變量,但此時這對我們很有用,因此我們決定不再花費更多時間。唯一的缺點是轉換後的文件在最新的Office版本中打開時會以保護模式打開。這對我們來說不是一個大問題,因爲此電子表格適用於使用Office 2003的用戶。

謝謝大家的幫助。欣賞它。

- A

1

運行腳本的用戶是否可以訪問c:\temp\myxlsfile.xls

嘗試從ssh會話中運行type c:\temp\myxlsfile.xls

+0

是的,不幸的是,它似乎不是一個權限問題。我們使用與SSH一樣的ID直接登錄到TS並運行VBScript等。 – Adnan 2011-05-19 21:31:19

+0

試試這個:在ssh session'echo a> test.xls'中,看看VB腳本是否可以打開test.xls – daalbert 2011-05-19 21:37:09

+0

我正在使用SSH命令行,所以我使用了以下命令: $ SSHCommand -i 「cd c:\ Users \ myUsers \ myDir && echo a> test.xls && cscript myscript.vbs test.xls」 我看到xls文件被創建,但同樣的錯誤試圖打開它在vbscript – Adnan 2011-05-19 21:45:39

1

您是否有某種登錄腳本在交互式登錄時執行,但未由SSH客戶端執行?如果文件存在於網絡路徑中(我知道在你的例子中你顯示c:\ temp ...但是爲了以防萬一)並且那些網絡連接沒有被創建,那麼它可能會給你這個問題。即使你使用的是UNC路徑名,這也是如此......

+0

這是一個很好的觀點,我們通過完全做到這一點排除了第一件事情(使用c:\​​ Users作爲基礎文件夾) 。另外請注意,實際的vbscript與xls文件位於同一個文件夾中,所以我們正在盡力讓它變得簡單:) – Adnan 2011-05-19 21:50:34

0

如果你還沒有解決這個問題,我對你在做什麼有點不清楚。你在Linux上運行SAS並將XML文件寫入Windows?然後Excel正在讀取這個XLM文件。

這對你現在不會有什麼好處,但是如果你獲得了PC文件格式的SAS/Access接口(我認爲它可用於Linux),你就可以在Excel引擎上分配一個libref Linux並將其指向Windows框中的目錄,以便您可以直接從服務器上的SAS寫入Excel工作簿。這就是我們在AIX-Windows環境中所做的。這不是很快,因爲它使用ODBC,但它是可靠的。當然,它需要額外的SAS軟件許可費用。

祝你好運。

相關問題