Получение рабочей книги целиком или ее снимка
Дата последнего изменения: 24 марта 2010 г.
Применимо к: SharePoint Server 2010
В этом примере показано получение рабочей книги целиком, а также снимка всего файла, снимка доступных для просмотра листов или снимка объектов в файле с помощью веб-служб Excel. Получение рабочей книги или снимка обычно выполняется для копирования актуальной книги, сохранения ее в другом месте, отправки другому пользователю и т. д.
Снимок представляет собой рабочую книгу, созданную с помощью служб вычислений Excel, которая представляет текущее состояние книги в сеансе служб Excel. Некоторые снимки (называются "снимки опубликованных элементов") содержат только те компоненты файла Excel, которые определены автором как доступные для просмотра при сохранении файла на сервер. В снимках сохраняются структура, формат исходного файла и актуальные значения, рассчитанные с помощью служб вычислений Excel, однако отсутствуют формулы Excel и подключения к внешним данным. В службах Excel открывается файл Excel на сервере, обновляются источники данных и рассчитываются все формулы Excel. При запросе снимка пользователем или приложением службыExcel создают и отправляют его с использованием API-интерфейса веб-службы.
Снимок рабочей книги, сохраненный ранее на сервере, можно получить даже в том случае, если отсутствуют права на доступ к исходному файлу на сервере.
Для получения снимка рабочей книги целиком или любого из видов снимков используется метод GetWorkbook веб-службы. Например, в следующем коде возвращается снимок рабочей книги Excel целиком. В этом примере перечисление WorkbookType.FullSnapshot используется в качестве второго аргумента метода GetWorkbook.
byte[] workbook = xlService.GetWorkbook(sessionId, WorkbookType.FullSnapshot, out status);
Dim workbook() As Byte = xlService.GetWorkbook(sessionId, WorkbookType.FullSnapshot, status)
Метод GetWorkbook возвращает массив байтов в формате Excel, соответствующем формату файла, загруженного в сеанс.
Чтобы получить снимок компонентов рабочей книги Excel, которые определены автором как доступные для просмотра при сохранении книги на сервере, воспользуйтесь перечислением WorkbookType.PublishedItemsSnapshot, как показано ниже:
byte[] workbook = xlService.GetWorkbook(sessionId, WorkbookType.PublishedItemsSnapshot, out status);
Dim workbook() As Byte = xlService.GetWorkbook(sessionId, WorkbookType.FullSnapshot, status)
Чтобы получить снимок рабочей книги целиком в ее текущем состоянии в сеансе, воспользуйтесь перечислением WorkbookType.FullWorkbook:
byte[] workbook = xlService.GetWorkbook(sessionId, WorkbookType.FullWorkbook, out status);
Dim workbook() As Byte = xlService.GetWorkbook(sessionId, WorkbookType.FullWorkbook, status)
Параметр WorkbookType.FullWorkbook работает только при наличии у пользователя прав на открытие файла. Если пользователю назначены только права на просмотр файла, вызов завершается сбоем.
В некоторых случаях в коде требуется сохранить результаты вызова метода GetWorkbook . Сведения о сохранении рабочей книги см. в примере How to: Save a Workbook.
Дополнительные сведения о методе GetWorkbook и перечислении WorkbookType см. в справочной документации по веб-службам Excel.
Пример
В следующей программе (консольное приложение) получается один аргумент командной строки, который задает путь к рабочей книге на сервере. В этой программе вызывается веб-служба для открытия книги на сервере и получения снимка. После этого осуществляется запись в стандартное расположение вывода с возможностью последующего перенаправления в новый файл снимка.
using System;
using System.IO;
using System.Text;
using System.Web.Services.Protocols;
// TODO: Change the using GetSnapshot.myServer02 statement
// to point to the Web service you are referencing.
using GetSnapshot.myServer02;
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.
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);
}
}
}
}
Imports System
Imports System.IO
Imports System.Text
Imports System.Web.Services.Protocols
' TODO: Change the using GetSnapshot.myServer02 statement
' to point to the Web service you are referencing.
Imports GetSnapshot.myServer02
Namespace GetSnapshot
Friend Class ExcelServicesSnapshot
Shared Sub Main(ByVal args() As String)
Try
If args.Length < 1 Then
Console.Error.WriteLine("Command line arguments should be: GetSnapshot [workbook_path] > [snapshot_filename]")
Return
End If
' Instantiate the Web service and
' create a status array object.
Dim xlService As New ExcelService()
Dim status() As 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.
Dim sessionId As String = xlService.OpenWorkbook(args(0), "en-US", "en-US", status)
Dim workbook() As Byte = xlService.GetWorkbook(sessionId, WorkbookType.PublishedItemsSnapshot, 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.
status = xlService.CloseWorkbook(sessionId)
' Write the resulting Excel file to stdout
' as a binary stream.
Dim binaryWriter As New BinaryWriter(Console.OpenStandardOutput())
binaryWriter.Write(workbook)
binaryWriter.Close()
Catch e As SoapException
Console.WriteLine("SOAP Exception Message: {0}", e.Message)
Catch e As Exception
Console.WriteLine("Exception Message: {0}", e.Message)
End Try
End Sub
End Class
End Namespace
Для запуска приложения GetSnapshot используйте следующие аргументы командной строки:
GetSnapshot.exe [workbook_path] > [snapshot_filename]
Например:
C:\>GetSnapshot.exe http://myServer02/reports/reports/OriginalWorkbook.xlsx > SnapshotCopy.xlsx
В предыдущем примере программа GetSnapshot помещает новый файл в каталог "C:\".
Примечание |
---|
Рабочая книга, для которой требуется создать снимок, должна находиться в надежном расположении. |
Надежное программирование
Убедитесь, что добавлена веб-ссылка на доступный сайт веб-служб Excel. Измените выражение using GetSnapshot.myServer02; таким образом, чтобы оно указывало на соответствующий сайт веб-службы.
См. также
Задачи
Шаг 1. Создание проекта клиента веб-службы
Этап 3. Получение доступа к веб-службе
Этап 4. Построение и тестирование приложения
Пошаговое руководство. Разработка настраиваемого приложения с помощью веб-служб Excel
Инструкции по определению надежного расположения