 |
VFP 愛用者社區 本討論區為 Visual Foxpro 愛用者經驗交流的地方, 請多多利用"搜尋"的功能, 先查看看有無前例可循, 如果還有不懂的再發問. 部份主題有附加檔案, 須先註冊成為社區居民才可以下載.
|
上一篇主題 :: 下一篇主題 |
發表人 |
內容 |
ckp6250
註冊時間: 2004-07-30 文章: 1645
第 1 樓
|
發表於: 星期二 一月 25, 2011 11:48 am 文章主題: 如何偵測有否安裝 Excel |
|
|
小弟都用如下方法去偵測系統有沒有安裝 Excel
if type("Createobject('excel.application')")="U"
? "No Excel"
else
? "Excel ok"
endif
這個方式可以正確執行, 但有個缺點,
就是在工作管理中員中, 會有 Excel 執行中
浪費資源啊。
各位先進,有沒有更好的方法呢? |
|
回頂端 |
|
 |
syntech
註冊時間: 2003-05-16 文章: 4249 來自: Taipei,Taiwan
第 2 樓
|
發表於: 星期二 一月 25, 2011 1:36 pm 文章主題: |
|
|
有呀
代碼: |
oleEXCEL=Createobject('excel.application')
if type("oleEXCEL")="U"
? "No Excel"
else
? "Excel ok"
RELEASE oleEXCEL
endif
|
XD
XD
XD
XD
XD _________________ 如果公司有下列困擾:
1. 找不到便宜,快速,簡易的 生產排程軟體
2. 不知道如何快速排定 採購計劃
3. 成本抓不準,自己算比軟體算有用
4. 想學習系統規劃,想找系統架構的顧問
請聯絡我們,也許我們幫得上忙 |
|
回頂端 |
|
 |
marvin
註冊時間: 2004-06-01 文章: 321
第 3 樓
|
發表於: 星期二 一月 25, 2011 2:36 pm 文章主題: |
|
|
不想有 Excel 執行中, 那把它關掉呀 |
|
回頂端 |
|
 |
ckp6250
註冊時間: 2004-07-30 文章: 1645
第 4 樓
|
發表於: 星期二 一月 25, 2011 3:36 pm 文章主題: |
|
|
[quote="syntech"]有呀
代碼: |
oleEXCEL=Createobject('excel.application')
if type("oleEXCEL")="U"
? "No Excel"
else
? "Excel ok"
RELEASE oleEXCEL
endif
|
您這招,不靈啦 ,
在沒有安裝 Excel 的電腦上,會出錯
我早用過了,無效
而且,連
try
oleEXCEL=Createobject('excel.application')
if type("oleEXCEL")="U"
? "No Excel"
else
? "Excel ok"
RELEASE oleEXCEL
endif
catch to oErr
endtry
都沒效!
ckp6250 在 星期二 一月 25, 2011 3:42 pm 作了第 1 次修改 |
|
回頂端 |
|
 |
ckp6250
註冊時間: 2004-07-30 文章: 1645
第 5 樓
|
發表於: 星期二 一月 25, 2011 3:38 pm 文章主題: |
|
|
marvin 寫到: | 不想有 Excel 執行中, 那把它關掉呀 |
怎麼關?它是躲在工作管理員中呀
而且,也不能把所有在工作管理員中的Excel都關掉,也許其中有user自己開的 |
|
回頂端 |
|
 |
syntech
註冊時間: 2003-05-16 文章: 4249 來自: Taipei,Taiwan
第 6 樓
|
發表於: 星期二 一月 25, 2011 3:48 pm 文章主題: |
|
|
明明就是
"這個方式可以正確執行, 但有個缺點,
就是在工作管理中員中, 會有 Excel 執行中
浪費資源啊。"
XD
====
檢查登錄檔看看,有沒有註冊 'excel.application'. _________________ 如果公司有下列困擾:
1. 找不到便宜,快速,簡易的 生產排程軟體
2. 不知道如何快速排定 採購計劃
3. 成本抓不準,自己算比軟體算有用
4. 想學習系統規劃,想找系統架構的顧問
請聯絡我們,也許我們幫得上忙 |
|
回頂端 |
|
 |
ckp6250
註冊時間: 2004-07-30 文章: 1645
第 7 樓
|
發表於: 星期二 一月 25, 2011 3:55 pm 文章主題: |
|
|
回 syntech 大
用 type("Createobject('excel.application')")="U" 來偵測
如果,有沒有安裝 Excel 的電腦 , 這行指令都能用,
缺點是如果有安裝 Excel 的話 , 工作管理員中會有 Excel 在執行中
用您的方法
有安裝 Excel 的電腦 , 沒問題
但在沒有安裝 Excel 的電腦上 , 就行不通了
檢查登錄檔是好方法 ,
不過,我會用 vfp 增修刪 Registry , 卻不會檢查
請大大提點一下吧 |
|
回頂端 |
|
 |
syntech
註冊時間: 2003-05-16 文章: 4249 來自: Taipei,Taiwan
第 8 樓
|
發表於: 星期二 一月 25, 2011 4:28 pm 文章主題: |
|
|
利用 ON ERROR 或其他ERROR EVENT,攔截錯誤碼 1733 ,
抑制錯誤訊息不就好了. XD _________________ 如果公司有下列困擾:
1. 找不到便宜,快速,簡易的 生產排程軟體
2. 不知道如何快速排定 採購計劃
3. 成本抓不準,自己算比軟體算有用
4. 想學習系統規劃,想找系統架構的顧問
請聯絡我們,也許我們幫得上忙 |
|
回頂端 |
|
 |
LiuRambo
註冊時間: 2007-11-27 文章: 481
第 9 樓
|
發表於: 星期二 一月 25, 2011 10:25 pm 文章主題: |
|
|
syntech 寫到: | 利用 ON ERROR 或其他ERROR EVENT,攔截錯誤碼 1733 ,
抑制錯誤訊息不就好了. XD |
同上
我自己就是用這樣偵測的
連同DLL註冊問題也是同樣方法解決
唯獨是這要程式開發到幾乎完美境界時
啟用ONERROR才不會把自己給煩死 |
|
回頂端 |
|
 |
朱育興
註冊時間: 2003-08-25 文章: 661 來自: 台中市大里區
第 10 樓
|
發表於: 星期二 一月 25, 2011 11:23 pm 文章主題: |
|
|
syntech 寫到: | 利用 ON ERROR 或其他ERROR EVENT,攔截錯誤碼 1733 ,
抑制錯誤訊息不就好了. XD |
+1
我在 Form.Init 有一段如下
* > Microsoft Excel 版本
W1_cExcelVersion = "未安裝!"
W1_oExcel = CREATE("Excel.Application")
IF TYPE("W1_oExcel") = "O"
W1_cExcelVersion = ALLTRIM(W1_oExcel.Application.Name)
W1_nExcelVersion = VAL(W1_oExcel.Application.Version)
DO CASE
CASE W1_nExcelVersion = 12
W1_cExcelVersion = W1_cExcelVersion + " 2007"
CASE W1_nExcelVersion = 11
W1_cExcelVersion = W1_cExcelVersion + " 2003"
CASE W1_nExcelVersion = 10
W1_cExcelVersion = W1_cExcelVersion + " XP"
CASE W1_nExcelVersion = 09
W1_cExcelVersion = W1_cExcelVersion + " 2000"
CASE W1_nExcelVersion = 08
W1_cExcelVersion = W1_cExcelVersion + " 97"
OTHERWISE
W1_cExcelVersion = W1_cExcelVersion + " " + LTRIM(STR(W1_nExcelVersion))
ENDCASE
W1_nExcelVersion = W1_oExcel.Application.International(1)
DO CASE
CASE W1_nExcelVersion = 1
W1_cExcelVersion = W1_cExcelVersion + " 英文版"
CASE W1_nExcelVersion = 886
W1_cExcelVersion = W1_cExcelVersion + " 繁體中文版"
CASE W1_nExcelVersion = 86
W1_cExcelVersion = W1_cExcelVersion + " 簡體中文版"
OTHERWISE
W1_cExcelVersion = W1_cExcelVersion + " 非英繁簡版(其國碼=" + LTRIM(STR(W1_nExcelVersion)) + ")"
ENDCASE
W1_oExcel.Quit
ENDIF
在 Form.Error 中
LPARAMETERS nError, cMethod, nLine
* 在 CREATEOBJECT( ) 函數中指定的類別定義沒有找到
IF nError = 1733
RETURN
ENDIF _________________ 希望有更多人來參與
VFP wiki - 需要大家一起完成的VFP電子書與FAQ |
|
回頂端 |
|
 |
ckp6250
註冊時間: 2004-07-30 文章: 1645
第 11 樓
|
發表於: 星期三 一月 26, 2011 11:23 am 文章主題: |
|
|
感謝 syntech 和朱兄提點!
又請教 syntech , 若要用您先前提到的,『檢查登錄檔看看,有沒有註冊 'excel.application'.』
又要怎麼做呢? |
|
回頂端 |
|
 |
garfield Site Admin

註冊時間: 2003-01-30 文章: 2160
第 12 樓
|
發表於: 星期四 一月 27, 2011 11:25 am 文章主題: |
|
|
找到了檢查方法.
相關資料網頁:
http://stackoverflow.com/questions/113860/how-to-check-if-an-oledb-driver-is-installed-on-the-system
http://www.sweetpotatosoftware.com/spsblog/Trackback.aspx?guid=0d08c7d7-5d50-4b3e-9fcd-e10975345df4
? '=',CLSIDFromProgIDEx('xyz'),'=',EMPTY(CLSIDFromProgIDEx('xyz'))
? '=',CLSIDFromProgIDEx('Excel.Application'),'=',iif(empty(CLSIDFromProgIDEx('Excel.Application')),'沒安裝excel','有安裝')
***************************
FUNCTION CLSIDFromProgIDEx(tcProgID)
***************************
* 程式來源: http://www.sweetpotatosoftware.com/spsblog/Trackback.aspx?guid=0d08c7d7-5d50-4b3e-9fcd-e10975345df4
LOCAL lcGuid, lnResult, lnLen, lcReturn
m.lcReturn = SPACE(82)
m.lcGuid = SPACE(16)
m.tcProgID = STRCONV(m.tcProgID + CHR(0), 5)
DECLARE INTEGER CLSIDFromProgID IN ole32.DLL STRING pProgID, STRING @ pGuid
m.lnResult = CLSIDFromProgID(m.tcProgID, @m.lcGuid)
IF m.lnResult = 0
DECLARE INTEGER StringFromGUID2 IN ole32.DLL STRING pGuid, STRING @ pString, INTEGER nMaxChars
m.lnLen = StringFromGUID2(m.lcGuid, @m.lcReturn, 40) - 1
m.lcReturn = STRCONV(m.lcReturn, 6)
m.lcReturn = LEFT(m.lcReturn, m.lnLen)
ENDIF
RETURN m.lcReturn
ENDFUNC
*************************
*簡單作法
*****************************
FUNCTION checkole
* 功能: 檢查是否有progID
LPARAMETERS tcProgID
LOCAL mret
DO case
CASE tcProgID='excel'
tcProgID='Excel.Application'
CASE tcProgID='word'
tcProgID='Word.Application'
ENDCASE
* 程式來源: http://www.sweetpotatosoftware.com/spsblog/Trackback.aspx?guid=0d08c7d7-5d50-4b3e-9fcd-e10975345df4
LOCAL lcGuid, lnResult
m.lcGuid = SPACE(16)
m.tcProgID = STRCONV(m.tcProgID + CHR(0), 5)
DECLARE INTEGER CLSIDFromProgID IN ole32.DLL STRING pProgID, STRING @ pGuid
m.lnResult = CLSIDFromProgID(m.tcProgID, @m.lcGuid)
RETURN (m.lnResult = 0) _________________ 利用>>搜尋<<的功能會比問的還要快得到答案. |
|
回頂端 |
|
 |
ckp6250
註冊時間: 2004-07-30 文章: 1645
第 13 樓
|
發表於: 星期四 一月 27, 2011 11:55 am 文章主題: |
|
|
garfield 大大,感溫啊
快又有效! |
|
回頂端 |
|
 |
ezpos
註冊時間: 2011-04-20 文章: 323
第 14 樓
|
|
回頂端 |
|
 |
Patrick Wu
註冊時間: 2007-01-03 文章: 228 來自: 台北市
第 15 樓
|
發表於: 星期五 十二月 05, 2014 1:56 pm 文章主題: |
|
|
ezpos 寫到: | 請問各位:
有遇過 offices2013 讀不到excel內容的嬤?? |
+ 1
VFP6 驅動 EXCEL 2007 可以
VFP6 驅動 I E 8 的程式 於 I E 11 也好像破功了 (相容性 .... 都作了) |
|
回頂端 |
|
 |
|
|
您 無法 在這個版面發表文章 您 無法 在這個版面回覆文章 您 無法 在這個版面編輯文章 您 無法 在這個版面刪除文章 您 無法 在這個版面進行投票 您 無法 在這個版面附加檔案 您 無法 在這個版面下載檔案
|
|