zoukankan      html  css  js  c++  java
  • C#创建Excel文件并将数据导出到Excel文件

    工具原料:

    Windows 7,Visual Studio 2010, Microsoft Office 2007

    创建解决方案

    菜单》新建》项目》Windows窗体应用程序:

    添加相关组件:

    添加两个DataGridView,一个TextBox,两个按钮 ,如下图:

    添加Excel资源:

    C#创建Excel文件,这里实际上是从资源中提取一个事先创建好的Excel文件,文件提取成功后,使用OleDb方法连接Excel,向Excel文件中写入数据。

    先在文件夹中新建一个Excel文件,在Sheet1表的第一行设置列名:

    双击“Resources.resx”文件打开资源文件视图:

    添加现有文件,选择刚刚创建的Excel文件

    从资源中提取Excel文件

    [csharp] view plaincopy在CODE上查看代码片派生到我的代码片
    1. string excelPath = AppDomain.CurrentDomain.BaseDirectory + "Excel" + DateTime.Now.Ticks + ".xlsx";  
    2. if (System.IO.File.Exists(excelPath))  
    3. {  
    4.     textBox1.Text += ("文件已经存在!");  
    5.     return;  
    6. }  
    7.   
    8. try  
    9. {  
    10.     //从资源中提取Excel文件  
    11.     System.IO.FileStream fs = new System.IO.FileStream(excelPath, FileMode.OpenOrCreate);  
    12.     fs.SetLength(0);  
    13.     fs.Write(Properties.Resources.Excel, 0, Properties.Resources.Excel.Length);  
    14.     fs.Close();  
    15.     fs.Dispose();  
    16.     textBox1.Text = "提取Excel文件成功!" + " ";  
    17. }  
    18. catch (System.Exception ex)  
    19. {  
    20.     excelPath = string.Empty;  
    21.     textBox1.Text += ("提取Excel文件失败:" + ex.Message);  
    22.     textBox1.Text += (" ");  
    23.     Application.DoEvents();  
    24.     return;  
    25. }  

    定义连接字符串

    [csharp] view plaincopy在CODE上查看代码片派生到我的代码片
    1. //定义OleDB连接字符串  
    2.             string strConn = "Provider=Microsoft.Ace.OleDb.12.0;Persist Security Info=False;" + "data source=" + @excelPath + ";Extended Properties='Excel 12.0; HDR=yes; IMEX=10'";  
    3.             OleDbConnection conn = new OleDbConnection();  
    4.             conn.ConnectionString = strConn;  

    注意:连接字符串中IMEX的值使用的是10,如果是1或2,在执行Insert Into语句时就会报“操作必须使用一个可更新的查询”的错误。

    在dataGridView1中显示Excel文件中的所有表的信息

    [csharp] view plaincopy在CODE上查看代码片派生到我的代码片
    1. DataTable oleDt = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);  
    2. dataGridView1.DataSource = oleDt;  
    3. dataGridView1.Show();  

    向"Sheet1"表中插入几条数据,访问Excel的表的时候需要在表名后添加"$"符号,Insert语句可以不指定列名

    [csharp] view plaincopy在CODE上查看代码片派生到我的代码片
    1. OleDbCommand cmd = null;  
    2. try  
    3. {  
    4.     //向"Sheet1"表中插入几条数据,访问Excel的表的时候需要在表名后添加"$"符号,Insert语句可以不指定列名  
    5.     cmd = new OleDbCommand("Insert Into [Sheet1$] Values('abc', 'bac', '0', '123456', 'test','测试','aa')", conn);//(A,B,C,D,E,F,G)   
    6.     cmd.ExecuteNonQuery();  
    7.     cmd.ExecuteNonQuery();  
    8.     cmd.ExecuteNonQuery();  
    9.     cmd.ExecuteNonQuery();  
    10.     cmd.ExecuteNonQuery();  
    11. }  
    12. catch (System.Exception ex)  
    13. {  
    14.     textBox1.Text += ("插入数据失败:" + ex.Message);  
    15.     textBox1.Text += (" ");  
    16. }  

    在dataGridView2中显示表"Sheet1"的内容,访问Excel的表的时候需要在表名后添加"$"符号

    [csharp] view plaincopy在CODE上查看代码片派生到我的代码片
    1. cmd = new OleDbCommand("Select * From [Sheet1$]", conn);  
    2. OleDbDataAdapter adp = new OleDbDataAdapter(cmd);  
    3. DataSet ds = new DataSet();  
    4. adp.Fill(ds);  
    5. dataGridView2.DataSource = ds.Tables[0];  

    遍历Schema的内容

    [csharp] view plaincopy在CODE上查看代码片派生到我的代码片
    1. DataTable dt = conn.GetSchema();  
    2. for (int i = 0; i < dt.Columns.Count; i++)  
    3. {  
    4.     textBox1.Text += dt.Columns[i].Caption;  
    5.     if (i + 1 < dt.Columns.Count)  
    6.     {  
    7.         textBox1.Text += ",";  
    8.     }  
    9. }  
    10.   
    11. for (int j = 0; j < dt.Rows.Count; j++)  
    12. {  
    13.     for (int i = 0; i < dt.Columns.Count; i++)  
    14.     {  
    15.         if (dt.Rows[j][dt.Columns[i]] != null)  
    16.         {  
    17.             textBox1.Text += dt.Rows[j][dt.Columns[i]].ToString();  
    18.         }  
    19.         else  
    20.         {  
    21.             textBox1.Text += "null";  
    22.         }  
    23.   
    24.         if (i + 1 < dt.Columns.Count)  
    25.         {  
    26.             textBox1.Text += ",";  
    27.         }  
    28.     }  
    29.     textBox1.Text += (" ");  
    30. }  

    关闭Excel数据连接

    [csharp] view plaincopy在CODE上查看代码片派生到我的代码片
    1. if (conn.State != ConnectionState.Closed)  
    2. {  
    3.     try  
    4.     {  
    5.         conn.Close();  
    6.     }  
    7.     catch (System.Exception ex)  
    8.     {  
    9.         textBox1.Text += ("关闭Excel数据连接:" + ex.Message);  
    10.         textBox1.Text += (" ");  
    11.     }  
    12. }  

    打开文件目录

    [csharp] view plaincopy在CODE上查看代码片派生到我的代码片
      1. System.Diagnostics.Process.Start("explorer.exe", AppDomain.CurrentDomain.BaseDirectory);
  • 相关阅读:
    CodeForces 710CMagic Odd Square(经典-奇数个奇数&偶数个偶数)
    CodeForces 710A King Moves(水题-越界问题)
    CodeForces 701C They Are Everywhere (滑动窗口)
    CodeForces 701B Cells Not Under Attack
    [补档]happiness
    [补档]王者之剑
    [补档]士兵占领
    [补档]搭配飞行员
    [补档]暑假集训D6总结
    [补档][Lydsy2017年4月月赛]抵制克苏恩
  • 原文地址:https://www.cnblogs.com/rr163/p/4024301.html
Copyright © 2011-2022 走看看