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

所属分类: 软件教程 / 编程开发 阅读数: 1716
收藏 0 赞 0 分享

Excel Web Services(以后简称EWS)位于整个Excel Services的前端(可以参考我之前的文章)。它提供了开发Excel的接口。从名字可以看出,EWS也属于WebService的一种,所以我们可以像使用普通的WebService那样使用它。要想调用EWS,先要知道它的地址,这取决于MOSS的设置。假如MOSS的名称为ServerName,那么对应的EWS地址就是: http://<server name>/_vti_bin/ExcelService.asmx .在浏览器中输入EWS地址后您会看到下图:



话不多说,现在进入今天的主题,我将通过一个程序为您演示如何使用EWS.

本次程序依然會使用上一篇文章里创建的Excel文档。程序运行后首先读取SharePoint Server上的Excel工作薄,将A1至B3的单元格内容显示到程序界面;也可以修改文本框中的内容,然后点击“计算”按钮,对应的标签会显示更新结果;或者点击保存,将服务器上的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功能最强大,可以获得服务器上完整的工作薄(所有的sheet)
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). 再次感谢大家浏览。

更多精彩内容其他人还在看

PowerDesigner16.6怎么破解?SAP PowerDesigner16.6安装破解详细图文教程

PowerDesigner是一款来自国外的数据库建模工具,最近,很多网友问小编PowerDesigner16.6怎么破解?今天脚本之家小编就给大家带来SAP PowerDesigner16.6安装破解详细图文教程,希望对大家有所帮助
收藏 0 赞 0 分享

WebStorm 2017.3最新汉化激活破解及安装教程(附汉化包+原版下载)

WebStorm 2017中文破解版是一款JavaScript开发工具,是最强大的HTML5编辑器以及最智能的JavaSscript IDE,下面就整理WebStorm 2017.3最新汉化破解教程,并附有汉化包及官方原版程序下载地址
收藏 0 赞 0 分享

PhpStorm 10.0.2怎么激活?PhpStorm 10.0.2激活破解图文教程(附注册码)

PhpStorm 10.0.2怎么激活?对于新手来说最头痛的问题还是激活和使破解的问题,今天脚本之家小编就给大家带来PhpStorm 10.0.2激活破解图文教程(附注册码),希望对大家有所帮助
收藏 0 赞 0 分享

Toad for Oracle 2017完整破解版安装教程(附注册码) 64位

Toad for oracle 2017是一款功能强大的数据库管理软件,支持敏捷数据库开发工作,是一个功能强大、结构紧凑的专业化PL/SQL开发环境,本文提供最新版的Toad for Oracle 2017详细的安装步骤,以及软件下载地址和注册码
收藏 0 赞 0 分享

Aqua Data Studio 18汉化安装破解教程(附DateStopper破解下载)

Aqua Data Studio18中文版是一套完整IDE的数据库开发工具,新版对其通用数据库管理和分析软件的一次重大升级,下面就带来了Aqua Data Studio18最新版详细安装步骤,以及破解方法,仅供参考
收藏 0 赞 0 分享

informatica powercenter 9.x安装与配置图文详细教程(适应于Windows系统)

informatica powercenter是一款使用相当广泛的数据集成平台(ETL工具),本文主要针对目前还不会安装与配置informatica powercenter 9.x程序的朋友们,来图文详细介绍informatica powercenter 9.x安装与配置教程,并
收藏 0 赞 0 分享

Myeclipse 2017 CI8汉化破解教程(附注册激活码)

MyEclipse可用于用户所有的UML, AJAX, Web, Web Services, J2EE, JSP, XML, Struts, JSF, Java Persistence, EJB,扩展数据库支持以及应用程序服务器集成需求,那么Myeclipse 2017 CI8怎
收藏 0 赞 0 分享

CoolFormat 源代码格式化工具使用帮助手册

CoolFormat源代码格式化是一款C\C++\C#\CSS\HTML\Java\JavaScript\JSON\Objective-C\PHP\SQL\XML代码格式化工具。软件可以快速多种风格格式化,并对语言进行着色。界面采用Office 2010风格,并有多种样式可以替换
收藏 0 赞 0 分享

Sublime Text 3怎么设配置浏览默认路径为localhost?

Sublime Text 3怎么设置浏览器打开就是localhost路径?Sublime Text 3编辑程序的时候,需要对代码进行预览,该怎么制定配置浏览器默认的浏览路径为localhost呢?下面我们就来看看详细的教程,需要的朋友可以参考下
收藏 0 赞 0 分享

Visual Studio窗口界面显示黑色很多功能消失了怎么办?

Visual Studio窗口界面显示黑色很多功能消失了怎么办?Visual Studio打开以后,窗口变成黑色的了,新建文件的时候,发现工具栏中少了很多功能,该怎么办呢?下面我们就来看看详细的解决办法,需要的朋友可以参考下
收藏 0 赞 0 分享
查看更多