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
Genial para entender el tema de excel en BC!! Gran post!
Muchas gracias!!😉