Crear y descargar un Excel desde Business Central SaaS

Buenas bibliotecarios,

En esta entrada veremos como podemos crear un Excel con los datos que introduzcamos y además descargarlo.

En este ejemplo recogeremos los campos Nº, Nombre y Teléfono de nuestros clientes.
En primer lugar, creamos un report donde recorremos los clientes, además de una variable de tipo Record temporary de ExcelBuffer.

report 50101 "BBC Data Customer In Excel"
{
    UsageCategory = ReportsAndAnalysis;
    ApplicationArea = All;
    ProcessingOnly = true;
    Caption = 'Data Customer In Excel', Comment = 'ESP="Datos de clientes en excel"';
    UseRequestPage = false;

    dataset
    {
        dataitem(Customer; Customer)
        {
           
        }
    }



    var
        TempExcelBuffer: Record "Excel Buffer" temporary;

}

Ahora tendremos que limpiar nuestra variable de Excel, y además crearemos una pequeña cabecera para saber a que dato corresponde cada valor.

Usaremos las funciones de:

TempExcelBuffer.NewRow(): Nos posiciona en una nueva fila.
TempExcelBuffer.AddColum(Value: Variant, IsFormula: Boolean, CommentText: Text, IsBold: Boolean, IsItalics: Boolean, IsUnderline: Boolean, NumFormat: Text[30], CellType: Option): Añade un valor a la columna.

report 50101 "BBC Data Customer In Excel"
{
    UsageCategory = ReportsAndAnalysis;
    ApplicationArea = All;
    ProcessingOnly = true;
    Caption = 'Data Customer In Excel', Comment = 'ESP="Datos de clientes en excel"';
    UseRequestPage = false;

    dataset
    {
        dataitem(Customer; Customer)
        {

        }
    }

    trigger OnPreReport()
    begin
        Clear(TempExcelBuffer);
        TempExcelBuffer.DeleteAll();
        WriteHeader();
    end;



    var
        TempExcelBuffer: Record "Excel Buffer" temporary;


    local procedure WriteHeader()
    begin
        TempExcelBuffer.NewRow();
        TempExcelBuffer.AddColumn(Customer.FieldCaption(Customer."No."), false, '', true, false, false, '@', TempExcelBuffer."Cell Type"::Text);
        TempExcelBuffer.AddColumn(Customer.FieldCaption(Customer.Name), false, '', true, false, false, '@', TempExcelBuffer."Cell Type"::Text);
        TempExcelBuffer.AddColumn(Customer.FieldCaption(Customer."Phone No."), false, '', true, false, false, '@', TempExcelBuffer."Cell Type"::Text);
    end;
}

Ahora al igual que hemos hecho para crear nuestra cabecera, crearemos nuestro cuerpo dentro del dataitem con los valores que recojamos de los clientes.

report 50101 "BBC Data Customer In Excel"
{
    UsageCategory = ReportsAndAnalysis;
    ApplicationArea = All;
    ProcessingOnly = true;
    Caption = 'Data Customer In Excel', Comment = 'ESP="Datos de clientes en excel"';
    UseRequestPage = false;

    dataset
    {
        dataitem(Customer; Customer)
        {
            trigger OnAfterGetRecord()
            begin
                TempExcelBuffer.NewRow();
                TempExcelBuffer.AddColumn(Customer."No.", false, '', false, false, false, '@', TempExcelBuffer."Cell Type"::Text);
                TempExcelBuffer.AddColumn(Customer.Name, false, '', false, false, false, '@', TempExcelBuffer."Cell Type"::Text);
                TempExcelBuffer.AddColumn(Customer."Phone No.", false, '', false, false, false, '@', TempExcelBuffer."Cell Type"::Text);
            end;
        }
    }

    trigger OnPreReport()
    begin
        Clear(TempExcelBuffer);
        TempExcelBuffer.DeleteAll();
        WriteHeader();
    end;



    var
        TempExcelBuffer: Record "Excel Buffer" temporary;


    local procedure WriteHeader()
    begin
        TempExcelBuffer.NewRow();
        TempExcelBuffer.AddColumn(Customer.FieldCaption(Customer."No."), false, '', true, false, false, '@', TempExcelBuffer."Cell Type"::Text);
        TempExcelBuffer.AddColumn(Customer.FieldCaption(Customer.Name), false, '', true, false, false, '@', TempExcelBuffer."Cell Type"::Text);
        TempExcelBuffer.AddColumn(Customer.FieldCaption(Customer."Phone No."), false, '', true, false, false, '@', TempExcelBuffer."Cell Type"::Text);
    end;
}

Ahora que ya tenemos el contenido de nuestro excel vamos a poner nombre a nuestro Excel, nombre a la hoja del mismo y lo más importante y por lo que estamos aquí, vamos a descargarlo. Para esto en el trigger OnPostReport añadiremos el siguiente código.

report 50101 "BBC Data Customer In Excel"
{
    UsageCategory = ReportsAndAnalysis;
    ApplicationArea = All;
    ProcessingOnly = true;
    Caption = 'Data Customer In Excel', Comment = 'ESP="Datos de clientes en excel"';
    UseRequestPage = false;

    dataset
    {
        dataitem(Customer; Customer)
        {
            trigger OnAfterGetRecord()
            begin
                TempExcelBuffer.NewRow();
                TempExcelBuffer.AddColumn(Customer."No.", false, '', false, false, false, '@', TempExcelBuffer."Cell Type"::Text);
                TempExcelBuffer.AddColumn(Customer.Name, false, '', false, false, false, '@', TempExcelBuffer."Cell Type"::Text);
                TempExcelBuffer.AddColumn(Customer."Phone No.", false, '', false, false, false, '@', TempExcelBuffer."Cell Type"::Text);
            end;
        }
    }

    trigger OnPreReport()
    begin
        Clear(TempExcelBuffer);
        TempExcelBuffer.DeleteAll();
        WriteHeader();
    end;

    trigger OnPostReport()
    begin
        TempExcelBuffer.CreateNewBook(BookNameLbl);
        TempExcelBuffer.WriteSheet('', CompanyName(), UserId());
        TempExcelBuffer.SetFriendlyFilename(FileNameLbl);
        TempExcelBuffer.CloseBook();
        TempExcelBuffer.OpenExcel();
        TempExcelBuffer.DeleteAll();
    end;



    var
        TempExcelBuffer: Record "Excel Buffer" temporary;
        BookNameLbl: Label 'Customers', Comment = 'ESP="Clientes"';
        FileNameLbl: Label 'Customers Data', Comment = 'ESP="Datos clientes"';


    local procedure WriteHeader()
    begin
        TempExcelBuffer.NewRow();
        TempExcelBuffer.AddColumn(Customer.FieldCaption(Customer."No."), false, '', true, false, false, '@', TempExcelBuffer."Cell Type"::Text);
        TempExcelBuffer.AddColumn(Customer.FieldCaption(Customer.Name), false, '', true, false, false, '@', TempExcelBuffer."Cell Type"::Text);
        TempExcelBuffer.AddColumn(Customer.FieldCaption(Customer."Phone No."), false, '', true, false, false, '@', TempExcelBuffer."Cell Type"::Text);
    end;
}

TempExcelBuffer.CreateNewBook(SheetName: Text[250]): Crea nuestro excel.
TempExcelBuffer.WriteSheet(ReportHeader: Text, CompanyName2: Text, UserID2: Text):
TempExcelBuffer.SetFriendlyFilename(Name: Text): Asignamos un nombre a nuestro fichero.
TempExcelBuffer.CloseBook(): Informa que ya hemos terminado de modificar nuestro Excel.
TempExcelBuffer.OpenExcel(): Función que descarga el archivo de Excel.

Hecho todo esto vamos a ver el resultado.

Visto que hemos conseguido descargar nuestro Excel vamos a ver le contenido del mismo.



Ahora te toca a tí😁.
Espero que os haya gustado, si tenéis alguna duda no dudéis en contactar con nosotros.

¡Un saludo!

LA BIBLIOTECA DE BC

Hola bibliotecario, 👋
Encantados de conocerte.

Déjanos tu correo para enviarte nuestro boletín con todas las novedades! 😁
(Domingos 18:00)

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

2 comentarios en “Crear y descargar un excel en Business Central SaaS”

Translate »