C#excel数据导入DataGridView第一行数据变成标题处理方法
首先要添加Microsoft.Office.Interop.Excel 动态库的引用(看你自己现在的版本)然后添加一个Button按钮 添加一个DataGridView
双击Button生成单击事件 代码如下
定义一个全局的 DataTable
DataTable dt = new DataTable();
private void button1_Click(object sender, EventArgs e)
{
System.Windows.Forms.OpenFileDialog fd = new OpenFileDialog();
//打开多个文件true 打开一个文件false
//ofdLightning.Multiselect = true;
if (fd.ShowDialog() == DialogResult.OK)
{
//把文件的路径保存 并调用bind方法
string fileName = fd.FileName; bind(fileName);
this.label2.Text = fileName;
}
}
//读取Excel文件
private void bind(string fileName) {
string strConn = "Provider=Microsoft.ACE.OLEDB.12.0;" +
"Data Source=" + fileName + ";" +
"Extended Properties='Excel 12.0;HDR=Yes;IMEX=1'";
//读取Excel文件的 sheet1页面
OleDbDataAdapter da = new OleDbDataAdapter("SELECT * FROM [Sheet1$]", strConn);
DataSet ds = new DataSet();
try
{
da.Fill(ds, "DATA");
dt = ds.Tables["DATA"];
//把读取的数据放入dataGridView1中
this.dataGridView1.DataSource = dt;
}
catch (Exception err)
{
MessageBox.Show("操作失败!"+err.ToString());
}
好的 我们先运行下看下效果
报错 为什么呢 sheet1不是一个有效的名称
看前面的代码 OleDbDataAdapter da = new OleDbDataAdapter("SELECT * FROM [Sheet1$]", strConn);
看红色的 我们访问的是sheet1页面
我打开我们访问的Excel文件
我突然豁然开朗 Excel名称不对 我马上修改成sheet1
我们在运行 看下效果
最起码我们把Excel数据读取到DataGridView中了
仔细一个发现一个重要的文件
第一行的数据怎么变成标题了
然后我们回到之前的bind方法
string strConn = "Provider=Microsoft.ACE.OLEDB.12.0;" +
"Data Source=" + fileName + ";" +
"Extended Properties='Excel 12.0;HDR=Yes;IMEX=1'";
HDR=Yes是什么意思?
不懂是什么意思 百度找了下 才知道
HDR=Yes,这代表第一行是标题,不做为数据使用
如果用HDR=No,则表示第一行不是标题,做为数据来使用
我马上把HDR修改成HDR=No
然后我们在来运行下看下效果
这才是我们想要的结果
当然 标题自己也可以修改
看自己的需要了
本人刚毕业
非常菜鸟
希望写博客
提高自己的知识
第一次写博客
希望大家多多支持
多给我提点建议
谢谢
C# HDR excel DataGridView --------------------编程问答-------------------- --------------------编程问答--------------------
http://www.dotblogs.com.tw/rainmaker/archive/2013/07/11/109542.aspx --------------------编程问答--------------------
连接不行啊 --------------------编程问答--------------------
--------------------编程问答-------------------- 链接内容:
透过GetOleDbSchemaTable来取到Excel的Sheet Name( Microsoft Jet database engine could not find the object 'sheet1$'. ),这样就不用写死在程式中了,如下,
--------------------编程问答-------------------- 以后读取Excel 还是用NOPI吧
using (OleDbConnection excelConn = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=@你的ExcelPath@;Extended Properties=""Excel 8.0;HDR=Yes;IMEX=1"";"))
{
excelConn.Open();
DataTable excelShema = excelConn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
string firstSheetName = excelShema.Rows[0]["TABLE_NAME"].ToString();
string query = string.Format("Select * from [{0}]", firstSheetName);
using (OleDbDataAdapter DataAdapter = new OleDbDataAdapter(query, excelConn))
{
DataTable excelData = new DataTable("ExcelData");
DataAdapter.Fill(excelData);
}
excelConn.Close();
}
补充:.NET技术 , C#