Hello guys,
Today, I would be sharing the code in D365 FO to pack your data (can be Xml, Excel, Word etc.) in ZIP folder.
using System.IO.Compression;
classSBSCreateZipFile
{        
    /// <summary>
    /// Runs the class with the specified arguments.
    /// </summary>
    /// <param name = "_args">The specified arguments.</param>
    publicstaticvoid main(Args _args)
    { 
        SBSCreateZipFile file = newSBSCreateZipFile();
        File.createAndDownloadExcelFileViaZip();
    }
    publicvoid createAndDownloadExcelFileViaZip()
    {
        conststr extensionZIP = '.zip';
        conststr extensionExcel = '.xlsx';
        System.IO.Stream workbookStream = new System.IO.MemoryStream();
        System.IO.MemoryStream memoryStream = new System.IO.MemoryStream();
        using (var package = new OfficeOpenXml.ExcelPackage(memoryStream))
        {
            var worksheets = package.get_Workbook().get_Worksheets();
            var worksheet = worksheets.Add("First sheet");
            var cells = worksheet.get_Cells();
            var cell = cells.get_Item(1,1);
            cell.set_Value("Customer id");
            package.Save();
        }
        memoryStream.Seek(0, System.IO.SeekOrigin::Begin);
        //File::SendFileToUser(memoryStream, "ExcelTesting_Vishal.xlsx"); // TO download only excel i.e. .xlsx
        str formDataFileName = "VishalTiwari_Package";
        str formDataFileNameXML = "ExcelTesting_Vishal";
        System.IO.MemoryStream zipArchiveStream = new System.IO.MemoryStream();
        using (ZipArchive zipArchive = new ZipArchive(zipArchiveStream, ZipArchiveMode::Create, true))
        {
            ZipArchiveEntry dataFileEntry = zipArchive.CreateEntry(formDataFileNameXML + extensionExcel);
            using (System.IO.Stream dataFileEntryStream = dataFileEntry.Open())
            {
                memoryStream.CopyTo(dataFileEntryStream);
            }
        }
        File::SendFileToUser(zipArchiveStream, formDataFileName + extensionZIP);
    }
}