2013-12-17 49 views
0

我努力翻譯一些C#代碼,這些代碼是我在寫回JScript時寫的。從長遠來看,我需要打開一個Excel工作簿,或者(如果它已經打開)將它帶到前面。不像C#,JScript中依靠僞劣ActiveXObject得到的Excel應用程序句柄:在MS JScript中獲取已有的Excel活動實例

var Excel = new ActiveXObject("Excel.Application"); 

一旦你抓住對象的API是跨在MSDN適用於所有語言非常相似。但是,使用ActiveXObject似乎創建了一個全新的Excel實例

如果我使用下面的代碼:

var Excel = new ActiveXObject("Excel.Application"); 
alert(Excel.ActiveSheet === null); // assume alert works as it does in Javascript 

和Excel已經打開,警報會回來的true。此外,任何變量與new ActiveXObject("Excel.Application")還沒有被垃圾收集拿起設置導致一個新的EXCEL.EXE進程出現:

enter image description here

不用說,這一切讓我從如果工作簿檢查已經打開,並隨後導致一個醜陋的「你想打開這個只讀的」警告出現。有沒有辦法解決?

+0

如果您唯一關心的是「您想打開此只讀」的醜陋警告,那麼只需以只讀方式打開該工作簿即可。 –

+0

@DanielCook嗯,問題在於它需要可編輯和焦點。在文檔已打開的情況下以只讀方式打開實際上會打開工作簿的第二個副本(第一個已可編輯,第二個只讀)。否則(或只是壓制警告)將是優秀的解決方案。 –

回答

3

根據MSDN,您可以使用JScript中的the GetObject function

var Excel = GetObject(null, "Excel.Application"); 
+0

OP詢問關於JScript而不是Javascript。 [這](http://msdn.microsoft.com/en-us/library/vstudio/ebdktb00(v = vs.100).aspx)將是一個更合適的參考。我不知道如果語法是不同的或不... –

+0

我沒有意識到任何人仍在使用JScript.NET!很高興看到文檔符合常規標準 - 兩個參數都列爲「必需」,這些示例顯示調用僅傳遞'pathname'參數,而註釋中提及「if'pathname'被省略......」。 :) –

+0

是的,我不確定你的代碼是否正確,因爲我不願意測試它,我覺得文檔不是很清楚。 >但我會反對,因爲我確信這很有用。 :) –