Как сжать файлы Excel в ZIP на C#

Как сжать файлы Excel в ZIP на C#

Архивы ZIP могут содержать несколько файлов, что обычно используется для уменьшения размера файлов. При этом каждый файл сжимается индивидуально, что помогает извлекать их и добавлять новые без сжатия или распаковки всего Zip-архива. В настоящее время использование электронных таблиц Excel (XLSX или XLS) увеличилось в повседневной деловой деятельности. Иногда файлы Excel могут быть довольно большими, но мы можем уменьшить их размер, сжав их в ZIP-архив. В этой статье вы узнаете, как сжимать файлы Excel в ZIP-архив на C# без написания сложного кода. Кроме того, вы увидите, как получить отчет о ходе сжатия при сжатии больших файлов Excel.

В этой статье будут рассмотрены следующие моменты:

C# .NET API для сжатия файлов Excel в ZIP-архив

Чтобы сжать файлы Excel в ZIP-архив, мы будем использовать Aspose.ZIP для .NET. API состоит из многочисленных функций архивирования. Поэтому вы можете скачать DLL или установить ее с помощью NuGet.

Install-Package Aspose.ZIP

Добавьте файлы XLS или XLSX в ZIP на C#

Предположим, у вас есть несколько файлов Excel (XLSX или XLS) для сжатия в ZIP-архив. Вы можете выбрать один из следующих способов выполнения задания.

C# сжать файлы Excel в ZIP с помощью FileStream

Таким образом, мы будем использовать класс FileStream для добавления файлов в ZIP-архив, вызвав функцию Archive.CreateEntry(String, FileStream).

Ниже приведены шаги для сжатия электронных таблиц Excel в ZIP с помощью FileStream:

  • Создать объект класса FileStream для выходного ZIP-архива.
  • Создайте объекты FileStream для сжимаемых файлов Excel.
  • Инициализируйте класс Archive и передайте ему экземпляр класса ArchiveEntrySettings.
  • Добавьте объекты FileStream, созданные на шаге 2, с помощью метода Archive.CreateEntry.
  • Чтобы сжать файлы, вызовите метод Archive.Save и используйте объекты FileStream (созданные на шаге 1) и экземпляр ArchiveSaveOptions в качестве параметров.

В следующем коде показано, как сжать файлы Excel в ZIP с помощью FileStream.

// Create FileStream for output ZIP archive
using (FileStream zipFile = File.Open("CompressFiles_out.zip", FileMode.Create))
{
// File1 to be compressed
using (FileStream excel_file1 = File.Open("data1.xlsx", FileMode.Open, FileAccess.Read))
{
// File2 to be compressed
using (FileStream excel_file2 = File.Open("data2.xlsx" , FileMode.Open, FileAccess.Read))
{
using (var archive = new Archive())
{
//Add files to archive.
archive.CreateEntry("data1.xlsx", excel_file2);
archive.CreateEntry("data2.xlsx", excel_file2);
// Compress the files into ZIP archive
archive.Save(zipFile, new ArchiveSaveOptions() { Encoding = Encoding.ASCII, ArchiveComment = "Two files are compressed in this archive." });
}
}
}
}

C# сжать файлы XLSX или XLS в ZIP с помощью FileInfo

Кроме того, мы можем использовать класс FileInfo для добавления файлов в ZIP-архив. В этом случае файлы будут загружены с помощью класса FileInfo и добавлены в ZIP-архив вызовом метода Archive.CreateEntry(String, FileInfo).

Пожалуйста, следуйте инструкциям ниже:

  • Создать объект класса FileStream для выходного ZIP-архива.
  • Создайте объекты FileInfo для сжимаемых файлов Excel.
  • Инициализируйте класс Archive и передайте ему экземпляр класса ArchiveEntrySettings.
  • Добавьте объекты FileStream, созданные на шаге 2, с помощью метода Archive.CreateEntry.
  • Чтобы сжать файлы, вызовите метод Archive.Save и используйте объекты FileStream (созданные на шаге 1) и экземпляр ArchiveSaveOptions в качестве параметров.

В следующем коде показано, как сжать файлы XLSX или XLS в ZIP с помощью FileInfo.

//Create FileStream for output ZIP archive
using (FileStream zipFile = File.Open("CompressFiles_out.zip", FileMode.Create))
{
// Files to be compressed
FileInfo fi1 = new FileInfo("data1.xlsx");
FileInfo fi2 = new FileInfo("data2.xlsx");
using (var archive = new Archive())
{
//Add files to archive
archive.CreateEntry("data1.xlsx", fi1);
archive.CreateEntry("data2.xlsx", fi2);
// Compress the files into ZIP archive
archive.Save(zipFile, new ArchiveSaveOptions() { Encoding = Encoding.ASCII });
}
}

Сжимайте электронные таблицы Excel в ZIP, используя путь к файлу

Самый простой способ — добавить путь к файлу Excel непосредственно в метод Archive.CreateEntry:

Ниже приведены шаги для сжатия электронных таблиц Excel в ZIP с использованием пути к файлу:

  • Инициализировать класс Архив.
  • Добавьте файлы Excel, используя метод Archive.CreateEntry.
  • Для сжатия данных вызовите метод Archive.Save и используйте в качестве параметра имя выходного файла.

В следующем коде показано, как сжать файлы электронных таблиц Excel в ZIP, используя путь к файлу.

//Create an instance of Archive class
using (var archive = new Archive())
{
//Add files using Archive.CreateEntry method
archive.CreateEntry("entry_name1.dat", "input_file1.dat");
archive.CreateEntry("entry_name2.dat", "input_file2.dat");
//Zip the files.
archive.Save("result_archive.zip");
}

Получить отчет о ходе сжатия в C#

В случае больших файлов Excel процесс сжатия может занять много времени. Чтобы справиться с этим, библиотека сжатия ZIP C# предоставляет событие [CompressionProgressed] для непрерывной публикации обновлений.

Ниже приведены шаги для получения отчета о ходе сжатия в C#:

  • Создайте объект FileStream для большого файла Excel.
  • Инициализируйте класс Archive и передайте ему экземпляр класса ArchiveEntrySettings.
  • Получить объект ArchiveEntry из вызова метода Archive.CreateEntry.
  • Прикрепите [CompressionProgressed] к объекту ArchiveEntry.
  • Вызовите Archive.Save и используйте имя выходного файла в качестве параметра.

В следующем примере кода показано, как получить отчет о ходе сжатия в C#:

// Create large Excel file
using (FileStream source = File.Open("huge.bin", FileMode.Open, FileAccess.Read))
{
using (var archive = new Archive(new ArchiveEntrySettings(new PPMdCompressionSettings())))
{
// Add and file to archive
ArchiveEntry entry = archive.CreateEntry("huge.bin", source);
int percentReady = 0;
// Attach CompressionProgress event
entry.CompressionProgressed += (s, e) =>
{
int percent = (int)((100 * (long)e.ProceededBytes) / source.Length);
if (percent > percentReady)
{
Console.WriteLine(string.Format("{0}% compressed", percent));
percentReady = percent;
}
};
// Zip the file
archive.Save(zipFile);
}
}

Получить бесплатную лицензию

Вы можете получить бесплатную временную лицензию для тестирования API без ограничений пробной версии.

Заключение

В этой статье вы узнали, как сжимать файлы Excel в ZIP-архив на C#, используя библиотеку сжатия ZIP C#. Кроме того, вы получили достаточно знаний о том, как получить отчет о ходе сжатия при сжатии больших файлов Excel. Вы можете посетить документацию, чтобы изучить другие функции C# API сжатия ZIP.

Задайте вопрос

Вы можете сообщить нам о своих вопросах или запросах на нашем форуме.

Смотрите также