dポイントプレゼントキャンペーン実施中!

いくつかこまごまとしたものをまとめてご質問させて頂きますが,

1)csvファイルを読込,ある処理を行おうとすると
「列の FillWeight 値の合計が 65535 を超えることはできません。」
というエラーが出て処理が出来ません.このエラーの解消法を教えて頂けないでしょうか?

2)画像のように読み込んだヘッダー部分が文字化けしてしまいます.
こちらの解消法をご教授頂けないでしょうか?

3)csvのすべてのデータをdatagridviewに表示させたいのですが,2列分しか表示されません.
下記に2)とも関連したプログラムを記載いたします.どなたかご教授願えないでしょうか?

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)
{

if (r == 0)
{
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();
tabControl1.SelectedIndex = 1;
}

「C# datagridview」の質問画像

A 回答 (3件)

元のCSVを提示していただいたほうがいいかも



データは何列必要なんでしょう
また CSVの文字コードは何で保存してありますか? Shift-JISでしょうか

この回答への補足

とりあえずデータは30列ぐらい必要です.

文字コードはおそらくおっしゃられているものです.

ご教授願いいたします.

補足日時:2011/11/23 11:49
    • good
    • 0

この書き方なら エンコードによる文字化けではないように思えます



30列追加ということであれば CSVの読み込みループの中で列の追加というより
読み込みループに入る前に 列の設定をする方向だと思います

if (sfd.ShowDialog() == DialogResult.OK)
{
  // ここで列の追加を行う
  dataGridView1.Columns.Add("clmName1", "日付");
  for ( int n = 1; n < 31; n++ )
  {
    String ss1 = String.Format("Time{0}", n );
    String ss2 = String.Format("データ{0}", n );
    this.dataGridView1.Columns.Add(ss1,ss2);
  }
  // ココまでを追加
  // 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)
    {
      // ここはコメントアウト  
      // if (r == 0)
      // {
      //   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();
  tabControl1.SelectedIndex = 1;
}
    • good
    • 0

文字化けが Shift-JISによるものなら



System.IO.StreamReader sw = new System.IO.StreamReader(sfd.FileName);
を エンコードつきのコンストラクターに変えましょう
System.IO.StreamReader sw = new System.IO.StreamReader(sfd.FileName, System.Text.Encoding.GetEncoding(932));

といった具合です

この回答への補足

ありがとうございます.

追記で保存の場合でも同じように定義してやれば

文字を文字化けさせずに保存できるのでしょうか?

参考に同じように保存する際に定義しているプログラムを書きに記載いたします.

ご教授よろしくお願いいたします.

// ファイルを指定してインスタンス作成
System.IO.StreamWriter sw = new System.IO.StreamWriter(sfd.FileName);

補足日時:2011/11/23 12:17
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!