美文网首页
C# with Excel

C# with Excel

作者: 2010jing | 来源:发表于2017-10-14 00:48 被阅读69次

Target:
1 Import Excel
2 Show data in DataGridView
3 Save into MySQL

Materials

  1. data.xls - there are 13 columns


    data.xls
  2. student.sql - based on the data.xls file to create a 'student' table
CREATE TABLE `student` (
  `id` int(11) NOT NULL,
  `studentid` varchar(255) NOT NULL,
  `cname` varchar(255) NOT NULL,
  `ename` varchar(255) NOT NULL,
  `program` varchar(255) NOT NULL,
  `gender` varchar(1) NOT NULL,
  `eoffer` varchar(255) NOT NULL,
  `coffer` varchar(255) NOT NULL,
  `status` varchar(255) NOT NULL,
  `place` varchar(255) NOT NULL,
  `numoffer` int(11) NOT NULL,
  `eofferlist` text NOT NULL,
  `cofferlist` text NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

--
-- Indexes for dumped tables
--

--
-- Indexes for table `student`
--
ALTER TABLE `student`
  ADD PRIMARY KEY (`id`);

--
-- 在导出的表使用AUTO_INCREMENT
--

--
-- 使用表AUTO_INCREMENT `student`
--
ALTER TABLE `student`
  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;
  1. Import student.sql file
Import student.sql file

Select database “workshop2”, if no, create it by yourself.
Import -> Choose File -> Go
The result is like as below.

student table sturcture
  1. Create C# UI
C# UI

Select button – to select Excel file.
Show Info button – to show the percentage result.
Result label – Result text.
DataGridView – to show the result.

  1. Add new cs file.
Add new cs file

Right click the project -> Add -> New Item...

Connector.cs

Create Connector.cs to deal with the DB.

// Connector.cs Code
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

//**  add the two statements **//
using System.Data;
using MySql.Data.MySqlClient;

namespace CSWithEexcel
{
    class Connector
    {
        /// <summary>  
        ///  Create MySQL connector
        /// </summary>  
        /// <returns>Return MySqlConnection</returns>  
        public MySqlConnection getmysqlcon()
        {
            //sql connection stringcha, nge to your own information
            string M_str_sqlcon = "Host = 127.0.0.1;Database = workshop2;username = root;password = ;charset=utf8"; 
              
            MySqlConnection myCon = new MySqlConnection(M_str_sqlcon);
            //initialize the connection
            return myCon;
        }

        /// <summary>  
        /// Execute MySqlCommand  
        /// </summary>  
        /// <param name="M_str_sqlstr">SQL string</param>  
        public void getmysqlcom(string M_str_sqlstr)
        {
            MySqlConnection mysqlcon = this.getmysqlcon();
            // get sql connection
            mysqlcon.Open();
            // open connection
            MySqlCommand commn = new MySqlCommand("set names utf-8", mysqlcon);
            MySqlCommand mysqlcom = new MySqlCommand(M_str_sqlstr, mysqlcon);
            mysqlcom.ExecuteNonQuery();
            mysqlcom.Dispose();
            mysqlcon.Close();
            mysqlcon.Dispose();
        }

        /// <summary>
        /// clean student table
        /// </summary>
        public void cleanStudentTable()
        {
            string sql = "TRUNCATE TABLE student"; // clean student table sql string
            MySqlConnection mysqlcon = this.getmysqlcon();
            mysqlcon.Open();
            MySqlCommand commn = new MySqlCommand("set names utf-8", mysqlcon);
            MySqlCommand mysqlcom = new MySqlCommand(sql, mysqlcon);
            mysqlcom.ExecuteNonQuery(); 
            mysqlcom.Dispose();
            mysqlcon.Close();
            mysqlcon.Dispose();

        }

        /// <summary>
        /// get the result from MySQL And do calculation 
        /// </summary>
        /// <param name="M_str_sqlstr"></param>
        /// <returns>calculation string</returns>
        public string getResult(string M_str_sqlstr)
        {
            MySqlDataReader result = null;
            MySqlConnection mysqlcon = this.getmysqlcon();
            mysqlcon.Open();
            //MySqlCommand commn = new MySqlCommand("set names utf-8", mysqlcon);
            MySqlCommand mysqlcom = new MySqlCommand(M_str_sqlstr, mysqlcon);
            result = mysqlcom.ExecuteReader();

            String str = "";
            while (result.Read())
            {
                //double percent = Convert.ToDouble(int.Parse(result["num"].ToString())) / Convert.ToDouble(int.Parse(result["total"].ToString()));
                double percent = Convert.ToDouble(result["num"]) / Convert.ToDouble(result["total"]);
                string r = percent.ToString("0.00%");//percentage format e.g. 6%
                str = str + result["status"] + " " + result["num"] + " " + r + "\r\n";
                Console.Write(str);
            }
            mysqlcom.Dispose();
            mysqlcon.Close();
            mysqlcon.Dispose();
            return str;
        }

        /// <summary>  
        /// Create MySqlDataReader, using for output the content
        /// </summary>  
        /// <param name="M_str_sqlstr">SQL string</param>  
        /// <returns>Return MySqlDataReader</returns>  
        public MySqlDataReader getmysqlread(string M_str_sqlstr)
        {
            MySqlConnection mysqlcon = this.getmysqlcon();
            MySqlCommand mysqlcom = new MySqlCommand(M_str_sqlstr, mysqlcon);
            mysqlcon.Open();
            MySqlDataReader mysqlread = mysqlcom.ExecuteReader(CommandBehavior.CloseConnection);
            return mysqlread;
        }

        /// <summary>  
        /// Create DataTable object,using for output content in the dataGridView
        /// </summary>  
        /// <param name="M_str_sqlstr">SQL string</param>  
        /// <returns>return MySqlDataReader</returns>  
        public DataTable getsqlread(string M_str_sqlstr)
        {
            MySqlConnection mysqlcon = this.getmysqlcon();
            mysqlcon.Open();
            MySqlCommand commn = new MySqlCommand("set names utf-8", mysqlcon);
            MySqlDataAdapter mda = new MySqlDataAdapter(M_str_sqlstr, mysqlcon);
            DataTable dt = new DataTable();
            mda.Fill(dt);
            return dt;
        }
    }
}
  1. Download Connector/Net and Add MySQL reference.

Click this link to Download Connector/Net

Download Connector/Net Add MySQL reference
  1. Form1.cs code
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

//**  add this statements **//
using System.Data.OleDb;

namespace CSWithEexcel
{
    public partial class Form1 : Form
    {
        // iniatialize the Connector object
        Connector connector = new Connector();

        public Form1()
        {
            InitializeComponent();
        }

        // select button click event
        private void button1_Click(object sender, EventArgs e)
        {
            //Clean the student table
            connector.cleanStudentTable();
            //Fetch the excel file data
            InsertXls();
            
        }

        // show info button click event
        private void button2_Click(object sender, EventArgs e)
        {
            // hide the dataGridView
            dataGridView1.Hide();
            
            //SELECT * from (SELECT COUNT(status) num ,status from student GROUP by status) as temp join (SELECT COUNT(status) from student ) as temp3
            String sql = "SELECT * from (SELECT COUNT(status) num ,status from student GROUP by status) as temp join (SELECT COUNT(status) total from student ) as temp3";

            // call the getResult(sql) function to return percentage percentage string
            string result = connector.getResult(sql);
            // change Result label text to calculation result
            studentinfor.Text = result;
           
        }



        //################################ 

        /// <summary>  
        ///  Read List_Class1_Submit.xls data, and save it into database.  
        /// </summary>  
        private void InsertXls()
        {
            // Show the dialog view to choose file
            OpenFileDialog openfile = new OpenFileDialog();
            // filter file format
            openfile.Filter = "工作薄(*.xls)|*.xls|所有文件(*.*)|*.*|工作薄(*.xlsx)|*.xlsx";
            
            if (openfile.FilterIndex == 1 && openfile.ShowDialog() == DialogResult.OK)
            {
                // call the ExcelToDS() function to get the dataset result
                DataSet dataSet = ExcelToDS(openfile.FileName);
                // show the DataGridView
                dataGridView1.Show();
               

                dataGridView1.DataSource = null;
                DataTable dt = dataSet.Tables[0];
                dataGridView1.DataSource = dt;
                //String sqlSearch = "select * from student";
                int count = 0;
                string[] str = new string[13];// 13 means there are 13 columns in excel
                string sql;
                foreach (DataTable table in dataSet.Tables) // 
                {
                    foreach (DataRow row in table.Rows)
                    {
                        count = 0;
                       
                        foreach (DataColumn column in table.Columns)
                        {
                            if (row[column] != null)
                                str[count] = row[column].ToString();// fetch each row data in the Excel
                            count++;
                        }
                        // create sql string
                        sql = string.Format("insert into student values(null,'{0}','{1}','{2}','{3}','{4}','{5}','{6}','{7}','{8}','{9}','{10}','{11}')",
                             str[0], str[1], str[2], str[3], str[4], str[5], str[6], str[7], str[8], str[9], str[10], str[11]);
                       
                        // call the getmysqlcom() to save data into DB                       
                        connector.getmysqlcom(sql);

                        
                    }
                }


            }
        }

        // =====================================================

        /// <summary>
        /// Fetch the data in the Excel and save to DataSet
        /// </summary>
        /// <param name="path"></param>
        /// <returns> return DataSet </returns>
        public DataSet ExcelToDS(string path)
        {

            // check the file extendsion name
            string fileSuffix = System.IO.Path.GetExtension(path);
            if (string.IsNullOrEmpty(fileSuffix))
                return null;
            using (DataSet ds = new DataSet())
            {
                // Excel 2003 or 2007 version ?
                string connString = "";
                if (fileSuffix == ".xls")
                    connString = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + path + ";" + ";Extended Properties=\"Excel 8.0;HDR=YES;IMEX=1\"";
                else
                    connString = "Provider=Microsoft.ACE.OLEDB.12.0;" + "Data Source=" + path + ";" + ";Extended Properties=\"Excel 12.0;HDR=YES;IMEX=1\"";
                //Read the data from the Excel Sheet1
                string sql_select = " SELECT * FROM [Sheet1$]";
                //Create a database connection
                using (OleDbConnection conn = new OleDbConnection(connString))
                // use to connect database, and used by DataSet
                using (OleDbDataAdapter cmd = new OleDbDataAdapter(sql_select, conn))
                {
                    conn.Open();
                    cmd.Fill(ds);// fill the data to DataSet
                }
                if (ds == null || ds.Tables.Count <= 0) return null;
                return ds;
            }
        }

        private void Form1_Load(object sender, EventArgs e)
        {

        }
    }
}
  1. Running result.

Select button to choose the data.xlsx file.

choose the data.xlsx

There is the data result showing in the DataGridView.


DataGridView Result

Click show info button.

Percentage Calculation Result

相关文章

网友评论

      本文标题:C# with Excel

      本文链接:https://www.haomeiwen.com/subject/jzotuxtx.html