MSDN Visual系列:从Excel Services获取一个工作簿或快照

  原文: http://msdn2.microsoft.com/en-us/library/bb397370.aspx
 
如果我们要把创作完工作簿文件副本存放在某处,然后发送给某人,那么最好的方式就是使用Excel Web Services。通过Excel Web Services我们可以得到一个工作簿或一个快照。当用户或应用程序请求一个快照时,Excel Services会在服务器端打开Excel文件,刷新数据源,并计算所有Excel公式,最后生成并通过Web服务API发送回一个快照。

下面的例子展示了如何在Excel Web Services中获取:整个工作簿,一个整个文件的快照,或一个文件内某个工作表或对象的可视范围的快照。

在Excel Web Services中用GetWorkbook方法得到整个工作簿或某个类型的快照。


获取快照


下面的代码会返回整个
Excek工作簿的一个快照。其中使用WorkbookType.FullSnapshot枚举作为GetWorkbook方法的第二个参数。

byte [] workbook  =  xlService.GetWorkbook(sessionId, WorkbookType.FullSnapshot, 
out  status);
  GetWorkbook 方法返回一个字节数组,与载入到会话 中的 Excel 文件的格式相同。

获取可视项的一个快照

 如果要获取当保存工作薄到服务器上时Excel工作簿作者所选取的可视区域的一个快照,可以使用WorkbookType.PublishedItemsSnapshot 枚举值。如下:

byte [] workbook  =  xlService.GetWorkbook(sessionId, WorkbookType.PublishedItemsSnapshot, 
out  status);

获取整个工作簿

如果要获取整个工作簿在当前会话状态(session state)下的快照,可以使用WorkbookType.FullWorkbook 枚举值。

byte [] workbook  =  xlService.GetWorkbook(sessionId, WorkbookType.FullWorkbook, 
out  status);

WorkbookType.FullWorkbookWorkbookType.FullSnapshot 选项只有在当前用户具有文件的打开权限是才有效。如果用户是只读权限,调用就会失败。

完整的代码

下面的命令行程序接受一个命令行参数,即服务器上工作簿的路径。程序会调用Web服务打开该工作簿并获取一个快照,然后将其write到标准输出上。这样我们将其重定向到一个新的快照文件。

using  System;
using  System.IO;
using  System.Text;
using  System.Web.Services.Protocols;

//  TODO: Change the using GetSnapshot.ExcelWebService; directive 
//  to point to the Web service you are referencing.
using  
//  GetSnapshot.ExcelWebService;

namespace  GetSnapshot
{
    
class  ExcelServicesSnapshot
    {
        
static   void  Main( string [] args)
        {
            
try
            {
                
if  (args.Length  <   1 )
                {
                    Console.Error.WriteLine(
" Command line arguments should be: 
                    GetSnapshot [workbook_path]  >  [snapshot_filename] " );
                     return ;
                }
                
//  Instantiate the Web service and 
                
//  create a status array object.
                ExcelService xlService  =   new  ExcelService();
                Status[] status;
                
                xlService.Timeout 
=   600000 ;
                
//  Set credentials for requests.
                
//  Use the current user's logon credentials.
                xlService.Credentials  =    
                System.Net.CredentialCache.DefaultCredentials;
                 
                
//  Open the workbook, then call GetWorkbook 
                
//  and close the session.
                 string  sessionId  =  xlService.OpenWorkbook(args[ 0 ], 
                
" en-US " " en-US " out  status);
                
byte [] workbook  =  xlService.GetWorkbook
                (sessionId, WorkbookType.PublishedItemsSnapshot, 
                 
out  status);

                
//  byte[] workbook = xlService.GetWorkbook(sessionId, 
                
//  WorkbookType.FullWorkbook, out status);
                
//  byte[] workbook = xlService.GetWorkbook(sessionId, 
                
//  WorkbookType.FullSnapshot, out status);

                
//  Close the workbook. This also closes the session,     
                
//  proactively releasing resources on the server. 
                status  =  xlService.CloseWorkbook(sessionId);

                
//  Write the resulting Excel file to stdout 
                
//  as a binary stream.
                BinaryWriter binaryWriter  =   new  BinaryWriter
                (Console.OpenStandardOutput());
                binaryWriter.Write(workbook);
                binaryWriter.Close();
            }
            
catch  (SoapException e)
            {
                Console.WriteLine(
" SOAP Exception Message: {0} " , e.Message);
            }
            
catch  (Exception e)
            {
                Console.WriteLine(
" Exception Message: {0} " , e.Message);
            }   
        } 
    }
}


运行

使用下面的命令行和参数执行GetSnapshot 程序:

GetSnapshot.exe [workbook_path]  >  [snapshot_filename]

如:

C: \> GetSnapshot.exe http: // myServer02 / reports / reports / OriginalWorkbook.xlsx  >  SnapshotCopy.xlsx

上面的命令行会通过GetSnapshot工具在C:\目录下创建一个新文件。

注意:我们所用的工作薄必须放在受信任的位置。

说明

确保添加了Excel Web服务的引用,并修改using GetSnapshot.ExcelWebService; 指向到我们引用的Web service站点。

结果会以一个完整的工作簿的形式展现了Excel Services 会话中当前工作簿的状态。Excel Calculation Services会在现有会话打开的工作簿基础上产生成一个工作簿。该工作簿会反映出所有在原先工作簿上此次会话中已发生的变更:输入的参数值,刷新后的外部数据连接,基于参数和外部数据计算出的公式等。这与用户在Excel Web Access中选择Excel中打开后所得到的结果完全相同。

一个快照是一个由Excel Calculation Services生成的工作薄。它用于展现当前状态的一个“报告”或一个“结果”型的东西。它包含了所有我们可以通过浏览器访问Excel Web Access看到的内容,不过它是以工作薄文件的格式提供的。

一些快照(比如之前提到的“published item snapshots”)仅仅包含Excel文件的一部分(作者在保存文件到服务器时选择的可以查看的部分)。这类快照包含了原来文件的布局和格式,最新的Excel Calculation Services计算出的值,但是并不包含Excel公式和外部数据连接。

您可以获得一个您之前保存在服务器上的工作薄的快照,即使您没有访问服务器上相应文件的权限。

在一些情况下,我们会需要将GetWorkbook调用的返回结果保存起来。Excel Web Services是Excel Services的一个前端界面。通常Excel Web Services不会创建,修改或保存文件。它只在会话开始时读取它们。因此,Excel Web Services并没有提供一个保存工作簿的方法。如果要保存一个工作薄,我们一般要使用其他目标文件存储的API。比如:

* 如果我们要将文件存到WSSv3的文档库中,需要使用Windows SharePoint Services 3.0的对象模型或Web服务。

* 如果我们要将Excel 文件存到一个流,一个本地文件,或一个文件共享,需要使用Microsoft .NET Framework 库。

* 如果我们要将Excel 文件存到一个HTTP 位置, 需要使用Web Distributed Authoring and Versioning (WebDAV).
注:WebDAV也叫HTTP/DAV协议或DAV协议。

我们可以使用各种各样的Microsoft .NET Framework库来保存一个工作簿。这里是一个MSDN中的例子:How to: Save a Workbook

查看视频

转载于:https://www.cnblogs.com/Sunmoonfire/archive/2007/07/20/825269.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值