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