public void EcxelToDataGridView(string filePath, DataGridView dgv)
{
//根据路径打开一个Excel文件并将数据填充到DataSet中
string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source = " + filePath + ";Extended Properties ='Excel 8.0;HDR=NO;IMEX=1'";//导入时包含Excel中的第一行数据,并且将数字和字符混合的单元格视为文本进行导入
OleDbConnection conn = new OleDbConnection(strConn); //创建数据源连接对象,并实例化
conn.Open(); //打开数据源连接
string strExcel = ""; //表示从Excel文件获取数据所在栏
OleDbDataAdapter myCommand = null; //表示一个数据连接,用于获取导入文件数据
DataSet ds = null; //开辟一块内存,用于存储导入文件数据
strExcel = "select * from [sheet1$]";
myCommand = new OleDbDataAdapter(strExcel, strConn);
ds = new DataSet();
myCommand.Fill(ds, "table1");
//根据DataGridView的列构造一个新的DataTable
DataTable tb = new DataTable();
//逐列或许数据表格中DataGridView控件各列
foreach (DataGridViewColumn dgvc in dgv.Columns)
{
if (dgvc.Visible && dgvc.CellType != typeof(DataGridViewCheckBoxCell))
{
DataColumn dc = new DataColumn();
dc.ColumnName = dgvc.DataPropertyName;
//dc.DataType = dgvc.ValueType;//若需要限制导入时的数据类型则取消注释,前提是DataGridView必须先绑定一个数据源那怕是空的DataTable
tb.Columns.Add(dc);
}
}
//根据Excel的行逐一对上面构造的DataTable的列进行赋值
foreach (DataRow excelRow in ds.Tables[0].Rows)
{
int i = 0;
DataRow dr = tb.NewRow();
foreach (DataColumn dc in tb.Columns)
{
dr[dc] = excelRow[i];
i++;
}
tb.Rows.Add(dr);
}
//在DataGridView中显示导入的数据
//dgv.Columns.Clear();
//dgv. = tb;
for (int curRow = 1; curRow < tb.Rows.Count; curRow++)
{
dgv.Rows.Add(1);
for (int curCol = 0; curCol < tb.Columns.Count; curCol++)
{
dgv.Rows[curRow - 1].Cells[curCol].Value = tb.Rows[curRow][curCol].ToString();
}
}
}
private void button2_Click(object sender, EventArgs e)
{
//打开一个文件选择框
OpenFileDialog ofd = new OpenFileDialog();
//为了获取特定的系统文件夹,可以使用System.Environment类的静态方法GetFolderPath()。该方法接受一个Environment.SpecialFolder枚举,其中可以定义要返回路径的哪个系统目录
ofd.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
ofd.Filter = "Excel文件(*.xls)|*.xls"; //使导入文件格式为03版Excel文件
//文件有效性验证ValidateNames,验证用户输入是否是一个有效的Windows文件名
ofd.ValidateNames = true;
ofd.CheckFileExists = true; //验证路径有效性
string strName = string.Empty; //用来储存导入文件的文件名
if (ofd.ShowDialog() == DialogResult.OK) //判断是否存在导入文件
{
strName = ofd.FileName;
}
if (strName == "")
{
//如果没有选择导入文件,进行提示,退出当前操作。
MessageBox.Show("没有选择Excel文件!无法进行数据导入");
return;
}
//调用导入数据方法
EcxelToDataGridView(strName, dataGridView1);
}
求网友 excel导入datagridview时 中出现很多多余的空行 怎么办?
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
1条回答 默认 最新
- Zedee 2016-09-22 12:23关注
//根据Excel的行逐一对上面构造的DataTable的列进行赋值
foreach (DataRow excelRow in ds.Tables[0].Rows)
{
int i = 0;
DataRow dr = tb.NewRow();
foreach (DataColumn dc in tb.Columns)
{
//在这里对excelRow[i]进行空值判断dr[dc] = excelRow[i]; i++; } tb.Rows.Add(dr); }
解决 无用评论 打赏 举报
悬赏问题
- ¥15 stata安慰剂检验作图但是真实值不出现在图上
- ¥15 c程序不知道为什么得不到结果
- ¥40 复杂的限制性的商函数处理
- ¥15 程序不包含适用于入口点的静态Main方法
- ¥15 素材场景中光线烘焙后灯光失效
- ¥15 请教一下各位,为什么我这个没有实现模拟点击
- ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
- ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
- ¥20 有关区间dp的问题求解
- ¥15 多电路系统共用电源的串扰问题