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

    工具原料:

    Windows 7,Visual Studio 2010, Microsoft Office 2007

    创建解决方式

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


    加入相关组件:

    加入两个DataGridView。一个TextBox。两个button 。例如以下图:


    加入Excel资源:

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

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


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


    加入现有文件。选择刚刚创建的Excel文件


    从资源中提取Excel文件

                string excelPath = AppDomain.CurrentDomain.BaseDirectory + "Excel" + DateTime.Now.Ticks + ".xlsx";
                if (System.IO.File.Exists(excelPath))
                {
                    textBox1.Text += ("文件已经存在!");
                    return;
                }
    
                try
                {
                    //从资源中提取Excel文件
                    System.IO.FileStream fs = new System.IO.FileStream(excelPath, FileMode.OpenOrCreate);
                    fs.SetLength(0);
                    fs.Write(Properties.Resources.Excel, 0, Properties.Resources.Excel.Length);
                    fs.Close();
                    fs.Dispose();
                    textBox1.Text = "提取Excel文件成功!" + "
    ";
                }
                catch (System.Exception ex)
                {
                    excelPath = string.Empty;
                    textBox1.Text += ("提取Excel文件失败:" + ex.Message);
                    textBox1.Text += ("
    ");
                    Application.DoEvents();
                    return;
                }

    定义连接字符串

    //定义OleDB连接字符串
                string strConn = "Provider=Microsoft.Ace.OleDb.12.0;Persist Security Info=False;" + "data source=" + @excelPath + ";Extended Properties='Excel 12.0; HDR=yes; IMEX=10'";
                OleDbConnection conn = new OleDbConnection();
                conn.ConnectionString = strConn;

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

    在dataGridView1中显示Excel文件里的全部表的信息

                    DataTable oleDt = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
                    dataGridView1.DataSource = oleDt;
                    dataGridView1.Show();

    向"Sheet1"表中插入几条数据,訪问Excel的表的时候须要在表名后加入"$"符号,Insert语句能够不指定列名

                    OleDbCommand cmd = null;
                    try
                    {
                        //向"Sheet1"表中插入几条数据,訪问Excel的表的时候须要在表名后加入"$"符号,Insert语句能够不指定列名
                        cmd = new OleDbCommand("Insert Into [Sheet1$] Values('abc', 'bac', '0', '123456', 'test','測试','aa')", conn);//(A,B,C,D,E,F,G) 
                        cmd.ExecuteNonQuery();
                        cmd.ExecuteNonQuery();
                        cmd.ExecuteNonQuery();
                        cmd.ExecuteNonQuery();
                        cmd.ExecuteNonQuery();
                    }
                    catch (System.Exception ex)
                    {
                        textBox1.Text += ("插入数据失败:" + ex.Message);
                        textBox1.Text += ("
    ");
                    }

    在dataGridView2中显示表"Sheet1"的内容,訪问Excel的表的时候须要在表名后加入"$"符号

                    cmd = new OleDbCommand("Select * From [Sheet1$]", conn);
                    OleDbDataAdapter adp = new OleDbDataAdapter(cmd);
                    DataSet ds = new DataSet();
                    adp.Fill(ds);
                    dataGridView2.DataSource = ds.Tables[0];

    遍历Schema的内容

                    DataTable dt = conn.GetSchema();
                    for (int i = 0; i < dt.Columns.Count; i++)
                    {
                        textBox1.Text += dt.Columns[i].Caption;
                        if (i + 1 < dt.Columns.Count)
                        {
                            textBox1.Text += ",";
                        }
                    }
    
                    for (int j = 0; j < dt.Rows.Count; j++)
                    {
                        for (int i = 0; i < dt.Columns.Count; i++)
                        {
                            if (dt.Rows[j][dt.Columns[i]] != null)
                            {
                                textBox1.Text += dt.Rows[j][dt.Columns[i]].ToString();
                            }
                            else
                            {
                                textBox1.Text += "null";
                            }
    
                            if (i + 1 < dt.Columns.Count)
                            {
                                textBox1.Text += ",";
                            }
                        }
                        textBox1.Text += ("
    ");
                    }

    关闭Excel数据连接

                    if (conn.State != ConnectionState.Closed)
                    {
                        try
                        {
                            conn.Close();
                        }
                        catch (System.Exception ex)
                        {
                            textBox1.Text += ("关闭Excel数据连接:" + ex.Message);
                            textBox1.Text += ("
    ");
                        }
                    }

    打开文件文件夹

    System.Diagnostics.Process.Start("explorer.exe", AppDomain.CurrentDomain.BaseDirectory);
    源代码下载:http://download.csdn.net/detail/testcs_dn/7328685

  • 相关阅读:
    [1] Tornado Todo Day0
    [0] Tornado Todo 开篇
    RNSS和RDSS
    国密随机数检测--2/15 块内频数检测
    国密随机数检测--1/15 单比特频数检测
    FPGA实用通信协议之IIC
    压缩感知(十)
    压缩感知(九)
    压缩感知(八)
    压缩感知(七)
  • 原文地址:https://www.cnblogs.com/wzzkaifa/p/6973411.html
Copyright © 2011-2022 走看看