
datagridviewにcsvファイルを読み込んでいるのですが,csvファイル内の行列数分のみ列数・行数をdatagridviewに生成したいのですが,どうも必要以上の列数・行数を生成してしまいます.
下記にそのプログラムを記載いたします.
どなたか,必要分のみするにはどうすればよろしいかご教授願えないでしょうか?
private void button1_Click(object sender, EventArgs e)
{
string strName = "xxx.csv"; // 仮のファイル名
string strPath = "c:/csv/"; // 仮のディレクトリ名
OpenFileDialog sfd = new OpenFileDialog();
sfd.InitialDirectory = strPath;
sfd.FileName = strName;
sfd.Filter = "CSVファイル(*.csv)|*.csv|xlsファイル(*.xls)|*.xls|xlsxファイル(*.xlsx)|*.xlsx|テキスト(*.txt)|*.txt";
sfd.Title = "開くファイルを選択してください";
sfd.RestoreDirectory = true;
sfd.CheckFileExists = false;
if (sfd.ShowDialog() == DialogResult.OK)
{
// CSVファイルオープン
System.IO.StreamReader sw = new System.IO.StreamReader(sfd.FileName);
// CSVファイルの各セルをDataGridViewに表示
int r = 0;
String lin = "";
do
{
lin = sw.ReadLine();
if (lin != null)
{
dataGridView1.Columns.Add("clmName1", "日付");
this.dataGridView1.Columns.Add("Time","データ");
this.dataGridView1.Rows.Add();
String[] csv = lin.Split(',');
for (int c = 0; c <= csv.GetLength(0) - 1; c++)
{
if (c < this.dataGridView1.Columns.Count)
{
this.dataGridView1.Rows[r].Cells[c].Value = csv[c];
}
}
r += 1;
}
} while (lin != null);
// CSVファイルクローズ
sw.Close();
}
No.1ベストアンサー
- 回答日時:
以下のように修正してみてください
do
{
lin = sw.ReadLine();
if (lin != null)
{
if ( r == 0 ) // これを追加
{ // 最初だけカラムを設定
dataGridView1.Columns.Add("clmName1", "日付");
this.dataGridView1.Columns.Add("Time","データ");
}
else
{ // データ行の追加
this.dataGridView1.Rows.Add();
String[] csv = lin.Split(',');
for (int c = 0; c <= csv.GetLength(0) - 1; c++)
{
if (c < this.dataGridView1.Columns.Count)
{
this.dataGridView1.Rows[r].Cells[c].Value = csv[c];
}
}
}
r += 1;
}
} while (lin != null);
といった具合です
# 字下げには全角スペースを使用しているのでエラーになるなら半角スペースに置換して下さい
No.2
- 回答日時:
csvファイルを読むときにはStreamReader.ReadLineとString.Splitの組み合わせよりもMicrosoft.VisualBasic.FileIO.TextFieldParserの方が便利です。
http://www.atmarkit.co.jp/fdotnet/dotnettips/487 …
あとは#1でも指摘されていますが、行の生成は読み込みごとで良いですが列の生成は最初の一回だけにしないとダメですね。
なお、
> this.dataGridView1.Rows[r].Cells[c].Value = csv[c];
は
> this.dataGridView1[r, c].Value = csv[c];
とも記述できます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C# DatagridviewにExcelシートを反映するとエラーが出る 2 2023/05/06 17:12
- Visual Basic(VBA) 複数のcsvファイルをExcelに一括変換したい 2 2023/03/03 12:44
- Excel(エクセル) エクセルのVBAについて とあるサイトのコードを参考に、CSVの文字化けを直すVBAを作成しているの 7 2022/11/04 14:15
- その他(プログラミング・Web制作) python 気象データの取得 2 2023/06/20 23:54
- Visual Basic(VBA) エクセルVBAについて 8 2022/07/13 22:41
- Visual Basic(VBA) 複数csvを横に追加していくマクロについて 2 2023/04/25 09:19
- Visual Basic(VBA) フォルダの場所を可変にしたいです(マクロ) 4 2023/05/11 10:00
- その他(プログラミング・Web制作) データ解析ソフトRでのファイル入力read.csvがエラーになります 7 2022/03/27 22:11
- C言語・C++・C# 大量のデータを読み込んで表示する速度を改善したい 8 2023/05/07 13:29
- Access(アクセス) access,vbaでフォルダ内のファイルをテーブルにインポート、ファイル名もフィールドに追加したい 1 2022/08/31 11:11
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・一番好きなみそ汁の具材は?
- ・泣きながら食べたご飯の思い出
- ・「これはヤバかったな」という遅刻エピソード
- ・初めて自分の家と他人の家が違う、と意識した時
- ・いちばん失敗した人決定戦
- ・思い出すきっかけは 音楽?におい?景色?
- ・あなたなりのストレス発散方法を教えてください!
- ・もし10億円当たったら何に使いますか?
- ・何回やってもうまくいかないことは?
- ・今年はじめたいことは?
- ・あなたの人生で一番ピンチに陥った瞬間は?
- ・初めて見た映画を教えてください!
- ・今の日本に期待することはなんですか?
- ・集中するためにやっていること
- ・テレビやラジオに出たことがある人、いますか?
- ・【お題】斜め上を行くスキー場にありがちなこと
- ・人生でいちばんスベッた瞬間
- ・コーピングについて教えてください
- ・あなたの「プチ贅沢」はなんですか?
- ・コンビニでおにぎりを買うときのスタメンはどの具?
- ・おすすめの美術館・博物館、教えてください!
- ・【お題】大変な警告
- ・洋服何着持ってますか?
- ・みんなの【マイ・ベスト積読2024】を教えてください。
- ・「これいらなくない?」という慣習、教えてください
- ・今から楽しみな予定はありますか?
- ・AIツールの活用方法を教えて
- ・最強の防寒、あったか術を教えてください!
- ・歳とったな〜〜と思ったことは?
- ・モテ期を経験した方いらっしゃいますか?
- ・好きな人を振り向かせるためにしたこと
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【ExcelVBA】UTF-8の文字コード...
-
カンマ区切りのCSVファイルから...
-
バッチでCSVを処理する時、空の...
-
マクロから出力されるcsvのダブ...
-
複数のCSVファイルのAccessテー...
-
csvファイルでの日付設定「yyyy...
-
COBOLでCSVをインプットにして...
-
csvファイルのデータの一部を取...
-
エクセル形式のファイルの読み込み
-
CSVファイル作成
-
csvファイル 項目数取得
-
【エクセルVBA】お願いします。...
-
【C#】パス名で無効な文字
-
csvファイルを列数ごとに分割す...
-
複数のcsvファイルをExcelに一...
-
C# datagridview
-
Csvから1行ずつ変数に格納する...
-
COBOL85でのCSVファ...
-
【エクセル マクロ】読み込ん...
-
[VBA] LOGファイル (text )か...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
カンマ区切りのCSVファイルから...
-
バッチでCSVを処理する時、空の...
-
複数のcsvファイルをExcelに一...
-
マクロから出力されるcsvのダブ...
-
csvファイル 項目数取得
-
CSV形式での保存時に”文字列...
-
CSVファイルの項目行を削除...
-
【C#】パス名で無効な文字
-
csvファイルでの日付設定「yyyy...
-
【エクセルVBA】お願いします。...
-
【ExcelVBA】UTF-8の文字コード...
-
エクセルVBA 大容量CSVファイル...
-
データ解析ソフトRでのファイル...
-
【エクセル マクロ】読み込ん...
-
複数のCSVファイルのAccessテー...
-
エクセル形式のファイルの読み込み
-
VBAでcsvファイルを読み込んで...
-
巨大なCSVの加工(指定列のみの...
-
CSV出力して、MS/EXCELで開くと...
-
COBOL85でのCSVファ...
おすすめ情報