C# .NET读取Excel文件

最近要导Excel的数据,格式不固定,需要打开配置。打开的过程出现一些问题,都解决了,在这里踩一下,留个脚印。

    一开始连接:     

OleDbConnection conn=new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\\Book1.xls;Extended Properties=Excel 8.0");

            string Sql="SELECT * FROM [Sheet1$] ";

            OleDbCommand cmd=new OleDbCommand(Sql,conn);

            OleDbDataAdapter dpa=new OleDbDataAdapter(cmd);

            DataSet Des=new DataSet();

            dpa.Fill(Des);

            this.dataGridView1.DataSource=Des.Tables[0];

            这段代码可以读出数据,存在的问题如下:数据的第一行变成了标题,这么办能,使用的参考书上有HDR=YES,但是加上后总报错:找不到可安装的ISAM 。经过查找,发现是这个原因。连接串写成如下形式:

OleDbConnection conn=new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\\Book1.xls;Extended Properties='Excel 8.0;HDR=NO'");注意两个单引号的位置。

这次数据正常了,但是有个问题,本来数据列有数字有文本,现在有些列显示为Null,怎么回事?原来默认连接

的列类型是根据前一列推导的,具体怎么推不清楚,加一个属性可以解决,连接串如下:

OleDbConnection conn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\\Book1.xls;Extended Properties='Excel 8.0;HDR=NO;IMEX=1;'");注意单引号位置。

这时候,读数据很好了,列名为F1,F2。。。。

现在还有个问题,现在读的是Sheet1,怎么能指定别的呢,名称又不一定都是默认的。需要读出页签来动态生成语句读取方法如下:

DataTable tblSchema = null;

OleDbConnection conn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\\Book1.xls;Extended Properties='Excel 8.0;HDR=NO;IMEX=1;'");

conn.Open();
            tblSchema = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" });
            foreach (DataRow row in tblSchema.Rows)
            {
                this.comboBox1.Items.Add((string)row["TABLE_NAME"]); // 读取表名
            }
            if (this.comboBox1.Items.Count > 0)
            {
                this.comboBox1.SelectedIndex = 0;
                string Sql = "SELECT * FROM ["+this.comboBox1.SelectedItem.ToString()+"] ";
                OleDbCommand cmd = new OleDbCommand(Sql, conn);
                OleDbDataAdapter dpa = new OleDbDataAdapter(cmd);
                DataSet Des = new DataSet();
                dpa.Fill(Des);
                Des.Tables[0].DefaultView.AllowEdit = false;
                Des.Tables[0].DefaultView.AllowNew = false;
                this.grid1.DataSource = Des.Tables[0];
            }

这是我练习写的,具体应用请根据情况修改。页签改变时重读一下数据就好了。  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值