Escribir datos en un libro de Excel

La API de REST de Excel en Microsoft Graph proporciona una forma sencilla, independiente de la plataforma para cargar información en un libro de Excel.

Este artículo muestra cómo escribir conjuntos de datos simples en un libro de Excel en tres marcos de desarrollo web: ASP.NET, Angular y React. Puede mirar los ejemplos de código destacados en este artículo visitando las muestras de inicio de Excel de Microsoft Graph en GitHub.

Nota:

Los tres ejemplos escriben datos en un libro de Excel denominado demo.xlxs. Le proporcionan este libro para que pueda cargarlo en su propio OneDrive, pero también puede usar Microsoft Graph para cargar archivos en OneDrive. Si le interesa obtener información sobre las llamadas de REST que necesita cargar un archivo de cualquier tipo a la carpeta raíz de OneDrive, consulte el ejemplo de lista de tareas pendientes de ASP.NET de la API de REST de Excel de Microsoft Graph.

Las tres muestras de ejemplo de Excel hacen lo mismo: recuperar el nombre y la dirección del usuario que ha iniciado sesión y agregar los dos elementos de información a una nueva fila en el libro demo.xlsx. Puede modificar las muestras para agregar más filas agregando información a la matriz bidimensional que representa la fila o filas que desea agregar.

Agregar una fila o filas a un libro de Excel con una sola solicitud REST

La API de REST de Excel requiere que realice una llamada POST a un cuerpo de solicitud simple al extremo de REST que representa la colección de filas de un libro de Excel. Si trabaja con un bloc de notas en la carpeta raíz de la cuenta de OneDrive del usuario que ha iniciado sesión, el extremo de REST tendrá un aspecto similar al siguiente:

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

Para obtener más información sobre cómo llegar a los archivos en carpetas de OneDrive, consulte el tipo de recurso DriveItem en la documentación de referencia.

Nota:

Puede buscar en la colección de fila existente del libro haciendo una solicitud GET en la parte de la ruta que termina en /rows.

El cuerpo de POST tiene este aspecto:

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

El valor del primer parámetro index especifica la posición relativa de la fila que se va a agregar a la matriz de filas con índice cero. Las filas situadas debajo de la fila insertada se desplazarán hacia abajo. El parámetro null indica que la nueva fila se agrega al final.

El valor del segundo parámetro values es una matriz de cadena bidimensional que contiene los valores sin formato de cada fila que desea agregar. La matriz en la muestra contiene solo una fila, pero puede agregar más filas agregando más matrices de cadenas.

Puede probar esta consulta con su cuenta de OneDrive cargando el archivo demo.xlsx a su carpeta raíz de OneDrive y ejecutando la consulta en el Probador de Microsoft Graph.

Eso es todo lo que necesita saber para poder escribir datos en un libro de Excel. Necesitará saber cómo crear y realizar la solicitud en su propio marco y las muestras de inicio de Excel muestran tres maneras diferentes de hacerlo.

Agregar una fila o filas en un libro de Excel en ASP.NET

Encontrará el código de ASP.NET que crea y envía la solicitud en los archivos GraphResources.cs y GraphService.cs de la Muestra de inicio de Excel de Microsoft Graph para ASP.NET 4.6.

El archivo GraphResources.cs proporciona una clase auxiliar para encapsular los datos de usuario que está recuperando de Microsoft Graph y el cuerpo de la solicitud que usará cuando escriba en el libro.

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 clase GraphService.cs contiene un método AddInfoToExcel que rellena estas clases, serializa la información de la solicitud en un objeto JSON y después pasa ese objeto como el cuerpo de la solicitud 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;
            }
        }
    }
}

Agregar una fila o filas en un libro de Excel en Angular

Encontrará el código de Angular que crea y envía la solicitud el archivo home.service.ts de la muestra de inicio de Excel de Microsoft Graph para Angular.

Puesto que este ejemplo usa TypeScript, aprovecha la biblioteca de cliente de JavaScript de Microsoft Graph y los tipos de TypeScript de Microsoft Graph.

La función addInfoToExcel en el archivo home.service.ts crea la matriz de cadena bidimensional y el cuerpo de la solicitud que contiene la matriz. Después usa la biblioteca de cliente de JavaScript de Microsoft Graph para crear y enviar la solicitud. La respuesta regresa en forma de una promesa.

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

Agregar una fila o filas en un libro de Excel en React

Encontrará el código de que crea y envía la solicitud el archivo home.js de la Muestra de inicio de Excel de Microsoft Graph para React.

La función onWriteToExcel crea la matriz de cadena bidimensional y la pasa como el cuerpo de la solicitud. Usa axios para realizar la solicitud 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));
}