@【C#】(Excel文件读取)
使用dataGridView控件读取Excel数据文件,并进行相关计算的方法。
之前需要用到C#读取表格数据做程序,但是用listView的读取程序一直出现标红,查找了很多攻略,有还说要重安Office,emmmmm。SO,发现了dataGridView是一个读Excel很奶思的工具啊。
窗体创建如下:
(1)读取
private void button1_Click(object sender, EventArgs e)
{
OpenFileDialog ofd = new OpenFileDialog();
if (ofd.ShowDialog() == DialogResult.OK)
{
string excelpath = ofd.FileName;
dataGridView1.DataSource = ReadFromExcel(excelpath);
}
}
private DataTable ReadFromExcel(string excelpath)
{
string sExt = System.IO.Path.GetExtension(excelpath);
string sConn = null;
if (sExt == ".xlsx")
{
sConn = "Provider=Microsoft.ACE.OLEDB.12.0;" + "Data Source=" + excelpath + ";" + "Extended Properties='Excel 12.0;HDR=YES'";
}
else if (sExt == ".xls")
{
sConn = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + excelpath + ";" + "Extended Properties=Excel 8.0";
}
else
{
throw new Exception("文件格式有误");
}
OleDbConnection oledbConn = new OleDbConnection(sConn);
oledbConn.Open();
OleDbDataAdapter command = new OleDbDataAdapter("SELECT * FROM [Sheet1$]", oledbConn);
DataSet ds = new DataSet();
command.Fill(ds);
oledbConn.Close();
return ds.Tables[0];
}
(2)读数据
if (dataGridView1.DataSource == null)
MessageBox.Show("请先导入数据!");
else
{
int row = dataGridView1.Rows.Count;
// int cell = dataGridView1.Rows[1].Cells.Count; //得到总行列数
for (int i = 0; i < row-1; i++)
{
d.ID = Convert.ToInt32(dataGridView1.Rows[i].Cells[0].Value);
d.Name = Convert.ToString(dataGridView1.Rows[i].Cells[1].Value);
d.Area =Double.Parse(Convert.ToString(dataGridView1.Rows[i].Cells[6].Value));
//有几列写几个
}
}
dataGridView1.Rows[i].Cells[j].Value表示读入的第i行第j列的数据,为Object型,再做强制类型转换赋值给定义好的变量,就可以进行计算啦,以上是转化为int,string,double型的举例。
计算好的结果可以保存在Listview中,再导出保存。参考上一篇
(3)清空
dataGridView1.DataSource = null;
//DataGridView清空数据,包括列信息和行信息全部删去
调试: