Partager via


Procédure : définir des valeurs de plages

Services Web Excel expose quatre méthodes pour définir des valeurs dans un classeur Excel : SetCell, SetCellA1, SetRange et SetRangeA1.

Notes

Lorsque vous apportez des modifications à un classeur, en définissant par exemple des valeurs dans une plage à l'aide d'Services Web Excel, ces modifications ne sont conservées que pendant la session en cours. Elles ne sont ni enregistrées, ni conservées dans le classeur d'origine. Lorsque la session en cours se termine (lorsque vous appelez la méthode CloseWorkbook ou lorsque le délai de la session a expiré), vos modifications sont perdues.

Si vous souhaitez enregistrer les modifications apportées à un classeur, vous pouvez utiliser la méthode GetWorkbook puis enregistrer le classeur à l'aide de l'API de l'emplacement de stockage de fichiers de destination. Pour plus d'informations, voir Procédure : obtenir un classeur entier ou une capture instantanée et Procédure : enregistrer un classeur.

Utilisez les méthodes SetCell et SetCellA1 pour définir des valeurs dans une seule cellule. Si vous essayez de définir des valeurs dans une plage de cellules, en transmettant une référence de plage telle que « D3:G5 » ou une plage nommée plus grande qu'une seule cellule, l'appel de ces méthodes échoue. Ayez plutôt recours aux méthodes SetRange et SetRangeA1 pour définir des valeurs dans une plage de cellules.

Les méthodes dotées du suffixe A1 (SetCellA1 et SetRangeA1) utilisent un système de coordonnées différent de celles qui n'en sont pas dotées (SetCell et SetRange). Si vous souhaitez utiliser des références de cellules de type Excel, telles que des références de plages (H8, A3:D5 ou Feuil2!A12:G18, par exemple) ou des plages nommées, vous devez utiliser les méthodes dotées du suffixe A1, car elles permettent de transmettre le nom d'une feuille de calcul et d'une plage.

Si vous souhaitez accéder à une plage Excel à l'aide d'un système de coordonnées numérique, vous devez utiliser les méthodes qui ne sont pas dotées du suffixe A1. Il est plus facile d'utiliser des coordonnées de plage lorsque du code répète un ensemble de cellules dans une boucle ou lorsque les coordonnées de plage sont calculées automatiquement dans l'algorithme.

Les coordonnées de ligne et de colonne d'une cellule sont en base 0. « 0,0 » retourne par conséquent la cellule A1, comme dans l'exemple suivant :

// Call the SetCell method to set a value, 8, into a cell.
// The cell is in the first row and first column; that is, cell A1.
xlservice.SetCell(sessionId, sheetName, 0, 0, 8);

Si vous souhaitez récupérer des valeurs de plusieurs cellules adjacentes, envisagez d'utiliser la méthode SetRange plutôt que d'appeler la méthode SetCell plusieurs fois. Vous réduisez ainsi le nombre d'aller-retours vers le serveur, ce qui permet d'améliorer sensiblement les performances.

Lors de la définition de valeurs dans une plage de cellules à l'aide des méthodes SetRange et SetRangeA1, vous utilisez un tableau d'objets (object[] en C#, et Object () en Visual Basic .NET). Ce tableau d'objets est en fait un tableau en escalier ; chaque entrée du tableau correspond à un autre tableau d'objets représentant les cellules. Pour plus d'informations sur les tableaux en escalier, voir la rubrique Tableaux en escalier (Guide de programmation C#) (https://msdn2.microsoft.com/fr-fr/library/2s05feca.aspx).

Pour définir des valeurs à l'aide des méthodes SetCell et SetRange

  1. Utilisez la méthode SetCell pour définir une valeur dans une cellule du classeur ouvert à l'aide des coordonnées de plage numériques :

    // Instantiate the Web service and make a status array object.
    ExcelService xlservice = new ExcelService();
    Status[] outStatus;
    RangeCoordinates rangeCoordinates = new RangeCoordinates();
    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 SetCell method to set the cell's value to 28.
    // The cell is in the ninth row and second column, which is cell B9.
    xlservice.SetCell(sessionId, sheetName, 8, 1, 28);
    
  2. Utilisez la méthode SetRange pour définir des valeurs dans une plage du classeur ouvert à l'aide des coordonnées de plage numériques :

    // Instantiate the Web service and make a status array object.
    ExcelService xlservice = new ExcelService();
    Status[] outStatus;
    RangeCoordinates rangeCoordinates = new RangeCoordinates();
    
    ...
    private void Form1_Load(object sender, EventArgs e)
    {
    ...
    ...
    //Prepare object to define range coordinates
    //and call the GetRange method.
    //startCol, startRow, startHeight, and startWidth
    //get their values from user input.
    rangeCoordinates.Column = (int)startCol.Value;
    rangeCoordinates.Row = (int)startRow.Value;
    rangeCoordinates.Height = (int)startHeight.Value;
    rangeCoordinates.Width = (int)startWidth.Value;
    ...
    ...
    }
    private void SetRangeButton_Click(object sender, EventArgs e)
    {
    object[] values = new object[rangeCoordinates.Height];
    string[] fieldValues =    
        SetRangeTextBox.Text.Split((",").ToCharArray());
    
    if (fieldValues.Length != rangeCoordinates.Height * 
    rangeCoordinate.Width)
        {
            throw new Exception("The number of inputs (" + 
                fieldValues.Length + ") does not match" +
                " the product of Height (" +             rangeCoordinates.Height + ") and Width (" + 
                rangeCoordinates.Width + ")");
        }
    
    for (int i = 0; i < rangeCoordinates.Height; i++)
        {
            object[] currentRow = 
                new object[rangeCoordinates.Width];
            for (int j = 0; j < rangeCoordinates.Width; j++)
            {
                currentRow[j] = fieldValues[i *             rangeCoordinates.Width + j];
            }
            values[i] = currentRow;
        }
    
    SetStatusText("Waiting for SetRange...");
    outStatus = xlservice.SetRange(
        sessionID, SheetNameTextBox.Text, 
        rangeCoordinates, values);
    }
    catch (SoapException exc)
    {
    StopTimer("SetRange");
    GenerateErrorMessage("SetRange", exc);
    }
    catch (Exception exc)
    {
    StopTimer("SetRange");
    GenerateToolErrorMessage("While calling SetRange", exc);
    }
    }
    

Pour définir des valeurs à l'aide des méthodes SetCellA1 et SetRangeA1

  1. Utilisez la méthode SetCellA1 pour définir une valeur dans une cellule du classeur ouvert à l'aide de la spécification de plage « A1 » d'Exel :

    // Instantiate the Web service and make a status array object.
    ExcelService xlservice = new ExcelService();
    Status[] outStatus;
    
    xlservice.SetCellA1(sessionId, String.Empty, "InterestRateParam", 8);
    
  2. Utilisez la méthode SetRangeA1 pour récupérer une valeur d'une plage du classeur ouvert à l'aide de la spécification de plage « A1 » d'Exel :

    // Instantiate the Web service and make a status array object.
    ExcelService xlservice = new ExcelService();
    Status[] outStatus;
    ...
    
    void SetRangeA1Button_ServerClick(object sender, EventArgs e)
    {
        int height, width;
        CalculateHeightAndWidth(RangeNameTextBox5.Value.Trim(), 
            out height, out width);
    
        object[] values = new object[height];
        string[] fieldValues = 
            RangeValuesTextBox1.Value.Split((",").ToCharArray());
        if (fieldValues.Length != height * width)
        {
            throw new Exception("The number of inputs (" + 
                fieldValues.Length + ") does not match" +
                " the product of Height (" + height + ") and 
                Width (" + width + ")");
        }
    
        for (int i = 0; i < height; i++)
        {
            object[] currentRow = new object[width];
            for (int j = 0; j < width; j++)
            {
                currentRow[j] = fieldValues[i * width + j];
            }
            values[i] = currentRow;
        }
        try
        {
            xlservice.SetRangeA1(SessionIDTextBox.Value, 
                SheetNameTextBox1.Value,RangeNameTextBox5.Value,
                values, out outStatus);
        }
        catch (SoapException exc)
        {
            ExceptionTextBox1.Value = exc.Message;
        }
    
    }
    

Voir aussi

Autres ressources

Procédure : spécifier une plage d'adresses et un nom de feuille
Procédure : obtenir des valeurs de plages
Procédure pas à pas : développement d'une application personnalisée à l'aide des services Web Excel
Accès à l'API SOAP
Procédure : approuver les emplacements des classeurs à l'aide de scripts