亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

  發(fā)布時間:2015-12-29 23:08:11   作者:佚名   我要評論
Excel Web Services(以后簡稱EWS)位于整個Excel Services的前端它提供了開發(fā)Excel的接口。從名字可以看出,EWS也屬于WebService的一種,所以我們可以像使用普通的WebService那樣使用它

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



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

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



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

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

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

  首先將其實例化

ExcelService es=new ExcelService();

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

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

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

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

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


復制代碼
代碼如下:

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

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

復制代碼
代碼如下:

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)。該方法的函數(shù)聲明如下
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方法。其原因可以從上文中聯(lián)想到:Excel Calculation Service負責維護會話,這樣可以保證多個用戶使用Excel Calculation Service時不會相互影響。所以關閉了工作薄會導致會話也被關閉,之前在會話中對Excel所作的操作也將丟失… 所以,保存操作要在關閉會話前完成。
現(xiàn)在看一下獲取Excel工作薄的方法:
byte[] GetWorkbook(string sessionID,WorkbookType workbookType,out Status[] status)
GetWorkbook從服務器端獲取Excel工作薄,將其以byte數(shù)組的形式返回。該方法包含3個參數(shù)。想必大家對參數(shù)sessionID和status的用法比較熟悉了,這里我著重講解以下WrokbookType的含義。
WorkbookType是一個枚舉類型:


復制代碼
代碼如下:

public enum WorkbookType
{
FullWorkbook,

FullSnapshot,

PublishedItemsSnapshot,
}

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

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

相關文章

最新評論