天天看點

web線上編輯word,excel,pdf插件-----WebOffice 文檔控件API 一、工作原理 二、接口說明

目    錄

<a target="_blank">一、工作原理...5</a>

<a target="_blank">1.1         開發流程...5</a>

<a target="_blank">1.2         web頁面調用控件:.6</a>

<a target="_blank">二、接口說明...7</a>

<a target="_blank">2.1         接口...7</a>

<a target="_blank">2.1.1     aboutbox.7</a>

<a target="_blank">2.1.2     acceptallrevisions.7</a>

<a target="_blank">2.1.3     closedoc.7</a>

<a target="_blank">2.1.4     dellocalfile.8</a>

<a target="_blank">2.1.5     getdocumentobject.8</a>

<a target="_blank">2.1.6     getfieldvalue.9</a>

<a target="_blank">2.1.7     gettempfilepath.9</a>

<a target="_blank">2.1.8     getrevcount.10</a>

<a target="_blank">2.1.9     getfilesize.10</a>

<a target="_blank">2.1.10            getbookmarkcount.10</a>

<a target="_blank">2.1.11            hidemenuitem.10</a>

<a target="_blank">2.1.12            httpinit.11</a>

<a target="_blank">2.1.13            httpaddpostfile.11</a>

<a target="_blank">2.1.14            httpaddpoststring.11</a>

<a target="_blank">2.1.15            httpaddpostcurrfile.12</a>

<a target="_blank">2.1.16            httppost.12</a>

<a target="_blank">2.1.17            insertfile.12</a>

<a target="_blank">2.1.18            isopened.13</a>

<a target="_blank">2.1.19            issaved.13</a>

<a target="_blank">2.1.20            loadoriginalfile.14</a>

<a target="_blank">2.1.21            openfiledlg.14</a>

<a target="_blank">2.1.22            protectdoc.15</a>

<a target="_blank">2.1.23            printdoc.15</a>

<a target="_blank">2.1.24            putsaved.15</a>

<a target="_blank">2.1.25            save.16</a>

<a target="_blank">2.1.26            saveto.16</a>

<a target="_blank">2.1.27            saveas.16</a>

<a target="_blank">2.1.28            setfieldvalue.17</a>

<a target="_blank">2.1.29            settrackrevisions.18</a>

<a target="_blank">2.1.30            showrevisions.18</a>

<a target="_blank">2.1.31            setcurrusername.18</a>

<a target="_blank">2.1.32            showdialog.18</a>

<a target="_blank">2.1.33            unprotectdoc(bstrstrpwd).19</a>

<a target="_blank">2.2         屬性...20</a>

<a target="_blank">2.2.1     doctype.20</a>

<a target="_blank">2.2.2     version.20</a>

<a target="_blank">2.2.3     appversion.20</a>

<a target="_blank">2.2.4     leventret.20</a>

<a target="_blank">2.2.5     ismodify.21</a>

<a target="_blank">2.2.6     showtoolbar.21</a>

<a target="_blank">2.2.7     lcontinue.21</a>

<a target="_blank">2.3         事件...21</a>

<a target="_blank">2.3.1     notifywordevent.21</a>

<a target="_blank">2.3.2     notifyctrlready.22</a>

<a target="_blank">2.3.3     notifytoolbarclick.22</a>

<a target="_blank">附錄:weboffice檔案http上傳原理...23</a>

weboffice是基于用戶端的ocx控件,它的功能是将office文檔(word、excel、wps)嵌入到浏覽器中,并調用office中各種接口,完成文檔編輯工作,然後使用控件的http接口模拟表單送出,發送到資料處理頁面(此文檔舉例為savedoc.asp頁,代碼見示範檔案),完成文檔的存檔工作。

  ├  裝載控件        &lt;object&gt;...&lt;/ object &gt;

  ├  觸發初始化方法

&lt;scriptlanguage=javascript for=weboffice1 event=notifyctrlready&gt;

&lt;!--

 weboffice1_notifyctrlready()         

//--&gt;

&lt;/script&gt;

  ├  執行初始化方法,打開新文檔或裝載已經存在的文檔

functionweboffice1_notifyctrlready() {

   document.all.weboffice1.loadoriginalfile("…","…");

}    

  ├  根據目前步驟,來決定是否進入修訂狀态,如果是修訂狀态,最好設定目前的使用者名

   document.all.weboffice1.setcurrusername("張三"); 

   document.all.weboffice1.settrackrevisions(1);

}

├ 填寫表單元素,編輯office文檔

  ├  執行http上傳接口儲存表單元素和office文檔          

//儲存文檔之前,如果需要接受修訂,需要調用

document.all.weboffice1.settrackrevisions(4);   

//通過http接口上傳

document.all.weboffice1.httpinit();             

document.all.weboffice1.httpaddpoststring("…","…");

document.all.weboffice1.httpaddpostcurrfile("…","…");      

document.all.weboffice1.httppost("…")

  ├  savedoc.asp擷取表單資料和office進行資料庫操作,并傳回操作是否正确。

  ├  根據savedoc.asp傳回值進行相應操作。

     &lt;object id=weboffice1 height=520width="100%" style="left: 0px; top: 0px"

classid="clsid:e77e049b-23fc-4db8-b756-60529a35fad5"  codebase=weboffice.ocx#version=3,0,0,0&gt;

     &lt;param name="_version"value="65536"&gt;

     &lt;param name="_extentx"value="2646"&gt;

     &lt;param name="_extenty"value="1323"&gt;

     &lt;param name="_stockprops"value="0"&gt;&lt;/object&gt;

主要參數說明:

id         控件在網頁的别名,可以通過别名調用控件的方法、屬性

width      控件的寬度,可以使用絕對大小,如width="100px"。

height     控件的高度

codebase      設定控件自動下載下傳的路徑,使用者如果沒有安裝控件,系統會自動通路codebase的路徑下載下傳控件;“#version”後的是控件的版本,如果使用者目前的軟體版本低于“#version”後面的版本,系統也會自動下載下傳最新的控件

注意:    如果控件的width 和height屬性使用%表示,則要明确指明它所在的容器的大小,如把控件放到表格&lt;td&gt;内,則要明确指明表格&lt;td&gt;的width和height的絕對值。

原 型: void aboutbox();

功  能:顯示weboffice版本資訊

傳回值:

示  例:

document.all.weboffice1.aboutbox();

原  型: longacceptallrevisions();

功  能:接受目前文檔所有修訂

0:接受修訂成功

       非零:接受修訂失敗

document.all.weboffice1.acceptallrevisions();

原  型: long closedoc(longblreqsaved);

功  能:關閉目前文檔

參 數:

      blreqsaved:

       0:關閉文檔,不儲存目前修改。

       1:關閉文檔,儲存目前修改。

       2:如果文檔已經被修改,顯示儲存文檔對話框,否則直接關閉。

       其它:關閉文檔,儲存目前修改。

傳回值:

       0:    失敗

       非零: 成功

    //關閉目前文檔,不儲存目前修改。

document.all.weboffice1.closedoc (0);

原  型: long dellocalfile(bstrstrfilepathname);

功  能:删除本地檔案

      strfilepathname:本地檔案的絕對路徑。

       0:    删除成功

       非零: 删除失敗

 document.all.weboffice1.dellocalfile("c:\\111.doc");

原  型: idispatch*getdocumentobject();

擷取文檔對象的activedocument對象,此接口非常重要,基本所有的vba功能都可以通過這個接口來實作。

參 數:                  

傳回值: activedocument對象的dispatch

/* 以下的javascript為采用activedocument的方式直接操作vba,向doc文檔的書簽中加入一個圖檔。

function addpicture(strmarkname,strbmppath,vtype)

在書簽位置插入圖檔,

strmarkname 書簽的名稱

strbmppath  圖檔的路徑

vtype       插入後的圖檔的樣式,5為浮動在文字上面

addpicture("test1","d:\\111.bmp",5);

addpicture("test1","d:\\111.bmp",128);

*/

{

//定義一個對象,用來存儲activedocument對象

         var obj;

         obj =new object(document.all.weboffice1.getdocumentobject());

         if(obj!=null){

               var pbookmarks;

// vab接口擷取書簽集合

                  pbookmarks = obj.bookmarks;

                  var pbookm;

// vab接口擷取書簽strmarkname

                  pbookm = pbookmarks(strmarkname);

                  var prange;

// vab接口擷取書簽strmarkname的range對象

                  prange = pbookm.range;

                  var prangeinlines;

// vab接口擷取書簽strmarkname的range對象的inlineshapes對象

                  prangeinlines = prange.inlineshapes;

                  var prangeinline;

// vab接口通過inlineshapes對象向文檔中插入圖檔

                  prangeinline = prangeinlines.addpicture(strbmppath); 

//設定圖檔的樣式,5為浮動在文字上面

                  prangeinline.converttoshape().wrapformat.type = vtype;

                  delete obj; 

   }

原  型: bstrgetfieldvalue(bstr strfieldname, bstr strsheetname);

功  能:獲得書簽位置的數值

strfieldname:書簽的名字

strsheetname:預留字段(值為空)

傳回值:傳回書簽的值

//獲得書簽的值

 var strfieldvalue=document.all.weboffice1.getfieldvalue("mark_1","")

原  型: bstrgettempfilepath();

功  能:獲得臨時檔案路徑

傳回值:目前檔案的臨時路徑

 var strtemppath=document.all.weboffice1.gettempfilepath();

原  型: longgetrevcount();

功  能:擷取修訂節點的個數

傳回值:擷取修訂節點的個數

原  型: longgetfilesize (lpctstr strfilepath);

功  能:擷取本地檔案的大小

參  數:                  

 var vlen = obj.getfilesize("c:\\111.doc");

原 型: longgetbookmarkcount();

功 能:擷取文檔中書簽的總數量

示 例:

原 型: longgetbook markinfo(lindex,itype);

功 能:擷取文檔中書簽的資訊

lindex:書簽的序号,從1開始

   itype:擷取内容類型。0擷取書簽名,1擷取書簽值

原  型: long hidemenuitem(long lmenutype);

功  能:控制自有工具欄的顯示

lmenutype工具欄開關,采用32位的數字作為開關,當相關位為1的時候,按鈕顯示,為0是按鈕隐藏。

enum{

    vnew = 0x01,         //建立

    vopen= 0x02,             //打開

    vsaveas= 0x04,       //儲存

    vprint= 0x10,          //列印

    vprintview= 0x20,      //列印預覽

    vreturn= 0x1000,       //全屏

vshowhidemenu = 0x4000, //顯示/隐藏菜單

    vfullscrean= 0x2000    //傳回

};

 //隻顯示建立和全屏按鈕

object.hidemenuitem(0x01 + 0x1000);

原  型: long httpinit();

功  能:初始化上傳接口

//上傳前必須執行此方法

document.all.weboffice1.httpinit();

原  型: longhttpaddpostfile(bstr strname, bstr strfile);

功  能:http上傳相關(保留)

//上傳本地檔案c:\\111.doc

document.all.weboffice1.httpaddpostfile("111","c:\\111.doc")

原  型: longhttpaddpoststring(bstr strname, bstr strvalue);

功  能:添加要上傳的表單域

      strname:表單域的名稱

       strvalue:表單域的值

//添加表單域,可多次執行此方法

document.all.weboffice1.httpaddpoststring("doctitle",myform.doctitle.value);

原  型: longhttpaddpostcurrfile(string field, string newfilename);

功  能:添加要上傳的word或者excel檔案

參  數:

field:要上傳檔案的id

newfielname:上傳後的新檔案名。該參數可以為空,系統将自動為檔案命名

document.all.weboffice1.httpaddpostcurrfile("doccontent","");

原  型: bstr httppost(bstrstrhttpurl);

功  能:将目前表單和檔案資料送出到指定url路徑

strhttpurl:  處理表單和檔案資料的檔案url路徑   

     succeed:上傳成功

      failed: 上傳失敗

//相對路徑

var returnvalue=document.all.weboffice1.httppost("../savedoc.jsp");

//絕對路徑

var returnvalue=document.all.weboffice1.httppost("http://127.0.0.1/savedoc.jsp")

原  形:short  insertfile(lpctstr strfilepathname, shortncurpos)

功  能:插入合并檔案,和插入圖檔。

參  數:strfilepathname:

           檔案或者圖檔的路徑,可以是http.或者ftp路徑

         ncurpos:

           位置和圖檔控制符。ncurpos 或者ncurpos -8

           0: 目前位置

           1: 檔案開頭

2: 檔案末尾

            如果第四位為1:表示插入的是圖檔

       0:正确

       其他:錯誤

//檔案頭部

document.all.weboffice1.insertfile("http://xx.com/xx.doc",1);

//檔案尾部

document.all.weboffice1.insertfile("http://xx.com/xx.doc",2);

//目前光标位置

document.all.weboffice1.insertfile("http://xx.com/xx.doc",0);

document.all.weboffice1.insertfile("http://xx.com/xx.jpg",9);

document.all.weboffice1.insertfile("http://xx.com/xx.jpg",10);

document.all.weboffice1.insertfile("http://xx.com/xx.jpg",8);

原  型: long isopened();

功  能:判斷目前是否打開檔案

0:表示目前未打開文檔

非0:表示已經打開文檔

file_type_word = 11,

file_type_word =11,

file_type_excel= 12,

file_type_ppt = 13,

file_type_rtf = 14,

file_type_wps = 21,

file_type_pdf = 31,

file_type_unk = 127     

var isopened=document.all.weboffice1.isopened();

原  型: long issaved();

功  能:判斷檔案是否被修改

0:檔案已被修改

非零:檔案未被修改

var issaved=document.all.weboffice1.issaved();

原  型: longloadoriginalfile(bstr pcfilenameorurl, bstr pctype);

功  能:建立、裝載office文檔

pcfilenameorurl:

要裝載檔案的本地路徑或者url,值為空表示建立文檔,如果是在http的web環境下,可以傳相對路徑. 

pctype:

doc:打開、建立word檔案

xls:打開、建立excel檔案

ppt:打開、建立ppt  檔案

wps:打開、建立wps  檔案

      0:失敗

          非0:成功

 // 通過url打開一個伺服器檔案,getdoc.asp代碼見示範檔案

document.all.weboffice1.loadoriginalfile("http://127.0.0.1/getdoc.asp?id=8","doc");

// 通過url打開一個伺服器檔案,相對路徑

document.all.weboffice1.loadoriginalfile("/getdoc.asp?id=8","doc");

document.all.weboffice1.loadoriginalfile("./getdoc.asp?id=8","doc");

// 建立excel

document.all.weboffice1.loadoriginalfile("","xls");

// 通過word打開本地檔案

document.all.weboffice1.loadoriginalfile("c:\\demo.doc","doc");

原  型: shortopenfiledlg();

功  能:打開本地檔案顯示在weboffice中

參  數:pcfilenameorurl:儲存的檔案路徑

//打開對話框

document.all.weboffice1.openfiledlg();

原  型: longprotectdoc(long lproorun, long ltype, bstr strpwd);

功  能:文檔保護

lproorun:

└ 1:為保護文檔

└ 0:為解鎖文檔

ltype       :

└ 0 :文檔保護,隻允許修訂

└ 1 :文檔保護,隻允許批注

└ 2 :文檔完全保護,不允許任何操作

strpwd:文檔保護、解鎖時所需設定的密碼

// 保護文檔,隻允許修訂

document.all.weboffice1.protectdoc(1,0, "12345");  

// 解鎖文檔

document.all.weboffice1.protectdoc(0,0, "12345");     

原  型: long printdoc(longblshowdlg);

功  能:列印目前文檔

參 數:blshowdlg:

0:不顯示列印對話框,直接列印

              非零:顯示列印對話框

0:列印失敗

              非零:列印成功

//顯示列印對話框

 document.all.weboffice1.printdoc(1);

原  型: longputsaved(boolean bsaved);

功  能:設定目前文檔的修改狀态

參  數: 

       0: 處于修改狀态

       1: 處于儲存狀态

//設定目前文檔處于修改狀态

document.all.weboffice1.putsaved(0);

原  型: long save();

功  能:

将檔案儲存原來位置,第一次儲存時彈出對話框

0:儲存失敗

       非零:儲存成功

document.all.weboffice1.save();

原  型: long saveas(bstrstrfilename, long dwfileformat);

功  能:儲存檔案到本地

strfilename: 要儲存的檔案路徑和檔案名

dwfileformat:儲存的檔案類型

     └ 0 word類型

     └ 2 txt檔案

     └ 6 rtf檔案

└ -4143 excel類型

示  例: 

document.all.weboffice1.saveas("c:\\test.doc",0);      //另存為word檔案

document.all.weboffice1.saveas("c:\\test.txt",2);      //另存為txt檔案

document.all.weboffice1.saveas("c:\\test.rtf",6);      //另存為rtf檔案

document.all.weboffice1.saveas("c:\\test.xls",-4143);  //另存為excel檔案 

原  型: longsetfieldvalue(bstr strfieldname, bstr strvalue, bstr strsheetname);

功  能:添加書簽,套紅頭模闆

參  數:strfieldname:書簽的名字,對于excel檔案,此資料位單元格

strvalue:書簽的值,該處可以是個用于傳回資料的url,用于套紅頭模闆。對于excel檔案,如果插入的是圖檔,此數值為::jpg::+圖檔的路徑

strsheetname:指令的類型,對于excel檔案此數值為sheet的名稱

     └ ::addmark::  添加書簽

          └::delmark::  删除書簽

          └::jpg::         添加圖檔,可以利用這個來實作圖檔電子印章

     └ ::file::      調用本地或者url的檔案設定書簽值(套紅頭)

// 添加書簽mark_1,并為它指派

document.all.weboffice1.setfieldvalue("mark_1","北京","::addmark::");

// 為已存在的書簽mark_1指派

document.all.weboffice1.setfieldvalue("mark_1","電子簽章",  "");

// 套本地紅頭

document.all.weboffice1.setfieldvalue("mark_1","c:\\test.doc", "::file::");

// 套服務端紅頭1,getdoc.asp頁用于傳回要裝載word的二進制值,代碼見示範檔案

document.all.weboffice1.setfieldvalue("mark_1","http://127.0.0.1/getdoc.asp?id=8", "::file::");

// 套服務端紅頭2

document.all.weboffice1.setfieldvalue("mark_1","http://127.0.0.1/test.doc","::file::");

//添加圖檔電子印章

document.all.weboffice1.setfieldvalue("mark_1","http://127.0.0.1/seal.bmp","::jpg::");

//在excel中添加圖檔

document.all.weboffice1.setfieldvalue("","::jpg::http://www.google.cn/intl/zh-cn/images/logo_cn.gif","");

原  型: longsettrackrevisions(long lvalue);

功  能:修訂文檔

lvalue:文檔修訂狀态

     └ 1: 開始修訂文檔

     └ 0: 進入非留痕狀态

     └ 4:接受目前修訂

// 開始修訂

document.all.weboffice1.settrackrevisions(1);

// 接受修訂

原  型: longshowrevisions(long nnewvalue);

功  能:顯示、隐藏修訂

nnewvalue:要儲存的檔案路徑和檔案名

     └ 1:顯示修訂

     └ 0:隐藏修訂

示例:

document.all.weboffice1.showrevisions(0);     //隐藏修訂

原  型: longsetcurrusername(bstr strcurrusername);

功  能:設定目前編輯word、excel的使用者名,主要用于修訂文檔,辨別不同人進行的不同操作

參  數:strcurrusername:目前編輯人的使用者名

  示  例:document.all.weboffice1.setcurrusername("張三");   

        顯示對話框

      dwindex:對話框的id數值,詳細的數值清單請參照附件。

原 型: long unprotectdoc(bstr strpwd);

功  能:解除目前文檔保護

參  數:strpwd文檔保護時所設定的密碼

0:解鎖成功

       非零:解鎖失敗

document.all.weboffice1.unprotectdoc("12345");

原  型: longdoctype;

說  明:檔案類型,隻讀

數 值:

file_type_excel = 12,

原 型: bstrversion;

說  明:打開檔案的版本号,隻讀

數  值:

原 型: bool leventret;

說  明:見事件 notifytoolbarclick事件

原 型: boolismodify;

說  明:判斷文檔是否被修改,需要在loadorigarfile之前設定 optionflag|= 0x0400 才有效。

原  型: long lcontinue;

功  能:用于notifywordevent的處理函數中,可以終止相應事件的繼續執行

       1:可以繼續執行(預設)

       0:不是2007版本

//禁止關閉目前的word/excel/wps文檔

onnotifywordevent(bstrstreventname)

if(streventname == “documentbeforeclose”)

lcontinue = 0;

原  型:  void  notifywordevent(bstrstreventname);

說  明:捕獲部分word/excel/wps事件。

參數:streventnameàword/excel的事件名,可能是以下的數值

documentchange

documentbeforeclose

documentbeforeprint

documentbeforesave

備注:本事件在本版本擴充到excel和wps的支援,且可以終止該事件的繼續執行(使用屬性lcontinue)。

原 型: void notifyctrlready();

說  明:當控件準備完畢後觸發,一般在這個事件中完成初始化的操作。

原 型: voidnotifytoolbarclick(long iindex);

參 數:

long iindex : 工具欄按鈕id。

id_return                       32769

id_new                           32770

id_open                          32771

id_saveas                        32772

id_fullscrean                   32773

id_print                         32774

id_printview                    32775

說  明:

(不适用于office2007)每個按鈕都有預設的處理動作,如果不希望觸發預設的處理動作,需要在此時間中設定屬性leventret = 0;

以下執行個體截獲了saveas的按鈕事件。

//1. 定義事件處理函數

&lt;scriptlanguage=javascript for=weboffice1 vent=notifytoolbarclick(lcmd)&gt;

 weboffice1_notifytoolbarclick(lcmd)

//2. 截獲處理事件

functionweboffice1_notifytoolbarclick(lcmd) {

    if(32772==lcmd){

       document.all.weboffice1.leventret = 0;   

    }

weboffice檔案http上傳原理分析

weboffice控件使用了自身的檔案http上傳接口實作檔案和表單域的上傳儲存,本文将簡要介紹該上傳方式的原理和使用方法。注:weboffice的上傳接口和aip是一緻的。

原理

因為web頁面上的weboffice打開的檔案無法随表單記錄送出到處理頁面,是以我們把檔案模拟成表單的檔案域&lt;input type=file …&gt;,通過接口把檔案和表單元素發送到儲存記錄的頁面(過程類似表單的送出)。

主要上傳接口:

l httpinit();

該方法用于初始化上傳接口,不需要設定參數

l httpaddpoststring(string fieldname, string somevalue);

添加要送出的表單域, fieldname是要上傳表單域名稱,somevalue是表單域值

例一:

httpaddpoststring("username", "zhangsan");

它類似域表單域的

&lt;input type=text name=username value=zhangsan&gt;

              例二:

                     httpaddpoststring("username", webform.username.value);

                     ….

                     &lt;form name= webform &gt;

                     &lt;/form&gt;

注意:如果使用 上傳接口,那麼form表單裡的表單域不會被送出到處理頁面。需要手工添加到上傳接口(httpaddpoststring接口),然後通過控件發送到處理頁面。例二使用了“webform.username.value”擷取表單域值。

l httpaddpostcurrfile(string filename, string rename);

添加目前weboffice編輯的檔案給上傳接口,該接口把檔案模拟到成一個表單的檔案域,并送出到處理頁面。

httpaddpostcurrfile("aipfile", "");

該接口模拟表單檔案域如下:

&lt;input type=file name=aipfile &gt;

注意:第二個參數為空表示控件自動為檔案命名,如:dj_temp.aip,如果需要重命名可以在第二個參數指明檔案名稱,也可在儲存頁面指定檔案名稱。

l httppost(string url);

執行上傳操作将檔案和表單域送出到url的頁面進行儲存操作,并擷取url頁面傳回的執行結果 (是否成功,可以根據這個結果來擷取伺服器端執行的結果)。

url支援絕對路徑和相對路徑。

相對路徑要以“./”或者“../”開頭。例如:./savedoc.asp

完整的上傳接口示範

function savedoc() {

         var returnvalue;                                              //儲存頁面的傳回值

         document.all.weboffice1.httpinit();  //初始化http引擎

// 添加相應的post元素

         document.all.weboffice1.httpaddpoststring("username", webform. username.value);

         // 添加上傳檔案

         document.all.weboffice1.httpaddpostcurrfile("aipfile ","");   

         // 送出上傳檔案

         returnvalue = document.all.weboffice1.httppost("../savedoc.jsp");

         if("true" == returnvalue){

                   alert("檔案上傳成功");       

         } else  {

                   alert("檔案上傳失敗")

         }

關于儲存

weboffice上傳接口将資料流以http方式送出到儲存頁面,至于對資料處理就和普通的檔案上傳處理一樣了,具體代碼參考附件(asp和jsp的實作)。

論壇:http://forum.dianju.cn/

繼續閱讀