[英]Importing Excel File to DataGridView in C#, some columns are missing
**
我想将Excel导入到DataGridView并保存到数据库,但是首先,尽管有数据,但我还是在列中得到了一些空白数据。
数据以Excel文件形式显示,如图所示,我想将此数据导入到DataGridView并将其保存到数据库名称Records.SDF。
**
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();
}
}
不知道为什么在第二,第四和第六列中会得到空白数据。
这样尝试。
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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.