0

Excelファイルを読み取るための私のコードは、多くの行で適切に機能していますが、ファイルの一部の内容を表示しません。たとえば (11/12/2011) の場合、2 桁の日が含まれます。

DataTable dtExcel = new DataTable();

string connectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + HafizwalaFile + ";Extended Properties='Excel 8.0;HDR=No;IMEX=1'";
string strSQL = "SELECT * FROM [qe$] ";
OleDbConnection excelConnection = new OleDbConnection(connectionString);
OleDbDataAdapter dataAdapter = new OleDbDataAdapter(strSQL, excelConnection);

dataAdapter.Fill(dtExcel);
   for (int i = 0; i < dtExcel.Rows.Count; i++)
   {
      for (int j = 0; j < dtExcel.Columns.Count;j++ )
      {
         System.Console.WriteLine(dtExcel.Rows[i][j]);
         count_records++;
      }
   }
4

3 に答える 3

0

これは、列を Date としてフォーマットし、有効な日付ではないデータを入力したために発生しました。次を使用して C# からこれを確認できます:
MessageBox.Show(dtExcel.Columns[0].DataType.ToString());
Excel は、日付と時刻を 1900 年 1 月 0 日からの日数と 24 時間制の小数部分を表す数値として保存します: ddddd.tttttt これ
を読んでください 何度も試してみたところ、次のコードが正常に動作することを確認してください (テストしてください):

String cellValue = "41577.333333"; // 30/10/2013  8:00:00 AM
            int days  = 0 ;
            int hours = 0;
            string[] arr =  cellValue.Split('.');
            days = int.Parse(arr[0]);
            if(arr.Length == 2)
            {
                decimal  d_hours = decimal.Parse("0." +  arr[1]);
                hours =(int) ( d_hours  * 24  );
            }

            TimeSpan dateFromExcel = new TimeSpan(days ,hours ,0,0,0);
            DateTime resultingDate = new DateTime(1900,1,1 ,0,0,0).Add(dateFromExcel).AddDays(-2);
            MessageBox.Show(resultingDate.ToString());

JET の代わりに ACE を使用してみてください。一部の Web サイトでは次のように言及されています。

string connectionString = "Provider=Microsoft.ACE.OLEDB.12.0;;Data Source=" + HafizwalaFile + ";Extended Properties='Excel 8.0;HDR=No;IMEX=1'";
于 2013-11-13T19:19:00.393 に答える
0

Excelのその列を日付形式にフォーマットして、0を埋め込むか、テキストをまっすぐにすることをお勧めします。C#側でできることは何もないと思います

于 2013-11-13T17:06:50.193 に答える