zoukankan      html  css  js  c++  java
  • 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.FullWorkbook WorkbookType.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 ServicesExcel 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

    查看视频

  • 相关阅读:
    SQLPrompt 最新下载和使用方式
    ThinkPHP模板引擎
    Ajax随笔
    php生成mysql数据库dateTime类型时间
    json变量声明
    MYSQLI:mysqli预处理语句
    php网页乱码问题
    详细解读Jquery各Ajax函数:$.get(),$.post(),$.ajax(),$.getJSON()
    PHP给图片添加水印
    php中var关键字用法
  • 原文地址:https://www.cnblogs.com/Sunmoonfire/p/825269.html
Copyright © 2011-2022 走看看