Como converter gráficos e folhas do Excel em imagens PNG

Como converter gráficos e folhas do Excel em imagens PNG

Este artigo demonstra como converter gráficos e folhetos de trabalho do Excel para imagens PNG usando o Aspose.Cells LowCode ImageConverter em aplicações .NET. Image Converters fornece uma abordagem simplificada para exportar os elementos visuais de Excel como imagens de alta qualidade sem exigir codificação extensa ou conhecimento profundo das estruturas internas do Excel.

Problemas do mundo real

Os designers de relatórios e analistas de negócios muitas vezes precisam incorporar visualizações baseadas no Excel em apresentações, documentos e aplicações da web. Manual tomando capturas de tela ou usando bibliotecas de manipulação de imagens complexas resultam em qualidade inconsistente, formatação perdida e desenvolvimento significativo.

Solução Overview

Usando Aspose.Cells LowCode ImageConverter, podemos resolver este desafio de forma eficiente com código mínimo. Esta solução é ideal para designers de relatórios e analistas de negócios que precisam gerar programadamente ativos visuais de alta qualidade dos dados do Excel, ao mesmo tempo que preservam a formatação e fidelidade visual.

Pré-requisitos

Antes de implementar a solução, certifique-se de ter:

  • Visual Studio 2019 ou posterior
  • .NET 6.0 ou posterior (compatível com .Net Framework 4.6.2+)
  • Aspose.Cells para o pacote .NET instalado através de NuGet
  • Compreensão básica da programação C#

PM> Install-Package Aspose.Cells

Implementação passo a passo

Passo 1: Instale e Configure Aspose.Cells

Adicione o pacote Aspose.Cells ao seu projeto e inclua os espaços de nomes necessários:

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

Passo 2: Prepare seus dados de entrada

Identifique o arquivo do Excel que contém os gráficos ou folhetos de trabalho que você deseja converter para imagens PNG. Assegure-se de que o ficheiro existe e está acessível a partir da sua aplicação:

// Define the path to your Excel file
string excelFilePath = "reports/quarterly_sales.xlsx";

// Ensure the directory for output exists
Directory.CreateDirectory("result");

Passo 3: Configure as opções de ImageConverter

Configure as opções para o processo ImageConverter de acordo com suas necessidades:

// Basic usage - convert the entire workbook
ImageConverter.Process(excelFilePath, "result/BasicOutput.png");

// Advanced configuration
LowCodeLoadOptions loadOptions = new LowCodeLoadOptions();
loadOptions.InputFile = excelFilePath;

LowCodeImageSaveOptions saveOptions = new LowCodeImageSaveOptions();
ImageOrPrintOptions imageOptions = new ImageOrPrintOptions();
imageOptions.ImageType = Aspose.Cells.Drawing.ImageType.Png;
imageOptions.Quality = 100; // Set the quality of the output image
imageOptions.OnePagePerSheet = true; // Each sheet on a separate image
saveOptions.ImageOptions = imageOptions;

Passo 4: Execute o processo ImageConverter

Execute a operação ImageConverter com as opções configuradas:

// Basic execution
ImageConverter.Process(loadOptions, saveOptions);

// Advanced execution with custom file naming
LowCodeSaveOptionsProviderOfPlaceHolders fileNameProvider = new LowCodeSaveOptionsProviderOfPlaceHolders(
    "result/Chart${SheetIndexPrefix}${SheetIndex}_${SplitPartIndex}.png");
fileNameProvider.SheetIndexOffset = 1;
fileNameProvider.SheetIndexPrefix = "S";
fileNameProvider.SplitPartIndexOffset = 1;

ImageConverter.Process(loadOptions, saveOptions, fileNameProvider);

Passo 5: Gerencie a saída

Processar e utilizar as imagens PNG geradas conforme necessário para a sua aplicação:

// Verify the output files exist
if (File.Exists("result/ChartS1_1.png"))
{
    Console.WriteLine("Chart image successfully created!");
    
    // Implement your logic to use the image files
    // For example: Copy to a web server directory
    // File.Copy("result/ChartS1_1.png", "wwwroot/images/chart1.png");
}

Passo 6: Implementação de erros de gestão

Adicione o tratamento de erros adequado para garantir uma operação robusta:

try
{
    // Configure load options
    LowCodeLoadOptions loadOptions = new LowCodeLoadOptions();
    loadOptions.InputFile = excelFilePath;
    
    // Configure save options
    LowCodeImageSaveOptions saveOptions = new LowCodeImageSaveOptions();
    ImageOrPrintOptions imageOptions = new ImageOrPrintOptions();
    imageOptions.ImageType = Aspose.Cells.Drawing.ImageType.Png;
    saveOptions.ImageOptions = imageOptions;
    
    // Execute conversion
    ImageConverter.Process(loadOptions, saveOptions);
    
    Console.WriteLine("Conversion completed successfully.");
}
catch (Exception ex)
{
    // Error handling and logging
    Console.WriteLine($"Error during conversion: {ex.Message}");
    // Log the error to your logging system
    // Consider implementing retry logic for transient issues
}

Passo 7: Otimizar o desempenho

Considere estas técnicas de otimização para ambientes de produção:

  • Use fluxos de memória para processamento de alto volume para evitar o excesso de arquivo I/O
  • Implementação de processamento paralelo para múltiplos gráficos ou folhas de trabalho
  • Ajuste as configurações de qualidade da imagem para o equilíbrio adequado entre qualidade e tamanho de arquivo
// Using memory streams for programmatic use without file I/O
using (MemoryStream outputStream = new MemoryStream())
{
    LowCodeLoadOptions loadOptions = new LowCodeLoadOptions();
    loadOptions.InputFile = excelFilePath;
    
    LowCodeImageSaveOptions saveOptions = new LowCodeImageSaveOptions();
    ImageOrPrintOptions imageOptions = new ImageOrPrintOptions();
    imageOptions.ImageType = Aspose.Cells.Drawing.ImageType.Png;
    
    // For web use, might want lower quality/size
    imageOptions.Quality = 85;
    saveOptions.ImageOptions = imageOptions;
    saveOptions.OutputStream = outputStream;
    
    ImageConverter.Process(loadOptions, saveOptions);
    
    // Use the stream directly (e.g., with web responses)
    byte[] imageBytes = outputStream.ToArray();
    
    // Example: save to file from memory stream
    File.WriteAllBytes("result/OptimizedChart.png", imageBytes);
}

Passo 8: Exemplo completo de implementação

Aqui está um exemplo de trabalho completo que demonstra todo o processo:

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

namespace ExcelChartToPngConverter
{
    class Program
    {
        static void Main(string[] args)
        {
            try
            {
                // Set up directories
                Directory.CreateDirectory("result");
                
                // Define source Excel file
                string excelFilePath = "quarterly_sales.xlsx";
                
                Console.WriteLine("Starting Excel chart conversion...");
                
                // Basic conversion - entire workbook
                ImageConverter.Process(excelFilePath, "result/FullWorkbook.png");
                
                // Advanced conversion with options
                LowCodeLoadOptions loadOptions = new LowCodeLoadOptions();
                loadOptions.InputFile = excelFilePath;
                
                LowCodeImageSaveOptions saveOptions = new LowCodeImageSaveOptions();
                ImageOrPrintOptions imageOptions = new ImageOrPrintOptions();
                imageOptions.ImageType = Aspose.Cells.Drawing.ImageType.Png;
                imageOptions.Quality = 100;
                imageOptions.OnePagePerSheet = true;
                saveOptions.ImageOptions = imageOptions;
                
                // Custom file naming pattern for multi-sheet output
                LowCodeSaveOptionsProviderOfPlaceHolders fileNameProvider = 
                    new LowCodeSaveOptionsProviderOfPlaceHolders(
                        "result/Report${SheetIndexPrefix}${SheetIndex}_${SplitPartIndex}.png");
                fileNameProvider.SheetIndexOffset = 1;
                fileNameProvider.SheetIndexPrefix = "S";
                fileNameProvider.SplitPartIndexOffset = 1;
                
                // Execute conversion with custom naming
                ImageConverter.Process(loadOptions, saveOptions, fileNameProvider);
                
                // For specific sheet only conversion
                saveOptions = new LowCodeImageSaveOptions();
                imageOptions = new ImageOrPrintOptions();
                imageOptions.ImageType = Aspose.Cells.Drawing.ImageType.Png;
                imageOptions.PageIndex = 0; // First sheet only
                saveOptions.ImageOptions = imageOptions;
                saveOptions.OutputFile = "result/FirstSheetOnly.png";
                
                ImageConverter.Process(loadOptions, saveOptions);
                
                Console.WriteLine("Conversion completed successfully!");
                Console.WriteLine("Output files located in 'result' directory.");
            }
            catch (Exception ex)
            {
                Console.WriteLine($"Error occurred: {ex.Message}");
                Console.WriteLine(ex.StackTrace);
            }
        }
    }
}

Use Casos e Aplicações

Sistemas de Relatório Empresarial

Os analistas financeiros podem automaticamente gerar ativos visuais de relatórios do Excel para inclusão em apresentações executivas ou painéis. isto elimina a captura manual e garante visualizações consistentes e de alta qualidade que representam com precisão os dados de origem.

Fluxos de trabalho de integração de dados

Os fluxos de trabalho de integração podem automaticamente converter gráficos baseados no Excel em formatos de imagem para a inclusão em relatórios PDF, portais da web ou notificações de e-mail. Esta automação reduz o esforço manual necessário para transformar visualização de dados em formato consumível.

Processamento automático de documentos

Os sistemas de geração de documentos podem extrair de forma programática gráficos e visualizações dos livros de trabalho do Excel para criar relatórios profissionais que combinam dados, texto e elementos visuais.

Desafios comuns e soluções

Título 1: Manter a qualidade da imagem

Solução: Configure as Opções ImageOrPrint com as configurações de qualidade e os parâmetros de resolução apropriados para garantir o desempenho óptimo.Para apresentações e materiais impressos, use as definições da qualidade de 90 ou mais e considere ajustar a definição de DPI com base no uso pretendido.

Título 2: Manutenção de grandes folhas de trabalho

Solução: Use as propriedades ImageOrPrintOptions.PageIndex e PageCount para processar porções específicas de grandes folhas de trabalho.Para folhetas muito grandes, considere a utilização de técnicas de teclado ao configurar configurações de página personalizadas no arquivo do Excel.

Desafios 3: Render inconsistente em torno de ambientes

Solução: Assegure-se de que as letras utilizadas no arquivo do Excel estão disponíveis no servidor, ou use configurações de substituição de letras em Aspose.Cells. Teste cuidadosamente em diferentes ambientes de implementação e considere incorporar as fontes necessárias em sua aplicação.

Considerações de desempenho

  • Use fluxos de memória em vez de arquivo I/O ao converter múltiplas imagens em um processo de batch
  • Para ambientes múltiplos, implementar mecanismos de fechamento adequados ao acessar recursos compartilhados
  • Considere o tamanho e a complexidade da folha ao configurar opções de qualidade – maior complexo exige mais recursos de processamento

Melhores Práticas

  • Implementação de mecanismos de caching para gráficos frequentemente acessados para evitar conversões repetidas
  • Crie uma convenção de nomeamento sistemática para os arquivos de saída para rastrear a fonte de cada imagem
  • Incluir metadados no directorio de saída da imagem para manter a rastreabilidade de volta aos arquivos do Excel fonte
  • Validar os arquivos de entrada do Excel antes do processamento para garantir que contêm os gráficos e dados esperados
  • Implementação de logging para rastrear conversões bem sucedidas e quaisquer problemas que surgem durante o processamento

Os cenários avançados

Para requisitos mais complexos, considere estas implementações avançadas:

Cenário 1: extrair apenas gráficos específicos de uma folha de trabalho

using Aspose.Cells;
using Aspose.Cells.Charts;
using Aspose.Cells.Drawing;
using System.IO;

// Load the workbook
Workbook workbook = new Workbook("reports/charts.xlsx");

// Get the first worksheet
Worksheet worksheet = workbook.Worksheets[0];

// Process each chart in the worksheet
for (int i = 0; i < worksheet.Charts.Count; i++)
{
    Chart chart = worksheet.Charts[i];
    
    // Save only specific charts based on title or other properties
    if (chart.Title.Text.Contains("Revenue"))
    {
        // Create image for this specific chart
        chart.ToImage("result/revenue_chart_" + i + ".png", new ImageOrPrintOptions
        {
            ImageType = ImageType.Png,
            HorizontalResolution = 300,
            VerticalResolution = 300
        });
    }
}

Scenário 2: Criar uma imagem de Dashboard multi-chart

using Aspose.Cells;
using Aspose.Cells.Drawing;
using System.Drawing;
using System.Drawing.Imaging;
using System.IO;

// Load the workbook containing charts
Workbook workbook = new Workbook("reports/dashboard_data.xlsx");

// Create a bitmap to serve as the dashboard canvas
using (Bitmap dashboardImage = new Bitmap(1200, 800))
{
    using (Graphics g = Graphics.FromImage(dashboardImage))
    {
        // Set white background
        g.Clear(Color.White);
        
        // Draw title
        using (Font titleFont = new Font("Arial", 18, FontStyle.Bold))
        {
            g.DrawString("Q2 2025 Performance Dashboard", titleFont, 
                Brushes.DarkBlue, new PointF(400, 30));
        }
        
        // Extract and place charts
        int yPosition = 100;
        for (int sheetIndex = 0; sheetIndex < 3; sheetIndex++)
        {
            // Get specific worksheet with chart
            Worksheet sheet = workbook.Worksheets[sheetIndex];
            
            if (sheet.Charts.Count > 0)
            {
                // Convert chart to image
                MemoryStream chartStream = new MemoryStream();
                sheet.Charts[0].ToImage(chartStream, new ImageOrPrintOptions
                {
                    ImageType = ImageType.Png,
                    HorizontalResolution = 150,
                    VerticalResolution = 150
                });
                
                // Load chart image
                using (Bitmap chartImage = new Bitmap(chartStream))
                {
                    // Position chart on dashboard
                    g.DrawImage(chartImage, new Rectangle(50, yPosition, 500, 300));
                    yPosition += 320;
                }
            }
        }
        
        // Save the composite dashboard image
        dashboardImage.Save("result/complete_dashboard.png", ImageFormat.Png);
    }
}

Conclusão

Ao implementar Aspose.Cells LowCode ImageConverter, você pode efetivamente converter gráficos e folhas de trabalho do Excel em imagens PNG de alta qualidade e simplificar a criação de ativos visuais para relatórios e apresentações.

Para mais informações e exemplos adicionais, consulte Aspose.Cells.LowCode API Referência .

 Português