Gewusst wie: Abrufen von Werten aus Bereichen

Letzte Änderung: Montag, 2. August 2010

Gilt für: SharePoint Server 2010

In Excel-Webdienste werden vier Methoden zum Abrufen von Werten aus einer Excel-Arbeitsmappe verfügbar gemacht: GetCell, GetCellA1, GetRange und GetRangeA1.

Die GetCell-Methode und die GetCellA1-Methode geben den Wert einer einzigen Zelle zurück. Wenn Sie versuchen, mehr als eine Zelle anzufordern – z. B. durch Übergeben eines Bereichsverweises wie "B1:E2" oder eines benannten Bereichs, der größer ist als eine Zelle, usw. –, tritt bei dem Methodenaufruf ein Fehler auf. Wenn Sie Werte aus einem Bereich von Zellen abrufen wollen, verwenden Sie stattdessen die GetRange-Methode und die GetRangeA1-Methode.

Methoden mit dem Suffix A1 (GetCellA1 und GetRangeA1) verwenden ein anderes Koordinatensystem als Methoden ohne dieses Suffix (GetCell und GetRange). Wenn Sie Verweise auf Zellen wie in Excel, z. B. Bereichsverweise (etwa H8, A3:D5, Sheet2!A12:G18), oder benannte Bereiche verwenden möchten, sollten Sie die Methoden mit dem Suffix A1 verwenden. Mit diesen Methoden können Sie den Namen eines Blatts und die gewünschte Bereichsadresse übergeben. Aus Gründen der Abstraktion empfiehlt es sich in den meisten Fällen, benannte Bereiche zu verwenden und nicht Verweise wie in Excel.

Wenn anhand eines numerischen Koordinatensystems auf einen Excel-Bereich zugegriffen werden soll, verwenden Sie am besten die Methoden ohne A1-Suffix. Bereichskoordinaten sind die einfachere Variante, wenn Sie Code verwenden, der eine Gruppe von Zellen in einer Schleife durchläuft, oder wenn die Bereichskoordinaten als Teil des Algorithmus dynamisch berechnet werden.

Die Zeilen- und Spaltenkoordinaten einer Zelle sind nullbasiert. Daher gibt "0,0" die Zelle A1 zurück, wie im folgenden Beispiel gezeigt:

// 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)

Wenn Sie Werte aus mehreren aneinander angrenzenden Zellen abrufen, empfiehlt es sich u. U., die GetRange-Methode zu verwenden, anstatt die GetCell-Methode mehrfach aufzurufen. Dadurch ist nur ein einziger Roundtrip zum Server erforderlich und nicht mehrere. Folglich können Sie in manchen Fällen eine spürbare Leistungssteigerung erzielen, wenn Sie statt der GetCell-Methode die GetRange-Methode verwenden.

Beim Abrufen eines Bereichs von Zellen mithilfe der Methoden GetRange und GetRangeA1 wird ein Objektarray zurückgegeben (object[] in C# und Object () in Visual Basic .NET). Das Objektarray ist eigentlich ein verzweigtes Array. Jeder Eintrag in dem zurückgegebenen Array ist ein weiteres Array von Objekten, die die Zellen darstellen. Weitere Informationen zu verzweigten Arrays finden Sie unter Jagged Arrays (C# Programming Guide) (https://msdn.microsoft.com/de-de/library/2s05feca.aspx).

So rufen Sie Werte mithilfe der "GetCell"- und der "GetRange"-Methode ab

  1. Verwenden Sie die GetCell-Methode, um einen Wert aus einer Zelle in der offenen Arbeitsmappe anhand von numerischen Bereichskoordinaten abzurufen, z. B. so:

    // 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. Verwenden Sie die GetRange-Methode, um Werte aus einem Bereich in der offenen Arbeitsmappe anhand von numerischen Bereichskoordinaten abzurufen.

    // 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
    

So rufen Sie Werte mithilfe der "GetCellA1"- und der "GetRangeA1"-Methode ab

  1. Verwenden Sie die GetCellA1-Methode, um einen Wert aus einer Zelle in der offenen Arbeitsmappe anhand der "A1"-Bereichsspezifikation von Excel abzurufen, z. B. so:

    // 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. Verwenden Sie die GetRangeA1-Methode, um einen Wert aus einem Bereich in der offenen Arbeitsmappe anhand der "A1"-Bereichsspezifikation von Excel abzurufen. Im folgenden Beispiel wird ein Bereich von zwei Zeilen auf drei Spalten (2x3) angefordert. Der Code durchläuft dann jede zurückgegebene Zeile in einer Schleife und ruft die drei Zellen ab, die in jeder Zeile enthalten sind. Das bedeutet in der ersten Iteration:

    • rangeResult [0] gibt den Wert in Zelle B2 zurück

    • rangeResult [1] gibt den Wert in Zelle C2 zurück

    • rangeResult [2] gibt den Wert in Zelle D2 zurück

      In der zweiten Iteration:

    • rangeResult [0] gibt den Wert in Zelle B3 zurück

    • rangeResult [1] gibt den Wert in Zelle C3 zurück

    • rangeResult [2] gibt den Wert in Zelle D3 zurück

    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
    

Siehe auch

Aufgaben

Gewusst wie: Angeben einer Bereichsadresse und eines Blattnamens

Gewusst wie: Festlegen von Werten auf Bereiche

Exemplarische Vorgehensweise: Entwickeln einer benutzerdefinierten Anwendung mithilfe der Excel-Webdienste

Konzepte

Zugreifen auf die SOAP-API