Escrever dados em uma pasta de trabalho do Excel

A API REST do Excel no Microsoft Graph fornece uma maneira fácil e independente de plataforma de carregar informações em uma pasta de trabalho do Excel.

Este artigo mostra como gravar conjuntos de dados simples em uma pasta de trabalho do Excel em três estruturas de desenvolvimento da Web: ASP.NET, Angular e React. Você pode examinar os exemplos de código em destaque neste artigo conferindo Exemplos do Excel Starter do Microsoft Graph no GitHub.

Observação

Todos os três exemplos gravam dados em uma pasta de trabalho do Excel denominada demo.xlsx. Elas fornecem esta pasta de trabalho para que você carregar em seu próprio OneDrive, mas você também pode usar o Microsoft Graph para carregar arquivos no OneDrive. Se você tiver interesse em saber quais as chamadas REST você precisa carregar em um arquivo de qualquer tipo na pasta do OneDrive raiz, veja o exemplo de lista de tarefas pendentes da ASP.NET API do Microsoft Graph Excel.

Todos os três exemplos do Excel Starter fazem o mesmo: recuperam nome e endereço do usuário conectado e adicionam esses dois tipos de informações a uma nova linha na pasta de trabalho demo.xlsx. Você pode modificar os exemplos para adicionar mais linhas, basta adicionar informações à matriz bidimensional que representa a linha ou linhas que você deseja adicionar.

Adicionar uma linha ou linhas a uma pasta de trabalho do Excel com uma única solicitação REST

A API REST do Excel exige a postagem de um corpo da solicitação simples para o ponto de extremidade da REST que representa a coleção de linhas de uma pasta de trabalho do Excel. Se você estiver trabalhando com um bloco de anotações na pasta raiz da conta do OneDrive do usuário conectado, o ponto de extremidade REST terá a seguinte aparência:

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

Para saber mais sobre como acessar arquivos em pastas do OneDrive, confira o tipo de recurso DriveItem em nossa documentação de referência.

Observação

Você pode analisar a coleção de linhas existente da pasta de trabalho fazendo uma solicitação GET para a parte do caminho que termina em /rows.

O corpo da POSTAGEM tem a seguinte aparência:

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

O valor do primeiro parâmetro index especifica a posição relativa da linha que você está adicionando à matriz indexada com zero de linhas. As linhas abaixo da linha inserida serão deslocadas para baixo. O parâmetro null indica que a nova linha será adicionada ao fim.

O valor do segundo parâmetro values é uma matriz de cadeia de caracteres bidimensional que contém os valores não formatados de cada linha que você deseja adicionar. A matriz no exemplo contém apenas uma linha, mas você pode adicionar mais linhas adicionando mais matrizes de cadeia de caracteres.

Você pode testar essa consulta com sua própria conta do OneDrive carregando o arquivo demo.xlsx para sua pasta raiz do OneDrive e executar essa consulta no Explorador do Microsoft Graph.

Isso é tudo o que você precisa saber para gravar dados em uma pasta de trabalho do Excel. Você precisa saber como criar e fazer a solicitação em sua própria estrutura, e os exemplos do Excel Starter demonstram três maneiras diferentes de fazer isso.

Adicionar uma linha ou linhas a uma pasta de trabalho do Excel em ASP.NET

Você encontrará o código ASP.NET que cria e envia a solicitação nos arquivos GraphResources.cs e GraphService.cs do Exemplo do Excel Starter do Microsoft Graph para ASP.NET 4.6.

O arquivo GraphResources.cs fornece uma classe de ajuda para encapsular dados usuário que você está recuperando do Microsoft Graph e o corpo da solicitação que você usará quando gravar em sua pasta de trabalho.

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

A classe GraphService.cs contém um método AddInfoToExcel que popula essas classes, serializa as informações de solicitação em um objeto JSON e passa o objeto como o corpo da solicitação da POSTAGEM.

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

Adicionar uma linha ou linhas a uma pasta de trabalho do Excel em Angular

Você encontrará o código Angular que cria e envia a solicitação no arquivo home.service.ts do Exemplo do Excel Starter do Microsoft Graph para Angular.

Como este exemplo usa TypeScript, ele tira proveito da Biblioteca de Cliente de JavaScript do Microsoft Graph e dos Tipos TypeScript do Microsoft Graph.

A função addInfoToExcel no arquivo home.service.ts cria a matriz de cadeia de caracteres bidimensional e o corpo da solicitação que contém a matriz. Ela usa então a Biblioteca de Cliente de JavaScript do Microsoft Graph para criar e enviar a solicitação. A resposta volta vem na forma de uma Promessa.

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

Adicionar uma linha ou linhas a uma pasta de trabalho do Excel em React

Você encontrará o código que cria e envia a solicitação no arquivo home.js do Exemplo do Excel Starter do Microsoft Graph para React.

A função onWriteToExcel cria a matriz de cadeia de caracteres bidimensional e a passa como o corpo da solicitação. Ela usa axios para fazer a solicitação 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));
}