新規にExcelファイルを作成し、データを書き込み保存する (Excelファイルの書き出し) - C#

新規にExcelファイルを作成し、作成したExcelファイルにデータを書き込み保存する方法を紹介します。

概要

Microsoft.Office.Interop.Excel アセンブリを利用して、Excelファイルを作成し、作成したExcelブックのシートに値を書き込む処理を実装します。
メモ
OpenXML SDKを利用してExcelファイルを読み込む方法は以下の記事を参照してください。

事前準備: Microsoft.Office.Interop.Excel アセンブリの参照

Visual Studio を起動し、Windows Formアプリケーション(.NET Framework)を作成します。 プロジェクトの作成後、 Microsoft.Office.Interop.Excel アセンブリの参照を追加します。 参照の追加の手順はこちらの記事を参照してください。

実装例

UI

下図のフォームを作成します。ボタンを2つ、テキストボックス、SaveDialogを配置します。

コード

以下のコードを記述します。Button1とButton2のClickイベントを実装します。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using static System.Windows.Forms.VisualStyles.VisualStyleElement;
using Microsoft.Office.Interop.Excel;

namespace ExcelFileWrite
{
  public partial class FormSimpleCreateWrite : Form
  {
    public FormSimpleCreateWrite()
    {
      InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
      if (saveFileDialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK) {
        textBox1.Text = saveFileDialog1.FileName;
      }
    }

    private void button2_Click(object sender, EventArgs e)
    {
      string ExcelBookFileName = textBox1.Text;

      Microsoft.Office.Interop.Excel.Application ExcelApp
        = new Microsoft.Office.Interop.Excel.Application();
      ExcelApp.Visible = false;
      Workbook wb = ExcelApp.Workbooks.Add();

      Worksheet ws1 = wb.Sheets[1];
      ws1.Select(Type.Missing);

      for (int i = 1; i < 20; i++) {
        Range rgn = ws1.Cells[i, 1];
        rgn.Value2 = i;
      }

      wb.SaveAs(ExcelBookFileName);
      wb.Close(false);
      ExcelApp.Quit();
    }
  }
}

解説

COM (Microsoft.Office.Interop.Excel) のアセンブリのusingを追加します。

using

  using Microsoft.Office.Interop.Excel;

button1

button1はクリックすると、SaveDialogを表示し入力したファイル名の古パスをTextBox1に設定する処理です。
  private void button1_Click(object sender, EventArgs e)
  {
    if (saveFileDialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK) {
      textBox1.Text = saveFileDialog1.FileName;
    }
  }

button2

ワークブックを追加します。
  Workbook wb = ExcelApp.Workbooks.Add();

ワークブックの一枚目のシートを選択します。
  Worksheet ws1 = wb.Sheets[1];
  ws1.Select(Type.Missing);

1列目に1行目から順番に数値を入れていきます。19行目まで繰り返します。
  for (int i=1; i < 20; i++) {
    Range rgn = ws1.Cells[i, 1];
    rgn.Value2 = i;
  }

指定したファイル名でExcelのBookを保存します。
  wb.SaveAs(ExcelBookFileName);

ワークブックのCloseとExcelアプリケーションの終了処理です。
  wb.Close(false);
  ExcelApp.Quit();

実行結果

プログラムを実行します。下図のウィンドウが表示されます。

ボタン(Button1)をクリックします。ファイルを保存ダイアログが表示されますので、ファイル名を設定します。


ファイル保存ダイアログで設定したファイル名のフルパスがテキストボックスに表示されます。


Button2をクリックします。


テキストボックスに入力したファイル名のExcelファイルが新規作成されます。


Excel ファイルの内容は下図の通りとなります。コードで記述した値がExcelファイルに出力できています。


C#のプログラムから、新規にExcelファイルを作成し、データを書き込み保存できました。
著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用
掲載日: 2011-01-04
iPentec all rights reserverd.