Travailler avec Excel dans Microsoft GraphWorking with Excel in Microsoft Graph

Vous pouvez utiliser Microsoft Graph pour autoriser les applications web et mobiles à lire et modifier des classeurs Excel stockés sur OneDrive Entreprise, sur un site SharePoint ou sur un lecteur de groupe. La ressource Workbook (ou le fichier Excel) contient toutes les autres ressources Excel via des relations. Vous pouvez accéder à un classeur via l’API lecteur en identifiant l’emplacement du fichier dans l’URL. Par exemple :You can use Microsoft Graph to allow web and mobile applications to read and modify Excel workbooks stored in OneDrive for Business, SharePoint site or Group drive. The Workbook (or Excel file) resource contains all the other Excel resources through relationships. You can access a workbook through the Drive API by identifying the location of the file in the URL. For example:

https://graph.microsoft.com/{version}/me/drive/items/{id}/workbook/
https://graph.microsoft.com/{version}/me/drive/root:/{item-path}:/workbook/

Vous pouvez accéder à un ensemble d’objets Excel (tels que Tableau, Plage ou Graphique) en utilisant les API REST standard pour effectuer les opérations Lire, Mettre à jour et Supprimer dans le classeur. Par exemple, GET https://graph.microsoft.com/{version}/me/drive/items/{id}/workbook/worksheetsYou can access a set of Excel objects (such as Table, Range, or Chart) by using standard REST APIs to perform create, read, update, and delete (CRUD) operations on the workbook. For example, GET https://graph.microsoft.com/{version}/me/drive/items/{id}/workbook/worksheets
renvoie une collection d’objets de feuille de calcul qui font partie du classeur.returns a collection of worksheet objects that are part of the workbook.

L’API REST Excel prend en charge uniquement les classeurs au format de fichier Office Open XML. Les classeurs comportant l’extension .xls ne sont pas pris en charge.The Excel REST API supports only Office Open XML file formatted workbooks. The .xls extension workbooks are not supported.

Remarque : la prise en charge des classeurs stockés sur la plateforme client OneDrive n’est toujours pas disponible.Note: Support for workbooks stored in OneDrive Consumer platform is still not available. Pour l’instant, seuls les fichiers stockés sur la plateforme d’entreprise sont pris en charge par les API REST Excel.At this time, only the files stored in business platform is supported by Excel REST APIs.

Autorisation et étenduesAuthorization and scopes

Vous pouvez utiliser le point de terminaison Azure AD version 2 pour authentifier les API Excel.You can use the Azure AD v.2 endpoint to authenticate Excel APIs. Toutes les API nécessitent l’en-tête HTTP Authorization: Bearer {access-token}.All APIs require the Authorization: Bearer {access-token} HTTP header.  

L’une des étendues d’autorisation suivantes est requise pour utiliser la ressource Excel :One of the following permission scopes is required to use the Excel resource:

  • Files.Read (pour les actions de lecture)Files.Read (for read actions)
  • Files.ReadWrite (pour les actions de lecture et d’écriture)Files.ReadWrite (for read and write actions)

Sessions et persistanceSessions and persistence

Les API Excel peuvent être appelées dans l’un des trois modes suivants :Excel APIs can be called in one of three modes:

  1. Session permanente : toutes les modifications apportées au classeur sont conservées (enregistrées).Persistent session - All changes made to the workbook are persisted (saved). Il s’agit du mode de fonctionnement le plus efficace et le plus performant.This is the most efficient and performant mode of operation.
  2. Session non permanente : les modifications apportées par l’API ne sont pas enregistrées à l’emplacement source. À la place, le serveur principal Excel conserve une copie temporaire du fichier qui reflète les modifications apportées au cours de cette session API. Les modifications sont perdues à l’expiration de la session Excel. Ce mode est utile pour les applications qui doivent effectuer une analyse ou obtenir les résultats d’un calcul ou l’image d’un graphique, sans affecter l’état du document.Non-persistent session - Changes made by the API are not saved to the source location. Instead, the Excel backend server keeps a temporary copy of the file that reflects the changes made during that particular API session. When the Excel session expires, the changes are lost. This mode is useful for apps that need to do analysis or obtain the results of a calculation or a chart image, but not affect the document state.
  3. Sans session : l’appel à l’API est effectué sans informations de session.Sessionless - The API call is made without session information. Les serveurs Excel doivent localiser la copie du classeur sur le serveur à chaque fois pour effectuer cette opération. Cette méthode n’est donc pas efficace pour appeler les API Excel.Excel servers have to locate the server's copy of the workbook each time to perform the operation and hence this is not an efficient way for call Excel APIs. Elle convient pour effectuer des demandes ponctuelles.It is suitable for making one off requests.

Pour représenter la session de l’API, utilisez l’en-tête workbook-session-id: {session-id}.To represent the session in the API, use the workbook-session-id: {session-id} header.

Remarque : l’en-tête de la session n’est pas nécessaire pour faire fonctionner une API Excel. Toutefois, nous vous recommandons d’utiliser l’en-tête de session pour obtenir de meilleures performances. Si vous n’utilisez pas un en-tête de session, les modifications apportées pendant l’appel de l’API sont conservées dans le fichier.Note: The session header is not required for an Excel API to work. However, we recommend that you use the session header to improve performance. If you don't use a session header, changes made during the API call are persisted to the file.

Obtention d’une session via l’appel d’une APIAPI call to get a session

DemandeRequest

Transmettez un objet JSON en définissant la valeur persistchanges sur true ou false.Pass a JSON object by setting the persistchanges value to true or false.

POST /{version}/me/drive/items/01CYZLFJGUJ7JHBSZDFZFL25KSZGQTVAUN/workbook/createSession
content-type: Application/Json 
authorization: Bearer {access-token}

{ "persistChanges": true }

Lorsque la valeur persistChanges est défini sur false, une ID de session non permanente est renvoyée.When the value of persistChanges is set to false, a non-persistent session id is returned.

RéponseResponse

HTTP code: 201 Created
content-type: application/json;odata.metadata 

{
  "@odata.context": "https://graph.microsoft.com/{version}/$metadata#microsoft.graph.sessionInfo",
  "id": "{session-id}",
  "persistChanges": true
}

UtilisationUsage

L’ID de la session renvoyée par l’appel précédent est transmise sous forme d’en-tête aux demandes API suivantes dansThe session ID returned from the previous call is passed as a header on subsequent API requests in
l’en-tête HTTP workbook-session-id.workbook-session-id HTTP header.

GET /{version}/me/drive/items/01CYZLFJGUJ7JHBSZDFZFL25KSZGQTVAUN/workbook/worksheets
authorization: Bearer {access-token} 
workbook-session-id: {session-id}

Remarque : si l’ID de session a expiré, un code d’erreur HTTP 404 est renvoyé sur la session.Note: If the session id has expired, a 404 HTTP error code is returned on the session. Dans ce cas, vous pouvez choisir de créer une session et de poursuivre.In such a scenarion, you can choose to create a new session and continue. Vous pouvez également actualiser la session régulièrement pour qu’elle reste active.Another approach would be to refresh the session periodically to keep the session alive. En règle générale, une session permanente expire après environ 7 minutes d’inactivité.Typically the persistent session expires after about 7 minutes of inactivity. Une session non permanente expire après environ 5 minutes d’inactivité.Non persistent session expires after about 5 minutes of inactivity.

Scénarios Excel courantsCommon Excel scenarios

Cette section fournit des exemples des opérations courantes que vous pouvez utiliser sur les objets Excel.This section provides examples of the common operations you can use on Excel objects.

Opérations de feuille de calculWorksheet operations

Répertorier les feuilles de calcul du classeurList worksheets part of the workbook

DemandeRequest

GET /{version}/me/drive/items/01CYZLFJGUJ7JHBSZDFZFL25KSZGQTVAUN/workbook/worksheets
accept: Application/Json 
authorization: Bearer {access-token} 
workbook-session-id: {session-id}

RéponseResponse

HTTP code: 200 OK
content-type: application/json;odata.metadata 

{
  "@odata.context": "https://graph.microsoft.com/{version}/$metadata#users('f6d92604-4b76-4b70-9a4c-93dfbcc054d5')/drive/items('01CYZLFJGUJ7JHBSZDFZFL25KSZGQTVAUN')/workbook/worksheets",
  "value": [
    {
      "@odata.id": "/users('f6d92604-4b76-4b70-9a4c-93dfbcc054d5')/drive/items('01CYZLFJGUJ7JHBSZDFZFL25KSZGQTVAUN')/workbook/worksheets(%27%7B00000000-0001-0000-0000-000000000000%7D%27)",
      "id": "{00000000-0001-0000-0000-000000000000}",
      "name": "Sheet1",
      "position": 0,
      "visibility": "Visible"
    },
    {
      "@odata.id": "/users('f6d92604-4b76-4b70-9a4c-93dfbcc054d5')/drive/items('01CYZLFJGUJ7JHBSZDFZFL25KSZGQTVAUN')/workbook/worksheets(%27%7B00000000-0001-0000-0100-000000000000%7D%27)",
      "id": "{00000000-0001-0000-0100-000000000000}",
      "name": "Sheet57664",
      "position": 1,
      "visibility": "Visible"
    }
  ]
}

Ajouter une nouvelle feuille de calculAdd a new worksheet

POST /{version}/me/drive/items/01CYZLFJGUJ7JHBSZDFZFL25KSZGQTVAUN/workbook/worksheets
content-type: Application/Json 
authorization: Bearer {access-token} 
workbook-session-id: {session-id}

{ "name": "Sheet32243" }

RéponseResponse

HTTP code: 201 Created
content-type: application/json;odata.metadata 

{
  "@odata.context": "https://graph.microsoft.com/{version}/$metadata#users('f6d92604-4b76-4b70-9a4c-93dfbcc054d5')/drive/items('01CYZLFJGUJ7JHBSZDFZFL25KSZGQTVAUN')/workbook/worksheets/$entity",
  "@odata.id": "/users('f6d92604-4b76-4b70-9a4c-93dfbcc054d5')/drive/items('01CYZLFJGUJ7JHBSZDFZFL25KSZGQTVAUN')/workbook/worksheets(%27%7B75A18F35-34AA-4F44-97CC-FDC3C05D9F40%7D%27)",
  "id": "{75A18F35-34AA-4F44-97CC-FDC3C05D9F40}",
  "name": "Sheet32243",
  "position": 5,
  "visibility": "Visible"
}

Obtenir une nouvelle feuille de calculGet a new worksheet

Obtenez une feuille de calcul en fonction du nom.Get a worksheet based on the name.

GET /{version}/me/drive/items/01CYZLFJGUJ7JHBSZDFZFL25KSZGQTVAUN/workbook/worksheets/Sheet32243
content-type: Application/Json 
authorization: Bearer {access-token} 
workbook-session-id: {session-id}

RéponseResponse

HTTP code: 200 OK
content-type: application/json;odata.metadata 

{
  "@odata.context": "https://graph.microsoft.com/{version}/$metadata#users('f6d92604-4b76-4b70-9a4c-93dfbcc054d5')/drive/items('01CYZLFJGUJ7JHBSZDFZFL25KSZGQTVAUN')/workbook/worksheets/$entity",
  "@odata.id": "/users('f6d92604-4b76-4b70-9a4c-93dfbcc054d5')/drive/items('01CYZLFJGUJ7JHBSZDFZFL25KSZGQTVAUN')/workbook/worksheets(%27%7B75A18F35-34AA-4F44-97CC-FDC3C05D9F40%7D%27)",
  "id": "{75A18F35-34AA-4F44-97CC-FDC3C05D9F40}",
  "name": "Sheet32243",
  "position": 5,
  "visibility": "Visible"
}

** Remarque : Les feuilles de calcul peuvent également être récupérées à l’aide de l’ID. Toutefois, l’ID contient actuellement des caractères { et '}' qui doivent être codés pour pouvoir utiliser l’API. Exemple : Pour obtenir une feuille de calcul avec un ID {75A18F35-34AA-4F44-97CC-FDC3C05D9F40}, codez l’ID du chemin d’accès au format /workbook/worksheets/%7B75A18F35-34AA-4F44-97CC-FDC3C05D9F40%7D.** Note: Worksheets can also be retrieved using the ID. However, currently the ID contains { and '}' characters, which needs to be URL encoded for the API to work. Example: In order to get a worksheet with ID of {75A18F35-34AA-4F44-97CC-FDC3C05D9F40}, URL encode the ID in the path as /workbook/worksheets/%7B75A18F35-34AA-4F44-97CC-FDC3C05D9F40%7D.

Supprimer une feuille de calculDelete a worksheet

DemandeRequest

DELETE /{version}/me/drive/items/01CYZLFJGUJ7JHBSZDFZFL25KSZGQTVAUN/workbook/worksheets('%7B75A18F35-34AA-4F44-97CC-FDC3C05D9F40%7D')
content-type: Application/Json 
authorization: Bearer {access-token} 
workbook-session-id: {session-id}

RéponseResponse

HTTP code: 204 No Content

Mettre à jour les propriétés de la feuille de calculUpdate worksheet properties

DemandeRequest

PATCH /{version}/me/drive/items/01CYZLFJGUJ7JHBSZDFZFL25KSZGQTVAUN/workbook/worksheets/SheetA
content-type: Application/Json 
accept: application/Json 
authorization: Bearer {access-token} 
workbook-session-id: {session-id}

{ "name": "SheetA", "position": 3 }

RéponseResponse

HTTP code: 200 OK
content-type: application/json;odata.metadata 

{
  "@odata.context": "https://graph.microsoft.com/{version}/$metadata#users('f6d92604-4b76-4b70-9a4c-93dfbcc054d5')/drive/items('01CYZLFJGUJ7JHBSZDFZFL25KSZGQTVAUN')/workbook/worksheets/$entity",
  "@odata.id": "/users('f6d92604-4b76-4b70-9a4c-93dfbcc054d5')/drive/items('01CYZLFJGUJ7JHBSZDFZFL25KSZGQTVAUN')/workbook/worksheets(%27%7B00000000-0001-0000-0100-000000000000%7D%27)",
  "id": "{00000000-0001-0000-0100-000000000000}",
  "name": "SheetA",
  "position": 3,
  "visibility": "Visible"
}

Opérations de graphiqueChart operations

Répertorier les graphiques qui font partie de la feuille de calculList charts that are part of the worksheet

DemandeRequest

GET /{version}/me/drive/items/01CYZLFJB6K563VVUU2ZC2FJBAHLSZZQXL/workbook/worksheets('%7B00000000-0001-0000-0000-000000000000%7D')/charts
accept: Application/Json 
authorization: Bearer {access-token} 
workbook-session-id: {session-id} 

RéponseResponse

HTTP code: 200 OK
content-type: application/json;odata.metadata 

{
  "@odata.context": "https://graph.microsoft.com/{version}/$metadata#users('f6d92604-4b76-4b70-9a4c-93dfbcc054d5')/drive/items('01CYZLFJB6K563VVUU2ZC2FJBAHLSZZQXL')/workbook/worksheets('%7B00000000-0001-0000-0000-000000000000%7D')/charts",
  "value": [
    {
      "@odata.id": "/users('f6d92604-4b76-4b70-9a4c-93dfbcc054d5')/drive/items('01CYZLFJB6K563VVUU2ZC2FJBAHLSZZQXL')/workbook/worksheets(%27%7B00000000-0001-0000-0000-000000000000%7D%27)/charts(%27%7B00000000-0008-0000-0100-000003000000%7D%27)",
      "height": 235.5,
      "id": "{00000000-0008-0000-0100-000003000000}",
      "left": 276.0,
      "name": "Chart 2",
      "top": 0.0,
      "width": 401.25
   }
  ]
}

** Remarque : L’ID du graphique contient des caractères { et } (exemple : {00000000-0008-0000-0100-000003000000}) qui doivent être codés pour pouvoir utiliser l’API. Exemple : Pour obtenir un objet de graphique, codez l’ID du chemin d’accès au format /charts/%7B00000000-0008-0000-0100-000003000000%7D.** Note: Chart ID contains { and } characters (example: {00000000-0008-0000-0100-000003000000}), which needs to be URL encoded for the API to work. Example: In order to get a chart object, URL encode the ID in the path as /charts/%7B00000000-0008-0000-0100-000003000000%7D.

Obtenir une image de graphiqueGet chart image

DemandeRequest

GET /{version}/me/drive/items/01CYZLFJB6K563VVUU2ZC2FJBAHLSZZQXL/workbook/worksheets('%7B00000000-0001-0000-0000-000000000000%7D')/charts('%7B00000000-0008-0000-0100-000003000000%7D')/Image(width=0,height=0,fittingMode='fit')
authorization: Bearer {access-token} 
workbook-session-id: {session-id} 

RéponseResponse

HTTP code: 200 OK
content-type: application/json;odata.metadata 

{
  "@odata.context": "https://graph.microsoft.com/{version}/$metadata#Edm.String",
  "value": "{base-64-string}"
}

Ajouter un graphiqueAdd a chart

DemandeRequest

POST /{version}/me/drive/items/01CYZLFJB6K563VVUU2ZC2FJBAHLSZZQXL/workbook/worksheets('%7B00000000-0001-0000-0000-000000000000%7D')/charts/Add
content-type: Application/Json 
accept: application/Json 
authorization: Bearer {access-token} 

{ "type": "ColumnClustered", "sourcedata": "A1:C4", "seriesby": "Auto" }

RéponseResponse

HTTP code: 201 Created
content-type: application/json;odata.metadata 

{
  "@odata.context": "https://graph.microsoft.com/{version}/$metadata#chart",
  "@odata.type": "#microsoft.graph.workbookChart",
  "@odata.id": "/users('f6d92604-4b76-4b70-9a4c-93dfbcc054d5')/drive/items('01CYZLFJB6K563VVUU2ZC2FJBAHLSZZQXL')/workbook/worksheets(%27%7B00000000-0001-0000-0000-000000000000%7D%27)/charts(%27%7B2D421098-FA19-41F7-8528-EE7B00E4BB42%7D%27)",
  "height": 216.0,
  "id": "{2D421098-FA19-41F7-8528-EE7B00E4BB42}",
  "left": 0.0,
  "name": "Chart 2",
  "top": 0.0,
  "width": 360.0
}

Mettre à jour un graphiqueUpdate a chart

PATCH /{version}/me/drive/items/01CYZLFJB6K563VVUU2ZC2FJBAHLSZZQXL/workbook/worksheets('%7B00000000-0001-0000-0000-000000000000%7D')/charts('%7B2D421098-FA19-41F7-8528-EE7B00E4BB42%7D')
content-type: Application/Json 
authorization: Bearer {access-token} 
workbook-session-id: {session-id}

{ "height": 216.0, "left": 0, "name": "NewName", "top": 0, "width": 360.0 }

RéponseResponse

HTTP code: 200 OK
content-type: application/json;odata.metadata 

{
  "@odata.context": "https://graph.microsoft.com/{version}/$metadata#users('f6d92604-4b76-4b70-9a4c-93dfbcc054d5')/drive/items('01CYZLFJB6K563VVUU2ZC2FJBAHLSZZQXL')/workbook/worksheets('%7B00000000-0001-0000-0000-000000000000%7D')/charts/$entity",
  "@odata.id": "/users('f6d92604-4b76-4b70-9a4c-93dfbcc054d5')/drive/items('01CYZLFJB6K563VVUU2ZC2FJBAHLSZZQXL')/workbook/worksheets(%27%7B00000000-0001-0000-0000-000000000000%7D%27)/charts(%27%7B2D421098-FA19-41F7-8528-EE7B00E4BB42%7D%27)",
  "height": 216.0,
  "id": "{2D421098-FA19-41F7-8528-EE7B00E4BB42}",
  "left": 0.0,
  "name": "NewName",
  "top": 0.0,
  "width": 360.0
}

Mettre à jour les données sources du graphiqueUpdate chart source data

DemandeRequest

POST /{version}/me/drive/items/01CYZLFJB6K563VVUU2ZC2FJBAHLSZZQXL/workbook/worksheets('%7B00000000-0001-0000-0000-000000000000%7D')/charts('%7B2D421098-FA19-41F7-8528-EE7B00E4BB42%7D')/setData
content-type: Application/Json 
accept: application/Json 
authorization: Bearer {access-token} 
workbook-session-id: {session-id}

{ "sourceData": "A1:C4", "seriesBy": "Auto" }

RéponseResponse

HTTP code: 204 No Content

Opérations de tableauTable operations

Obtenir la liste des tableauxGet list of tables

DemandeRequest

GET /{version}/me/drive/items/01CYZLFJB6K563VVUU2ZC2FJBAHLSZZQXL/workbook/worksheets('%7B00000000-0001-0000-0000-000000000000%7D')/tables
accept: Application/Json 
authorization: Bearer {access-token} 
workbook-session-id: {session-id}

RéponseResponse

HTTP code: 200 OK
content-type: application/json;odata.metadata 

Créer un tableauCreate table

DemandeRequest

POST /{version}/me/drive/items/01CYZLFJDYBLIGAE7G5FE3I4VO2XP7BLU4/workbook/tables/{table-id}/add
content-type: Application/Json 
authorization: Bearer {access-token} 
workbook-session-id: {session-id}

{ "name": "NewTableName", "hasHeaders": true, "showTotals": false, "style": "TableStyleMedium4" }

RéponseResponse

HTTP code: 201 Created
content-type: application/json;odata.metadata 

{
  "@odata.context": "https://graph.microsoft.com/{version}/$metadata#users('f6d92604-4b76-4b70-9a4c-93dfbcc054d5')/drive/items('01CYZLFJDYBLIGAE7G5FE3I4VO2XP7BLU4')/workbook/tables/$entity",
  "@odata.id": "/users('f6d92604-4b76-4b70-9a4c-93dfbcc054d5')/drive/items('01CYZLFJDYBLIGAE7G5FE3I4VO2XP7BLU4')/workbook/tables(%272%27)",
  "id": "2",
  "name": "NewTableName",
  "showHeaders": true,
  "showTotals": false,
  "style": "TableStyleMedium4"
}

Mettre à jour une tableUpdate table

DemandeRequest

PATCH /{version}/me/drive/items/01CYZLFJDYBLIGAE7G5FE3I4VO2XP7BLU4/workbook/tables('2')
content-type: Application/Json 
authorization: Bearer {access-token} 
workbook-session-id: {session-id}

{ "name": "NewTableName", "showHeaders": true, "showTotals": false, "style": "TableStyleMedium4" }

RéponseResponse

HTTP code: 200 OK
content-type: application/json;odata.metadata 

{
  "@odata.context": "https://graph.microsoft.com/{version}/$metadata#users('f6d92604-4b76-4b70-9a4c-93dfbcc054d5')/drive/items('01CYZLFJDYBLIGAE7G5FE3I4VO2XP7BLU4')/workbook/tables/$entity",
  "@odata.id": "/users('f6d92604-4b76-4b70-9a4c-93dfbcc054d5')/drive/items('01CYZLFJDYBLIGAE7G5FE3I4VO2XP7BLU4')/workbook/tables(%272%27)",
  "id": "2",
  "name": "NewTableName",
  "showHeaders": true,
  "showTotals": false,
  "style": "TableStyleMedium4"
}

Obtenir la liste des lignes de tableauGet list of table rows

DemandeRequest

GET /{version}/me/drive/items/01CYZLFJDYBLIGAE7G5FE3I4VO2XP7BLU4/workbook/tables('4')/rows
authorization: Bearer {access-token} 
workbook-session-id: {session-id}

RéponseResponse

HTTP code: 200 OK
content-type: application/json;odata.metadata 

{
  "@odata.context": "https://graph.microsoft.com/{version}/$metadata#users('f6d92604-4b76-4b70-9a4c-93dfbcc054d5')/drive/items('01CYZLFJDYBLIGAE7G5FE3I4VO2XP7BLU4')/workbook/tables('4')/rows",
  "value": [
    {
      "@odata.id": "/users('f6d92604-4b76-4b70-9a4c-93dfbcc054d5')/drive/items('01CYZLFJDYBLIGAE7G5FE3I4VO2XP7BLU4')/workbook/tables(%274%27)/rows/itemAt(0)",
      "index": 0,
      "values": [
        [
          42019,
          53,
          34
       ]
      ]
    },
    {
      "@odata.id": "/users('f6d92604-4b76-4b70-9a4c-93dfbcc054d5')/drive/items('01CYZLFJDYBLIGAE7G5FE3I4VO2XP7BLU4')/workbook/tables(%274%27)/rows/itemAt(1)",
      "index": 1,
      "values": [
        [
          42020,
          45,
          39
        ]
      ]
    },
    {
      "@odata.id": "/users('f6d92604-4b76-4b70-9a4c-93dfbcc054d5')/drive/items('01CYZLFJDYBLIGAE7G5FE3I4VO2XP7BLU4')/workbook/tables(%274%27)/rows/itemAt(2)",
      "index": 2,
      "values": [
        [
          42021,
          50,
          31
        ]
      ]
    },
    {
      "@odata.id": "/users('f6d92604-4b76-4b70-9a4c-93dfbcc054d5')/drive/items('01CYZLFJDYBLIGAE7G5FE3I4VO2XP7BLU4')/workbook/tables(%274%27)/rows/itemAt(3)",
      "index": 3,
      "values": [
        [
          42022,
          43,
          39
        ]
      ]
    },
    {
      "@odata.id": "/users('f6d92604-4b76-4b70-9a4c-93dfbcc054d5')/drive/items('01CYZLFJDYBLIGAE7G5FE3I4VO2XP7BLU4')/workbook/tables(%274%27)/rows/itemAt(4)",
      "index": 4,
      "values": [
        [
          42023,
          45,
          41
        ]
      ]
    },
    {
      "@odata.id": "/users('f6d92604-4b76-4b70-9a4c-93dfbcc054d5')/drive/items('01CYZLFJDYBLIGAE7G5FE3I4VO2XP7BLU4')/workbook/tables(%274%27)/rows/itemAt(5)",
      "index": 5,
      "values": [
        [
          42024,
          52,
          40
        ]
      ]
    }
  ]
}

Obtenir la liste des colonnes de tableauGet list of table columns

DemandeRequest

GET /{version}/me/drive/items/01CYZLFJDYBLIGAE7G5FE3I4VO2XP7BLU4/workbook/tables('4')/columns
authorization: Bearer {access-token} 
workbook-session-id: {session-id}

RéponseResponse

HTTP code: 200 OK 
content-type: application/json;odata.metadata 

{
  "@odata.context": "https://graph.microsoft.com/{version}/$metadata#users('f6d92604-4b76-4b70-9a4c-93dfbcc054d5')/drive/items('01CYZLFJDYBLIGAE7G5FE3I4VO2XP7BLU4')/workbook/tables('4')/columns",
  "value": [
    {
      "@odata.id": "/users('f6d92604-4b76-4b70-9a4c-93dfbcc054d5')/drive/items('01CYZLFJDYBLIGAE7G5FE3I4VO2XP7BLU4')/workbook/tables(%274%27)/columns(%271%27)",
      "id": "1",
      "index": 0,
      "name": "Date",
      "values": [
        [
          "Date"
        ],
        [
          42019
       ],
        [
          42020
        ],
        [
          42021
        ],
        [
          42022
        ],
        [
          42023
        ],
        [
          42024
        ]
      ]
    },
    {
      "@odata.id": "/users('f6d92604-4b76-4b70-9a4c-93dfbcc054d5')/drive/items('01CYZLFJDYBLIGAE7G5FE3I4VO2XP7BLU4')/workbook/tables(%274%27)/columns(%272%27)",
      "id": "2",
      "index": 1,
      "name": "High (F)",
      "values": [
        [
          "High (F)"
        ],
        [
          53
        ],
        [
          45
        ],
        [
          50
        ],
        [
          43
        ],
        [
          45
        ],
        [
          52
        ]
      ]
    },
    {
      "@odata.id": "/users('f6d92604-4b76-4b70-9a4c-93dfbcc054d5')/drive/items('01CYZLFJDYBLIGAE7G5FE3I4VO2XP7BLU4')/workbook/tables(%274%27)/columns(%273%27)",
      "id": "3",
      "index": 2,
      "name": "Low (F)",
      "values": [
        [
          "Low (F)"
        ],
        [
          34
        ],
        [
          39
        ],
        [
          31
        ],
        [
          39
        ],
        [
          41
        ],
        [
          40
        ]
      ]
    }
  ]
}

Ajouter une ligne de tableauAdd a table row

DemandeRequest

POST /{version}/me/drive/items/01CYZLFJDYBLIGAE7G5FE3I4VO2XP7BLU4/workbook/tables('4')/rows
content-type: Application/Json 
authorization: Bearer {access-token} 
workbook-session-id: {session-id}

{ "values": [ [ "Jan-15-2016", "49", "37" ] ], "index": null }

RéponseResponse

HTTP code: 201 Created
content-type: application/json;odata.metadata 

{
  "@odata.context": "https://graph.microsoft.com/{version}/$metadata#users('f6d92604-4b76-4b70-9a4c-93dfbcc054d5')/drive/items('01CYZLFJDYBLIGAE7G5FE3I4VO2XP7BLU4')/workbook/tables('4')/rows/$entity",
  "@odata.id": "/users('f6d92604-4b76-4b70-9a4c-93dfbcc054d5')/drive/items('01CYZLFJDYBLIGAE7G5FE3I4VO2XP7BLU4')/workbook/tables(%274%27)/rows(null)",
  "index": 6,
  "values": [
    [
      "Jan-15-2016",
      49,
      37
    ]
  ]
}

Ajouter une colonne de tableauAdd a table column

DemandeRequest

POST /{version}/me/drive/items/01CYZLFJDYBLIGAE7G5FE3I4VO2XP7BLU4/workbook/tables('2')/columns
content-type: Application/Json 
accept: application/Json 


{ "values": [ [ "Status" ], [ "Open" ], [ "Closed" ] ], "index": 2 }

RéponseResponse

HTTP code: 201 Created
content-type: application/json;odata.metadata 

{
  "@odata.context": "https://graph.microsoft.com/{version}/$metadata#users('f6d92604-4b76-4b70-9a4c-93dfbcc054d5')/drive/items('01CYZLFJDYBLIGAE7G5FE3I4VO2XP7BLU4')/workbook/tables('2')/columns/$entity",
  "@odata.id": "/users('f6d92604-4b76-4b70-9a4c-93dfbcc054d5')/drive/items('01CYZLFJDYBLIGAE7G5FE3I4VO2XP7BLU4')/workbook/tables(%272%27)/columns(%274%27)",
  "id": "4",
  "index": 2,
  "name": "Status",
  "values": [
    [
      "Status"
    ],
    [
      "Open"
    ],
    [
      "Closed"
    ]
  ]
}

Supprimer une ligne de tableauDelete table row

DemandeRequest

DELETE /{version}/me/drive/items/01CYZLFJDYBLIGAE7G5FE3I4VO2XP7BLU4/workbook/tables('4')/rows/$/itemAt(index=6)
authorization: Bearer {access-token} 
workbook-session-id: {session-id}

RéponseResponse

HTTP code: 204 No Content

Supprimer une colonne de tableauDelete table column

DemandeRequest

DELETE /{version}/me/drive/items/01CYZLFJDYBLIGAE7G5FE3I4VO2XP7BLU4/workbook/tables('4')/columns('3')
authorization: Bearer {access-token} 
workbook-session-id: {session-id}

RéponseResponse

HTTP code: 204 No Content

Convertir le tableau en plageConvert table to range

DemandeRequest

POST /{version}/me/drive/items/01CYZLFJDYBLIGAE7G5FE3I4VO2XP7BLU4/workbook/tables('1')/convertToRange
authorization: Bearer {access-token} 
workbook-session-id: {session-id}

RéponseResponse

HTTP code: 200 OK 
content-type: application/json;odata.metadata 

Trier le tableauTable sort

DemandeRequest

POST /{version}/me/drive/items/01CYZLFJGUJ7JHBSZDFZFL25KSZGQTVAUN/workbook/worksheets('Sheet15799')/tables('table2')/sort/apply
authorization: Bearer {access-token} 
workbook-session-id: {session-id}

{
"fields" : [
  { "key": 0,
   "ascending": true
  }
]
}

RéponseResponse

HTTP code: 204 No Content

Filtrer le tableauTable filter

DemandeRequest

POST /{version}/me/drive/items/01CYZLFJGUJ7JHBSZDFZFL25KSZGQTVAUN/workbook/worksheets('Sheet15799')/tables('table2')/columns(id='2')/filter/apply
authorization: Bearer {access-token} 
workbook-session-id: {session-id}

{
"criteria" : 
  { "filterOn": "custom",
   "criterion1": ">15",
   "operator": "and",
   "criterion2": "<50"
   
  }
}

RéponseResponse

HTTP code: 204 No Content

Effacer le filtreClear filter

DemandeRequest

POST /{version}/me/drive/items/01CYZLFJGUJ7JHBSZDFZFL25KSZGQTVAUN/workbook/worksheets('Sheet15799')/tables('table2')/columns(id='2')/filter/clear
authorization: Bearer {access-token} 
workbook-session-id: {session-id}

RéponseResponse

HTTP code: 204 No Content

Opérations de plageRange operations

Obtenir une plageGet Range

DemandeRequest

GET /{version}/me/drive/items/{item-id}/workbook/worksheets/{worksheet-id}/range(address='A1:B2')
authorization: Bearer {access-token} 
workbook-session-id: {session-id}

RéponseResponse

HTTP code: 200 OK
content-type: application/json;odata.metadata 

{
  "@odata.context": "https://graph.microsoft.com/{version}/$metadata#range",
  "@odata.type": "#microsoft.graph.workbookRange",
  "@odata.id": "/users('f6d92604-4b76-4b70-9a4c-93dfbcc054d5')/drive/items('01CYZLFJDYBLIGAE7G5FE3I4VO2XP7BLU4')/workbook/worksheets(%27%7B00000000-0001-0000-0300-000000000000%7D%27)/range(address=%27A1:B2%27)",
  "address": "test!A1:B2",
  "addressLocal": "test!A1:B2",
  "cellCount": 4,
  "columnCount": 2,
  "columnHidden": false,
  "columnIndex": 0,
  "formulas": [
    [
      "",
      ""
    ],
    [
      "",
      ""
    ]
  ],
  "formulasLocal": [
    [
      "",
      ""
    ],
    [
      "",
      ""
    ]
  ],
  "formulasR1C1": [
    [
      "",
      ""
    ],
    [
      "",
      ""
    ]
  ],
  "hidden": false,
  "numberFormat": [
    [
      "General",
      "General"
    ],
    [
      "General",
      "General"
    ]
  ],
  "rowCount": 2,
  "rowHidden": false,
  "rowIndex": 0,
  "text": [
    [
      "",
      ""
    ],
    [
      "",
      ""
    ]
  ],
  "values": [
    [
      "",
      ""
    ],
    [
      "",
      ""
    ]
  ],
  "valueTypes": [
    [
      "Empty",
      "Empty"
    ],
    [
      "Empty",
      "Empty"
    ]
  ]
}

Mettre à jour la plageRange update

PATCH /{version}/me/drive/items/01CYZLFJDYBLIGAE7G5FE3I4VO2XP7BLU4/workbook/worksheets('test')/range(address='test!A1:B2')
authorization: Bearer {access-token} 
workbook-session-id: {session-id}

{ "values": [ [ "Test", "Value" ], [ "For", "Update" ] ] }
HTTP code: 200 OK
content-type: application/json;odata.metadata

{
  "@odata.context": "https://graph.microsoft.com/{version}/$metadata#range",
  "@odata.type": "#microsoft.graph.workbookRange",
  "@odata.id": "/users('f6d92604-4b76-4b70-9a4c-93dfbcc054d5')/drive/items('01CYZLFJDYBLIGAE7G5FE3I4VO2XP7BLU4')/workbook/worksheets(%27%7B00000000-0001-0000-0300-000000000000%7D%27)/range(address=%27test!A1:B2%27)",
  "address": "test!A1:B2",
  "addressLocal": "test!A1:B2",
  "cellCount": 4,
  "columnCount": 2,
  "columnHidden": false,
  "columnIndex": 0,
  "formulas": [
    [
      "Test",
      "Value"
    ],
    [
      "For",
      "Update"
    ]
  ],
  "formulasLocal": [
    [
      "Test",
      "Value"
    ],
    [
      "For",
      "Update"
    ]
  ],
  "formulasR1C1": [
    [
      "Test",
      "Value"
    ],
    [
      "For",
      "Update"
    ]
  ],
  "hidden": false,
  "numberFormat": [
    [
      "General",
      "General"
    ],
    [
      "General",
      "General"
    ]
  ],
  "rowCount": 2,
  "rowHidden": false,
  "rowIndex": 0,
  "text": [
    [
      "Test",
      "Value"
    ],
    [
      "For",
      "Update"
    ]
  ],
  "values": [
    [
      "Test",
      "Value"
    ],
    [
      "For",
      "Update"
    ]
  ],
  "valueTypes": [
    [
      "String",
      "String"
    ],
    [
      "String",
      "String"
    ]
  ]
}

Trier la plageRange sort

DemandeRequest

POST /{version}/me/drive/items/01CYZLFJGUJ7JHBSZDFZFL25KSZGQTVAUN/workbook/worksheets('Sheet15799')/usedRange/sort/apply
authorization: Bearer {access-token} 
workbook-session-id: {session-id}

{
"fields" : [
  { "key": 0,
   "ascending": true
  }
]
}

RéponseResponse

HTTP code: 204 No Content

Éléments nommésNamed items

DemandeRequest

GET /{version}/me/drive/items/01CYZLFJDYBLIGAE7G5FE3I4VO2XP7BLU4/workbook/names
authorization: Bearer {access-token} 
workbook-session-id: {session-id}

RéponseResponse

HTTP code: 200 OK
content-type: application/json

{
  "@odata.context": "https://graph.microsoft.com/{version}/$metadata#users('f6d92604-4b76-4b70-9a4c-93dfbcc054d5')/drive/items('01CYZLFJDYBLIGAE7G5FE3I4VO2XP7BLU4')/workbook/names",
  "value": [
    {
      "@odata.id": "/users('f6d92604-4b76-4b70-9a4c-93dfbcc054d5')/drive/items('01CYZLFJDYBLIGAE7G5FE3I4VO2XP7BLU4')/workbook/names(%27data%27)",
      "name": "data",
      "type": "Range",
      "value": "Range!$A$1:$D$3",
      "visible": true
    },
    {
      "@odata.id": "/users('f6d92604-4b76-4b70-9a4c-93dfbcc054d5')/drive/items('01CYZLFJDYBLIGAE7G5FE3I4VO2XP7BLU4')/workbook/names(%27myrange%27)",
      "name": "myrange",
      "type": "Range",
      "value": "Range!$E$1:$F$7",
      "visible": true
    },
    {
      "@odata.id": "/users('f6d92604-4b76-4b70-9a4c-93dfbcc054d5')/drive/items('01CYZLFJDYBLIGAE7G5FE3I4VO2XP7BLU4')/workbook/names(%27range1%27)",
      "name": "range1",
      "type": "Range",
      "value": "Range!$I$1:$M$11",
      "visible": true
    }
  ]
}

Utilisation de valeurs nullWork with nulls

Entrée de valeurs null dans un tableau 2Dnull input in 2-D array

L’entrée de valeurs null dans un tableau à deux dimensions (pour des valeurs, des formats de nombre ou des formules) est ignorée dans les ressources Plage et Tableau. Aucune mise à jour n’est appliquée à la cible voulue (cellule) quand l’entrée null est envoyée dans des grilles de valeurs, de formats de nombre ou de formules.null input inside a two-dimensional array (for values, number-format, formula) is ignored in the Range and Table resources. No update will take place to the intended target (cell) when null input is sent in values or number-format or formula grid of values.

Par exemple, pour mettre à jour uniquement des parties spécifiques de la plage, par exemple le format de nombre d’une cellule, tout en conservant le format de nombre existant pour d’autres parties de la plage, indiquez le format de nombre là où un changement est nécessaire et envoyez null pour les autres cellules.For example, to only update specific parts of the Range, such as a cell's Number Format, and to retain the existing number-format on other parts of the Range, set the Number Format where needed and send null for the other cells.

Dans la demande définie suivante, seules certaines parties du format de nombre de la plage sont définies et le format de nombre existant est conservé sur la partie restante (en indiquant des valeurs null).In the following set request, only some parts of the Range Number Format are set while the existing Number Format on the remaining part is retained (by passing nulls).

{
  "values" : [["Eurasia", "29.96", "0.25", "15-Feb" ]],
  "numberFormat" : [[null, null, null, "m/d/yyyy;@"]]
}

Entrée null pour une propriéténull input for a property

Vous ne pouvez pas indiquer null comme valeur unique pour l’ensemble de la propriété. Par exemple, l’exemple suivant n’est pas valide, car vous ne pouvez pas ignorer ou définir sur null l’ensemble des valeurs.null is not a valid single input for the entire property. For example, the following is not valid because the entire values cannot be set to null or ignored.

{
"values":  null
}

L’exemple ci-dessous n’est pas valide non plus, car null n’est pas une valeur de couleur valide.The following is not valid either as null is not a valid color value.

{
"color" :  null
}

Réponse nullNull-Response

La représentation de propriétés de mise en forme composées de valeurs non uniformes renvoie une valeur null comme réponse.Representation of formatting properties that consists of non-uniform values results in the return of a null value in the response.

Par exemple, une plage peut se composer d’une ou plusieurs cellules. Si des cellules de la plage spécifiée ont des valeurs de mise en forme différentes, aucune représentation ne pourra être définie au niveau de la plage entière.For example, a Range can consist of one or more cells. In cases where the individual cells contained in the Range specified don't have uniform formatting values, the range level representation will be undefined.

{
  "size: : null,
  "color" : null
}

Entrées et sorties videsBlank input and output

Les valeurs vides dans les demandes de mise à jour sont traitées comme une instruction visant à effacer ou à restaurer la valeur de la propriété concernée. Une valeur vide est représentée par des guillemets droits non séparés par un espace : ""Blank values in update requests are treated as an instruction to clear or reset the respective property. A blank value is represented by two double quotation marks with no space in-between: ""

Exemples :Examples:

  • pour values, la valeur de plage est effacée. Cela revient à supprimer du contenu dans l’application.For values, the range value is cleared out. This is the same as clearing the contents in the application.

  • Pour numberFormat, le format de nombre est défini sur General.For numberFormat, the number format is set to General.

  • Pour formula et formulaLocale, les valeurs de formule sont effacées.For formula and formulaLocale, the formula values are cleared.

Pour les opérations de lecture, il est normal d’obtenir des valeurs vides si les cellules le sont également. Si la cellule ne contient aucune donnée ou valeur, l’API renvoie une valeur vide. Une valeur vide est représentée par des guillemets droits non séparés par un espace : ""For read operations, expect to receive blank values if the contents of the cells are blanks. If the cell contains no data or value, the API returns a blank value. Blank value is represented by two double quotation marks with no space in-between: ""

{
  "values" : [["", "some", "data", "in", "other", "cells", ""]]
}
{
  "formula" : [["", "", "=Rand()"]]
}

Plage illimitéeUnbounded Range

LectureRead

Une adresse de plage illimitée ne contient que des identificateurs de ligne ou de colonne, ainsi que des identificateurs de lignes ou de colonnes non spécifiées (respectivement), comme dans l’exemple ci-dessous :Unbounded Range address contains only column or row identifiers and unspecified row identifier or column identifiers (respectively), such as:

  • C:C, A:F, A:XFD (contient des lignes non spécifiées)C:C, A:F, A:XFD (contains unspecified rows)
  • 2:2, 1:4, 1:1048546 (contient des colonnes non spécifiées)2:2, 1:4, 1:1048546 (contains unspecified columns)

Lorsque l’API effectue une demande pour récupérer une plage illimitée (getRange('C:C')), la réponse renvoyée contient null pour les propriétés définies au niveau des cellules, telles que values, text, numberFormat ou formula. D’autres propriétés de plage, telles que address ou cellCount refléteront la plage illimitée.When the API makes a request to retrieve an unbounded Range (getRange('C:C')), the response returned contains null for cell-level properties such as values, text, numberFormat, or formula. Other Range properties such as address or cellCount will reflect the unbounded range.

ÉcritureWrite

Vous n’êtes pas autorisé à définir des propriétés de niveau cellule (par exemple, values, numberFormat, etc.) sur une plage illimitée, car la demande d’entrée risque d’être trop lourde à gérer.Setting cell level properties (such as values, numberFormat, etc.) on unbounded Range is not allowed because the input request might be too large to handle.

Par exemple, la demande de mise à jour suivante n’est pas valide, car la plage demandée est illimitée.For example, the following is not a valid update request because the requested range is unbounded.

PATCH /workbook/worksheets/{id}/range(address="A:B")

{
  "values" : "Due Date"
}

Lorsqu’une opération de mise à jour est tentée sur une plage de ce type, l’API renvoie une erreur.When an update operation is attempted on such a Range, the API will return an error.

Plage de grande tailleLarge Range

Une plage de grande taille est une plage trop grande pour pouvoir être gérée par un seul appel à l’API. De nombreux facteurs tels que le nombre de cellules, les valeurs, le format de nombre et les formules contenues dans la plage peuvent entraîner une réponse trop lourde pour l’interaction avec l’API. L’API tente de renvoyer ou d’écrire les données requises en faisant au mieux de ses possibilités. Toutefois, la taille importante de la réponse peut provoquer une erreur de l’API à cause de la grande quantité de ressources mobilisées.Large Range implies a Range of a size that is too large for a single API call. Many factors such as number of cells, values, numberFormat, and formulas contained in the range can make the response so large that it becomes unsuitable for API interaction. The API makes a best attempt to return or write to the requested data. However, the large size involved might result in an API error condition because of the large resource utilization.

Pour éviter cela, nous vous recommandons de fractionner les plages de grande taille en plusieurs plages plus petites pour vos opérations de lecture et d’écriture.To avoid this, we recommend that you read or write for large Range in multiple smaller range sizes.

Copie d’une seule entréeSingle input copy

Pour mettre à jour une plage contenant des formats de nombre ou des valeurs uniformes, ou pour appliquer une même formule à l’ensemble d’une plage, la convention suivante est utilisée dans l’API définie. Dans Excel, cela revient à attribuer des valeurs ou des formules à une plage en mode CTRL + ENTRÉE.To support updating a range with the same values or number-format or applying same formula across a range, the following convention is used in the set API. In Excel, this behavior is similar to inputting values or formulas to a range in the CTRL+Enter mode.

L’API recherche une valeur de cellule unique et, si la dimension de la plage cible ne correspond pas à la dimension de la plage d’entrée, elle applique la mise à jour à la plage entière en mode CTRL + ENTRÉE avec la valeur ou la formule indiquée dans la demande.The API will look for a single cell value and, if the target range dimension doesn't match the input range dimension, it will apply the update to the entire range in the CTRL+Enter model with the value or formula provided in the request.

ExemplesExamples

La demande suivante met à jour la plage sélectionnée en y ajoutant le texte « Sample text ». Notez que la plage comporte 200 cellules, tandis que l’entrée fournie comporte seulement 1 valeur de cellule.The following request updates the selected range with the text of "Sample text". Note that Range has 200 cells, whereas the provided input only has 1 cell value.

PATCH /workbook/worksheets/{id}/range(address="A1:B00")

{
  "values" : "Sample text"
}

Fonctions du classeurWorkbook functions

Vous pouvez accéder aux fonctions du classeur via un ensemble de fonctions comprises dans la ressource /Functions.You can access the workbook functions through a collection of functions included in the /Functions resource.

DemandeRequest
https://graph.microsoft.com/v1.0/me/drive/root:/book1.xlsx:/workbook/functions/pmt
content-type: Application/Json 
authorization: Bearer {access-token} 
workbook-session-id: {session-id}

{
    "rate": 4.5,
    "nper": 12,
    "pv": -1250
}
RéponseResponse
HTTP code: 200 OK
content-type: application/json

{
    "@odata.context": "https://graph.microsoft.com/v1.0/$metadata#workbookFunctionResult",
    "@odata.type": "#microsoft.graph.workbookFunctionResult",
    "@odata.id": "/users('f6d92604-4b76-4b70-9a4c-93dfbcc054d5')/drive/root/workbook/functions/pmt()",
    "error": null,
    "value": 5625.00000734125
}

Informations relatives aux erreursError information

Les erreurs sont renvoyées avec un code d’erreur HTTP et un objet d’erreur. Les valeurs code et message d’une erreur en expliquent la nature.Errors are returned with an HTTP error code and an error object. An error code and message explain the reason for the error.

Voici un exemple.The following is an example.

HTTP/1.1 400 Bad Request
Content-Type: application/json

{
  "error": {
    "code": "ItemAlreadyExists",
    "message": "A resource with the same name or identifier already exists.",
    "innerError": {
      "request-id": "214ca7ea-9ea4-442e-9c67-71fdda0a559c",
      "date": "2016-07-28T03:56:09"
    }
  }
}