首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

关于EXCEL导出DATATABLE列名的有关问题

2013-09-06 
关于EXCEL导出DATATABLE列名的问题。本帖最后由 zhuoweizhao 于 2011-09-20 15:02:03 编辑[color#FF9900]

关于EXCEL导出DATATABLE列名的问题。
本帖最后由 zhuoweizhao 于 2011-09-20 15:02:03 编辑 [color=#FF9900]链接字符串如下:

OleDbConnection conn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + filePath + ";" + "Mode=Share Deny Read|Share Deny Write;Extended Properties="Excel 8.0;HDR=yes";");

之前用这个的时候,一直都没问题。
可就在刚刚出现问题了。
EXCEL第一行应该是默认为列名的吧。
刚刚导出DATATABLE的时候,发现如果列名为数字的时候,就被自动转化为F+(数字),如果是其他字符,则没问题,如Aaaa1,则没问题。

就算我加上了HDR=yes,也是照样出现这情况?

接着,我把excel表列名为数字的列的格式设置为文本,还是出现F+数字的情况?

这次真的晕了。

难道,我哪里弄错了吗?

求解。。[/color]
[解决办法]


 public void EcxelToDataGridView(string filePath, DataGridView dgv)
        {
            //根据路径打开一个excel文件并将数据填充到dataset中
            string strConn = @"Provider = Microsoft.Ace.OLEDB.12.0; Data Source = " + filePath + "; Extended Properties = 'Excel 12.0;HDR = NO; IMEX=1'";
            OleDbConnection conn = new OleDbConnection(strConn);
            conn.Open();
            string strExcel = "";
            strExcel = "select * from [sheet1$]";
            DataTable schemaTable = conn.GetOleDbSchemaTable(System.Data.OleDb.OleDbSchemaGuid.Tables, null);
            string tableName = schemaTable.Rows[0][2].ToString().Trim();
            OleDbDataAdapter myCommand = new OleDbDataAdapter(strExcel, strConn);
            DataSet ds = new DataSet();


            myCommand.Fill(ds, "table1");
            //根据DataGridView的列构造一个DataTable
            DataTable td = ds.Tables[0];
            try
            {
                //MessageBox.Show(td.ToString());
                foreach (DataGridViewColumn dgvc in dgv.Columns)
                {
                    if (dgvc.Visible && dgvc.CellType != typeof(DataGridViewCheckBoxCell))
                    {
                        DataColumn dc = new DataColumn();
                        dc.ColumnName = dgvc.DataPropertyName;
                        dc.DataType = dgvc.ValueType;
                        //MessageBox.Show(dc.ToString());
                        td.Columns.Add(dc);
                    }
                }

                //根据excel的行逐一对上面的构造的datatable的列进行赋值

                for (int i = 0; i < ds.Tables[0].Rows.Count - 1; i++)
                {
                    //int j = 0;


                    DataRow dr = td.NewRow();
                    DataRow excelRow = ds.Tables[0].Rows[i];
                    foreach (DataColumn dc in td.Columns)
                    {
                        dr[dc] = excelRow[i];
                        //MessageBox.Show(dr[dc].ToString());
                        i++;
                    }
                    td.Rows.Add(dr);
                }
                //在datagridview中显示导入的数据
                dgv.DataSource = td;//这里是把datatable中的内容绑定到datagridview中如果LZ不想绑定的话直接这句不要就可以 
            }
            catch (Exception)
            {
                MessageBox.Show("该表已存在你即将导入的excel文件...,请点击清空按钮重新导入...");
                return;
            }
            finally
            {
                conn.Close();
            }
        }

热点排行