Cómo crear un proceso de exportación de Excel personalizado

Joe Jacob 8 de enero de 2023
Acumatica - ERP en la nube - ExcelExportProcess

Introducción

Revisado: Ene, 2023

Hay muchas formas de extraer datos de Acumatica. Por ejemplo, puede crear una consulta genérica o un informe. Casi todos los formularios de Acumatica contienen una cuadrícula y tienen la capacidad de exportar columnas de datos a Excel con sólo hacer clic en el icono disponible en la pantalla de Acumatica. Sin embargo, a menudo los usuarios pueden necesitar una exportación personalizada a Excel directamente desde una pantalla. En este artículo, le mostraré cómo crear un proceso sencillo de exportación personalizada a Excel y le proporcionaré algunos ejemplos de código para empezar.

 

Considere el siguiente patrón de diseño. En nuestro ejemplo, crearemos un botón en la pantalla de Reclamación de Gastos para exportar cierta información del encabezado y rellenar columnas específicas de la cuadrícula a Excel.

Cómo crear un proceso de exportación de Excel personalizado

Resultado deseado:

Cómo crear un proceso de exportación de Excel personalizado

El primer paso consiste en incluirPX.Exportcomo referencia en tu proyecto de Visual Studio de la siguiente manera:

Cómo crear un proceso de exportación de Excel personalizado

Ahora tendrás que incluir los siguientesespacios de nombres:

public class ExpenseClaimEntry_Extension : PXGraphExtension<ExpenseClaimEntry>
    {
        #region Event Handlers

        #region Button 
        public PXAction<EPExpenseClaim> exportGridToExcel;
        
        [PXUIField(DisplayName = "Export to Excel", MapEnableRights = PXCacheRights.Select)]
        [PXButton(Tooltip = "Export to Excel")]

        protected virtual void ExportGridToExcel()
        {
EPExpenseClaimDetails details = Base.ExpenseClaimDetails.Current as EPExpenseClaimDetails;
            if (details == null) return;

            PXLongOperation.StartOperation(Base, delegate ()
            {
                var excel = new PX.Export.Excel.Core.Package();
                var sheet = excel.Workbook.Sheets[1];

                string fileNumber = GetUniqueFileNumber();
                int headingRow = 1;
                int titleRow = 4;
                int gridRow = 5;

                // Heading Information
                sheet.Add(headingRow, 1, "Reference Number:");
                sheet.Add(headingRow, 2, Base.ExpenseClaim.Current.RefNbr);

                sheet.Add(headingRow + 1, 1, "Description:");
                sheet.Add(headingRow + 1, 2, Base.ExpenseClaim.Current.DocDesc ?? string.Empty);

                // Create Excel column titles
                // adjust column width
                sheet.SetColumnWidth(1, 20);
                sheet.SetColumnWidth(2, 20);
                sheet.SetColumnWidth(3, 40);
                sheet.SetColumnWidth(4, 40);

                sheet.Add(titleRow, 1, "Expense Date");
                sheet.Add(titleRow, 2, "Expense Item");
                sheet.Add(titleRow, 3, "Description");
                sheet.Add(titleRow, 4, "Claim Amount");

                foreach (EPExpenseClaimDetails row in Base.ExpenseClaimDetails.Select())
                {
                    // get inventory CD for display
                    InventoryItem inventoryItem = PXSelect<InventoryItem,
                        Where<InventoryItem.inventoryID, 
                        Equal<Required<InventoryItem.inventoryID>>>>.Select(Base, row.InventoryID);

                    sheet.Add(gridRow, 1, Convert.ToString(row.ExpenseDate));
                    sheet.Add(gridRow, 2, Convert.ToString(inventoryItem?.InventoryCD ?? string.Empty));
                    sheet.Add(gridRow, 3, row.TranDesc);
                    sheet.Add(gridRow, 4, Convert.ToString(row.ClaimCuryTranAmtWithTaxes));

                    gridRow++;
                }

                using (MemoryStream stream = new MemoryStream())
                {
                    excel.Write(stream);
                    string path = String.Format("ExpenseClaimExport-{0}.xlsx", fileNumber);
                    var info = new PX.SM.FileInfo(path, null, stream.ToArray());
                    throw new PXRedirectToFileException(info, true);
                }
            });

        }
        #endregion

        public static string GetUniqueFileNumber()
        {
            string dTime = DateTime.Now.ToString("yyMMddHHmmssff");
            return $"{dTime}";
        }

        #endregion

 

El código anterior debería proporcionarle los elementos básicos para ayudarle a diseñar sus propias exportaciones personalizadas. Este método le proporcionará mucha más libertad de diseño y control de los puntos de datos específicos que a usted y a sus clientes les gustaría ver, en lugar de utilizar los escenarios de exportación más limitados.

Autor del blog

Categorías