Écriture de données dans un classeur Excel

L’API REST Excel dans Microsoft Graph est un outil simple, indépendant de toute plateforme, qui est utilisé pour charger des informations dans un classeur Excel.

Cet article vous explique comment écrire des jeux de données simples dans un classeur Excel sur trois infrastructures de développement web : ASP.NET, Angular et React. Vous pouvez consulter les exemples de code mentionnés dans cet article en accédant aux Exemples de démarrage Excel Microsoft Graph sur GitHub.

Remarque

Les trois exemples écrivent des données dans un classeur Excel nommé demo.xlsx. Ce classeur vous est fourni pour pouvoir le charger dans votre propre espace OneDrive, mais vous pouvez également utiliser Microsoft Graph pour charger des fichiers dans OneDrive. Si vous souhaitez connaître les appels REST nécessaires pour charger n’importe quel type de fichier dans votre dossier OneDrive racine, consultez l’Exemple de liste de tâches ASP.NET de l’API REST Excel Microsoft Graph.

Les trois exemples de démarrage Excel agissent de la même façon : ils récupèrent le nom et l’adresse de l’utilisateur connecté et ajoutent ces deux types d’information dans une nouvelle ligne du classeur demo.xlsx. Vous pouvez modifier les exemples pour ajouter des lignes supplémentaires en ajoutant simplement des informations au tableau à deux dimensions qui représente la ou les lignes à ajouter.

Ajout d’une ou de plusieurs lignes à un classeur Excel avec une seule requête REST

L’API REST Excel nécessite que vous envoyez le corps d’une requête POST simple dans le point de terminaison REST qui représente la collection de lignes d’un classeur Excel. Si vous travaillez avec un bloc-notes dans le dossier racine du compte OneDrive de l’utilisateur connecté, le point de terminaison REST ressemble à ceci :

https://graph.microsoft.com/v1.0/me/drive/root:/demo.xlsx:/workbook/tables/Table1/rows/add

Pour savoir comment accéder aux fichiers des dossiers OneDrive, consultez l’article Type de ressource DriveItem dans notre documentation de référence.

Remarque

Vous pouvez consulter la collection de lignes existante du classeur en envoyant une requête GET à la partie du chemin d’accès qui se termine à /rows.

Le corps de la requête POST ressemble à ceci :

{
  "index": null,
  "values": [
    ["alex darrow", "adarrow@contoso.com"]
  ]
}

La valeur du premier paramètre index spécifie la position relative de la ligne ajoutée au tableau de lignes avec indice zéro. Les lignes en dessous de la ligne insérée sont déplacées vers le bas. Le paramètre null indique que la nouvelle ligne est ajoutée à la fin.

La valeur du deuxième paramètre values est un tableau de chaînes à deux dimensions qui contient les valeurs non mises en forme de chaque ligne à ajouter. Le tableau de l’exemple contient une seule ligne, mais vous pouvez ajouter d’autres lignes en ajoutant plusieurs tableaux de chaînes.

Vous pouvez tester cette requête avec votre propre compte OneDrive en chargeant le fichier demo.xlsx dans votre dossier racine OneDrive et en exécutant cette requête sur l’Afficheur Microsoft Graph.

C’est tout ce dont vous avez besoin pour écrire des données dans un classeur Excel. En revanche, il est important de savoir comment construire et envoyer la requête dans votre propre infrastructure. Dans les exemples de démarrage Excel, vous trouverez trois manières distinctes de le faire.

Ajout d’une ou de plusieurs lignes à un classeur Excel dans ASP.NET

Vous trouverez le code ASP.NET qui construit et envoie la requête dans les fichiers GraphResources.cs et GraphService.cs de l’exemple de démarrage Excel Microsoft Graph pour ASP.NET 4.6.

Le fichier GraphResources.cs fournit une classe d’assistance qui encapsule les données des utilisateurs extraites de Microsoft Graph et le corps de la requête à utiliser quand vous écrivez des données dans votre classeur.

public class UserInfo
{
    public string Name { get; set; }
    public string Address { get; set; }

}

public class UserInfoRequest
{
    public string index { get; set; }
    public string[][] values { get; set; }
}

La classe GraphService.cs contient une méthode AddInfoToExcel qui remplit ces classes, sérialise la demande d’informations dans un objet JSON, puis transmet cet objet dans le corps de la requête POST.

public async Task<string> AddInfoToExcel(string accessToken, string name, string address)
{
    string endpoint = "https://graph.microsoft.com/v1.0/me/drive/root:/demo.xlsx:/workbook/tables/Table1/rows/add";
    using (var client = new HttpClient())
    {
        using (var request = new HttpRequestMessage(HttpMethod.Post, endpoint))
        {
            // Populate UserInfoRequest object
            string[] userInfo = { name, address  };
            string[][] userInfoArray = { userInfo };
            UserInfoRequest userInfoRequest = new UserInfoRequest();
            userInfoRequest.index = null;
            userInfoRequest.values = userInfoArray;

            // Serialize the information in the UserInfoRequest object
            string jsonBody = JsonConvert.SerializeObject(userInfoRequest);
            request.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
            request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", accessToken);
            request.Content = new StringContent(jsonBody, Encoding.UTF8, "application/json");

            using (var response = await client.SendAsync(request))
            {
                if (response.IsSuccessStatusCode)
                {
                    return Resource.Graph_UploadToExcel_Success_Result;
                }
                return response.ReasonPhrase;
            }
        }
    }
}

Ajout d’une ou de plusieurs lignes à un classeur Excel dans Angular

Vous trouverez le code Angular qui construit et envoie la requête dans le fichier home.service.ts de l’exemple de démarrage Excel Microsoft Graph pour Angular.

Comme cet exemple utilise TypeScript, il tire parti de la bibliothèque cliente JavaScript Microsoft Graph et des types TypeScript Microsoft Graph.

La fonction addInfoToExcel dans le fichier home.service.ts construit le tableau de chaînes à deux dimensions et le corps de la requête contenant le tableau. Il utilise ensuite la bibliothèque cliente JavaScript Microsoft Graph pour construire et envoyer la requête. La réponse revient sous la forme d’une promesse.

addInfoToExcel(user: MicrosoftGraph.User) {
  const userInfo = [];
  const userEmail = user.mail || user.userPrincipalName;
  userInfo.push([user.displayName, userEmail]);

  const userInfoRequestBody = {
    index: null,
    values: userInfo
  };

  const body = JSON.stringify(userInfoRequestBody);

  var client = this.getClient();
  var url = `${this.url}/me/drive/root:/${this.file}:/workbook/tables/${this.table}/rows/add`
  return Observable.fromPromise(client
  .api(url)
  .post(body)
  );
}

Ajout d’une ou de plusieurs lignes à un classeur Excel dans React

Vous trouverez le code qui construit et envoie la requête dans le fichier home.js de l’exemple de démarrage Excel Microsoft Graph pour React.

La fonction onWriteToExcel construit le tableau de chaînes à deux dimensions et le transmet dans le corps de la requête. Il utilise axios pour construire la requête HTTP.

onWriteToExcel() {
  const { token, me } = this.state;

  const myEmailAddress = me.mail || me.userPrincipalName;
  const values = [];

  values.push([me.displayName, myEmailAddress]);

  axios
    .post('https://graph.microsoft.com/v1.0/me/drive/root:/demo.xlsx:/workbook/tables/Table1/rows/add',
      { index: null, values },
      { headers: { Authorization: `Bearer ${token}` }}
    )
    .then(res => {
                    console.log(res);
                    const successMessage = "Successfully wrote your data to demo.xlsx!";
                    this.setState ({ successMessage });
                    })
    .catch(err => console.error(err));
}