2009-01-12 47 views
7

在客戶端Web應用程序,我想:我如何掛鉤到Excel事件在Javascript

  1. 打開一個Excel電子表格,
  2. 出口一些應用數據到Excel,
  3. 允許用戶使用它,當它們完成時,將(可能更改的)數據讀回到我的應用程序中。

我希望用戶有一個流暢的體驗,並通過掛鉤到BeforeClose事件來檢測他們何時完成了excel,但是我發現我無法連接到javascript/HTML中的Excel事件。

function BeforeCloseEventHandler(cancel) { 
    // TODO: read values from spreadsheet 
    alert("Closing..."); 
} 

function openExcel() { 
    var excel = new ActiveXObject("Excel.Application"); 
    var workbook = excel.Workbooks.Add(); 
    var worksheet = workbook.Worksheets(1); 
    worksheet.Cells(1, 1).Value = "First Cell"; 
    worksheet.Cells(1, 2).Value = "Second Cell"; 
    workbook.BeforeClose = BeforeCloseEventHandler; // THIS DOESN'T WORK 
    excel.Visible = true; 
    excel.UserControl = true; 
} 

有沒有人有任何建議?

+0

起初我還以爲你是瘋了...現在我不能等待答案。 – 2009-01-13 03:06:50

回答

-1

我不相信這是可能的。原因是,當你撥打以下代碼:

你實際上打開了Excel。因此,使用以下行:

workbook.BeforeClose = BeforeCloseEventHandler; 

它就像你告訴Excel應用程序運行Javascript,這是不可能的。我已經嘗試過研究替代方法,比如創建一個事件對象,定義它後面的代碼,然後將它分配給workbook.BeforeClose,但我會遇到同樣的問題:javascript事件無法檢測到Excel事件。主要是因爲它作爲一個獨立的過程運行。

所以這裏有一些更多的選擇,你可以考慮:

  1. 保存在用戶的計算機上的Excel數據,那麼當用戶丟失的Excel,讓他們點擊調用您的第一方法,其內容的地方,文件和顯示它。
  2. 從excel文件讀取數據,然後顯示它。
  3. 不要關閉你的excel對象(這可能會使excel在你的計算機上作爲一個進程打開),並在javascript中有一個計時器事件。每5秒鐘檢查一次Excel是否仍然打開,如果沒有打開,請閱讀文件並顯示它。

對不起,我不能再幫忙了,我不太確定這些替代方案是否有效,但祝你好運!

+1

我沒有關於JavaScript的線索,所以我沒有理由懷疑你在這裏 - 並通過JavaScript鉤住Excel確實「聽起來」不可能!但是,退出過程不應該是一個問題。使用標準的進程外自動化使用VB6,VB.NET或C#你絕對可以鉤住Excel事件。 – 2009-01-13 14:47:04

+0

作爲示例,請參閱「如何:使用Visual C#.NET爲Excel處理事件」,網址爲http://support.microsoft.com/kb/823981。但我仍然沒有線索如何通過JavaScript做到這一點,我也不知道它是否可以完成... – 2009-01-13 14:48:54

1

在做了一些研究之後,我發現我無法將事件連接到javascript中的動態ActiveX對象(即,由new ActiveXObject構造函數創建的對象)。

一個想法是我創建了一個包裝Windows窗體用戶控件,該控件將託管在Web應用程序中的<object>標記中。用戶控件會調用Excel並接收事件,並將事件重新提交給javascript,我可以使用該機制來聯繫到這些內容。不確定這會起作用,但我會嘗試。

即使它工作,我也不是特別滿意這個解決方案。有太多的圖層 - javascript是從silverlight控件調用的,這意味着我的數據必須跨越3個邊界,並且返回:Silverlight - > Javascript - >託管Winform用戶控件 - > Excel

這將是很好的消除一些這些邊界。

0

我想你的第二種方法是使用IE中託管的Windows From控件無效。

IE的行爲與腳本宿主不同。有一定的侷限性的博客文章由埃裏克利珀提到:

Implementing Event Handling, Part Two