VB.NETでCSV出力する方法とは?CSV出力をしてみよう
- システム
エンジニア - CSV出力する方法には、どのようなものがありますか?
- プロジェクト
マネージャー - ここではVB.NETを利用したCSV出力について見ていきましょう。
VB.NETでCSV出力をする方法とは?
今回は、VB.NETでCSV出力を行う方法について紹介します。
CSVとはComma Separated Valueの略で、カンマで区切ったテキストファイルデータのことを表します。ファイルの拡張子は「csv」であり、データ交換用のファイルとして知られています。基幹システムに取り込んだり、BIツールで分析したりするうえで便利な形式のファイルです。
VB.NETで作られたアプリにおいても、DataTableやリストなどに格納されている情報をCSV出力したい場面があるでしょう。VB.NETでもCSV出力をすることが可能です。この記事では出力方法を紹介しますので、興味のある方はぜひご覧ください。
VB.NETでCSV出力をする方法
はじめに、DataTableに格納されているリスト情報をCSV出力するVB.NETのサンプルプログラムをご紹介します。以下の社員リストをCSV出力してみます。
サンプルプログラム
社員リストと、リストをCSV出力するVB.NETのサンプルプログラムです。書き込むファイルを開いてから、ヘッダー部分を出力し、続いて明細レコードを出力しています。
社員リスト
CSV出力する社員リストです。社員コード、氏名、部署、年齢、役職の情報が社員リスト用のDataTableにセットされていると仮定し、8名分のリストを用意しました。
社員コード | 氏名 | 部署 | 年齢 | 役職 |
---|---|---|---|---|
0001 | 社員01 | 総務部 | 45 | 部長 |
0002 | 社員02 | 営業部 | 43 | 部長 |
0003 | 社員03 | 人事部 | 41 | 課長 |
0004 | 社員04 | IT部 | 40 | 係長 |
0005 | 社員05 | マーケティング部 | 38 | 課長 |
0006 | 社員06 | 製造部 | 33 | 一般 |
0007 | 社員07 | 人事部 | 29 | 主任 |
0008 | 社員08 | IT部 | 25 | 一般 |
ソースコード
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
|
'''<summary>
''' DataTableのリスト値をCSVファイルに保存する
''' </summary>
''' <param name="dt">CSV変換するDataTable</param>
''' <param name="csvPath">保存先のCSVファイルのパス</param>
''' <param name="isWriteHeader">ヘッダー出力時はtrue</param>
Public Sub CnvDataTableToCsv(dt As DataTable, csvPath As String, isWriteHeader As Boolean)
'CSVファイル出力時に使うEncoding
'「Shift_JIS」を使用
Dim encoding As System.Text.Encoding = System.Text.Encoding.GetEncoding("Shift_JIS")
'書き込むファイルを開く
Dim sr As New System.IO.StreamWriter(csvPath, False, encoding)
Dim colCount As Integer = dt.Columns.Count
Dim lastColIndex As Integer = colCount - 1
Dim i As Integer
'ヘッダを書き込む
If writeHeader Then
For i = 0 To colCount - 1
'ヘッダの取得
Dim field As String = dt.Columns(i).Caption
'"で囲み書き込む
field = EncloseDoubleQuotes(field)
sr.Write(field)
'カンマ付与
If lastColIndex > i Then
sr.Write(","c)
End If
Next
'改行
sr.Write(vbCrLf)
End If
'レコードを書き込む
Dim row As DataRow
For Each row In dt.Rows
For i = 0 To colCount - 1
'フィールドの取得
Dim field As String = row(i).ToString()
'"で囲み書き込む
field = EncloseDoubleQuotes(field)
sr.Write(field)
'カンマ付与
If lastColIndex > i Then
sr.Write(","c)
End If
Next
'改行
sr.Write(vbCrLf)
Next
'閉じる
sr.Close()
End Sub
''' <summary>
''' 文字列をダブルクォーテーションで囲む
''' </summary>
Private Function EncloseDoubleQuotes(field As String) As String
Return "" & field & ""
End Function
|
実行結果
CnvDataTableToCsvメソッドの引数に、社員リストのDataTable変数、CSV出力先のパス・ファイル名、ヘッダー出力=Trueをそれぞれ指定し、プログラムを実行すると、下記のデータがCSVファイルへと出力されます。
“社員コード”,”氏名”,”部署”,”年齢”,”役職”
“0001”,”社員01″,”総務部”,”45″,”部長”
“0002”,”社員02″,”営業部”,”45″,”部長”
“0003”,”社員03″,”人事部”,”45″,”課長”
“0004”,”社員04″,”IT部”,”45″,”係長”
“0005”,”社員05″,”マーケティング部”,”38″,”課長”
“0006”,”社員06″,”製造部”,”33″,”一般”
“0007”,”社員07″,”人事部”,”29″,”主任”
“0008”,”社員08″,”IT部”,”25″,”一般”
サンプルプログラムの解説
VB.NETにおいてCSVファイルを書き込むには、System.IO.StreamWriterクラスを使用します。
1
2
|
System.IO.StreamWriter(path, append, encoding)
|
第1引数のpathは、ファイルのパスとファイル名を指定するString型の引数です。
第2引数のappendはBoolean型の引数で、ファイルへの追加、もしくはファイルの上書きを指定します。Trueの場合は既存のファイルに対して行追加を、Falseの場合は既存のファイルに対し新しいファイルとして上書きを行います。
第3引数のencodingは文字コードの設定を行うSystem.Text.Encoding型の引数で、上記サンプルプログラムでは文字コード「Shift_JIS」で出力するため、
1
2
|
Dim encoding As System.Text.Encoding = System.Text.Encoding.GetEncoding("Shift_JIS")
|
のように、取得したShift_JISのエンコーディングを第3引数に指定しています。
System.IO.StreamWriterクラスで書き込むファイルを開いた後は、CSVの見出しを出力し、レコード情報を書き込みしています。書き込みはSystem.IO.StreamWriterクラスのWriteメソッドを用いて行います。
書き込む際に各項目を、作成したEncloseDoubleQuotesメソッドを用いてダブルクォーテーションで囲み、最終列を除いてカンマを付与し、最終列になったら改行を行います。改行はWriteメソッドの引数に改行文字列vbCrLfを指定して実現しています。
最後に、Closeメソッドを用いて解放処理をします。解放を行わないと内部的なメモリが使用されたままの状態になり、処理が遅くなる要因になります。Closeメソッドの記述がなくてもプログラムは動作してしまいますので、処理の最後に忘れずにCloseメソッドを記述しましょう。
- システム
エンジニア - 最後の解放処理を忘れると大変ですね。
- プロジェクト
マネージャー - そうですね。全体の処理速度が遅くなる原因になります。またエンコード処理を忘れると文字化けの原因にもなります。
VB.NETでCSV出力をしてみよう!
いかがだったでしょうか?VB.NETでCSV出力をする方法を紹介しました。
VB.NETではカンマ付与、ダブルクォーテーションを囲む処理を施し、System.IO.StreamWriterクラスでデータをファイルに書き込むことで、CSV出力をすることが可能です。
今回DataTableをCSV出力する方法を紹介しましたように、例えばフォームに表示したリストの一覧をCSV出力することなどができます。
基幹システムに登録されたデータをBIツールなどで活用する場面でもCSVは有効になりますので、VB.NETでCSVを出力する機会がありましたら、ぜひこの記事を参考にしてみてください。
FEnet.NETナビ・.NETコラムは株式会社オープンアップシステムが運営しています。
株式会社オープンアップシステムはこんな会社です
秋葉原オフィスには株式会社オープンアップシステムをはじめグループのIT企業が集結!
数多くのエンジニアが集まります。
-
スマホアプリから業務系システムまで
スマホアプリから業務系システムまで開発案件多数。システムエンジニア・プログラマーとしての多彩なキャリアパスがあります。
-
充実した研修制度
毎年、IT技術のトレンドや社員の要望に合わせて、カリキュラムを刷新し展開しています。社内講師の丁寧なサポートを受けながら、自分のペースで学ぶことができます。
-
資格取得を応援
スキルアップしたい社員を応援するために資格取得一時金制度を設けています。受験料(実費)と合わせて資格レベルに合わせた最大10万円の一時金も支給しています。
-
東証プライム上場企業グループ
オープンアップシステムは東証プライム上場「株式会社オープンアップグループ」のグループ企業です。
安定した経営基盤とグループ間のスムーズな連携でコロナ禍でも安定した雇用を実現させています。
株式会社オープンアップシステムに興味を持った方へ
株式会社オープンアップシステムでは、開発系エンジニア・プログラマを募集しています。
年収をアップしたい!スキルアップしたい!大手の上流案件にチャレンジしたい!
まずは話だけでも聞いてみたい場合もOK。お気軽にご登録ください。
新着案件New Job
-
開発エンジニア/東京都品川区/【WEB面談可】/在宅ワーク
月給29万~30万円東京都品川区(大崎駅) -
遠隔テストサービス機能改修/JavaScript/東京都港区/【WEB面談可】/テレワーク
月給45万~60万円東京都港区(六本木駅) -
病院内システムの不具合対応、保守/東京都豊島区/【WEB面談可】/テレワーク
月給30万~30万円東京都豊島区(池袋駅) -
開発/JavaScript/東京都豊島区/【WEB面談可】/テレワーク
月給50万~50万円東京都豊島区(大塚駅) -
債権債務システム追加開発/東京都文京区/【WEB面談可】/在宅勤務
月給62万~67万円東京都文京区(後楽園駅) -
PMO/東京都豊島区/【WEB面談可】/在宅勤務
月給55万~55万円東京都豊島区(池袋駅)