ASP.NET(C#) 读取EXCEL另加解决日期问题的方法分享

前端技术 2023/09/02 .NET

使用OLEDB可以对excel文件进行读取,我们只要把该excel文件作为数据源即可。

一 在D盘创建excel文件test.xls:

二 将工作表Sheet1的内容读取到DataSet

复制代码 代码如下:

  string strConn = \"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:/test.xls;\"+
      \"Extended Properties=\'Excel 8.0\'\";
  DataSet ds = new DataSet();
  OleDbDataAdapter oada = new OleDbDataAdapter(\"select * from [Sheet1$]\", strConn);
  oada.Fill(ds);

读取的DataSet为:

从图中可以看出excel文件中的第一行变成了DataSet中的列名,这正是系统的默认设置。

三 如果想把第一行也作为数据行,那我们可以给连接字符串添加一个HDR=No属性如:

复制代码 代码如下:

  string strConn = \"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:/test.xls;\"+
      \"Extended Properties=\'Excel 8.0;HDR=No\'\";
  DataSet ds = new DataSet();
  OleDbDataAdapter oada = new OleDbDataAdapter(\"select * from [Sheet1$]\", strConn);
  oada.Fill(ds);

  结果也许会让你有点想不到:

第一行的第一列和第三列都变成空的了,这是因为系统把第一列识别成了数字,把第三列识别成了日期,

而第一行的数据不符合格式的要求,所以就变成空的了。

四 我们还可以把所有列都做为字符串来读取,只要添加属性IMEX=1即可

复制代码 代码如下:

  string strConn = \"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:/test.xls;\"+
      \"Extended Properties=\'Excel 8.0;HDR=No;IMEX=1\'\";
  DataSet ds = new DataSet();
  OleDbDataAdapter oada = new OleDbDataAdapter(\"select * from [Sheet1$]\", strConn);
  oada.Fill(ds);

  结果又会如何呢?

是不是再次出乎你的意料,第三行的日期怎么变成数字了,其实excel在转换格式的时候就自动把日期变成数字了,

那这个数字是怎么来的呢 ? 如果你把日期改成1900年1月1日,那么你可以看到他的转换结果是1,以此类推,39902是哪一天就明白了吧。

这里解决办法:

方法一:

复制代码 代码如下:

  public static string getDateStr(string strValue)
      {
          int i = Convert.ToInt32(strValue);
          DateTime d1 = Convert.ToDateTime(\"1900-1-1\");
          DateTime d2 = d1.AddDays(i - 2);
          string strTemp = d2.ToString(\"d\");

          return strTemp;
      }

本文地址:https://www.stayed.cn/item/3515

转载请注明出处。

本站部分内容来源于网络,如侵犯到您的权益,请 联系我

我的博客

人生若只如初见,何事秋风悲画扇。