Microsoft Graph で Excel ブックにデータを書き込むWrite data to an Excel workbook with Microsoft Graph

Excel REST API は、情報を Excel ブックにアップロードするための、プラットフォームに依存しない簡単な手段を提供します。The Excel REST API provides an easy, platform-agnostic way to upload information to an Excel workbook. このトピックでは、ASP.NET、Angular、および React の 3 種類の Web 開発フレームワークで、シンプルなデータ セットを Excel ブックに書き込む方法を示します。This topic shows you how to write simple data sets to an Excel workbook on three web development frameworks: ASP.NET, Angular, and React. このトピックで示されているサンプル コードは、GitHub 上の Microsoft Graph Excel スターター サンプルで確認できます。You can look at the code samples featured in this topic by visiting the Microsoft Graph Excel starter samples on GitHub.

注: 3 つのサンプルのいずれも、データを demo.xlsx という名前の Excel ブックに書き込みます。Note: All three of the samples write data to an Excel workbook named demo.xlsx. このブックが提供されているのは、それを自分の OneDrive にアップロードできるからですが、Microsoft Graph を使用することによっても、ファイルを OneDrive にアップロードできます。They provide this workbook for you so that you can upload it to your own OneDrive, but you can also use Microsoft Graph to upload files to OneDrive. いずれかのタイプのファイルをルート OneDrive フォルダーにアップロードするための REST 呼び出しに関する詳細は、Microsoft Graph Excel REST API ASP.NET の予定リスト サンプルを参照してください。If you're interested in learning the REST calls you need to upload a file of any type to your root OneDrive folder, see the Microsoft Graph Excel REST API ASP.NET to-do list sample.

3 つの Excel スターター サンプルのいずれも、実行内容は同じです: サインイン ユーザーの名前とアドレスを取得し、それら 2 つの情報を demo.xlsx ブックの新しい行に追加します。All three of the Excel starter samples do the same thing: retrieve the name and address of the signed-in user and add those two pieces of information to a new row in the demo.xlsx workbook. サンプルに変更を加えることにより、追加する行を表す 2 次元配列に情報を追加するという方法で、シンプルな操作で行を追加することができます。You can modify the samples to add additional rows simply by adding information to the two-dimensional array that represents the row or rows that you want to add.

単一の REST 要求により Excel ブックに 1 行または複数行を追加するAdd a row or rows to an Excel workbook with a single REST request

Excel REST API では、シンプルな要求本体を、Excel ブックの行コレクションを表す REST エンドポイントに POST する必要があります。The Excel REST API requires you to POST a simple request body to the REST endpoint that represents the row collection of an Excel workbook. サインイン ユーザーの OneDrive アカウントのルート フォルダーでノートブックを処理する場合、REST エンドポイントは次のようになります:If you're working with a notebook in the root folder of the signed-in user's OneDrive account, the REST endpoint will look like this:

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

OneDrive フォルダー内のファイルにアクセスする方法については、リファレンス ドキュメントの中の「DriveItem リソース タイプ」を参照してください。For more information about how to reach files in OneDrive folders, see the DriveItem resource type in our reference documentation.

注: ブックの既存の行コレクションを確認するには、パスのうち末尾が /rows の部分に対して、GET 要求を発行します。Note: You can look at the existing row collection of the workbook by making a GET request to the part of the path that ends at /rows.

POST 本体は次のようになります:The POST body looks like this:

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

最初の index パラメーターの値は、行配列のうち、行を追加する相対位置を、0 から始まるインデックスにより指定します。The value of the first index parameter specifies the relative position of the row that you're adding to the zero-indexed array of rows. 挿入した行より下の行が下方向にシフトします。Rows below the inserted row will be shifted downwards. null パラメーターは、新しい行を末尾に追加することを示します。The null parameter indicates that the new row will be added to the end.

第 2 のvalues パラメーターの値は、追加する各行の書式未設定の値を内容とする 2 次元文字列配列です。The value of the second values parameter is a two-dimensional string array that contains the unformatted values of each row that you want to add. サンプルの配列に含まれるのは 1 行だけですが、文字列配列をさらに追加することにより、さらに多くの行を追加できます。The array in the sample contains only one row, but you can add more rows by adding more string arrays.

demo.xlsx ファイルを OneDrive ルート フォルダーにアップロードし、Microsoft Graph Explorer に対してこのクエリを実行することにより、自分の OneDrive アカウントでこのクエリをテストできます。You can test this query with your own OneDrive account by uploading the demo.xlsx file to your OneDrive root folder and executing this query on the Microsoft Graph Explorer.

Excel ブックにデータを書き込むために必要なことは、これですべてです。That is all you need to know in order to write data to an Excel workbook. あとは、自分の使用するフレームワークで要求を作成して発行する方法を知る必要があります。Excel スターター サンプルで、3 種類の方法でこれを実行する方法が示されています。You do need to know how to construct and make the request in your own framework, and the Excel starter samples demonstrate three separate ways of doing this.

Excel ブックに 1 行または複数行を追加する (ASP.NET)Add a row or rows to an Excel workbook in ASP.NET

要求を作成して送信する ASP.NET コードは、Microsoft Graph Excel スターター サンプル (ASP.NET 4.6)GraphResources.cs および GraphService.cs のファイルにあります。You'll find the ASP.NET code that constructs and sends the request in the GraphResources.cs and GraphService.cs files of the Microsoft Graph Excel Starter Sample for ASP.NET 4.6.

GraphResources.cs ファイルは、Microsoft Graph から取り出すユーザー データと、ブックに書き込む際に使用する要求本体の両方をカプセル化するためのヘルパー クラスを提供します。The GraphResources.cs file provides a helper class for encapsulating both the user data you're retrieving from Microsoft Graph and the request body that you'll use when you write to your workbook.

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

GraphService.cs クラスには、それらのクラスのデータを設定し、要求の情報をシリアライズして JSON オブジェクトに格納し、そのオブジェクトを POST 要求本体として渡す AddInfoToExcel メソッドが含まれています。The GraphService.cs class contains an AddInfoToExcel method that populates these classes, serializes the request information into a JSON object, and then passes that object as the POST request body.

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

Excel ブックに 1 行または複数行を追加する (Angular)Add a row or rows to an Excel workbook in Angular

要求を作成して送信する Angular コードは、Microsoft Graph Excel スターター サンプル (Angular)home.service.ts ファイルに含まれています。You'll find the Angular code that constructs and sends the request in the home.service.ts file of the Microsoft Graph Excel Starter Sample for Angular.

このサンプルでは TypeScript が使用されているため、これは、Microsoft Graph JavaScript クライアント ライブラリおよび Microsoft Graph TypeScript のタイプを利用しています。Since this sample uses TypeScript, it takes advantage of the Microsoft Graph JavaScript Client Library and the Microsoft Graph TypeScript Types.

home.service.ts ファイルに含まれている addInfoToExcel 関数は、2 次元文字列配列、およびその配列が含まれる要求本体を作成します。The addInfoToExcel function in the home.service.ts file constructs the two-dimensional string array and the request body that contains the array. その後、Microsoft Graph JavaScript クライアント ライブラリを使用して要求を作成し、送信します。It then uses the Microsoft Graph JavaScript Client Library to construct and send the request. 応答は、Promise の形で返されます。The response comes back in the form of a Promise.

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

Excel ブックに 1 行または複数行を追加する (React)Add a row or rows to an Excel workbook in React

要求を作成して送信するコードは、Microsoft Graph Excel スターター サンプル (React)home.js ファイルに含まれています。You'll find the code that constructs and sends the request in the home.js file of the Microsoft Graph Excel Starter Sample for React.

onWriteToExcel 関数は、2 次元文字列配列を作成し、それを要求本体に渡します。The onWriteToExcel function constructs the two-dimensional string array and passes it as the request body. これは、axios を使用することにより、HTTP 要求を発行します。It uses axios to make the HTTP request.

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

##関連項目See also