چگونه به تبدیل داده های اکسل به جدول HTML آماده وب

چگونه به تبدیل داده های اکسل به جدول HTML آماده وب

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

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

توسعه دهندگان وب و سازندگان صفحه نمایش اغلب نیاز به ارائه داده های مبتنی بر اکسل در وب سایت ها و یا در برنامه های وب. تبدیل فایل های اکسل به HTML به صورت دستی زمان و خطا، به ویژه در هنگام برخورد با فرمت پیچیده، چندین صفحه، و یا به طور منظم به روز شده منابع داده. علاوه بر این، تضمین یک ارائه مداوم در سراسر مرورگرهای مختلف اضافه می کند یک لایه دیگر از پیچیدگی.

بررسی راه حل

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


پیش شرط

قبل از راه حل، مطمئن شوید که:

  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

مرحله به مرحله اجرای

مرحله اول: نصب و تنظیم Aspose.Cells

بسته Aspose.Cells را به پروژه خود اضافه کنید و فضاهای نامی مورد نیاز را شامل کنید:

using Aspose.Cells;
using Aspose.Cells.LowCode;
using System;
using System.IO;
using System.Text;

مرحله دوم: اطلاعات ورودی خود را آماده کنید

شما می توانید از یک فایل موجود استفاده کنید یا آن را به صورت برنامه نویسی با داده هایی که می خواهید در وب ارائه دهید، ایجاد کنید:

// Path to your source Excel file
string excelFilePath = "data/quarterly-report.xlsx";

// Ensure the file exists
if (!File.Exists(excelFilePath))
{
    Console.WriteLine("Source file not found!");
    return;
}

مرحله 3: تنظیم گزینه های تبدیل HTML

گزینه های فرآیند تبدیل HTML را با توجه به نیازهای شما تنظیم کنید:

// Create load options for the Excel file
LowCodeLoadOptions loadOptions = new LowCodeLoadOptions();
loadOptions.InputFile = excelFilePath;

// Configure HTML save options with your preferred settings
LowCodeHtmlSaveOptions saveOptions = new LowCodeHtmlSaveOptions();
HtmlSaveOptions htmlOptions = new HtmlSaveOptions();

// Customize HTML output options
htmlOptions.ExportImagesAsBase64 = true; // Embed images directly in HTML
htmlOptions.ExportActiveWorksheetOnly = false; // Convert all worksheets
htmlOptions.ExportHiddenWorksheets = false; // Skip hidden worksheets
htmlOptions.ExportGridLines = false; // Don't show gridlines
htmlOptions.CellNameAttribute = "data-cell"; // Custom attribute for cell reference

// If you want to convert specific worksheets only
htmlOptions.SheetSet = new Aspose.Cells.Rendering.SheetSet(new int[] { 0, 1 }); // Only first and second sheets

// Apply the HTML options to save options
saveOptions.HtmlOptions = htmlOptions;

// Set the output file path
saveOptions.OutputFile = "output/quarterly-report.html";

مرحله چهارم: فرآیند تبدیل HTML را اجرا کنید

عملیات HTML Converter را با گزینه های تنظیم شده اجرا کنید:

try
{
    // Execute the conversion process
    HtmlConverter.Process(loadOptions, saveOptions);
    Console.WriteLine("Conversion completed successfully!");
}
catch (Exception ex)
{
    Console.WriteLine($"Conversion failed: {ex.Message}");
}

مرحله پنجم: خروجی را مدیریت کنید

پردازش و استفاده از خروجی HTML به عنوان مورد نیاز برای برنامه شما:

// If you want to process the HTML output in memory instead of writing to a file
using (MemoryStream memoryStream = new MemoryStream())
{
    // Configure output stream
    LowCodeHtmlSaveOptions memoryOptions = new LowCodeHtmlSaveOptions();
    memoryOptions.HtmlOptions = htmlOptions; // Use the same HTML options as before
    memoryOptions.OutputStream = memoryStream;

    // Process to memory stream
    HtmlConverter.Process(loadOptions, memoryOptions);

    // Get HTML content as string
    memoryStream.Position = 0;
    string htmlContent = Encoding.UTF8.GetString(memoryStream.ToArray());

    // Now you can manipulate the HTML content as needed
    // For example, you could inject it into a webpage:
    Console.WriteLine("HTML content length: " + htmlContent.Length);
    
    // Check if specific elements are present
    if (htmlContent.Contains("data-cell=\"B2\""))
    {
        Console.WriteLine("Custom cell attributes are present in the HTML output.");
    }
}

مرحله ششم: راه حل اشتباهات

برای انجام کارهای سخت، خطای مناسب را اضافه کنید:

try
{
    // Basic validation before conversion
    if (string.IsNullOrEmpty(loadOptions.InputFile))
    {
        throw new ArgumentException("Input file path cannot be empty");
    }

    // Check if output directory exists, create if not
    string outputDir = Path.GetDirectoryName(saveOptions.OutputFile);
    if (!string.IsNullOrEmpty(outputDir) && !Directory.Exists(outputDir))
    {
        Directory.CreateDirectory(outputDir);
    }

    // Execute conversion with validation
    HtmlConverter.Process(loadOptions, saveOptions);
    
    // Verify output file was created
    if (File.Exists(saveOptions.OutputFile))
    {
        Console.WriteLine($"HTML file successfully created at: {saveOptions.OutputFile}");
    }
    else
    {
        Console.WriteLine("Warning: Output file was not created.");
    }
}
catch (CellsException cex)
{
    // Handle Aspose.Cells specific exceptions
    Console.WriteLine($"Aspose.Cells error: {cex.Message}");
    // Log additional information
    Console.WriteLine($"Error code: {cex.Code}");
}
catch (IOException ioex)
{
    // Handle file access issues
    Console.WriteLine($"File access error: {ioex.Message}");
}
catch (Exception ex)
{
    // General error handling
    Console.WriteLine($"Error: {ex.Message}");
    Console.WriteLine($"Stack trace: {ex.StackTrace}");
}

مرحله هفتم: بهینه سازی عملکرد

این تکنیک ها را برای محیط های تولید در نظر بگیرید:

  • استفاده از جریان های حافظه برای پردازش حجم بالا
  • اجرای پردازش موازی برای تبدیل های بسته
  • محدودیت های منابع برای فایل های بزرگ
  • منابع را به درستی در اختیار داشته باشید
using Aspose.Cells;
using Aspose.Cells.LowCode;
// Implementing a complete publishing pipeline
async System.Threading.Tasks.Task PublishExcelToWebAsync(string excelFile, string webRootPath)
{
    // Create base filename
    string baseName = Path.GetFileNameWithoutExtension(excelFile);
    
    // Generate HTML version
    LowCodeLoadOptions loadOptions = new LowCodeLoadOptions();
    loadOptions.InputFile = excelFile;
    
    // HTML output for web viewing
    LowCodeHtmlSaveOptions htmlOptions = new LowCodeHtmlSaveOptions();
    htmlOptions.OutputFile = Path.Combine(webRootPath, "reports", $"{baseName}.html");
    
    // Configure HTML styling
    var htmlSaveOpts = new HtmlSaveOptions();
    htmlSaveOpts.ExportImagesAsBase64 = true;
    htmlSaveOpts.ExportGridLines = false;
    htmlOptions.HtmlOptions = htmlSaveOpts;
    
    // Generate JSON for API consumption
    LowCodeSaveOptions jsonOptions = new LowCodeSaveOptions();
    jsonOptions.OutputFile = Path.Combine(webRootPath, "api", "data", $"{baseName}.json");
    
    // Create PDF for download option
    LowCodePdfSaveOptions pdfOptions = new LowCodePdfSaveOptions();
    pdfOptions.OutputFile = Path.Combine(webRootPath, "downloads", $"{baseName}.pdf");
    
    // Execute all conversions
    await System.Threading.Tasks.Task.Run(() => {
        HtmlConverter.Process(loadOptions, htmlOptions);
        JsonConverter.Process(loadOptions, jsonOptions);
        PdfConverter.Process(loadOptions, pdfOptions);
    });
    
    // Update sitemap or database with new content
    await UpdateContentIndexAsync(baseName, new {
        html = htmlOptions.OutputFile,
        json = jsonOptions.OutputFile,
        pdf = pdfOptions.OutputFile
    });
}

// Example method to update content index
async System.Threading.Tasks.Task UpdateContentIndexAsync(string reportName, object paths)
{
    // Implementation would depend on your web application's architecture
    Console.WriteLine($"Published report {reportName} to web");
}

مرحله هشتم: نمونه کامل

در اینجا یک نمونه کامل از کار است که نشان دهنده کل فرآیند:

using System;
using System.IO;
using System.Text;
using System.Threading.Tasks;
using Aspose.Cells;
using Aspose.Cells.LowCode;
using Aspose.Cells.Rendering;

namespace ExcelToHtmlConverter
{
    class Program
    {
        static void Main(string[] args)
        {
            try
            {
                // Simple conversion with default options
                SimpleHtmlConversion();
                
                // Advanced conversion with custom options
                AdvancedHtmlConversion();
                
                // Memory stream conversion
                MemoryStreamHtmlConversion();
                
                // Batch processing example
                BatchProcessing();
                
                Console.WriteLine("All conversions completed successfully!");
            }
            catch (Exception ex)
            {
                Console.WriteLine($"An error occurred: {ex.Message}");
            }
        }
        
        static void SimpleHtmlConversion()
        {
            // Simple conversion using default settings
            string sourcePath = "data/source.xlsx";
            string outputPath = "output/simple-output.html";
            
            // Ensure output directory exists
            Directory.CreateDirectory(Path.GetDirectoryName(outputPath));
            
            // One-line conversion with default settings
            HtmlConverter.Process(sourcePath, outputPath);
            
            Console.WriteLine($"Simple conversion completed: {outputPath}");
        }
        
        static void AdvancedHtmlConversion()
        {
            // Advanced conversion with custom options
            string sourcePath = "data/complex-report.xlsx";
            
            // Configure load options
            LowCodeLoadOptions loadOptions = new LowCodeLoadOptions();
            loadOptions.InputFile = sourcePath;
            
            // Configure save options
            LowCodeHtmlSaveOptions saveOptions = new LowCodeHtmlSaveOptions();
            HtmlSaveOptions htmlOptions = new HtmlSaveOptions();
            
            // Customize HTML output
            htmlOptions.ExportImagesAsBase64 = true;
            htmlOptions.CellNameAttribute = "data-excel-cell";
            htmlOptions.ExportGridLines = false;
            htmlOptions.ExportHeadings = true;
            htmlOptions.HtmlCrossStringType = HtmlCrossType.Default;
            
            // Only export the first sheet
            htmlOptions.SheetSet = new SheetSet(new int[] { 0 });
            
            // Apply HTML options and set output path
            saveOptions.HtmlOptions = htmlOptions;
            saveOptions.OutputFile = "output/advanced-output.html";
            
            // Process the conversion
            HtmlConverter.Process(loadOptions, saveOptions);
            
            Console.WriteLine($"Advanced conversion completed: {saveOptions.OutputFile}");
        }
        
        static void MemoryStreamHtmlConversion()
        {
            // In-memory conversion example
            string sourcePath = "data/metrics.xlsx";
            LowCodeLoadOptions loadOptions = new LowCodeLoadOptions();
            loadOptions.InputFile = sourcePath;
            
            // Setup HTML options
            LowCodeHtmlSaveOptions saveOptions = new LowCodeHtmlSaveOptions();
            HtmlSaveOptions htmlOptions = new HtmlSaveOptions();
            htmlOptions.CellNameAttribute = "data-ref";
            saveOptions.HtmlOptions = htmlOptions;
            
            // Use memory stream instead of file output
            using (MemoryStream stream = new MemoryStream())
            {
                saveOptions.OutputStream = stream;
                
                // Process to memory
                HtmlConverter.Process(loadOptions, saveOptions);
                
                // Get HTML content as string
                stream.Position = 0;
                string htmlContent = Encoding.UTF8.GetString(stream.ToArray());
                
                // Process HTML content as needed
                Console.WriteLine($"Generated HTML content size: {htmlContent.Length} bytes");
                
                // You could now send this to a web client, save to database, etc.
                File.WriteAllText("output/memory-stream-output.html", htmlContent);
            }
            
            Console.WriteLine("Memory stream conversion completed");
        }
        
        static void BatchProcessing()
        {
            // Get all Excel files in a directory
            string sourceDirectory = "data/batch";
            string outputDirectory = "output/batch";
            
            // Create output directory
            Directory.CreateDirectory(outputDirectory);
            
            // Get all Excel files
            string[] excelFiles = Directory.GetFiles(sourceDirectory, "*.xlsx");
            
            Console.WriteLine($"Starting batch conversion of {excelFiles.Length} files...");
            
            // Process files in parallel
            Parallel.ForEach(excelFiles, excelFile =>
            {
                try
                {
                    // Setup conversion options for this file
                    LowCodeLoadOptions loadOptions = new LowCodeLoadOptions();
                    loadOptions.InputFile = excelFile;
                    
                    LowCodeHtmlSaveOptions saveOptions = new LowCodeHtmlSaveOptions();
                    saveOptions.OutputFile = Path.Combine(
                        outputDirectory, 
                        Path.GetFileNameWithoutExtension(excelFile) + ".html"
                    );
                    
                    // Execute conversion
                    HtmlConverter.Process(loadOptions, saveOptions);
                    
                    Console.WriteLine($"Converted: {Path.GetFileName(excelFile)}");
                }
                catch (Exception ex)
                {
                    Console.WriteLine($"Failed to convert {Path.GetFileName(excelFile)}: {ex.Message}");
                }
            });
            
            Console.WriteLine("Batch processing completed");
        }
    }
}

استفاده از موارد و برنامه ها

گزارش های اینترنتی

گزارش های مالی یا کسب و کار مبتنی بر اکسل را به جدول های HTML تعاملی تبدیل کنید که می توانند در برنامه های وب ادغام شوند.این امر به سازمان ها اجازه می دهد تا تجزیه و تحلیل مبتنی بر اکسل را از طریق پورتال های وب امن به اشتراک بگذارند و در عین حال فرمت و ساختار داده های اصلی را حفظ کنند.

سیستم های مدیریت محتوا

ادغام داده های اکسل به صورت بی نظیر در سیستم های مدیریت محتوا برای انتشار داده های ساختار یافته به عنوان محتوای وب. این اجازه می دهد تا نویسندگان محتوا در محیط های آشنا اکسل کار در حالی که به طور خودکار انتشار نتایج به وب سایت ها بدون اصلاح دستی و یا واردات داده.

ساختن Dashboard

ایجاد صفحه نمایش های پویا از Excel برای برنامه های کسب و کار هوش. خروجی HTML را می توان با CSS سبک و با جاوا اسکریپت برای ایجاد تصاویر تعاملی و ابزارهای اکتشاف داده به طور مستقیم از منابع اکسل.


چالش ها و راه حل های مشترک

چالش اول: حفظ پیچیده Excel

راه حل : تنظیم HtmlSaveOptions برای حفظ سبک سلولی، سلول های ترکیبی و فرمت شرایط با تنظیم ویژگی های مناسب ExportCellStyles و رمزگذاری.

چالش دوم: مشکلات عملکرد فایل های بزرگ

راه حل : پیاده سازی تکنیک های تبدیل انتخابی ورق و بهینه سازی حافظه با استفاده از ویژگی SheetSet برای تبدیل تنها ورق های مورد نیاز و استفاده از منابع به درستی پس از استفاده.

چالش 3: سازگاری مرورگر

راه حل : از گزینه ExportImagesAsBase64 برای قرار دادن تصاویر به طور مستقیم در خروجی HTML استفاده کنید، اجتناب از وابستگی های فایل خارجی که ممکن است در محیط های مرورگر مختلف شکسته شود.


بررسی عملکرد

  • استفاده از جریان های حافظه برای پردازش حجم بالا برای جلوگیری از دیسک های غیر ضروری I/O
  • اجرای تبدیل انتخابی ورق برای کتاب های بزرگ برای کاهش زمان پردازش
  • در نظر گرفتن پردازش غیر همزمان برای تبدیل بسته در برنامه های وب
  • نظارت بر استفاده از حافظه در هنگام پردازش فایل های بسیار بزرگ

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

  1. همیشه قبل از پردازش فایل های ورودی را تأیید کنید تا از خطاهای زمان اجرا اجتناب کنید
  2. اجرای صحیح مدیریت خطا و سوابق برای برنامه های تولید
  3. استفاده از تکنیک های پخش برای فایل های بزرگ برای کاهش مصرف حافظه
  4. نتایج تبدیل کشی در صورت لزوم برای بهبود عملکرد برنامه
  5. تنظیم ارزش های زمان مناسب برای پردازش فایل های بزرگ

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

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

سناریو 1: سفارشی سازی CSS برای خروجی HTML

// Configure HTML options with custom CSS
HtmlSaveOptions htmlOptions = new HtmlSaveOptions();
htmlOptions.AddCustomCssSheet = true;
htmlOptions.CustomCssFileName = "custom-styles.css";

// Create a custom CSS file
string cssContent = @"
.excel-table { font-family: Arial, sans-serif; border-collapse: collapse; width: 100%; }
.excel-table td { border: 1px solid #ddd; padding: 8px; }
.excel-table tr:nth-child(even) { background-color: #f2f2f2; }
.excel-table tr:hover { background-color: #ddd; }
.excel-header { background-color: #4CAF50; color: white; }
";
File.WriteAllText("output/custom-styles.css", cssContent);

// Apply options and process
LowCodeHtmlSaveOptions saveOptions = new LowCodeHtmlSaveOptions();
saveOptions.HtmlOptions = htmlOptions;
saveOptions.OutputFile = "output/styled-report.html";
HtmlConverter.Process(loadOptions, saveOptions);

سناریو ۲: خط انتشار چند فرمت وب

using Aspose.Cells;
using Aspose.Cells.LowCode;
// Implementing a complete publishing pipeline
async System.Threading.Tasks.Task PublishExcelToWebAsync(string excelFile, string webRootPath)
{
    // Create base filename
    string baseName = Path.GetFileNameWithoutExtension(excelFile);
    
    // Generate HTML version
    LowCodeLoadOptions loadOptions = new LowCodeLoadOptions();
    loadOptions.InputFile = excelFile;
    
    // HTML output for web viewing
    LowCodeHtmlSaveOptions htmlOptions = new LowCodeHtmlSaveOptions();
    htmlOptions.OutputFile = Path.Combine(webRootPath, "reports", $"{baseName}.html");
    
    // Configure HTML styling
    var htmlSaveOpts = new HtmlSaveOptions();
    htmlSaveOpts.ExportImagesAsBase64 = true;
    htmlSaveOpts.ExportGridLines = false;
    htmlOptions.HtmlOptions = htmlSaveOpts;
    
    // Generate JSON for API consumption
    LowCodeSaveOptions jsonOptions = new LowCodeSaveOptions();
    jsonOptions.OutputFile = Path.Combine(webRootPath, "api", "data", $"{baseName}.json");
    
    // Create PDF for download option
    LowCodePdfSaveOptions pdfOptions = new LowCodePdfSaveOptions();
    pdfOptions.OutputFile = Path.Combine(webRootPath, "downloads", $"{baseName}.pdf");
    
    // Execute all conversions
    await System.Threading.Tasks.Task.Run(() => {
        HtmlConverter.Process(loadOptions, htmlOptions);
        JsonConverter.Process(loadOptions, jsonOptions);
        PdfConverter.Process(loadOptions, pdfOptions);
    });
    
    // Update sitemap or database with new content
    await UpdateContentIndexAsync(baseName, new {
        html = htmlOptions.OutputFile,
        json = jsonOptions.OutputFile,
        pdf = pdfOptions.OutputFile
    });
}

// Example method to update content index
async System.Threading.Tasks.Task UpdateContentIndexAsync(string reportName, object paths)
{
    // Implementation would depend on your web application's architecture
    Console.WriteLine($"Published report {reportName} to web");
}

نتیجه گیری

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

برای اطلاعات بیشتر و نمونه های بیشتر، به Aspose.Cells.LowCode API Reference .

 فارسی