C# でのストリーム操作を使用することで、開発者は Excel ファイルを動的に作成、読み込み、保存することができ、柔軟かつ効率的なデータ処理が可能になります。この方法では、物理的なファイルストレージが不要になり、アプリケーションのパフォーマンスと応答性が向上します。リアルタイムでのデータ操作やストレージに制限のある環境に最適で、データ交換やシステム統合を簡素化します。本記事では、Spire.XLS for .NET を使用して、C# でのストリームを介した Excel ファイルの作成、読み込み、編集、保存方法を示し、アジャイルでスケーラブルなデータ管理ソリューションを提供します。
Spire.XLS for .NET をインストールします
まず、Spire.XLS for .NET パッケージに含まれている DLL ファイルを .NET プロジェクトの参照として追加する必要があります。DLL ファイルは、このリンクからダウンロードするか、NuGet を介してインストールできます。
PM> Install-Package Spire.XLS
Excel ファイルを動的に作成し、ストリームに保存
Spire.XLS for .NET を使用すると、開発者は Workbook オブジェクトを初期化し、データやフォーマットを埋め込んでから、Workbook.SaveToStream() メソッドを使用してワークブックをストリームに保存することで、メモリ内で Excel ファイルを動的に作成できます。この方法では、物理的なファイルストレージが不要になり、アプリケーションのパフォーマンスと応答性が向上します。
以下は、C# で Excel ファイルを作成し、ストリームに保存する手順です:
- Workbook クラスのインスタンスを作成して新しい Excel ワークブックを生成します(デフォルトで 3 つのワークシートが含まれます)。
 - Workbook.Worksheets[] プロパティを使用して特定のワークシートを取得します。
 - DataTable を使用してデータを整理し、ワークシートに書き込むデータを定義します。
 - Worksheet.InsertDataTable() メソッドまたは Worksheet.Range[].Value プロパティを使用してデータをワークシートに挿入します。
 - 必要に応じてセルのフォーマット(色、フォント、罫線など)を適用し、列幅を調整します。
 - Workbook.SaveToStream() メソッドを使用してワークブックをメモリストリームに保存します。そのストリームを使用してファイルに保存したり、ネットワーク経由で送信することが可能です。
 
- C#
 
using Spire.Xls;
using System.Data;
using System.Drawing;
namespace CreateExcelStream
{
    class Program
    {
        static void Main(string[] args)
        {
            // 新しいワークブックインスタンスを作成
            Workbook workbook = new Workbook();
            // ワークブックの最初のワークシートにアクセス
            Worksheet sheet = workbook.Worksheets[0];
            // サンプルデータを含むDataTableを作成してデータを追加
            DataTable dataTable = new DataTable("データ");
            dataTable.Columns.Add("ID", typeof(int));
            dataTable.Columns.Add("名前", typeof(string));
            dataTable.Columns.Add("年齢", typeof(int));
            dataTable.Columns.Add("国", typeof(string));
            dataTable.Columns.Add("給与 ($)", typeof(decimal));
            dataTable.Rows.Add(101, "ジョン・スミス", 28, "アメリカ", 54000m);
            dataTable.Rows.Add(102, "マリア・ガルシア", 34, "日本", 65500m);
            dataTable.Rows.Add(103, "リアム・ジョンソン", 22, "カナダ", 48000m);
            dataTable.Rows.Add(104, "エマ・ブラウン", 30, "オーストラリア", 72300m);
            dataTable.Rows.Add(105, "ウェイ・チャン", 40, "中国", 58700m);
            dataTable.Rows.Add(106, "ソフィア・ロペス", 26, "メキシコ", 45200m);
            // DataTableからワークシートにデータを挿入
            sheet.InsertDataTable(dataTable, true, 1, 1);
            // ワークシートをフォーマット
            // ヘッダー行をスタイル設定
            sheet.Rows[0].Style.Color = Color.LightSkyBlue;
            sheet.Rows[0].Style.Font.FontName = "Yu Gothic UI";
            sheet.Rows[0].Style.Font.Size = 12f;
            sheet.Rows[0].BorderAround(); // ヘッダー行に外枠を追加
            sheet.Rows[0].Borders.Color = Color.LightSteelBlue; // 枠線の色を設定
            // データ行をスタイル設定
            for (int i = 1; i < sheet.AllocatedRange.Rows.Count(); i++)
            {
                sheet.Rows[i].Style.Color = Color.LightGray;
                sheet.Rows[i].Style.Font.FontName = "Yu Gothic UI";
                sheet.Rows[i].Style.Font.Size = 11f;
            }
            sheet.Range[2, 1, sheet.Rows.Count(), sheet.Columns.Count()].BorderInside(); // データ行に内枠を追加
            sheet.Range[2, 1, sheet.Rows.Count(), sheet.Columns.Count()].Borders.Color = Color.LightSteelBlue; // 枠線の色を設定
            // 列幅を内容に合わせて調整
            for (int j = 1; j <= sheet.AllocatedRange.Columns.Count(); j++)
            {
                sheet.AutoFitColumn(j);
            }
            // ワークブックをメモリストリームに保存
            MemoryStream stream = new MemoryStream();
            workbook.SaveToStream(stream, FileFormat.Version2016);
            // ストリームの内容をファイルに書き込む
            File.WriteAllBytes("output/ストリームでExcelファイルを作成.xlsx", stream.ToArray());
            // リソースを解放
            workbook.Dispose();
        }
    }
}

C# でストリームから Excel ファイルを読み込む
Spire.XLS for .NET を使用すると、Workbook.LoadFromStream() メソッドで直接ストリームから Excel ファイルを読み込むことができます。ファイルが読み込まれると、開発者はセルデータに簡単にアクセスでき、ファイル I/O 操作を必要とせずにメモリの使用効率を最適化し、迅速かつ柔軟にデータ処理を行えます。
C# でストリームから Excel ファイルを読み込み、データを取得する手順は次の通りです:
- Workbook インスタンスを作成します。
 - MemoryStream または FileStream オブジェクトを作成します。
 - Workbook.LoadFromStream() メソッドを使用して、ストリームから Excel ファイルをワークブックに読み込みます。
 - Workbook.Worksheets[] プロパティを使用して最初のワークシートを取得します。
 - ワークシートの行と列をループして、セルのデータを Worksheet.AllocatedRange[].Value プロパティで抽出します。
 - 取得したデータを表示するか、他の操作に使用します。
 
- C#
 
using Spire.Xls;
namespace LoadExcelStream
{
    class Program
    {
        static void Main(string[] args)
        {
            // Workbookクラスのインスタンスを作成
            Workbook workbook = new Workbook();
            // メモリストリームを作成
            MemoryStream stream = new MemoryStream();
            File.OpenRead("Sample.xlsx").CopyTo(stream);
            // ストリームからExcelファイルを読み込む
            workbook.LoadFromStream(stream);
            // ワークブック内の最初のワークシートにアクセス
            Worksheet sheet = workbook.Worksheets[0];
            // ワークシートから取得したデータを格納するリストを初期化
            List<List<string>> data = new List<List<string>>();
            for (int i = 0; i < sheet.AllocatedRange.Rows.Count(); i++)
            {
                // 各行のデータを保持するリストを作成
                List<string> lines = new List<string>();
                for (int j = 0; j < sheet.AllocatedRange.Columns.Count(); j++)
                {
                    // セルのテキストを取得して行に追加
                    lines.Add(sheet.AllocatedRange[i + 1, j + 1].Value);
                }
                // 行をデータリストに追加
                data.Add(lines);
            }
            // 取得したデータを出力するか、他の操作に利用
            foreach (List<string> lines in data)
            {
                Console.WriteLine(string.Join(" | ", lines));
            }
        }
    }
}

C# でストリーム内で Excel ファイルを編集する
Spire.XLS for .NET を使用すると、Excel ファイルをメモリ内で編集できます。最初にファイルを Workbook オブジェクトに読み込んでから、セルの値やフォーマットを変更し、変更後のファイルをストリームに保存することができます。この方法により、物理的なストレージを使用せずにシームレスなリアルタイムの変更が可能です。
C# でストリーム内の Excel ファイルを編集する手順は次の通りです:
- Workbook インスタンスを作成します。
 - MemoryStream または FileStream インスタンスを作成します。
 - Workbook.LoadFromStream() メソッドを使用して、ストリームから Excel ファイルを読み込みます。
 - Workbook.Worksheets[] プロパティを使用して最初のワークシートにアクセスします。
 - セル範囲の Style プロパティを使用して、ヘッダー行やデータ行のフォント、サイズ、背景色などを変更します。
 - Worksheet.AutoFitColumn() メソッドを使用して、内容に合わせて列幅を自動調整します。
 - Workbook.SaveToStream() メソッドを使用して変更をストリームに保存します。
 
- C#
 
using Spire.Xls;
using System.Drawing;
namespace ModifyExcelStream
{
    class Program
    {
        static void Main(string[] args)
        {
            // Workbookクラスの新しいインスタンスを作成
            Workbook workbook = new Workbook();
            // メモリストリームを作成
            MemoryStream stream = new MemoryStream();
            File.OpenRead("Sample.xlsx").CopyTo(stream);
            // ストリームからExcelファイルを読み込む
            workbook.LoadFromStream(stream);
            // ワークブック内の最初のワークシートにアクセス
            Worksheet sheet = workbook.Worksheets[0];
            // ヘッダー行のスタイルを変更
            CellRange headerRow = sheet.AllocatedRange.Rows[0];
            headerRow.Style.Font.FontName = "Yu Gothic UI";
            headerRow.Style.Font.Size = 12f;
            headerRow.Style.Color = Color.LightBlue;
            // データ行のスタイルを変更
            for (int i = 1; i < sheet.AllocatedRange.Rows.Count(); i++)
            {
                CellRange dataRow = sheet.AllocatedRange.Rows[i];
                dataRow.Style.Font.FontName = "Yu Mincho";
                dataRow.Style.Font.Size = 10f;
                dataRow.Style.Color = Color.LightGray;
                // 行ごとに交互の色を付ける(偶数行)
                if (i % 2 == 0)
                {
                    dataRow.Style.Color = Color.LightSlateGray;
                }
            }
            // 列の幅をコンテンツに基づいて自動調整
            for (int k = 1; k <= sheet.AllocatedRange.Columns.Count(); k++)
            {
                sheet.AutoFitColumn(k);
            }
            // 枠線の色を変更
            sheet.AllocatedRange.Style.Borders.Color = Color.White;
            // 修正したワークブックをストリームに保存
            workbook.SaveToStream(stream);
            // ストリームの内容を新しいファイルに書き込む
            File.WriteAllBytes("output/ストリームでExcelファイルを修正.xlsx", stream.ToArray());
            // リソースを解放
            workbook.Dispose();
        }
    }
}

一時ライセンスを申請する
結果ドキュメントから評価メッセージを削除したい場合、または機能制限を取り除く場合は、についてこのメールアドレスはスパムボットから保護されています。閲覧するにはJavaScriptを有効にする必要があります。にお問い合わせ、30 日間有効な一時ライセンスを取得してください。
	    
	  	  





