چگونه فایل‌های اکسل را به صورت دسته‌ای به PDF تبدیل کنیم در .NET

چگونه فایل‌های اکسل را به صورت دسته‌ای به PDF تبدیل کنیم در .NET

این مقاله نشان می‌دهد چگونه می‌توان چندین فایل اکسل را به‌صورت دسته‌ای تبدیل کرد به PDF با استفاده از Aspose.Cells LowCode PDF Converter در برنامه‌های .NET. مبدل PDF رویکردی ساده‌شده برای تبدیل اسناد فراهم می‌کند بدون نیاز به کدنویسی گسترده یا دانش عمیق از ساختارهای داخلی اکسل - ایده‌آل برای تحلیل‌گران کسب‌وکار و توسعه‌دهندگان گزارش که نیاز به خودکارسازی جریان‌های کاری گزارش‌گیری دارند.

مشکل دنیای واقعی

در محیط‌های سازمانی، تیم‌های گزارش‌گیری اغلب نیاز دارند تا ده‌ها یا حتی صدها کتاب‌کار Excel را به‌صورت منظم به فرمت PDF تبدیل کنند. انجام این کار به‌صورت دستی زمان‌بر، مستعد خطا است و منابع ارزشمند را از وظایف تحلیلی مهم‌تر دور می‌کند. علاوه بر این، اطمینان از یکسان بودن قالب‌بندی و چیدمان در تمام گزارش‌ها هنگام تبدیل فایل‌ها به‌صورت تک‌تک چالش‌برانگیز است.

مرور کلی راه‌حل

با استفاده از Aspose.Cells LowCode PDF Converter می‌توانیم این چالش را به‌صورت کارآمد و با حداقل کد حل کنیم. این راه‌حل برای تحلیل‌گران کسب‌وکار و توسعه‌دهندگان گزارش که نیاز به ساده‌سازی فرآیندهای گزارش‌گیری، اطمینان از یکسانی در اسناد و آزادسازی زمان برای کارهای ارزشمندتر دارند، ایده‌آل است. رویکرد ما بر ایجاد یک سیستم پردازش دسته‌ای قوی متمرکز خواهد شد که قادر به مدیریت حجم بالای فایل‌های Excel با تنظیمات تبدیل سفارشی باشد.


پیش‌نیازها

قبل از پیاده‌سازی راه‌حل، اطمینان حاصل کنید که موارد زیر را دارید:

  1. Visual Studio 2019 یا نسخه‌های بعدی
  2. .NET 6.0 یا بالاتر (سازگار با .NET Framework 4.6.2+)
  3. Aspose.Cells for .NET package installed via NuGet
  4. درک پایه‌ای از برنامه‌نویسی C#
PM> Install-Package Aspose.Cells

پیاده‌سازی گام به گام

نمودار مورد نظر را از مجموعه Charts انتخاب کنید

پکیج Aspose.Cells را به پروژه خود اضافه کنید و فضای‌نام‌های مورد نیاز را وارد کنید:

using Aspose.Cells;
using Aspose.Cells.LowCode;
using System;
using System.IO;
using System.Collections.Generic;
using System.Threading.Tasks;

گام ۲: ایجاد ساختار دایرکتوری برای پردازش دسته‌ای

یک ساختار دایرکتوری تنظیم کنید تا فایل‌های ورودی Excel و فایل‌های خروجی PDF خود را سازماندهی کنید:

// Create directories if they don't exist
string inputDirectory = @"C:\Reports\ExcelFiles";
string outputDirectory = @"C:\Reports\PDFOutput";
string logDirectory = @"C:\Reports\Logs";

Directory.CreateDirectory(inputDirectory);
Directory.CreateDirectory(outputDirectory);
Directory.CreateDirectory(logDirectory);

گام ۳: پیاده‌سازی منطق کشف فایل‌ها

یک متد ایجاد کنید تا تمام فایل‌های Excel که نیاز به تبدیل دارند را کشف کند:

private List<string> GetExcelFilesToProcess(string directoryPath, string searchPattern = "*.xlsx")
{
    List<string> excelFiles = new List<string>();
    
    try
    {
        // Get all Excel files (.xlsx) in the directory
        string[] files = Directory.GetFiles(directoryPath, searchPattern);
        excelFiles.AddRange(files);
        
        // Optionally, you can also search for .xls files
        string[] oldFormatFiles = Directory.GetFiles(directoryPath, "*.xls");
        excelFiles.AddRange(oldFormatFiles);
        
        Console.WriteLine($"Found {excelFiles.Count} Excel files to process.");
    }
    catch (Exception ex)
    {
        Console.WriteLine($"Error searching for Excel files: {ex.Message}");
    }
    
    return excelFiles;
}

گام ۴: پیکربندی گزینه‌های مبدل PDF

یک متد ایجاد کنید تا گزینه‌های تبدیل PDF را برای خروجی یکسان تنظیم کند.:

private LowCodePdfSaveOptions ConfigurePdfOptions(bool onePagePerSheet = true, 
                                                 bool includeHiddenSheets = false,
                                                 bool printComments = false)
{
    // Create PDF save options
    PdfSaveOptions pdfOpts = new PdfSaveOptions();
    
    // Set whether each worksheet should be rendered as a separate page
    pdfOpts.OnePagePerSheet = onePagePerSheet;
    
    // Option to include hidden worksheets in the output
    pdfOpts.AllColumnsInOnePagePerSheet = true;
    
    // Configure additional PDF options
    pdfOpts.Compliance = PdfCompliance.PdfA1b; // For archival quality
    pdfOpts.PrintingPageType = PrintingPageType.ActualSize;
    
    // Configure comment display options
    pdfOpts.PrintComments = printComments ? PrintCommentsType.PrintInPlace : PrintCommentsType.PrintNoComments;
    
    // Create low code PDF save options
    LowCodePdfSaveOptions lcsopts = new LowCodePdfSaveOptions();
    lcsopts.PdfOptions = pdfOpts;
    
    return lcsopts;
}

مرحله 5: پیاده‌سازی منطق تبدیل تک‌فایل

یک متد برای تبدیل یک فایل Excel به PDF ایجاد کنید:

private bool ConvertExcelToPdf(string inputFilePath, string outputFilePath, LowCodePdfSaveOptions pdfOptions)
{
    try
    {
        // Create load options
        LowCodeLoadOptions loadOptions = new LowCodeLoadOptions();
        loadOptions.InputFile = inputFilePath;
        
        // Set output file path
        pdfOptions.OutputFile = outputFilePath;
        
        // Process the conversion
        PdfConverter.Process(loadOptions, pdfOptions);
        
        return true;
    }
    catch (Exception ex)
    {
        Console.WriteLine($"Error converting {Path.GetFileName(inputFilePath)}: {ex.Message}");
        return false;
    }
}

مرحله 6: پیاده‌سازی منطق پردازش دسته‌ای

اکنون متد اصلی را ایجاد کنید که چندین فایل را پردازش خواهد کرد:

public void BatchConvertExcelToPdf(string inputDirectory, string outputDirectory, string searchPattern = "*.xlsx")
{
    // Get all Excel files
    List<string> excelFiles = GetExcelFilesToProcess(inputDirectory, searchPattern);
    
    // Configure PDF options
    LowCodePdfSaveOptions pdfOptions = ConfigurePdfOptions(true, false, false);
    
    // Track conversion statistics
    int successCount = 0;
    int failureCount = 0;
    
    // Process each file
    foreach (string excelFile in excelFiles)
    {
        string fileName = Path.GetFileNameWithoutExtension(excelFile);
        string outputFilePath = Path.Combine(outputDirectory, $"{fileName}.pdf");
        
        Console.WriteLine($"Converting: {fileName}");
        
        bool success = ConvertExcelToPdf(excelFile, outputFilePath, pdfOptions);
        
        if (success)
        {
            successCount++;
            Console.WriteLine($"Successfully converted: {fileName}");
        }
        else
        {
            failureCount++;
            Console.WriteLine($"Failed to convert: {fileName}");
        }
    }
    
    // Report summary
    Console.WriteLine("\n===== Conversion Summary =====");
    Console.WriteLine($"Total files processed: {excelFiles.Count}");
    Console.WriteLine($"Successfully converted: {successCount}");
    Console.WriteLine($"Failed conversions: {failureCount}");
}

مرحله 7: پیاده‌سازی پردازش موازی برای عملکرد بهتر

برای دسته‌های بزرگ، پردازش موازی را پیاده‌سازی کنید تا سرعت تبدیل افزایش یابد:

public void ParallelBatchConvertExcelToPdf(string inputDirectory, string outputDirectory, string searchPattern = "*.xlsx")
{
    // Get all Excel files
    List<string> excelFiles = GetExcelFilesToProcess(inputDirectory, searchPattern);
    
    // Track conversion statistics
    int successCount = 0;
    int failureCount = 0;
    object lockObj = new object();
    
    // Configure PDF options (will be reused for each conversion)
    LowCodePdfSaveOptions pdfOptions = ConfigurePdfOptions(true, false, false);
    
    // Process files in parallel
    Parallel.ForEach(excelFiles, 
        new ParallelOptions { MaxDegreeOfParallelism = Environment.ProcessorCount }, 
        excelFile =>
    {
        string fileName = Path.GetFileNameWithoutExtension(excelFile);
        string outputFilePath = Path.Combine(outputDirectory, $"{fileName}.pdf");
        
        // Each thread needs its own copy of the options
        LowCodePdfSaveOptions threadPdfOptions = ConfigurePdfOptions(true, false, false);
        threadPdfOptions.OutputFile = outputFilePath;
        
        Console.WriteLine($"Converting: {fileName}");
        
        // Create load options
        LowCodeLoadOptions loadOptions = new LowCodeLoadOptions();
        loadOptions.InputFile = excelFile;
        
        try
        {
            // Process the conversion
            PdfConverter.Process(loadOptions, threadPdfOptions);
            
            lock (lockObj)
            {
                successCount++;
                Console.WriteLine($"Successfully converted: {fileName}");
            }
        }
        catch (Exception ex)
        {
            lock (lockObj)
            {
                failureCount++;
                Console.WriteLine($"Failed to convert {fileName}: {ex.Message}");
            }
        }
    });
    
    // Report summary
    Console.WriteLine("\n===== Conversion Summary =====");
    Console.WriteLine($"Total files processed: {excelFiles.Count}");
    Console.WriteLine($"Successfully converted: {successCount}");
    Console.WriteLine($"Failed conversions: {failureCount}");
}

گام 8: مثال کامل پیاده‌سازی

در اینجا یک مثال کامل و عملی آورده شده است که کل فرآیند تبدیل دسته‌ای را نشان می‌دهد:

using Aspose.Cells;
using Aspose.Cells.LowCode;
using System;
using System.Collections.Generic;
using System.IO;
using System.Threading.Tasks;

namespace ExcelBatchConverter
{
    public class ExcelToPdfBatchConverter
    {
        private readonly string _inputDirectory;
        private readonly string _outputDirectory;
        private readonly string _logDirectory;
        
        public ExcelToPdfBatchConverter(string inputDirectory, string outputDirectory, string logDirectory)
        {
            _inputDirectory = inputDirectory;
            _outputDirectory = outputDirectory;
            _logDirectory = logDirectory;
            
            // Ensure directories exist
            Directory.CreateDirectory(_inputDirectory);
            Directory.CreateDirectory(_outputDirectory);
            Directory.CreateDirectory(_logDirectory);
        }
        
        // Log the conversion activity
        private void LogConversion(string message)
        {
            string logFilePath = Path.Combine(_logDirectory, $"ConversionLog_{DateTime.Now.ToString("yyyyMMdd")}.txt");
            string logEntry = $"[{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")}] {message}";
            
            try
            {
                File.AppendAllText(logFilePath, logEntry + Environment.NewLine);
            }
            catch (Exception ex)
            {
                Console.WriteLine($"Warning: Unable to write to log file: {ex.Message}");
            }
            
            Console.WriteLine(logEntry);
        }
        
        // Get all Excel files to process
        private List<string> GetExcelFilesToProcess(string searchPattern = "*.xlsx")
        {
            List<string> excelFiles = new List<string>();
            
            try
            {
                // Get all Excel files in the directory
                excelFiles.AddRange(Directory.GetFiles(_inputDirectory, "*.xlsx"));
                excelFiles.AddRange(Directory.GetFiles(_inputDirectory, "*.xls"));
                excelFiles.AddRange(Directory.GetFiles(_inputDirectory, "*.xlsm"));
                
                LogConversion($"Found {excelFiles.Count} Excel files to process.");
            }
            catch (Exception ex)
            {
                LogConversion($"Error searching for Excel files: {ex.Message}");
            }
            
            return excelFiles;
        }
        
        // Configure PDF conversion options
        private LowCodePdfSaveOptions ConfigurePdfOptions()
        {
            // Create PDF save options
            PdfSaveOptions pdfOpts = new PdfSaveOptions();
            
            // Set whether each worksheet should be rendered as a separate page
            pdfOpts.OnePagePerSheet = true;
            
            // Set additional PDF options
            pdfOpts.Compliance = PdfCompliance.PdfA1b; // For archival quality
            pdfOpts.AllColumnsInOnePagePerSheet = true;
            
            // Create low code PDF save options
            LowCodePdfSaveOptions lcsopts = new LowCodePdfSaveOptions();
            lcsopts.PdfOptions = pdfOpts;
            
            return lcsopts;
        }
        
        // Process all Excel files in the input directory
        public void ProcessAllFiles(bool useParallelProcessing = true)
        {
            LogConversion("Starting batch conversion process...");
            
            List<string> excelFiles = GetExcelFilesToProcess();
            
            if (excelFiles.Count == 0)
            {
                LogConversion("No Excel files found to process.");
                return;
            }
            
            // Conversion statistics
            int successCount = 0;
            int failureCount = 0;
            
            if (useParallelProcessing)
            {
                // For thread safety with parallel processing
                object lockObj = new object();
                
                // Process files in parallel
                Parallel.ForEach(excelFiles, 
                    new ParallelOptions { MaxDegreeOfParallelism = Environment.ProcessorCount }, 
                    excelFile =>
                {
                    string fileName = Path.GetFileNameWithoutExtension(excelFile);
                    string outputFilePath = Path.Combine(_outputDirectory, $"{fileName}.pdf");
                    
                    try
                    {
                        // Create load options for this file
                        LowCodeLoadOptions loadOptions = new LowCodeLoadOptions();
                        loadOptions.InputFile = excelFile;
                        
                        // Configure PDF options for this file
                        LowCodePdfSaveOptions pdfOptions = ConfigurePdfOptions();
                        pdfOptions.OutputFile = outputFilePath;
                        
                        // Process the conversion
                        PdfConverter.Process(loadOptions, pdfOptions);
                        
                        lock (lockObj)
                        {
                            successCount++;
                            LogConversion($"Successfully converted: {fileName}");
                        }
                    }
                    catch (Exception ex)
                    {
                        lock (lockObj)
                        {
                            failureCount++;
                            LogConversion($"Failed to convert {fileName}: {ex.Message}");
                        }
                    }
                });
            }
            else
            {
                // Process files sequentially
                foreach (string excelFile in excelFiles)
                {
                    string fileName = Path.GetFileNameWithoutExtension(excelFile);
                    string outputFilePath = Path.Combine(_outputDirectory, $"{fileName}.pdf");
                    
                    try
                    {
                        // Create load options for this file
                        LowCodeLoadOptions loadOptions = new LowCodeLoadOptions();
                        loadOptions.InputFile = excelFile;
                        
                        // Configure PDF options for this file
                        LowCodePdfSaveOptions pdfOptions = ConfigurePdfOptions();
                        pdfOptions.OutputFile = outputFilePath;
                        
                        // Process the conversion
                        PdfConverter.Process(loadOptions, pdfOptions);
                        
                        successCount++;
                        LogConversion($"Successfully converted: {fileName}");
                    }
                    catch (Exception ex)
                    {
                        failureCount++;
                        LogConversion($"Failed to convert {fileName}: {ex.Message}");
                    }
                }
            }
            
            // Report summary
            LogConversion("\n===== Conversion Summary =====");
            LogConversion($"Total files processed: {excelFiles.Count}");
            LogConversion($"Successfully converted: {successCount}");
            LogConversion($"Failed conversions: {failureCount}");
            LogConversion("Batch conversion process completed.");
        }
    }
    
    class Program
    {
        static void Main(string[] args)
        {
            // Define directory paths
            string inputDirectory = Path.Combine("C:", "Reports", "ExcelFiles");
            string outputDirectory = Path.Combine("C:", "Reports", "PDFOutput");
            string logDirectory = Path.Combine("C:", "Reports", "Logs");
            
            // Create and run the converter
            ExcelToPdfBatchConverter converter = new ExcelToPdfBatchConverter(
                inputDirectory, outputDirectory, logDirectory);
                
            // Process all files (using parallel processing)
            converter.ProcessAllFiles(true);
            
            Console.WriteLine("Process completed. Press any key to exit.");
            Console.ReadLine();
        }
    }
}

موارد استفاده و کاربردها

سیستم‌های گزارش‌گیری سازمانی

در سیستم‌های گزارش‌گری مالی، دوره‌های پایان ماه یا پایان فصل اغلب نیاز به تبدیل تعداد زیادی گزارش مبتنی بر Excel به فرمت PDF برای توزیع به ذینفعان دارند. این راه‌حل تبدیل دسته‌ای به توسعه‌دهندگان گزارش امکان خودکارسازی فرآیند را می‌دهد، به‌طوری که تمام گزارش‌ها با تنظیمات و قالب‌بندی یکسان تبدیل شوند و در عین حال تلاش دستی به‌طرز چشمگیری کاهش یابد. گزارش‌ها می‌توانند به‌صورت خودکار در یک فرمت استاندارد بایگانی شوند، که بازیابی و انطباق را آسان‌تر می‌کند.

پردازش داده‌های بخش‌ها

تحلیل‌گران کسب‌وکار که داده‌های مبتنی بر Excel را از چندین بخش جمع‌آوری می‌کنند می‌توانند از این راه‌حل برای استانداردسازی و بایگانی ارسال‌ها استفاده کنند. با تبدیل خودکار کتاب‌کارهای دریافت‌شده به PDF، آن‌ها یک رکورد دائمی از ارسال داده‌ها ایجاد می‌کنند و در عین حال اطلاعات را برای ذینفعانی که Excel ندارند قابل اشتراک می‌سازند. قابلیت پردازش دسته‌ای به این معناست که حتی بخش‌های بزرگ با صدها کتاب‌کار می‌توانند به‌صورت کارآمد پردازش شوند.

گردش‌کارهای خودکار مدیریت اسناد

یکپارچه‌سازی با سیستم‌های مدیریت اسناد زمانی که گزارش‌های Excel به‌صورت خودکار به PDF تبدیل می‌شوند، به‌صورت بی‌نقص انجام می‌گیرد. این راه‌حل می‌تواند به‌عنوان بخشی از یک گردش کار بزرگ‌تر زمان‌بندی شود تا فایل‌های Excel جدید را دریافت، به PDF تبدیل و سپس به مخازن اسناد مناسب با متادیتای صحیح هدایت کند. قالب‌بندی ثابت و خروجی PDF با کیفیت بایگانی، دسترسی طولانی‌مدت به داده‌های تجاری را تضمین می‌کند.


چالش‌ها و راه‌حل‌های رایج

چالش 1: مدیریت فایل‌های Excel با حفاظت رمز عبور

راه‌حل: گزینه‌های بارگذاری را برای شامل شدن مدیریت رمز عبور تغییر دهید:

// For password-protected Excel files
LowCodeLoadOptions loadOptions = new LowCodeLoadOptions();
loadOptions.InputFile = excelFile;
loadOptions.Password = "YourPassword"; // Supply the password

// Then proceed with conversion as normal
PdfConverter.Process(loadOptions, pdfOptions);

چالش ۲: حفظ قالب‌بندی Excel در خروجی PDF

راه‌حل: اطمینان حاصل کنید که گزینه‌های PDF به‌درستی پیکربندی شده‌اند تا قالب‌بندی حفظ شود:

PdfSaveOptions pdfOpts = new PdfSaveOptions();
pdfOpts.OnePagePerSheet = true;
pdfOpts.PrintingPageType = PrintingPageType.ActualSize;
pdfOpts.DefaultFontName = "Arial"; // Specify a fallback font
pdfOpts.Compliance = PdfCompliance.PdfA1b; // For archival quality

چالش ۳: مدیریت فایل‌های Excel بسیار بزرگ

راه‌حل: برای فایل‌های بسیار بزرگ، بهینه‌سازی حافظه را پیاده‌سازی کنید:

LowCodeLoadOptions loadOptions = new LowCodeLoadOptions();
loadOptions.InputFile = largeExcelFile;
loadOptions.MemorySetting = MemorySetting.MemoryPreference; // Optimize for memory usage

// Consider file-specific optimizations
PdfSaveOptions pdfOpts = new PdfSaveOptions();
pdfOpts.OptimizationType = OptimizationType.MinimumSize;

بررسی عملکرد

  • برای عملکرد بهینه با دسته‌های بزرگ، از روش پردازش موازی با یک مقدار معقول استفاده کنید MaxDegreeOfParallelism بر اساس توانایی‌های سرور شما
  • در هنگام کار با کتاب‌کارهای Excel بسیار بزرگ، برای جلوگیری از فشار حافظه، پردازش فایل‌ها را در دسته‌های کوچکتر در نظر بگیرید
  • یک مکانیزم نظارت پیاده‌سازی کنید تا پیشرفت تبدیل و استفاده از منابع را ردیابی کند
  • برای استقرارهای تولیدی، اجرای فرآیند تبدیل را بر روی سرور اختصاصی یا در ساعات کم‌ترافیک در نظر بگیرید

بهترین شیوه‌ها

  1. اعتبارسنجی پیش از فایل‌های Excel قبل از پردازش دسته‌ای برای شناسایی مشکلات احتمالی
  2. پیاده‌سازی مدیریت خطای قوی تا اطمینان حاصل شود که فرآیند در صورت شکست یک فایل متوقف نشود
  3. ایجاد لاگ‌های دقیق از فرآیند تبدیل برای عیب‌یابی و حسابرسی
  4. سازماندهی خروجی PDFها در یک ساختار پوشه‌ای منظم برای مدیریت آسان‌تر
  5. راه‌اندازی یک سیستم نظارت که مدیران را از شکست‌های تبدیل مطلع می‌کند
  6. تست با انواع مختلف فایل‌های Excel (XLSX, XLS, XLSM) برای اطمینان از سازگاری

سناریوهای پیشرفته

برای نیازهای پیچیده‌تر، این پیاده‌سازی‌های پیشرفته را در نظر بگیرید:

سناریو 1: نام‌گذاری سفارشی PDF بر اساس محتوای سلول Excel

می‌توانید مقادیر خاص سلول‌ها را استخراج کنید تا در نام فایل PDF استفاده شوند:

// Advanced naming based on cell content
private string GetCustomPdfName(string excelFilePath)
{
    try
    {
        // Load the workbook
        Workbook workbook = new Workbook(excelFilePath);
        
        // Get report date from cell A1
        string reportDate = workbook.Worksheets[0].Cells["A1"].StringValue;
        
        // Get report type from cell B1
        string reportType = workbook.Worksheets[0].Cells["B1"].StringValue;
        
        // Create a custom name
        string customName = $"{reportType}_{reportDate}";
        
        // Sanitize the filename
        foreach (char invalidChar in Path.GetInvalidFileNameChars())
        {
            customName = customName.Replace(invalidChar, '_');
        }
        
        return customName + ".pdf";
    }
    catch
    {
        // Fallback to default naming if extraction fails
        return Path.GetFileNameWithoutExtension(excelFilePath) + ".pdf";
    }
}

سناریو 2: تبدیل انتخابی شیت‌ها

فقط شیت‌های خاصی را از هر فایل Excel تبدیل کنید:

// Configure PDF options to convert only specific sheets
private LowCodePdfSaveOptions ConfigureSelectiveSheetsOptions(string[] sheetNames)
{
    PdfSaveOptions pdfOpts = new PdfSaveOptions();
    pdfOpts.OnePagePerSheet = true;
    
    // Create a worksheet name collection for selective conversion
    WorksheetCollection worksheets = new WorksheetCollection();
    foreach (string sheetName in sheetNames)
    {
        worksheets.Add(sheetName);
    }
    
    // Set sheet selection
    SheetOptions sheetOptions = new SheetOptions();
    sheetOptions.SheetNames = worksheets;
    pdfOpts.SheetOptions = sheetOptions;
    
    // Create low code PDF save options
    LowCodePdfSaveOptions lcsopts = new LowCodePdfSaveOptions();
    lcsopts.PdfOptions = pdfOpts;
    
    return lcsopts;
}

نتیجه‌گیری

با پیاده‌سازی Aspose.Cells LowCode PDF Converter برای پردازش دسته‌ای، تحلیل‌گران کسب‌وکار و توسعه‌دهندگان گزارش می‌توانند زمان صرف‌شده برای تبدیل دستی Excel به PDF را به‌طرز چشمگیری کاهش دهند. این رویکرد به‌طور قابل‌توجهی بهره‌وری را ارتقا می‌دهد و اطمینان می‌دهد که تمام PDFهای تولید شده از نظر سازگاری یکدست باشند، در حالی که کیفیت و قالب‌بندی فایل‌های اصلی Excel حفظ می‌شود. این راه‌حل از استفاده در بخش‌های کوچک تا سیستم‌های گزارش‌گیری در سطح سازمانی مقیاس‌پذیر است و گزینه‌های سفارشی‌سازی برای برآورده کردن نیازهای خاص کسب‌وکار را ارائه می‌دهد.

برای اطلاعات بیشتر و مثال‌های اضافی، به مراجعه کنید به Aspose.Cells.LowCode API Reference .

 فارسی