C#怎么读取Excel数据?详细点,最好给点关键代码

时间:2022-02-19 14:46:03
Winfrom窗体 点击按钮之后 选择文件,必须是xls文件,然后写入数据,可以写DataGridView也可以直接写入数据库   
主要是不太懂如何读取到Excel数据 ,求大神们制定
C#怎么读取Excel数据?详细点,最好给点关键代码

12 个解决方案

#1


搜NPIO,代码很多的

#2


http://www.csharpwin.com/csharpspace/6809r1243.shtml
http://www.cnblogs.com/tuyile006/archive/2006/10/25/395586.html

#3


引用 1 楼 lineages 的回复:
搜NPIO,代码很多的


NPOI

#5


读取Excel数据到SQL Server数据库
private void timer1_Tick(object sender, EventArgs e)
        {
            string P_str_Name = "";//存储遍历到的Excel文件名
            List<string> P_list_SheetNames = new List<string>();//实例化泛型集合对象,用来存储工作表名称
            P_str_Name = txt_Path.Text;//记录遍历到的Excel文件名
            P_list_SheetNames = GetSheetName(P_str_Name);//获取Excel文件中的所有工作表名
            for (int j = 0; j < P_list_SheetNames.Count; j++)//遍历所有工作表
            {
                if (ckbox_Windows.Checked)//如果用Windows身份验证登录Sql Server
                    ImportDataToSql(P_str_Name, P_list_SheetNames[j], "Data Source=" + txt_Server.Text + ";Initial Catalog =" + cbox_Server.Text + ";Integrated Security=SSPI;");//将工作表内容导出到Sql Server
                else if (ckbox_SQL.Checked)//如果用Sql Server身份验证登录Sql Server
                    ImportDataToSql(P_str_Name, P_list_SheetNames[j], "Data Source=" + txt_Server.Text + ";Database=" + cbox_Server.Text + ";Uid=" + txt_Name.Text + ";Pwd=" + txt_Pwd.Text + ";");//将工作表内容导出到Sql Server
            }
            System.Threading.Thread.Sleep(60000);//使线程休眠1分钟
        }

#6


读取Excel数据基本上是可以写这样的代码:
var app = new Microsoft.Office.Interop.Excel.Application();
var wbk = app.Workbooks.Open(file);
var sht = (excel.Worksheet)wbk.Worksheets["环境评估表"];
var v1 = (string)sht.Range["D1"].Value2;
var v2 = (double)sht.Range["M2"].Value2;
Debug.Assert((string)sht.Range["A12"].Value2 == "mm");
Debug.Assert((string)sht.Range["A13"].Value2 == "pp");
var v3 = (object[,])sht.Range["A1:M13"].Value2;
app.DisplayAlerts = false;
wbk.Close();
app.Quit();

#7


有些所谓的“读取Excel表的代码返利”是根本不考虑“Excel格式”的,那种代码只能用于极其个别的情况。

如果不说明具体是什么情况次啊能那样读取,而就去写博客,纯粹是胡写。你读取那种博客的时候要注意。此时随便拿出一种常见的Excel例子来测试,例如用这个 Excel表来测试,你可以试试看能读出来什么?

#8



//读取excel数据到dataGridView1中
   private void button1_Click(object sender, EventArgs e)
        {
            string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=Book222.xls;Extended Properties='Excel 8.0;HDR=Yes;IMEX=1;'";            
            OleDbConnection conn = new OleDbConnection(strConn);
            string strExcel = "";
            DataSet ds = new DataSet();
            strExcel = "select * from [sheet1$]";            
            OleDbDataAdapter da = new OleDbDataAdapter(strExcel, strConn);
            da.Fill(ds);
            dataGridView1.DataSource = ds.Tables[0];
        
        }

 //更新数据库 
   private void button2_Click(object sender, EventArgs e)
        {
        
            DataTable dt = (DataTable)dataGridView1.DataSource;
            update(dt);           
        }

//更新数据库
  public void update(DataTable dt)
        {
            OleDbDataAdapter Ada = new OleDbDataAdapter();
            String ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + System.Windows.Forms.Application.StartupPath + "\\temp.mdb";            
            using (OleDbConnection connection = new OleDbConnection(ConnectionString))
            {
                Ada.SelectCommand = new OleDbCommand("SELECT * FROM 表", connection);
                OleDbCommandBuilder builder = new OleDbCommandBuilder(Ada);
                Ada.UpdateCommand = builder.GetUpdateCommand();
                try
                {
                    //更新数据表数据时
                    Ada.Update(dt);                    
                    dt.AcceptChanges();
                }
                catch { } 
            }

        }

#9


LZ可以参阅这篇文章 ,使用 C# Excel控件导出Excel 数据到Datatable 

http://www.e-iceblue.com/Knowledgebase/Spire.XLS/Program-Guide/Import-Data-from-Excel-to-DataTable.html

#10


引用 7 楼 sp1234 的回复:
有些所谓的“读取Excel表的代码返利”是根本不考虑“Excel格式”的,那种代码只能用于极其个别的情况。

如果不说明具体是什么情况次啊能那样读取,而就去写博客,纯粹是胡写。你读取那种博客的时候要注意。此时随便拿出一种常见的Excel例子来测试,例如用这个 Excel表来测试,你可以试试看能读出来什么?

同意.
尤其EXCEL表里还有图片什么的,不是什么代码都能随便读的.
要看你到底想读什么东东,然后找合适的方法.

#11


引用 10 楼 Z65443344 的回复:
同意.
尤其EXCEL表里还有图片什么的,不是什么代码都能随便读的.
要看你到底想读什么东东,然后找合适的方法.



引用
网上随便一搜,代码一大把
 各种方式都可以实现...
 刚刚还做了用ADODB把EXCEL当数据库读的代码... 


呵呵

#12


引用 8 楼 wind_cloud2011 的回复:

//读取excel数据到dataGridView1中
   private void button1_Click(object sender, EventArgs e)
        {
            string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=Book222.xls;Extended Properties='Excel 8.0;HDR=Yes;IMEX=1;'";            
            OleDbConnection conn = new OleDbConnection(strConn);
            string strExcel = "";
            DataSet ds = new DataSet();
            strExcel = "select * from [sheet1$]";            
            OleDbDataAdapter da = new OleDbDataAdapter(strExcel, strConn);
            da.Fill(ds);
            dataGridView1.DataSource = ds.Tables[0];
        
        }

 //更新数据库 
   private void button2_Click(object sender, EventArgs e)
        {
        
            DataTable dt = (DataTable)dataGridView1.DataSource;
            update(dt);           
        }

//更新数据库
  public void update(DataTable dt)
        {
            OleDbDataAdapter Ada = new OleDbDataAdapter();
            String ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + System.Windows.Forms.Application.StartupPath + "\\temp.mdb";            
            using (OleDbConnection connection = new OleDbConnection(ConnectionString))
            {
                Ada.SelectCommand = new OleDbCommand("SELECT * FROM 表", connection);
                OleDbCommandBuilder builder = new OleDbCommandBuilder(Ada);
                Ada.UpdateCommand = builder.GetUpdateCommand();
                try
                {
                    //更新数据表数据时
                    Ada.Update(dt);                    
                    dt.AcceptChanges();
                }
                catch { } 
            }

        }



这个可以用

#1


搜NPIO,代码很多的

#2


http://www.csharpwin.com/csharpspace/6809r1243.shtml
http://www.cnblogs.com/tuyile006/archive/2006/10/25/395586.html

#3


引用 1 楼 lineages 的回复:
搜NPIO,代码很多的


NPOI

#4


#5


读取Excel数据到SQL Server数据库
private void timer1_Tick(object sender, EventArgs e)
        {
            string P_str_Name = "";//存储遍历到的Excel文件名
            List<string> P_list_SheetNames = new List<string>();//实例化泛型集合对象,用来存储工作表名称
            P_str_Name = txt_Path.Text;//记录遍历到的Excel文件名
            P_list_SheetNames = GetSheetName(P_str_Name);//获取Excel文件中的所有工作表名
            for (int j = 0; j < P_list_SheetNames.Count; j++)//遍历所有工作表
            {
                if (ckbox_Windows.Checked)//如果用Windows身份验证登录Sql Server
                    ImportDataToSql(P_str_Name, P_list_SheetNames[j], "Data Source=" + txt_Server.Text + ";Initial Catalog =" + cbox_Server.Text + ";Integrated Security=SSPI;");//将工作表内容导出到Sql Server
                else if (ckbox_SQL.Checked)//如果用Sql Server身份验证登录Sql Server
                    ImportDataToSql(P_str_Name, P_list_SheetNames[j], "Data Source=" + txt_Server.Text + ";Database=" + cbox_Server.Text + ";Uid=" + txt_Name.Text + ";Pwd=" + txt_Pwd.Text + ";");//将工作表内容导出到Sql Server
            }
            System.Threading.Thread.Sleep(60000);//使线程休眠1分钟
        }

#6


读取Excel数据基本上是可以写这样的代码:
var app = new Microsoft.Office.Interop.Excel.Application();
var wbk = app.Workbooks.Open(file);
var sht = (excel.Worksheet)wbk.Worksheets["环境评估表"];
var v1 = (string)sht.Range["D1"].Value2;
var v2 = (double)sht.Range["M2"].Value2;
Debug.Assert((string)sht.Range["A12"].Value2 == "mm");
Debug.Assert((string)sht.Range["A13"].Value2 == "pp");
var v3 = (object[,])sht.Range["A1:M13"].Value2;
app.DisplayAlerts = false;
wbk.Close();
app.Quit();

#7


有些所谓的“读取Excel表的代码返利”是根本不考虑“Excel格式”的,那种代码只能用于极其个别的情况。

如果不说明具体是什么情况次啊能那样读取,而就去写博客,纯粹是胡写。你读取那种博客的时候要注意。此时随便拿出一种常见的Excel例子来测试,例如用这个 Excel表来测试,你可以试试看能读出来什么?

#8



//读取excel数据到dataGridView1中
   private void button1_Click(object sender, EventArgs e)
        {
            string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=Book222.xls;Extended Properties='Excel 8.0;HDR=Yes;IMEX=1;'";            
            OleDbConnection conn = new OleDbConnection(strConn);
            string strExcel = "";
            DataSet ds = new DataSet();
            strExcel = "select * from [sheet1$]";            
            OleDbDataAdapter da = new OleDbDataAdapter(strExcel, strConn);
            da.Fill(ds);
            dataGridView1.DataSource = ds.Tables[0];
        
        }

 //更新数据库 
   private void button2_Click(object sender, EventArgs e)
        {
        
            DataTable dt = (DataTable)dataGridView1.DataSource;
            update(dt);           
        }

//更新数据库
  public void update(DataTable dt)
        {
            OleDbDataAdapter Ada = new OleDbDataAdapter();
            String ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + System.Windows.Forms.Application.StartupPath + "\\temp.mdb";            
            using (OleDbConnection connection = new OleDbConnection(ConnectionString))
            {
                Ada.SelectCommand = new OleDbCommand("SELECT * FROM 表", connection);
                OleDbCommandBuilder builder = new OleDbCommandBuilder(Ada);
                Ada.UpdateCommand = builder.GetUpdateCommand();
                try
                {
                    //更新数据表数据时
                    Ada.Update(dt);                    
                    dt.AcceptChanges();
                }
                catch { } 
            }

        }

#9


LZ可以参阅这篇文章 ,使用 C# Excel控件导出Excel 数据到Datatable 

http://www.e-iceblue.com/Knowledgebase/Spire.XLS/Program-Guide/Import-Data-from-Excel-to-DataTable.html

#10


引用 7 楼 sp1234 的回复:
有些所谓的“读取Excel表的代码返利”是根本不考虑“Excel格式”的,那种代码只能用于极其个别的情况。

如果不说明具体是什么情况次啊能那样读取,而就去写博客,纯粹是胡写。你读取那种博客的时候要注意。此时随便拿出一种常见的Excel例子来测试,例如用这个 Excel表来测试,你可以试试看能读出来什么?

同意.
尤其EXCEL表里还有图片什么的,不是什么代码都能随便读的.
要看你到底想读什么东东,然后找合适的方法.

#11


引用 10 楼 Z65443344 的回复:
同意.
尤其EXCEL表里还有图片什么的,不是什么代码都能随便读的.
要看你到底想读什么东东,然后找合适的方法.



引用
网上随便一搜,代码一大把
 各种方式都可以实现...
 刚刚还做了用ADODB把EXCEL当数据库读的代码... 


呵呵

#12


引用 8 楼 wind_cloud2011 的回复:

//读取excel数据到dataGridView1中
   private void button1_Click(object sender, EventArgs e)
        {
            string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=Book222.xls;Extended Properties='Excel 8.0;HDR=Yes;IMEX=1;'";            
            OleDbConnection conn = new OleDbConnection(strConn);
            string strExcel = "";
            DataSet ds = new DataSet();
            strExcel = "select * from [sheet1$]";            
            OleDbDataAdapter da = new OleDbDataAdapter(strExcel, strConn);
            da.Fill(ds);
            dataGridView1.DataSource = ds.Tables[0];
        
        }

 //更新数据库 
   private void button2_Click(object sender, EventArgs e)
        {
        
            DataTable dt = (DataTable)dataGridView1.DataSource;
            update(dt);           
        }

//更新数据库
  public void update(DataTable dt)
        {
            OleDbDataAdapter Ada = new OleDbDataAdapter();
            String ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + System.Windows.Forms.Application.StartupPath + "\\temp.mdb";            
            using (OleDbConnection connection = new OleDbConnection(ConnectionString))
            {
                Ada.SelectCommand = new OleDbCommand("SELECT * FROM 表", connection);
                OleDbCommandBuilder builder = new OleDbCommandBuilder(Ada);
                Ada.UpdateCommand = builder.GetUpdateCommand();
                try
                {
                    //更新数据表数据时
                    Ada.Update(dt);                    
                    dt.AcceptChanges();
                }
                catch { } 
            }

        }



这个可以用