Jak kompresować pliki Excel do ZIP w C#

Jak kompresować pliki Excel do ZIP w C#

Archiwa ZIP mogą zawierać wiele plików, powszechnie używanych do zmniejszania rozmiaru plików. Jednocześnie każdy plik jest kompresowany indywidualnie, co pomaga wyodrębnić je i dodać nowe bez kompresowania lub dekompresowania całego archiwum Zip. Obecnie w codziennej działalności biznesowej wzrosło wykorzystanie arkuszy kalkulacyjnych Excel (XLSX lub XLS). Czasami pliki Excel mogą być dość duże, ale możemy zmniejszyć ich rozmiar, kompresując je do archiwum ZIP. W tym artykule dowiesz się, jak skompresować pliki Excel do archiwum ZIP w języku C# bez pisania skomplikowanego kodu. Oprócz tego dowiesz się, jak uzyskać raport o postępie kompresji podczas kompresowania dużych plików Excela.

W tym artykule zostaną omówione następujące punkty:

API C# .NET do kompresji plików Excel do archiwum ZIP

Aby skompresować pliki Excel do archiwum ZIP, użyjemy Aspose.ZIP for .NET. API składa się z wielu funkcji archiwizacji. Dlatego możesz pobrać bibliotekę DLL lub zainstalować ją za pomocą NuGet.

Install-Package Aspose.ZIP

Dodaj pliki XLS lub XLSX do ZIP w C#

Załóżmy, że masz wiele plików Excel (XLSX lub XLS) do skompresowania do archiwum ZIP. Możesz wybrać jeden z poniższych sposobów wykonania zadania.

C# kompresuje pliki Excel do formatu ZIP za pomocą FileStream

W ten sposób wykorzystamy klasę FileStream do dodania plików do archiwum ZIP wywołując funkcję Archive.CreateEntry(String, FileStream).

Poniżej przedstawiono kroki kompresji arkuszy kalkulacyjnych Excel do formatu ZIP za pomocą FileStream:

  1. Najpierw utwórz obiekt klasy FileStream dla wyjściowego archiwum ZIP.
  2. Po drugie, utwórz obiekty FileStream dla plików Excel, które mają zostać skompresowane.
  3. Następnie zainicjuj klasę Archive i przekaż jej instancję klasy ArchiveEntrySettings.
  4. Następnie dodaj obiekty FileStream utworzone w kroku 2, używając metody Archive.CreateEntry.
  5. Na koniec wywołaj metodę Archive.Save i użyj obiektów FileStream(utworzonych w kroku 1) oraz instancji ArchiveSaveOptions jako parametrów.

Poniższy kod pokazuje, jak skompresować pliki Excel do formatu ZIP przy użyciu FileStream.

// Utwórz FileStream dla wyjściowego archiwum ZIP
using (FileStream zipFile = File.Open("CompressFiles_out.zip", FileMode.Create))
            {
                // Plik1 do skompresowania
                using (FileStream excel_file1 = File.Open("data1.xlsx", FileMode.Open, FileAccess.Read))
                {
                   // Plik2 do skompresowania
                   using (FileStream excel_file2 = File.Open("data2.xlsx" , FileMode.Open, FileAccess.Read))
                    {
                        using (var archive = new Archive())
                        {
                            //Dodaj pliki do archiwum.
                            archive.CreateEntry("data1.xlsx", excel_file2);
                            archive.CreateEntry("data2.xlsx", excel_file2);
                            // Skompresuj pliki do archiwum ZIP
                            archive.Save(zipFile, new ArchiveSaveOptions() { Encoding = Encoding.ASCII, ArchiveComment = "Two files are compressed in this archive." });
                        }
                    }
                }
            }

C# kompresuje pliki XLSX lub XLS do ZIP przy użyciu FileInfo

Alternatywnie możemy użyć klasy FileInfo w celu dodania plików do archiwum ZIP. W tym przypadku pliki zostaną wczytane przy pomocy klasy FileInfo i dodane do archiwum ZIP poprzez wywołanie metody Archive.CreateEntry(String, FileInfo).

Wykonaj kroki wymienione poniżej:

  1. Utwórz obiekt klasy FileStream dla wyjściowego archiwum ZIP.
  2. Utwórz obiekty FileInfo dla plików Excel, które mają zostać skompresowane.
  3. Zainicjuj klasę Archive i przekaż jej instancję klasy ArchiveEntrySettings.
  4. Dodaj obiekty FileStream utworzone w kroku 2 przy użyciu metody Archive.CreateEntry.
  5. Aby skompresować pliki, wywołaj metodę Archive.Save i użyj obiektów FileStream(utworzonych w kroku 1) oraz instancji ArchiveSaveOptions jako parametrów.

Poniższy kod pokazuje, jak skompresować pliki XLSX lub XLS do formatu ZIP przy użyciu FileInfo.

//Utwórz FileStream dla wyjściowego archiwum ZIP
using (FileStream zipFile = File.Open("CompressFiles_out.zip", FileMode.Create))
      {
               // Pliki do skompresowania
               FileInfo fi1 = new FileInfo("data1.xlsx");
                FileInfo fi2 = new FileInfo("data2.xlsx");

                using (var archive = new Archive())
                {
                    //Dodaj pliki do archiwum
                    archive.CreateEntry("data1.xlsx", fi1);
                    archive.CreateEntry("data2.xlsx", fi2);
                    // Skompresuj pliki do archiwum ZIP
                    archive.Save(zipFile, new ArchiveSaveOptions() { Encoding = Encoding.ASCII });
                }
       }

Kompresuj arkusze kalkulacyjne Excel do formatu ZIP, korzystając ze ścieżki pliku

Najprostszym sposobem jest dodanie ścieżki pliku Excel bezpośrednio do metody Archive.CreateEntry:

Poniżej przedstawiono kroki kompresji arkuszy kalkulacyjnych Excel do formatu ZIP przy użyciu ścieżki pliku:

Poniższy kod ilustruje sposób kompresowania plików arkuszy kalkulacyjnych programu Excel do formatu ZIP przy użyciu ścieżki pliku.

//Utwórz instancję klasy Archive
using (var archive = new Archive())
{
  //Dodaj pliki za pomocą metody Archive.CreateEntry
   archive.CreateEntry("entry_name1.dat", "input_file1.dat");
   archive.CreateEntry("entry_name2.dat", "input_file2.dat");
   //Spakuj pliki.
   archive.Save("result_archive.zip");
}

Uzyskaj raport o postępie kompresji w języku C#

W przypadku dużych plików Excel proces kompresji może zająć dużo czasu. Aby sobie z tym poradzić, biblioteka kompresji C# ZIP udostępnia zdarzenie [CompressionProgressed] umożliwiające ciągłe publikowanie aktualizacji.

Aby uzyskać raport postępu kompresji w języku C#, wykonaj następujące kroki:

Poniższy przykładowy kod pokazuje, jak uzyskać raport o postępie kompresji w języku C#:

// Utwórz duży plik Excel
using (FileStream source = File.Open("huge.bin", FileMode.Open, FileAccess.Read))
{
    using (var archive = new Archive(new ArchiveEntrySettings(new PPMdCompressionSettings())))
    {
        // Dodaj i zapisz w archiwum
        ArchiveEntry entry = archive.CreateEntry("huge.bin", source);
        int percentReady = 0;
        // Dołącz zdarzenie CompressionProgress
        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;
                 }       
             };
        // Spakuj plik
        archive.Save(zipFile);
    }
}

Zdobądź bezpłatną licencję

Możesz uzyskać bezpłatną licencję tymczasową, aby przetestować interfejs API bez ograniczeń ewaluacyjnych.

Wniosek

W tym artykule nauczyłeś się, jak kompresować pliki Excel do archiwum ZIP w języku C# przy użyciu biblioteki kompresji C# ZIP. Poza tym masz wystarczającą wiedzę na temat uzyskiwania raportu postępu kompresji podczas kompresowania dużych plików Excela. Możesz odwiedzić dokumentację, aby poznać inne funkcje interfejsu API kompresji C# ZIP.

Zadać pytanie

Możesz przekazać nam swoje pytania lub wątpliwości na naszym forum.

Zobacz też