SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

ComponentZine(ComponentOne)

テキストファイルをExcelのワークシートに変換するアプリケーションの作成

ComponentOne Studioを活用したWindowsフォームアプリケーションの作成

  • このエントリーをはてなブックマークに追加

アプリケーションの作成

 では、アプリケーションを作成していきます。

 作成するアプリケーションは、新しいブックを作成してテキストファイルを読み込み、1行ずつ取り出してセルに代入するアプリケーションです。

GUIの作成

 使用するアプリケーションはTextBox、ButtonコントロールとC1XLBookコンポーネントです。C1XLBookコンポーネントは機能のみの提供でGUIを持ちません。そのため、作成の中心はコードになります。

フォームのデザイン
フォームのデザイン

ファイルをテキストボックスで表示する処理

 フォームのデザインができたら、2つのボタンの処理を作成します。

 このアプリケーションでは、アプリケーションと同じフォルダにある「sample.txt」ファイルを読み込み、新しいブックを作成して1行ずつセルに転送します。直接ファイルを開いてストリームからデータを読み出しますから、そのままではユーザーにファイルの内容が分からない状態で処理が進んでしまいます。

 そのため、開いたファイルの内容を確認してから変換できるように、まずはファイルの中身をTextBoxコントロールで表示するようにします。この処理は、「ファイルを開く」ボタンのClickイベントハンドラで行います。

 ファイルをStreamReaderクラスを使用してストリームに開き、ReadToEndメソッドでファイルの中身をすべて取出し、TextBoxコントロールのTextプロパティに設定します。

ファイルを読み込みTextBoxコントロールで表示する
ファイルを読み込みTextBoxコントロールで表示する
Visual Basic
Imports System.IO
Imports C1.C1Excel

Public Class Form1
    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click

        Dim sr As StreamReader = New StreamReader("sample.txt", System.Text.Encoding.Default)
        TextBox1.Text = sr.ReadToEnd()

        sr.Close()

    End Sub
C#
using System.IO;
using C1.C1Excel;
namespace doc2xls_Winform_cs
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
           StreamReader sr = new StreamReader("sample.txt", System.Text.Encoding.Default);
            textBox1.Text = sr.ReadToEnd();

            sr.Close();
        }

ファイルの変換処理

 アプリケーション本来の処理は、「変換」ボタンのClickイベントハンドラで行います。

 (1)最初に新しいブックを作成します。XLSheet型の変数を用意し、ここにC1XLBookコンポーネントのSheetオブジェクトを代入します。

Visual Basic
Dim sheet As XLSheet = C1XLBook1.Sheets(0)
C#
XLSheet sheet = c1XLBook1.Sheets[0];

 たったこの1行でワークシートが用意され、データをセルに転送できるようになります。

 (2)Doループを使用して、ストリームから1行ずつテキストを取り出します。これはStreamReaderクラスのReadLineメソッドを使用します。DoループはStreamReaderクラスのPeekメソッドの戻り値が0になるまで繰り返すことで、ファイルの末尾まで順番に1行ずつ取り出していきます。

Visual Basic
Dim sr As StreamReader = New StreamReader("sample.txt", System.Text.Encoding.Default)
     Do While sr.Peek() >= 0
         data = sr.ReadLine()
C#
StreamReader sr = new StreamReader("sample.txt", System.Text.Encoding.Default);
     do 
     {
         data = sr.ReadLine();

 (3)1行取り出したら、ワークシートのセルに代入します。セルへのアクセスは作成したSheetオブジェクトの名前のあとに()でセルの行列番号を指定するだけです。例えば、先頭のセル(ExcelでいうセルA1)は、行列番号は0,0になります。ここでは1行ずつセルに代入していきますので、列番号は0のまま行番号だけ変えながら代入していきます。そして、すべての代入が終了したらストリームを閉じます。

Visual Basic
sheet(i, 0).Value = data
         i += 1
     Loop
     sr.Close()
C#
sheet[i, 0].Value = data;
         i += 1;
     }while( sr.Peek() >= 0);
     sr.Close();

 (4)データの入力が終わったら、いくつかのセルのスタイルを変更します。

 セルのスタイルを操作する場合は、XLStyleクラスのインスタンスを作成し、変更したいメンバプロパティを設定します。そして、そのXLStyleオブジェクトを、スタイルを設定したいセルや列のStyleプロパティに設定します。

 ここでは列0(ExcelではA列)全体のセルスタイルのフォントサイズ、文字色、文字列の折り返しを変更するため、「cellstyle」という名前のXLStyleオブジェクトを作成しています。列のスタイルにアクセスするには、Columnsプロパティの引数に列番号を指定し、Styleプロパティに作成したXLStyleオブジェクトを代入します。

Visual Basic
Dim cellstyle As New XLStyle(C1XLBook1)
     cellstyle.Font = New Font(Font.Name, 12)
     cellstyle.ForeColor = Color.Blue
     cellstyle.WordWrap = True
 
     sheet.Columns(0).Style = cellstyle
C#
XLStyle cellstyle = new XLStyle(c1XLBook1);
     cellstyle.Font = new Font(Font.Name, 12);
     cellstyle.ForeColor = Color.Blue;
     cellstyle.WordWrap = true;

     sheet.Columns[0].Style = cellstyle;

 (5)列幅を変更する場合は、Columnsプロパティの引数に列番号を指定し、Widthプロパティの値を変更します。単位はtwipsです。

Visual Basic
sheet.Columns(0).Width = 6000
C#
sheet.Columns[0].Width = 6000;

 (6)最後に作成したブックを保存します。これは、C1XLBookクラスのSaveメソッドを使用します。引数に保存するブック名を拡張子付きで指定します。パス名を付けることもできます。パス名を省略するとアプリケーションと同じフォルダに保存されます。

Visual Basic
C1XLBook1.Save("sample_book.xls")
     MessageBox.Show("データをワークシートに保存しました")
C#
c1XLBook1.Save("sample_book.xls");
     MessageBox.Show("データをワークシートに保存しました");

 (7)以上で出来上がりです。アプリケーションを実行して動作を確認します。なお、アプリケーションの動作テストの際は、記事添付のサンプルコード(3種類のいずれか)に含まれているテキストファイル「sample.txt」をアプリケーションと同じフォルダに置いてください。

サンプルテキストファイルが1行ずつセルに格納されていることを確認する
サンプルテキストファイルが1行ずつセルに格納されていることを確認する
Visual Basic
Private Sub Button2_Click(sender As System.Object, e As System.EventArgs) Handles Button2.Click
    Dim data As String = ""
    Dim i As Integer = 0

    Dim sr As StreamReader = New StreamReader("sample.txt", System.Text.Encoding.Default)
    Do While sr.Peek() >= 0
        data = sr.ReadLine()
        sheet(i, 0).Value = data
        i += 1
    Loop
    sr.Close()

    Dim cellstyle As New XLStyle(C1XLBook1)
    cellstyle.Font = New Font(Font.Name, 12)
    cellstyle.ForeColor = Color.Blue
    cellstyle.WordWrap = True
 
   sheet.Columns(0).Style = cellstyle
   sheet.Columns(0).Width = 6000

   C1XLBook1.Save("sample_book.xls")
   MessageBox.Show("データをワークシートに保存しました")

End Sub
C#
private void button2_Click(object sender, EventArgs e)
{
    String data = "";
    int i = 0 ;

    StreamReader sr = new StreamReader("sample.txt", System.Text.Encoding.Default);
    do 
    {
        data = sr.ReadLine();

        sheet[i, 0].Value = data;
        i += 1;
    }while( sr.Peek() >= 0);
    sr.Close();

    XLStyle cellstyle = new XLStyle(c1XLBook1);
    cellstyle.Font = new Font(Font.Name, 12);
    cellstyle.ForeColor = Color.Blue;
    cellstyle.WordWrap = true;

    sheet.Columns[0].Style = cellstyle;
    sheet.Columns[0].Width = 6000;

    c1XLBook1.Save("sample_book.xls");
    MessageBox.Show("データをワークシートに保存しました");
}

まとめ

 今回は、C1XLBookコンポーネントの使い方の一つとして、テキストファイルをワークシートに変換する機能を持ったアプリケーションを作成してみました。アプリケーションデータをワークシートに保存する機能も同様のやり方で作成できますから、ファイル保存処理でお悩みの方は、このコンポーネントの導入を検討してみてはいかがでしょうか。

この記事は参考になりましたか?

  • このエントリーをはてなブックマークに追加
ComponentZine(ComponentOne)連載記事一覧

もっと読む

この記事の著者

瀬戸 遥(セト ハルカ)

8ビットコンピュータの時代からBASICを使い、C言語を独習で学びWindows 3.1のフリーソフトを作成、NiftyServeのフォーラムなどで配布。Excel VBAとVisual Basic関連の解説書を中心に現在まで40冊以上の書籍を出版。近著に、「ExcelユーザーのためのAccess再...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/8364 2014/12/25 16:25

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング