
C# で Excel ファイルを ZIP に圧縮する方法
ZIP アーカイブには複数のファイルを含めることができ、ファイルのサイズを縮小するために一般的に使用されます。同時に、各ファイルは個別に圧縮されるため、Zip アーカイブ全体を圧縮または解凍することなく、ファイルを抽出して新しいファイルを追加できます。最近では、Excel (XLSX または XLS) スプレッドシートの日常業務での使用が増加しています。 Excel ファイルが非常に大きくなる場合がありますが、ZIP アーカイブに圧縮することでサイズを小さくすることができます。この記事では、複雑なコードを記述せずに C# で Excel ファイルを ZIP アーカイブに圧縮する方法について説明します。それとは別に、大きな Excel ファイルの圧縮中に 圧縮進行状況のレポート を取得する方法について説明します。
この記事では、次の点について説明します。
Excel ファイルを ZIP アーカイブに圧縮するための C# .NET API
Excel ファイルを ZIP アーカイブに圧縮するには、Aspose.ZIP for .NET を使用します。 API は、多数のアーカイブ機能で構成されています。したがって、DLL を ダウンロード するか、NuGet を使用してインストールすることができます。
Install-Package Aspose.ZIP
C# で XLS または XLSX ファイルを ZIP に追加する
ZIP アーカイブに圧縮する複数の Excel (XLSX または XLS) ファイルがあるとします。ジョブを実行するには、次のいずれかの方法を選択できます。
C# は FileStream を使用して Excel ファイルを ZIP に圧縮します
このように、FileStream クラスを使用して、Archive.CreateEntry(String, FileStream) 関数を呼び出して、ファイルを ZIP アーカイブに追加します。
FileStream を使用して Excel スプレッドシートを ZIP に圧縮する手順は次のとおりです。
- 出力 ZIP アーカイブ用の FileStream クラスのオブジェクトを作成します。 ・圧縮するExcelファイルのFileStreamのオブジェクトを作成する。
- Archive クラスを初期化し、ArchiveEntrySettings クラスのインスタンスを渡します。
- Archive.CreateEntry メソッドを使用して、手順 2 で作成した FileStream オブジェクトを追加します。
- ファイルを圧縮するには、Archive.Save メソッドを呼び出し、FileStream (手順 1 で作成) のオブジェクトと ArchiveSaveOptions のインスタンスをパラメーターとして使用します。
次のコードは、FileStream を使用して Excel ファイルを ZIP に圧縮する方法を示しています。
// 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# は FileInfo を使用して XLSX または XLS ファイルを ZIP に圧縮します
または、FileInfo クラスを使用してファイルを ZIP アーカイブに追加することもできます。この場合、ファイルは FileInfo クラスを使用してロードされ、Archive.CreateEntry(String, FileInfo) メソッドを呼び出して ZIP アーカイブに追加されます。
以下の手順に従ってください。
- 出力 ZIP アーカイブ用の FileStream クラスのオブジェクトを作成します。 ・圧縮するExcelファイルのFileInfoのオブジェクトを作成します。
- Archive クラスを初期化し、ArchiveEntrySettings クラスのインスタンスを渡します。
- Archive.CreateEntry メソッドを使用して、手順 2 で作成した FileStream オブジェクトを追加します。
- ファイルを圧縮するには、Archive.Save メソッドを呼び出し、FileStream (手順 1 で作成) のオブジェクトと ArchiveSaveOptions のインスタンスをパラメーターとして使用します。
次のコードは、FileInfo を使用して XLSX または XLS ファイルを ZIP に圧縮する方法を示しています。
//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 に圧縮します
最も簡単な方法は、Archive.CreateEntry メソッドに Excel ファイル パスを直接追加することです。
ファイル パスを使用して Excel スプレッドシートを ZIP に圧縮する手順は次のとおりです。
- アーカイブ クラスを初期化します。
- Archive.CreateEntry メソッドを使用して Excel ファイルを追加します。
- データを圧縮するには、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 ファイルの場合、圧縮プロセスが完了するまでに時間がかかる場合があります。これに対処するために、C# ZIP 圧縮ライブラリ は [CompressionProgressed] イベントを提供して、更新を継続的に投稿します。
C# で圧縮の進行状況のレポートを取得する手順は次のとおりです。
・大容量Excelファイル用にFileStreamのオブジェクトを作成する。
- Archive クラスを初期化し、ArchiveEntrySettings クラスのインスタンスを渡します。 ・Archive.CreateEntryメソッド呼び出しからArchiveEntryのオブジェクトを取得する。
- [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 をテストできます。
結論
この記事では、C# ZIP 圧縮ライブラリ を使用してC# で Excel ファイルを ZIP アーカイブに圧縮する方法を学びました。それとは別に、大きな Excel ファイルを圧縮しながら 圧縮進行状況レポート を取得することについて十分な知識が得られました。 C# ZIP 圧縮 API のその他の機能については、ドキュメント を参照してください。
質問する
フォーラムで質問やクエリをお知らせください。