C#Winform导入Excel数据到datagridview控件
#此次导入Excel数据借助了ExcelDataReader插件。(由于我需要的是打开工作簿时能够选择工作表绑定于datagridview控件,通过网上资源的浏览与借鉴,ExcelDataReader能满足我的需求。)
一、插件安装
(1)安装ExcelDataReader插件(如图)
(2)查看是否安装成功(如图表明已安装成功)
二、代码编写
(1)为了方便使用,打开文件的过程构造为一个方法
DataTableCollection tableCollection;
public void OpenFile()
{
OpenFileDialog file = new OpenFileDialog();
file.Filter = "Excel(*.xlsx)|*.xlsx|Excel(*.xls)|*.xls";
if (file.ShowDialog() == DialogResult.OK)
{
txtFileName.Text = file.FileName;//对话框中选择的文件名
//1:打开文件,得到文件流stream
FileStream stream = File.Open(file.FileName, FileMode.Open, FileAccess.Read);//FileStream:用于文件中任何位置的读写。
var sw = new Stopwatch();//定时器
sw.Start();
//2:得到文件reader
var reader = ExcelReaderFactory.CreateReader(stream);
//3:通过reader得到数据
var result = reader.AsDataSet(new ExcelDataSetConfiguration()
{
ConfigureDataTable = (tableReader) => new ExcelDataTableConfiguration()
{
//标题行的内容是否显示
UseHeaderRow = true
}
});
var openTiming = sw.ElapsedMilliseconds;
toolStripStatusLabel1.Text = "Elapsed: " + sw.ElapsedMilliseconds.ToString() + " ms (" + openTiming.ToString() + " ms to open)";
//4:得到ExcelFile文件的表Sheet
tableCollection = result.Tables;
cboSheet.Items.Clear();
foreach (DataTable item in tableCollection)
{
cboSheet.Items.Add(item.TableName);
Console.WriteLine(item.TableName);
}
}
}
(2)效果展示(图上为控件name)
(3)数据绑定方法
public static void BindDataGridView(DataTable dt, DataGridView dgv)
{
/*dgv.ClearSelection();
//不像用户显示添加行
dgv.AllowUserToAddRows = false;
dgv.DataSource = null;*/
//DataTable存储数据
dgv.DataSource = dt;
}
(4)选择工作表,绑定相应数据
private void dgv_CellContentClick()
{
//datagridview组件的颜色
dgvData.RowsDefaultCellStyle.BackColor = Color.White;
Console.WriteLine(cboSheet.SelectedItem.ToString());
var dt = tableCollection[cboSheet.SelectedItem.ToString()];
BindDataGridViewFillShow(dt, dgvData);
dgvData.DataSource = dt;
// DataGridView取消选中第一行第一列方法(绑定数据源后)
dgvData.Rows[0].Cells[0].Selected = false;
dgvData.Rows[0].Selected = false;
}
(5)在相应控件调用方法即可
private void btnFilenpath_Click(object sender, EventArgs e)
{
OpenFile();
}
private void cboSheet_SelectedIndexChanged(object sender, EventArgs e)
{
dgv_CellContentClick();
}
这就完成将Excel数据导入到Excel的过程啦!
这是通过自己需求从网络上学习、借鉴从而实现的,给有需要的朋友参考参考。如有侵权,请务必联系我删除,谢谢!
也希望能给大家有所帮助!!!