亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 編程設計 > 正文

Excel Services OverView系列3 使用Excel Web Services操作Excel工作薄

2020-06-27 14:44:59
字體:
來源:轉載
供稿:網友

Excel Web Services(以后簡稱EWS)位于整個Excel Services的前端(可以參考我之前的文章)。它提供了開發Excel的接口。從名字可以看出,EWS也屬于WebService的一種,所以我們可以像使用普通的WebService那樣使用它。要想調用EWS,先要知道它的地址,這取決于MOSS的設置。假如MOSS的名稱為ServerName,那么對應的EWS地址就是: http://<server name>/_vti_bin/ExcelService.asmx .在瀏覽器中輸入EWS地址后您會看到下圖:

Excel,Web,Services,Excel工作薄

話不多說,現在進入今天的主題,我將通過一個程序為您演示如何使用EWS.

本次程序依然會使用上一篇文章里創建的Excel文檔。程序運行后首先讀取SharePoint Server上的Excel工作薄,將A1至B3的單元格內容顯示到程序界面;也可以修改文本框中的內容,然后點擊“計算”按鈕,對應的標簽會顯示更新結果;或者點擊保存,將服務器上的Excel工作薄保存到本地。

Excel,Web,Services,Excel工作薄

現在開始創建應用程序。首先建立一個名為ExcelWebServcice的Windows應用程序,將剛才EWS引用到程序里,將命名空間改為ExcelWebServcice
添加完引用以后就可以使用該服務了。
 
整個程序分為3部分:

1、取值 ;
2、賦值 ;
3、保存 。
 
1.取值 :

將EWS添加到工程后,可以看見ExcelWebService命名空間下出現了ExcelService類。通過操作它就可以完成與服務器端的交互。

  首先將其實例化

ExcelService es=new ExcelService();

   在調用ExcelService前必須為其指定憑證(Credential),否則應用程序會拋出異常。憑證可以是默認憑證或使用指定了用戶名/密碼的憑證,這里我們使用默認憑證。兩者的區別將在后文討論。

es.Credentials = System.Net.CredentialCache.DefaultCredentials;
  es.Credentials = new System.Net.NetworkCredential("userName", "password","domain");
 
設置憑證以后我們執行OpenWorkbook,該方法的函數聲明如下:

string ExcelService.OpenWorkbook(string workbookPath, string cultrueInfo,string  cultrueInfo,string out status)
 
OpenWorkbook用于打開Excel,workbookPath表示文件在服務器中的地址。cultureInfo,cultureInfo是區域信息,這里我們填寫”zh-cn”(代表中文)。最后一個參數有點特殊,是個Status類型的數組,用于存儲錯誤信息。在執行ExcelService的方法時可能會發生錯誤。嚴重的錯誤會引起程序崩潰,而輕微的錯誤并不影響程序的運行,系統會將錯誤信息儲存在Status類型的數組中。值得注意的是ExcelService類中的所有方法都涉及了該參數。
   最后介紹一下該方法的返回值:執行Openworkbook后,Excel Calculation Server會產生一個會話。會話編號就存儲在OpenWorkbook的返回值內。

 順利執行OpenWorkbook后就可以從Excel取值了。我們需要從文檔的sheet1的第一個單元格取值,也就是從A1單元格中取值。可以使用GetCellA1方法.
object GetCellA1(string sessionID,string sheetName,string rangeName,bool formatted,out Status[] status)
GetCellA1方法需要會話的編號,去定從哪個會話的Excel工作薄中取值;參數sheetName確定從哪個sheet中取值;參數rangeName確定從哪個單元格中取值;參數formatted表示取值時是否保留格式;
看到這里您可能會有些疑問:GetCell和GetCellA1有什么區別呢?A1有什么含義?

        實際上GetCellA1方法中的A1代表Excel的命名規則。例如您在Excel中的某個單元格內輸入”=A1”或者” =Sheet1!$A$1” ,表示該單元格引用了A1單元格的值,僅此而已。
Excel Calculation Service還支持另外一種規則:通過坐標系取/賦值。這種規則對應GetCell方法。只不過現在的坐標系起始值是0,不是Excel中的1。所以我們代碼應該如下:

 

復制代碼
代碼如下:

Es.GetCell(workbookPath,”sheet1”,0,0,true,out status);

 

取值完畢后還需要關閉工作薄,以便釋放資源,減輕服務器負擔
es.CloseWorkbook(sessionID)
 
       取值部分已經介紹完了,看一下完整代碼:
      

復制代碼
代碼如下:

string workbookPath = @"http://vistaserver/dc/ExcelServiceTest/test.xlsx";
string cultrueInfo = "zh-cn";
Status[] status;
/// <summary>
/// 從服務器上的excel文檔中取值
/// </summary>
void GetValueFromServer()
{</p> <p> ExcelService es = new ExcelService();
es.Credentials = System.Net.CredentialCache.DefaultCredentials;
string sessionID = es.OpenWorkbook(workbookPath, cultrueInfo, cultrueInfo, out status);

A1Field.Text = es.GetCellA1(sessionID, "sheet1", "A1", true, out status).ToString();
A2Field.Text = es.GetCellA1(sessionID, "sheet1", "A2", true, out status).ToString();
A3Field.Text = es.GetCellA1(sessionID, "sheet1", "A3", true, out status).ToString();

number1.Text = es.GetCellA1(sessionID, "sheet1", "B1", true, out status).ToString();
number2.Text = es.GetCellA1(sessionID, "sheet1", "B2", true, out status).ToString();
result.Text = es.GetCellA1(sessionID, "sheet1", "B3", true, out status).ToString();
es.CloseWorkbook(sessionID);
}

 
2.賦值:
ExcelService類中對單元格賦值的方法為SetCellA1(還有SetCell,使用方法可以參考GetCell)。該方法的函數聲明如下
Status status=SetCellA1(string sessionID,string sheetName,string rangeName,object cellValue)
   看一下計算部分的完整代碼:

 

  

復制代碼
代碼如下:

ExcelService es = new ExcelService();
es.Credentials = System.Net.CredentialCache.DefaultCredentials;
string sessionID = es.OpenWorkbook(workbookPath, cultrueInfo, cultrueInfo, out status);

es.SetCellA1(sessionID, "sheet1", "B1", number1.Text);
es.SetCellA1(sessionID, "sheet1", "B2", number2.Text);
result.Text = es.GetCellA1(sessionID, "sheet1", "B3", true, out status);

 

3.保存
 您可能注意到了,“賦值”部分的代碼缺少了CloseWorkbook方法。其原因可以從上文中聯想到:Excel Calculation Service負責維護會話,這樣可以保證多個用戶使用Excel Calculation Service時不會相互影響。所以關閉了工作薄會導致會話也被關閉,之前在會話中對Excel所作的操作也將丟失… 所以,保存操作要在關閉會話前完成。
現在看一下獲取Excel工作薄的方法:
byte[] GetWorkbook(string sessionID,WorkbookType workbookType,out Status[] status)
GetWorkbook從服務器端獲取Excel工作薄,將其以byte數組的形式返回。該方法包含3個參數。想必大家對參數sessionID和status的用法比較熟悉了,這里我著重講解以下WrokbookType的含義。
WorkbookType是一個枚舉類型:

 

復制代碼
代碼如下:

public enum WorkbookType
{
FullWorkbook,

FullSnapshot,

PublishedItemsSnapshot,
}

 

FullWorkbook功能最強大,可以獲得服務器上完整的工作?。ㄋ械膕heet)
FullSnapshot和FullWorkbook類似,也可以獲得完整的工作薄快照
PublishedItemsSnapshot功能最弱,只能獲得作者允許查看的的工作薄的快照(還記得上一篇文章里提到的”ExcelService選項”嗎)
 看到這里,大家可能有點疑惑:只要設置了FullWorkbook或FullSnapshot就可以獲得完整的工作薄,那作者在發布Excel時進行的工作不就沒用了嗎?呵呵,實際上并不是任何人(或者說任何情況下)都可以使用FullWorkbook/FullSnapshot的。記得之前我提到的“憑證”嗎? 只有提供了足夠的權限的憑證才可以使用。
再來說說“完整工作薄”和“快照”的區別??梢詫⒖煺绽斫鉃榍罢叩淖蛹?。但快照不能使用創建者在工作薄中輸入的公式,并且不能使用外部數據連接。
 Ok,GetWorkbook方法介紹完畢,看一下程序代碼。

 

復制代碼
代碼如下:

byte[] content = es.GetWorkbook(sessionID, WorkbookType.PublishedItemsSnapshot, out status);

es.CloseWorkbook(sessionID);

FileStream fs = new FileStream("c://test.xlsx", FileMode.Create);
fs.Write(content, 0, content.Length);
fs.Flush();
fs.Close();

 

   現在,程序的整體功能已經完成了。希望能對大家有所幫助。
    我只介紹了Excel Web Service的基本使用方法,本想在程序里添加更多的功能,全面介紹一下Excel Web Service中的方法。但我實在不知道如何表達出來:(  我將在一篇文章中為大家介紹user-defined functions (UDFs). 再次感謝大家瀏覽。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲精品视频免费在线观看| 久久精品久久久久| 欧美精品亚州精品| 国产精品91在线观看| 亚洲精品视频在线观看视频| 久久夜色精品亚洲噜噜国产mv| 国产va免费精品高清在线观看| 亚洲一级片在线看| 欧美成人国产va精品日本一级| 欧美国产一区二区三区| 欧美在线亚洲在线| 午夜精品久久久久久久久久久久久| 欧美国产激情18| 欧美最猛性xxxxx亚洲精品| 欧美又大又粗又长| 51午夜精品视频| 91爱视频在线| 久久久精品国产一区二区| 中文字幕国产亚洲2019| 77777少妇光屁股久久一区| 国产在线观看91精品一区| 国产丝袜一区视频在线观看| 九九久久国产精品| 成人在线中文字幕| 国产伦精品一区二区三区精品视频| 亚洲精品456在线播放狼人| 欧美激情国产精品| 在线成人中文字幕| 欧美成人sm免费视频| 国产精品羞羞答答| 韩国美女主播一区| 91po在线观看91精品国产性色| 成人免费视频xnxx.com| 色先锋资源久久综合5566| 国产精品久久久久久久久免费看| 91在线国产电影| 国产精品入口夜色视频大尺度| 国产亚洲精品激情久久| 精品久久久久久中文字幕大豆网| 亚洲字幕在线观看| 久久久久久久久国产精品| 91免费精品视频| 97在线视频免费播放| 欧美色视频日本高清在线观看| 亚洲欧美日韩网| 国产精品福利在线| 欧美性在线视频| 激情久久av一区av二区av三区| 国产精品福利网站| 国产欧美日韩精品丝袜高跟鞋| 成人黄色免费网站在线观看| 精品久久久久久中文字幕一区奶水| 欧美日韩成人网| 久久精品国产一区| 精品美女永久免费视频| 日韩美女免费视频| 7777免费精品视频| 91亚洲精品在线| 精品久久久国产精品999| 国产成人在线视频| 国产欧美日韩综合精品| 久久伊人精品一区二区三区| 日韩精品中文字幕视频在线| 国产成人自拍视频在线观看| 亚洲精品久久视频| 日韩美女毛茸茸| 欧美激情区在线播放| 亚洲综合成人婷婷小说| 91国内精品久久| 国产男人精品视频| 孩xxxx性bbbb欧美| 欧美日韩免费区域视频在线观看| 亚洲国产精久久久久久| 欧美xxxx14xxxxx性爽| 精品成人国产在线观看男人呻吟| 亚洲图片在线综合| 亚洲欧洲免费视频| 欧美日韩一区二区免费视频| 亚洲自拍在线观看| 欧美日韩国产精品| 国产一区二区日韩精品欧美精品| 日韩高清不卡av| 欧美极品少妇全裸体| 日韩精品欧美国产精品忘忧草| 亚洲成人网av| 成人国产在线激情| 91精品国产91久久久久久最新| 欧洲成人在线视频| 久久噜噜噜精品国产亚洲综合| 欧美亚洲另类激情另类| 久久乐国产精品| 九色成人免费视频| 这里只有精品久久| 日本免费在线精品| 狠狠色狠狠色综合日日小说| 国产视频久久久久久久| 在线成人免费网站| 国产精品久久久久久av| 中文字幕亚洲欧美在线| 亚洲国产天堂久久综合| 久久久久久网站| 亚洲第一天堂无码专区| 91精品久久久久久久| 性欧美暴力猛交69hd| 日韩av中文字幕在线免费观看| 久久夜色精品国产欧美乱| 国产精品久久久久久久久免费看| 欧美刺激性大交免费视频| 久久精品视频导航| 91精品国产电影| 欧美激情视频在线| 亚洲国产精品女人久久久| 日本一区二区不卡| 亚洲性生活视频| 91中文字幕在线观看| 欧美激情一区二区三区在线视频观看| 91欧美视频网站| 欧美激情2020午夜免费观看| 亚洲成人精品在线| 国产精品第一区| 国内精品视频一区| 国产精品美乳在线观看| 日韩在线观看你懂的| 国产精品第100页| 深夜福利国产精品| 亚洲欧美中文字幕| 国产精品扒开腿做| 最近2019好看的中文字幕免费| 亚洲品质视频自拍网| 亚洲aa在线观看| 91亚洲精品一区二区| 欧美理论电影在线观看| 久久亚洲精品网站| 91精品在线一区| 亚洲天堂av综合网| 中文字幕av日韩| 日韩www在线| 国产精品99蜜臀久久不卡二区| 中文字幕亚洲天堂| 日韩有码在线电影| 狠狠操狠狠色综合网| 国产丝袜精品视频| 成人中心免费视频| 97视频在线免费观看| 欧美性猛交xxxx黑人| 亚洲精品福利在线观看| 性金发美女69hd大尺寸| 国产欧美精品一区二区| 国产欧美日韩高清| 丰满岳妇乱一区二区三区| 孩xxxx性bbbb欧美| 777777777亚洲妇女| 欧美夫妻性生活xx| 97婷婷大伊香蕉精品视频| 亚洲精品www久久久| 日韩影视在线观看| 精品久久久av| 91精品国产91久久久久久久久| 日本aⅴ大伊香蕉精品视频| 欧美日韩免费区域视频在线观看| 日韩人在线观看| 久久亚洲精品一区二区| 欧美性xxxx极品hd欧美风情| 亚洲第一中文字幕|