Daten in eine Excel-Arbeitsmappe schreiben

Die Excel-REST-API in Microsoft Graph bietet eine einfache, plattformunabhängige Möglichkeit, Informationen in eine Excel-Arbeitsmappe hochzuladen.

Dieser Artikel zeigt Ihnen, wie Sie einfache Datensätze in drei Webentwicklungsframeworks in eine Excel-Arbeitsmappe schreiben: ASP.NET, Angular und React. Sie können sich die in diesem Artikel vorgestellten Codebeispiele ansehen, indem Sie die Microsoft Graph Excel-Starterbeispiele auf GitHub besuchen.

Hinweis

Alle drei Beispiele schreiben Daten in eine Excel-Arbeitsmappe namens demo.xlsx. Diese Arbeitsmappe wird für Sie bereitgestellt, damit Sie sie in Ihr eigenes OneDrive hochladen, Sie können aber auch Microsoft Graph zum Hochladen von Dateien in OneDrive verwenden. Wenn Sie mehr über die REST-Aufrufe erfahren möchten, die Sie zum Hochladen einer Datei beliebigen Typs in Ihren OneDrive-Stammordner benötigen, sehen Sie sich das Beispiel für die Aufgabenliste der Microsoft Graph Excel-REST-API für ASP.NET an.

In allen drei Excel-Einstiegsbeispielen werden dieselben Schritte ausgeführt: Abrufen des Namens und der Adresse des angemeldeten Benutzers und Hinzufügen dieser zwei Informationsstücke zu einer neuen Zeile in der Arbeitsmappe demo.xlsx. Sie können die Beispiele so ändern, dass zusätzliche Zeilen hinzugefügt werden, indem Sie einfach Informationen zu dem zweidimensionalen Array hinzufügen, das die Zeile bzw. die Zeilen darstellt, die Sie hinzufügen möchten.

Hinzufügen von Zeilen zu einer Excel-Arbeitsmappe mit einer einzigen REST-Anforderung

Die Excel-REST-API erfordert, dass Sie eine einfachen Anforderungstext für den REST-Endpunkt bereitstellen, der die Zeilenauflistung einer Excel-Arbeitsmappe darstellt. Wenn Sie mit einem Notizbuch im Stammordner des OneDrive-Konto des angemeldeten Benutzers arbeiten, sieht der REST-Endpunkt wie folgt aus:

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

Weitere Informationen dazu, wie Sie Dateien in OneDrive-Ordnern erreichen, finden Sie unter DriveItem-Ressourcentyp in unserer Referenzdokumentation.

Hinweis

Sie können die vorhandene Zeilensammlung der Arbeitsmappe anzeigen, indem Sie eine GET-Anforderung an den Teil des Pfads senden, der bei endet /rows.

Der POST-Text sieht wie folgt aus:

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

Der Wert des ersten index-Parameters gibt die relative Position der Zeile an, die Sie zu dem nullindizierten Array von Zeilen hinzufügen. Zeilen unterhalb der eingefügten Zeile werden nach unten verschoben. Der null-Parameter gibt an, dass die neue Zeile am Ende hinzugefügt wird.

Der Wert des zweiten values-Parameters ist ein zweidimensionales Zeichenfolgenarray, das die unformatierten Werte jeder Zeile enthält, die Sie hinzufügen möchten. Das Array im Beispiel enthält nur eine Zeile, aber Sie können weitere Zeilen hinzufügen, indem Sie weitere Zeichenfolgenarrays hinzufügen.

Sie können diese Abfrage mit Ihrem eigenen OneDrive-Konto testen, indem Sie die Datei „demo.xlsx“ in Ihren OneDrive-Stammordner hochladen und diese Abfrage im Microsoft Graph Explorer ausführen.

Das ist alles, was Sie wissen müssen, um Daten in eine Excel-Arbeitsmappe zu schreiben. Sie müssen wissen, wie die Anforderung in Ihrem eigenen Framework erstellt und ausgeführt wird. In den Excel-Einstiegsbeispielen werden drei verschiedene Möglichkeiten hierfür dargestellt.

Hinzufügen von Zeilen zu einer Excel-Arbeitsmappe in ASP.NET

Den ASP.NET-Code, der die Anforderung sendet, finden Sie in den Dateien GraphResources.cs und GraphService.cs des Microsoft Graph Excel-Einstiegsbeispiels für ASP.NET 4.6.

Die Datei GraphResources.cs enthält eine Hilfsklasse zum Schachteln der Benutzerdaten, die Sie von Microsoft Graph abrufen, und des Anforderungstexts, den Sie beim Schreiben in Ihre Arbeitsmappe verwenden.

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; }
}

Die GraphService.cs-Klasse enthält eine AddInfoToExcel-Methode, die diese Klassen auffüllt, die Anforderungsinformationen in ein JSON-Objekt serialisiert und dieses Objekt dann als den POST-Anforderungstext übergibt.

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;
            }
        }
    }
}

Hinzufügen von Zeilen zu einer Excel-Arbeitsmappe in Angular

Den Angular-Code, der die Anforderung sendet, finden Sie in der Datei home.service.ts file des Microsoft Graph Excel-Einstiegsbeispiels für Angular.

Da in diesem Beispiel TypeScript verwendet wird, werden die Microsoft Graph JavaScript-Clientbibliothek und die Microsoft Graph TypeScript-Typen genutzt.

Die addInfoToExcel-Funktion der home.service.ts-Datei erstellt das zweidimensionalen Zeichenfolgenarray und den Anforderungstext, der das Array enthält. Anschließend wird die Microsoft Graph JavaScript-Clientbibliothek zum Erstellen und Senden der Anforderung verwendet. Die Antwort wird in Form einer Zusage zurückgesendet.

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)
  );
}

Hinzufügen von Zeilen zu einer Excel-Arbeitsmappe in React

Den React-Code, der die Anforderung sendet, finden Sie in der Datei home.js file des Microsoft Graph Excel-Einstiegsbeispiels für React.

Die onWriteToExcel-Funktion erstellt das zweidimensionalen Zeichenfolgenarray und übergibt es als den Anforderungstext. Axios wird für die HTTP-Anforderung verwendet.

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));
}