不過,最后還是找到了一個(gè)功能比較強(qiáng)的控件,是老外開發(fā)的控件,需要注冊(cè).還好,沒有注冊(cè)時(shí),只是在頁(yè)面關(guān)閉時(shí)彈出一個(gè)對(duì)話框,如果某人能把它…掉,本人非常感激,嘿嘿
好了,廢話不多說.先說說最近搜集的成果,不同級(jí)別的功能有不同級(jí)別的對(duì)應(yīng)方案,要看大家需要了,這里我提三個(gè)方案.
第1個(gè)方案,原汁原味
Word,Excel或Vioso文檔等Office,2003以后的版本,是都可以進(jìn)行轉(zhuǎn)換的,比如轉(zhuǎn)換為Xml或Html,所以最簡(jiǎn)單的方案就是直接通過代碼將Word文檔轉(zhuǎn)為Html格式,這樣就可以在線瀏覽,只是在線瀏覽,是不能編輯的.
其中,Excel文件如果轉(zhuǎn)為Xml格式,是可以在線操作的,詳細(xì)操作方式請(qǐng)參考我之前寫的一篇貼子WebExcel文件展現(xiàn).
附件,還附加了一個(gè)用代碼方式將Word文件轉(zhuǎn)為Html格式的例子,僅供大家參考吧,偶也是從其他地方下下來的,經(jīng)測(cè)試可以使用
第2個(gè)方案,大樹底下好乘涼
說這句話,我們的第2個(gè)方案就是要用微軟的東東,其實(shí)微軟有好多好東東的,只是它喜歡偷偷摸摸的放出來,很少被人知道.或者說,他根本不打算推這個(gè)產(chǎn)品,只能說:這個(gè)可以有.
好了,我們要用到的就是微軟的dsoframer控件,它是免費(fèi)的,比第1個(gè)方案,功能稍強(qiáng),這個(gè)控件沒有詳細(xì)研究,看了看別人的demo,感覺功能不強(qiáng)就沒研究下去,附件中也有相關(guān)代碼的,大家直接參考下好了.
第3個(gè)方案,另辟蹊徑
既然微軟這棵大樹我們靠不住,就只能借助于第三方控件了,老外在這方向做得很牛X,方方面面的控件或插件都有,只有想不到,沒有找不到…唉,中國(guó)啊…
這個(gè)控件是OfficeOCXSetup插件,當(dāng)前版本是7.4.0.236,附件有此安裝程序,安裝完以后有各編程工具的示例,安裝程序提供的示例只提供了簡(jiǎn)單的打開,關(guān)閉,保存等操作.
看提供的Demo里,好像可以對(duì)Word,Excel,PPT,Vioso等Office文件操作,確實(shí)很強(qiáng)大哈!
下面我說一個(gè)比較復(fù)雜的業(yè)務(wù)場(chǎng)景:客戶的某個(gè)單據(jù)需要錄入,但單據(jù)里面的標(biāo)簽等其他幫助性文字是不允許客戶修改的,客戶所允許修改的地方我們要預(yù)留出來.也就是說,Word本身提供的文檔,也相當(dāng)于ASPX頁(yè)面,只留一些控件允許客戶編輯就行了.
同時(shí),Word本身還提供一些簡(jiǎn)單的控件,比如日期,下拉菜單等.如果對(duì)下拉菜單取值,賦值等.好了,制作流程如下所示
- 環(huán)境要求
a) Word2007,最好是2007版本,因?yàn)榭丶兴略?/p>
b) 可維護(hù)xsd文件的工具(推薦使用VS2005或VS2008)
- 名詞解釋
a) 書簽
Word文檔里的書簽,我也不太好講,可以理解為在文檔中預(yù)留一個(gè)標(biāo)識(shí)符,找數(shù)據(jù)的時(shí)候可以按此標(biāo)識(shí)符查找即可
b) 結(jié)點(diǎn)
Word本身支持導(dǎo)入XSD架構(gòu)文檔,結(jié)點(diǎn)功能與書簽功能類似,可理解為書簽,只是功能更強(qiáng)大
- 結(jié)點(diǎn)操作步驟
a) 制作Word模板文件,如圖-1所示
圖-1
b) 開發(fā)員收到Word文檔后,需要制作xsd文檔(相當(dāng)于定義XML文件結(jié)構(gòu)的,如圖-2和圖-3所示.
圖-2
圖-3
說明:
i. xsd提供可視化和編碼維護(hù)兩種方式,個(gè)人建議使用編碼方式維護(hù)
ii. <xs:element name=”死亡報(bào)卡”>結(jié)點(diǎn)為報(bào)卡名稱
iii. <xs:element name=”xingming”>為某個(gè)結(jié)點(diǎn),相當(dāng)于DbTable中的某個(gè)DbColumnName名稱
iv. <xs:attribute name=”dbtablename”為結(jié)點(diǎn)的自定義屬性,是由我們自行增加的,目前的屬性定義如下
dbtablename |
結(jié)點(diǎn)所屬Db表名稱 |
dbcolumnname |
結(jié)點(diǎn)所屬Db表中列名稱 |
dbcolumndatatype |
列數(shù)據(jù)類型,如int,varchar等 |
dbcolumnedittype |
列編輯類型,如textbox,dropdownlist |
dbcolumnvalue |
列欄值,若編輯類型是下拉菜單,則數(shù)據(jù)值寫入此屬性 |
helpsign |
公用幫助標(biāo)識(shí),如民族,疾病等 |
comments |
列中文含義,可用于必輸項(xiàng)檢測(cè),彈出提示內(nèi)容 |
v. 只需復(fù)制結(jié)點(diǎn),修改其自定義屬性值即可
c) 完成xsd文檔的編寫,我們就需要將xsd文檔并入Word中,因?yàn)槲覀兪褂媒Y(jié)點(diǎn)方式操作數(shù)據(jù)
i. 打開Word文檔,選擇”開發(fā)工具”頁(yè)面
ii. 單擊”架構(gòu)”菜單,出現(xiàn)”模板和加載項(xiàng)”對(duì)話框,如圖-4所示
圖-4
iii. 再單擊”添加架構(gòu)”,將我們剛才定義好的xsd文件引入其中,并為其定義一個(gè)別名,如圖-5所示
圖-5
iv. 上述操作完成后,再點(diǎn)擊如圖-4所示”結(jié)構(gòu)”菜單,結(jié)果會(huì)出現(xiàn)如圖-6所示界面.注意:”僅列出當(dāng)前元素的子元素”不要勾選
圖-6
v. 在如圖-6所示的界面中,子項(xiàng)中有”死亡報(bào)卡”一項(xiàng),它是我們所有<xs:element>項(xiàng)目的父級(jí)結(jié)點(diǎn),需要將其引入其中,注意引入時(shí)必須選擇”應(yīng)用于整篇文檔”,如圖-7所示
圖-7
vi. 接下來的事情,我們就可以選擇子項(xiàng)到單元格了,只需單擊即可,操作效果如圖-8所示
圖-8
vii. 選擇我們剛才新增的結(jié)點(diǎn),右鍵,屬性,彈出如圖-8所示的界面,這個(gè)界面用于將我們自定義的屬性加入到結(jié)點(diǎn)中,即增加至”分配的屬性”項(xiàng)中.這樣我們就可以通過代碼方式取值和賦值自定義屬性了,增加后的效果如圖-9所示
圖-9
viii. 通過上述步驟,我們完成了報(bào)卡的設(shè)置工作,到此我們就可以通過編碼方式對(duì)文檔操作,包括結(jié)點(diǎn)取值和賦值,結(jié)點(diǎn)自定義屬性取值和賦值.不過,如果直接拿給客戶使用,會(huì)造成某些文字誤刪,因此,還需要對(duì)文檔進(jìn)行保護(hù)處理,同時(shí),設(shè)置好只允許客戶編輯的區(qū)域
d) 對(duì)文檔進(jìn)行保護(hù),只允許錄入,詳細(xì)操作步驟如下
i. 切換到”開發(fā)工具”頁(yè)面,單擊”保護(hù)文檔”,出現(xiàn)如圖-10所示界面
圖-10
ii. 選中某個(gè)我們剛才編輯好的模板,將右側(cè)”僅允許在文檔中進(jìn)行此類編輯”勾選,再勾選”每個(gè)人”復(fù)選框即可
iii. 其余結(jié)點(diǎn)均按此操作步驟即可,設(shè)置完以后,選擇”是,啟動(dòng)強(qiáng)制保護(hù)”即可(沒有設(shè)置密碼).這樣操作以后,交付給客戶使用時(shí),客戶就不會(huì)誤刪數(shù)據(jù)了,因?yàn)樗袛?shù)據(jù)都被保護(hù)起來了,留下來的都是允許客戶編輯的,
iv. 保護(hù)起來后,效果如圖-11所示,可以停止保擴(kuò).注意:不要勾選”突出顯示可編輯的區(qū)域”復(fù)選框,它的作用是顯示/隱藏保護(hù)區(qū)域
圖-11
e) 最后,我們需要美化一下,如圖-12所示
不要勾選”在文檔中顯示XML標(biāo)記”復(fù)選框,它的作用是顯示/隱藏結(jié)點(diǎn)項(xiàng)
圖-12
- 設(shè)置書簽步驟
a) 以設(shè)置頁(yè)眉為例
i. 在頁(yè)眉中,錄入”醫(yī)院名稱”文字,然后按幾個(gè)空格,再選中剛才的空格,切換到”插入”頁(yè)面,選擇書簽,彈出如圖-13所示頁(yè)面,錄入一個(gè)書簽名稱,添加至列表框中即可
圖-13
ii. 設(shè)置完以后,如圖-14所示.這是我們?cè)O(shè)置好以后的書簽,是否保護(hù)可以通過設(shè)置結(jié)點(diǎn)保護(hù)方式即可
圖-14
- 控件安裝程序說明
a) 安裝完此控件后,找到安裝路徑.如圖-15所示
i. Officeviewer.cab文件就是我們asp.net程序所要加載的cab控件包
ii. Samples文件夾,是各編程工具的示例,可直接運(yùn)行,里面有asp.net示例,我們以此為例
圖-15
b) 打開asp.net頁(yè)面,cab加載方式也按它的加載方式即可
i. 我們?cè)谑褂脮r(shí),直接照搬過來即可,例:打開Word文檔,事件注冊(cè)方式等.
ii. 這里重點(diǎn)說明我們以后會(huì)頻繁操作的事件,就是雙擊事件,因?yàn)槲覀冃枰p擊事件彈出公用幫助,提供快速錄入功能,如圖-16所示
圖-16
c) 代碼說明
i. 聲明頁(yè)面變量array_xmlnodenameist和array_bookmarknamelist兩個(gè)變量,用于存儲(chǔ)Word文檔中結(jié)點(diǎn)名稱列表和書簽名稱列表,目的是提高性能,不必每次再循環(huán)獲取.上述變量可在OA1_DocumentOpened事件中賦值.
ii. 控件與Db表數(shù)據(jù)取值和賦值方式如圖-17和圖-18所示.
iii. Js方法可參考edrawoffice.js文件,已對(duì)一些功能有所封裝
圖-17
圖-18
- Word控件使用
a) 使用Word2007中自帶的控件,實(shí)現(xiàn)數(shù)據(jù)的簡(jiǎn)單定義后,數(shù)據(jù)的取值和賦值操作,如日期,性別下拉菜單等,如圖-22所示
圖-22
b) 數(shù)據(jù)賦值時(shí),若是下拉菜單操作,需要將顯示值顯示在頁(yè)面控件,數(shù)據(jù)值存儲(chǔ)在結(jié)點(diǎn)的自定義屬性中,此功能已實(shí)現(xiàn),代碼在edrawoffice.js中
備注
1. 本要提供對(duì)此控件的技術(shù)支持,有問題可以與我聯(lián)系,同時(shí)我提供的類庫(kù)中若在問題,也請(qǐng)與我聯(lián)系,謝謝
2. 此控件的評(píng)估版本,頁(yè)面關(guān)閉時(shí)會(huì)彈出對(duì)話框,如圖-23所示.若有高手可以解決,本人不勝感謝!
圖-23
代碼及安裝程序