Як перетворити файли Excel в PDF в .NET
Ця стаття показує, як об’єднати конвертацію кількох файлів Excel в PDF за допомогою Aspose.Cells LowCode PDF Converter в .NET-прикладах. Конвертер PDF надає ускладнений підхід до перетворення документів без необхідності широкого кодування або глибоких знань про внутрішні структури Excel - ідеально підходить для бізнес-аналітиків і розробників звітів, які потребують автоматизації своїх робочих потоків звітності.
Реальні проблеми світу
У підприємницьких середовищах, доповідальні команди часто потребують конвертувати десятки або навіть сотні Excel робочих книг у форматі PDF на регулярній основі. роблячи це вручну витрачає час, випромінює помилки і відволікає цінні ресурси від більш важливих аналітичних завдань.
Огляд рішення
Використовуючи Aspose.Cells LowCode PDF Converter, ми можемо ефективно вирішити цю проблему з мінімальним кодом.Це рішення ідеально підходить для бізнес-аналітиків і розробників звітів, які повинні ускладнити свої процеси звітування, забезпечити консистенцію між документами, а також заощадити час для більш цінної роботи.Наш підхід буде зосереджений на створенні міцної системи обробки пакетів, яка може керувати великими обсягами файлів Excel за допомогою персоналізованих налаштувань конверсії.
Передумови
Перед тим, як реалізувати рішення, переконайтеся, що у вас є:
- Visual Studio 2019 або вище
- .NET 6.0 або пізніше (сумісний з .Net Framework 4.6.2+)
- Aspose.Cells для пакету .NET, встановленого через NuGet
- Основні поняття C# програмування
PM> Install-Package Aspose.Cells
Крок за кроком реалізація
Крок 1: Налаштувати і встановити Aspose.Cells
Додайте пакет Aspose.Cells до вашого проекту і включайте необхідні номінаційні простори:
using Aspose.Cells;
using Aspose.Cells.LowCode;
using System;
using System.IO;
using System.Collections.Generic;
using System.Threading.Tasks;
Крок 2: Створення структури каталогу для обробки бачок
Налаштуйте структуру каталогу, щоб організувати файли 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);
Крок 3: Використання логіки виявлення файлів
Створіть метод, щоб виявити всі файли 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;
}
Крок 4: Налаштування варіантів PDF Converter
Створіть метод для встановлення варіантів конверсії 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 = @"C:\Reports\ExcelFiles";
string outputDirectory = @"C:\Reports\PDFOutput";
string logDirectory = @"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.ReadKey();
}
}
}
Використання випадків та додатків
Системи корпоративного звітування
У системах фінансової звітності, кінець місяця або квартальний цикл часто вимагає конвертації численних звітів, заснованих на Excel, у форматі PDF для розповсюдження зацікавленим сторонам. Цей пакет обертання рішення дозволяє розробникам звіту автоматизувати процес, забезпечуючи, що всі звіти перетворюються з послідовними налаштуваннями і форматуванням, при цьому драматично зменшуючи ручні зусилля.
Відділ обробки даних
Бізнес-аналітики, які збирають дані на основі Excel з декількох відділів, можуть використовувати це рішення для стандартизації та архівування записів. Автоматично конвертуючи отримані робочі книги в PDF, вони створюють постійний запис даних, а також роблять інформацію поширеною з зацікавленими сторонами, у яких немає Excel.
Автоматичне управління документами
Інтеграція з системами управління документами стає безпідставною, коли доповіді Excel автоматично конвертуються в PDF. Це рішення може бути заплановано для запуску в рамках більшого робочого потоку, який підбирає нові файли Excel, перетворює їх на 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);
Виклик 2: Збереження форматування 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
Виклик 3: Управління дуже великими файлами 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, щоб уникнути тиску пам’яті.
- Введення механізму моніторингу для відстеження прогресу конверсії та використання ресурсів
- Для виробничих розгортань розглянемо проведення процесу конверсії на присвяченому сервері або під час позачергових годин.
Найкращі практики
- Перевірити файли Excel перед обробкою комплекту для виявлення потенційних проблем
- Впровадження міцного обробки помилок для того, щоб переконатися, що процес не зупиняється, якщо один файл провалиться
- Створення детальних записів процесу конверсії для врегулювання та аудиту
- Організація вихідних PDF в структурованій ієрархії папки для легкого управління
- Налаштуйте систему моніторингу, яка попереджає адміністраторів про помилки конверсії
- Тест з різними типами файлів Excel (XLSX, XLS,XLSM) для забезпечення сумісності
Розширені сценарії
Для більш складних вимог розглянемо такі передові реалізації:
Сценарій 1: Налаштування PDF-назви на основі вмісту Excel Cell
Ви можете витягти конкретні цінності клітини для використання в файловому імені 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 .