Поделиться через


Практическое руководство. Получение значений из диапазонов

Дата последнего изменения: 2 августа 2010 г.

Применимо к: SharePoint Server 2010

Веб-службы Excel обеспечивают четыре метода получения значений из книги Excel: GetCell, GetCellA1, GetRange и GetRangeA1.

Методы GetCell и GetCellA1 возвращают значение отдельной ячейки. При попытке запросить несколько ячеек, например предъявив ссылку на диапазон, такой как "B1:E2", или именованный диапазон, превышающий отдельную ячейку, и т. д., произойдет сбой вызова метода. Для получения значений из диапазона ячеек необходимо использовать методы GetRange и GetRangeA1.

Методы, имеющие суффикс A1 (GetCellA1 и GetRangeA1), используют систему координат, отличную от той, что используют методы, не имеющие этого суффикса (GetCell и GetRange). Если требуется использовать ссылки на ячейки типа Excel, такие как ссылки на диапазоны (например, H8, A3:D5, Sheet2!A12:G18) или именованные диапазоны, необходимо использовать методы с суффиксом A1. Такие методы позволяют предъявлять нужные имя листа и адрес диапазона. В большинстве случаев предпочтительнее использовать именованные диапазоны, а не ссылки Excel для обеспечения абстракции.

Если требуется получить доступ к диапазону ячеек Excel, используя числовую систему координат, необходимо использовать методы, не имеющие суффикса A1. Гораздо проще использовать координаты диапазона при наличии кода, который выполняет циклический перебор набора ячеек, или при динамическом вычислении координат диапазона в составе алгоритма.

Координаты строки и столбца ячейки отсчитываются от нуля. Таким образом, координата "0,0" возвращает ячейку A1, как в этом примере:

// Call the GetCell method to retrieve a value from a cell.
// The cell is in the first row and first column; that is, cell A1
object[] rangeResult2 = xlservice.GetCell(sessionId, sheetName, 0, 0, true, out outStatus);
' Call the GetCell method to retrieve a value from a cell.
' The cell is in the first row and first column; that is, cell A1
Dim rangeResult2() As Object = xlservice.GetCell(sessionId, sheetName, 0, 0, True, outStatus)

При получении значений из нескольких смежных ячеек можно воспользоваться методом GetRange вместо выполнения нескольких вызовов метода GetCell. В этом случае выполняется один циклический обмен пакетами с сервером вместо нескольких. Поэтому в некоторых случаях благодаря использованию метода GetRange вместо метода GetCell можно добиться значительного повышения производительности.

При получении диапазона ячеек с помощью методов GetRange и GetRangeA1 возвращается массив объектов (object[] в C# и Object () в Visual Basic .NET). Массив объектов фактически является массивом массивов. Каждая запись в возвращаемом массиве будет представлять собой другой массив объектов, представляющий ячейки. Дополнительные сведения о массивах массивов см. в статье Массивы массивов (руководство по программированию на C#) (https://msdn.microsoft.com/ru-ru/library/2s05feca.aspx).

Получение значений с помощью методов GetCell и GetRange

  1. Метод GetCell используется для получения значения из ячейки в открытой книге на основе числовой системы координат, например:

    // Instantiate the Web service and make a status array object.
    ExcelService xlservice = new ExcelService();
    Status[] outStatus;
    string sheetName = "Sheet2";
    
    // Set the path to a workbook.
    // The workbook must be in a trusted location.
    string targetWorkbookPath = "http://myserver02/example/Shared%20Documents/Book1.xlsx";
    
    // Set credentials for requests.
    xlservice.Credentials = System.Net.CredentialCache.DefaultCredentials;
    
    // Call the open workbook, and point to the trusted 
    // location of the workbook to open.
    string sessionId = xlservice.OpenWorkbook(targetWorkbookPath, "en-US", "en-US", out outStatus);
    
    // Call the GetCell method to retrieve a value from a cell.
    // The cell is in the first row and ninth column.
    object[] rangeResult2 = xlservice.GetCell(sessionId, sheetName, 0, 8, false, out outStatus);
    
    ' Instantiate the Web service and make a status array object.
    Dim xlservice As New ExcelService()
    Dim outStatus() As Status
    Dim sheetName As String = "Sheet2"
    
    ' Set the path to a workbook.
    ' The workbook must be in a trusted location.
    Dim targetWorkbookPath As String = "http://myserver02/example/Shared%20Documents/Book1.xlsx"
    
    ' Set credentials for requests.
    xlservice.Credentials = System.Net.CredentialCache.DefaultCredentials
    
    ' Call the open workbook, and point to the trusted 
    ' location of the workbook to open.
    Dim sessionId As String = xlservice.OpenWorkbook(targetWorkbookPath, "en-US", "en-US", outStatus)
    
    ' Call the GetCell method to retrieve a value from a cell.
    ' The cell is in the first row and ninth column.
    Dim rangeResult2() As Object = xlservice.GetCell(sessionId, sheetName, 0, 8, False, outStatus)
    
  2. Метод GetRange используется для получения значений из диапазона ячеек в открытой книге на основе числовой системы координат:

    // Instantiate the Web service and make a status array object.
    ExcelService xlservice = new ExcelService();
    Status[] outStatus;
    RangeCoordinates rangeCoordinates = new RangeCoordinates();
    string sheetName = "Sheet1";
    ...
    // Prepare object to define range coordinates
    // and call the GetRange method.
    // startCol, startRow, startHeight, and startWidth
    // get their value from user input.
    rangeCoordinates.Column = (int)startCol.Value;
    rangeCoordinates.Row = (int)startRow.Value;
    rangeCoordinates.Height = (int)startHeight.Value;
    rangeCoordinates.Width = (int)startWidth.Value;
    ...
    object[] rangeResult1s = xlservice.GetRange(sessionId, sheetName, rangeCoordinates, false, out outStatus);
    foreach (object[] x in rangeResult1s)
    {
        foreach (object y in x)
        {
            Console.WriteLine(String.Format("{0}",  y));
        }
    }
    
    ' Instantiate the Web service and make a status array object.
    Dim xlservice As New ExcelService()
    Dim outStatus() As Status
    Dim rangeCoordinates As New RangeCoordinates()
    Dim sheetName As String = "Sheet1"
    ...
    ' Prepare object to define range coordinates
    ' and call the GetRange method.
    ' startCol, startRow, startHeight, and startWidth
    ' get their value from user input.
    rangeCoordinates.Column = CInt(Fix(startCol.Value))
    rangeCoordinates.Row = CInt(Fix(startRow.Value))
    rangeCoordinates.Height = CInt(Fix(startHeight.Value))
    rangeCoordinates.Width = CInt(Fix(startWidth.Value))
    ...
    Dim rangeResult1s() As Object = xlservice.GetRange(sessionId, sheetName, rangeCoordinates, False, outStatus)
    For Each x As Object() In rangeResult1s
        For Each y As Object In x
            Console.WriteLine(String.Format("{0}", y))
        Next y
    Next x
    

Получение значений с помощью методов GetCellA1 и GetRangeA1

  1. Метод GetCellA1 используется для получения значения из ячейки в открытой книге с помощью спецификации диапазона Excel "A1", например:

    // Instantiate the Web service and make a status array object.
    ExcelService xlservice = new ExcelService();
    Status[] outStatus;
    string sheetName = "Sheet2";
    
    object[] rangeResult = xlservice.GetCellA1(sessionId, sheetName, "MonthlyPayment", true, out outStatus);
    
    ' Instantiate the Web service and make a status array object.
    Dim xlservice As New ExcelService()
    Dim outStatus() As Status
    Dim sheetName As String = "Sheet2"
    
    Dim rangeResult() As Object = xlservice.GetCellA1(sessionId, sheetName, "MonthlyPayment", True, outStatus)
    
  2. Метод GetRangeA1 используется для получения значения из диапазона ячеек в открытой книге с помощью спецификации диапазона Excel "A1". Следующий пример кода запрашивает диапазон 2 x 3, то есть две строки на три столбца. Затем код циклически переходит по каждой возвращенной строке и получает три ячейки, которые содержатся в каждой строке. То есть при первом переходе:

    • rangeResult [0] возвращает значение в ячейке B2,

    • rangeResult [1] возвращает значение в ячейке C2,

    • rangeResult [2] возвращает значение в ячейке D2.

      Во втором переходе:

    • rangeResult [0] возвращает значение в ячейке B3,

    • rangeResult [1] возвращает значение в ячейке C3,

    • rangeResult [2] возвращает значение в ячейке D3.

    object[] rangeResults = xlservice.GetRangeA1(sessionId, "Sheet1", "B2:D3", true, out outStatus);
    foreach (object[] rangeResult in rangeResults)
    {
        Console.WriteLine(String.Format("{0} | {1} | {2}", 
            rangeResult[0], rangeResult[1], rangeResult[2]));
    }
    
    Dim rangeResults() As Object = xlservice.GetRangeA1(sessionId, "Sheet1", "B2:D3", True, outStatus)
    For Each rangeResult As Object() In rangeResults
        Console.WriteLine(String.Format("{0} | {1} | {2}", rangeResult(0), rangeResult(1), rangeResult(2)))
    Next rangeResult
    

См. также

Задачи

Установка адреса диапазона и имени листа

Практическое руководство. Задание значений для диапазонов

Пошаговое руководство. Разработка настраиваемого приложения с помощью веб-служб Excel

Концепции

Доступ к API-интерфейсу SOAP