VFP 愛用者社區 首頁 VFP 愛用者社區
本討論區為 Visual Foxpro 愛用者經驗交流的地方, 請多多利用"搜尋"的功能, 先查看看有無前例可循, 如果還有不懂的再發問. 部份主題有附加檔案, 須先註冊成為社區居民才可以下載.
 
 常見問題常見問題   搜尋搜尋   會員列表會員列表   會員群組會員群組   會員註冊會員註冊 
 個人資料個人資料   登入檢查您的私人訊息登入檢查您的私人訊息   登入登入

如何偵測有否安裝 Excel
前往頁面 1, 2  下一頁
 
發表新主題   回覆主題    VFP 愛用者社區 首頁 -> VFP 討論區
上一篇主題 :: 下一篇主題  
發表人 內容
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



Very Happy XD
Very Happy XD
Very Happy XD
Very Happy XD
Very Happy XD

_________________
如果公司有下列困擾:
1. 找不到便宜,快速,簡易的 生產排程軟體
2. 不知道如何快速排定 採購計劃
3. 成本抓不準,自己算比軟體算有用
4. 想學習系統規劃,想找系統架構的顧問

請聯絡我們,也許我們幫得上忙
回頂端
檢視會員個人資料 發送私人訊息 發送電子郵件 AIM Address
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. 想學習系統規劃,想找系統架構的顧問

請聯絡我們,也許我們幫得上忙
回頂端
檢視會員個人資料 發送私人訊息 發送電子郵件 AIM Address
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. 想學習系統規劃,想找系統架構的顧問

請聯絡我們,也許我們幫得上忙
回頂端
檢視會員個人資料 發送私人訊息 發送電子郵件 AIM Address
LiuRambo



註冊時間: 2007-11-27
文章: 481


第 9 樓

發表發表於: 星期二 一月 25, 2011 10:25 pm    文章主題: 引言回覆

syntech 寫到:
利用 ON ERROR 或其他ERROR EVENT,攔截錯誤碼 1733 ,
抑制錯誤訊息不就好了. XD


同上
我自己就是用這樣偵測的
連同DLL註冊問題也是同樣方法解決
唯獨是這要程式開發到幾乎完美境界時
啟用ONERROR才不會把自己給煩死
回頂端
檢視會員個人資料 發送私人訊息 MSN Messenger
朱育興



註冊時間: 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
回頂端
檢視會員個人資料 發送私人訊息 發送電子郵件 MSN Messenger
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 樓

發表發表於: 星期五 十二月 05, 2014 10:57 am    文章主題: 引言回覆

請問各位:

有遇過 offices2013 讀不到excel內容的嬤??

_________________
ezPos收銀機 簡單好用低成本 http://www.ezpos.info
全新美觀的POS收銀機.POS軟硬體耗材.
軟體客制化.網站規劃....能賺錢的都可以找我

http://www.twelife.com 台灣生活網
回頂端
檢視會員個人資料 發送私人訊息 參觀發表人的個人網站
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 也好像破功了 (相容性 .... 都作了)
回頂端
檢視會員個人資料 發送私人訊息 MSN Messenger
從之前的文章開始顯示:   
發表新主題   回覆主題    VFP 愛用者社區 首頁 -> VFP 討論區 所有的時間均為 台北時間 (GMT + 8 小時)
前往頁面 1, 2  下一頁
1頁(共2頁)

 
前往:  
無法 在這個版面發表文章
無法 在這個版面回覆文章
無法 在這個版面編輯文章
無法 在這個版面刪除文章
無法 在這個版面進行投票
無法 在這個版面附加檔案
無法 在這個版面下載檔案


Powered by phpBB © 2001, 2005 phpBB Group
正體中文語系由 phpbb-tw 維護製作