在C#中将Excel文件导入DataGridView,缺少某些列

时间:2016-11-22 14:20:11

标签: c# datagridview

**

  • 我想首先将Excel导入DataGridView并保存到数据库 尽管它有数据,但我在列中得到了一些空白数据。

  • 数据显示在Excel文件中,如图所示,我想导入这些数据 到我的DataGridView并将其保存到我的数据库名称Records.SDF。

**

enter image description here

 private void importFromExcelToolStripMenuItem_Click(object sender, EventArgs e)
    {

        openFileDialog1.ShowDialog();

        try
        {
            string filePath = openFileDialog1.FileName;
            string extension = Path.GetExtension(filePath);
            string conStr;

            conStr = string.Empty;
            switch (extension)
            {

                case ".xls": //Excel 97-03

                    string Excel03ConString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + filePath + ";Extended Properties='Excel 12.0 XML;HDR=YES;';";
                    conStr = Excel03ConString; //string.Format(Excel03ConString, filePath);
                    break;

                case ".xlsx": //Excel 07
                    string Excel07ConString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" +
                            filePath +
                            ";Extended Properties='Excel 12.0 Xml;HDR=YES;IMEX=1';";
                    conStr = Excel07ConString;
                    break;
            }


            String name = "Sheet1";

               OleDbConnection con = new OleDbConnection(conStr);
               OleDbCommand oconn = new OleDbCommand("Select * From [" + name + "$]", con);
               con.Open();

               OleDbDataAdapter sda = new OleDbDataAdapter(oconn);
               System.Data.DataTable data = new System.Data.DataTable();

               sda.Fill(data);
               RecordsDataGridView.DataSource = data;

            DialogResult result = MessageBox.Show("Are you sure you want to Save the Recreations?", "Save Format",
            MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2);

            if (result == DialogResult.Yes) { SaveData(); }

        }
        catch (Exception ex) { MessageBox.Show(ex.Message.ToString(), "Exception Occured"); }
    }

    public void SaveData()
    {
        // Save the data.

        SqlCeConnection conn =
                new SqlCeConnection(
                   @"Data Source=|DataDirectory|\Records.sdf;Persist Security Info=False");

        SqlCeCommand com;
        string str;
        conn.Open();
        for (int index = 0; index < RecordsDataGridView.Rows.Count - 1; index++)
        {
            str = @"Insert Into ChequeRecords(ID,BankName,Date,AccountNo, Chequebook, ChequeNo, Payee, Amount, Remarks) Values(" + RecordsDataGridView.Rows[index].Cells[0].Value.ToString() + ", '" + RecordsDataGridView.Rows[index].Cells[1].Value.ToString() + "'," + RecordsDataGridView.Rows[index].Cells[2].Value.ToString() + "," + RecordsDataGridView.Rows[index].Cells[3].Value.ToString() + "," + RecordsDataGridView.Rows[index].Cells[4].Value.ToString() + "," + RecordsDataGridView.Rows[index].Cells[5].Value.ToString() + "," + RecordsDataGridView.Rows[index].Cells[6].Value.ToString() + "," + RecordsDataGridView.Rows[index].Cells[7].Value.ToString() + "," + RecordsDataGridView.Rows[index].Cells[8].Value.ToString() + ")";
            com = new SqlCeCommand(str, conn);
            com.ExecuteNonQuery();
        }
        conn.Close();


    }

}

我不知道为什么我会在第2,第4和第6列中获得空白数据。

enter image description here

我的表格列没有空格,但这有关系吗? enter image description here

1 个答案:

答案 0 :(得分:0)

试试这样。

using System;
using System.Drawing;
using System.Windows.Forms;
using Excel = Microsoft.Office.Interop.Excel; 

namespace WindowsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            try
            {
                System.Data.OleDb.OleDbConnection MyConnection ;
                System.Data.DataSet DtSet ;
                System.Data.OleDb.OleDbDataAdapter MyCommand ;
                MyConnection = new System.Data.OleDb.OleDbConnection("provider=Microsoft.Jet.OLEDB.4.0;Data Source='c:\\csharp.net-informations.xls';Extended Properties=Excel 8.0;");
                MyCommand = new System.Data.OleDb.OleDbDataAdapter("select * from [Sheet1$]", MyConnection);
                MyCommand.TableMappings.Add("Table", "TestTable");
                DtSet = new System.Data.DataSet();
                MyCommand.Fill(DtSet);
                dataGridView1.DataSource = DtSet.Tables[0];
                MyConnection.Close();
            }
            catch (Exception ex)
            {
                MessageBox.Show (ex.ToString());
            }
        }
   }
}

如果这不起作用,Excel中必须有一些东西将其抛弃。逐行浏览此代码示例(F11)并查看失败的位置。

http://csharp.net-informations.com/excel/csharp-excel-oledb.htm