・左画像が出力したいもの、右画像がCSVの出力物。
※動作の前提としてDataGidViewの「追加を有効にする」をOFFにしてること。
ONの場合は行数の処理で調整してあげる必要があった気がします、、
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 |
private void Excel_Click(object sender, EventArgs e) { SaveFileDialog save = new SaveFileDialog { Title = "ファイルを保存する", InitialDirectory = @"C:\Users\Administrator\Desktop", FileName = @"output.csv", Filter = "CSV(カンマ付き)|*.csv" }; DialogResult output = save.ShowDialog(); using(StreamWriter writer = new StreamWriter(@"C:\Users\Administrator\Desktop\output.csv",false,Encoding.GetEncoding("shift_Jis"))) { int row = dataGridView1.RowCount; int colunms = dataGridView1.ColumnCount; List<string> strList = new List<string>(); for (int k = 0; k < colunms; k++) { strList.Add(dataGridView1.Columns[k].HeaderCell.Value.ToString()); } string[] strHeader = strList.ToArray(); string strCsvData2 = string.Join(",", strHeader); writer.WriteLine(strCsvData2); for (int i = 0; i < row; i++) { strList = new List<string>(); for(int j = 0;j < colunms; j++) { strList.Add(dataGridView1[j, i].Value.ToString()); } string[] strArray = strList.ToArray(); string strCsvData = string.Join(",",strArray); writer.WriteLine(strCsvData); } } } |
■3~11行目は、この下画面を出すための記述です。
・「Title」がウィンドウの名前
・「InitialDirectory」はデフォルトのファイル出力先
・「FileName」はデフォルトのファイル名
・「Filter」はファイルの種類のところ

■13行目
・「StreamWriter」とかいうのはファイルにテキストを書き込むものです。
「@”C:\Users~~」は書き込むファイルへのパス
「Encoding.GetEncoding(“shift_Jis”)」で文字コード指定する。
■15~16行目
・DataGridViewのRowCount(行数)、ColumnsCount(列数)を取得する。
■20~22行目
・「DataGridViewのk列目のヘッダーセルの値をListに追加する」←この処理を
列数ぶん繰り返します。
■30~44行目
・34~37行目では、j列目 i行目の値をListに入れる処理を行います。
例えば1回目にこの処理が流れる場合、i = 0 , j = 0なので
DataGidView上の「1」がリストへ
34行目のfor分によってjの値は1づつ増えていくため、 i = 0 , j = 1 となり
「くだもの」が入るわけですね。
あとは繰り返しなので 「1 ー くだもの ー りんご ー 100」がListに入ります。
なので、上記の処理を今度は行数ぶん繰り返す(30行目)ことで、
ヘッダを含むDataGidViewの内容をファイルに出力することが出来ます。
※補足( 「追加を有効にする」がONのとき )
1 2 3 4 |
if (DataGridView1.AllowUserToAddRows == true) { row = row - 1; } |
コメントを残す