C#读取excel数据的简单实例

发布时间:2020-04-27编辑:脚本学堂
本文介绍下,用C#读取excel数据的例子,包括读取整个工作薄的数据、读取工作薄选定区域中的数据、读取excel特定区域中的数据。有需要的朋友,参考下吧。

例1,读取Excel工作薄中的全部数据。
读取Excel工作薄1(工作薄名称:Sheet1)中的全部数据,在OleDbDataAdapter对象中的sql语句应为:"Select 字段列表 From [工作表名$]"。
 

复制代码 代码示例:
public void ReadExcel(string sExcelFile)  
{  
    string sConnectionString = "Provider=Microsoft.Jet.Oledb.4.0;
    Data Source=" + sExcelFile + ";Extended Properties=Excel 8.0";  
    OleDbConnection connection = new OleDbConnection(sConnectionString);  
    OleDbDataAdapter adp = new OleDbDataAdapter(
    "Select * from [Sheet1$]",connection);  
    DataSet ds = new DataSet();  
    adp.Fill(ds,"Book1");  
    grd_Excel.DataSource = ds.Tables["Book1"].DefaultView;  
    grd_Excel.DataBind();  

例2,读取Excel工作薄选定区域中的数据。
首先,在工作簿中,左键拖拽选取要定义成为表的区域,从菜单中选择‘插入’->‘名称’->‘定义’,在‘定义名称’对话框出现中键入表的名字:“TestTable”,OK。
那么SQL语句应为:SELECT * FROM TestTable。
 

复制代码 代码示例:
public void ReadExcel(string sExcelFile)  
{   //edit www.jb200.com
    string sConnectionString = "Provider=Microsoft.Jet.Oledb.4.0;
    Data Source=" + sExcelFile + ";Extended Properties=Excel 8.0";  
    OleDbConnection connection = new OleDbConnection(sConnectionString);  
    OleDbDataAdapter adp = new OleDbDataAdapter(
    "SELECT * FROM TestTable", connection);  
    DataSet ds = new DataSet();  
    adp.Fill(ds,"Book1");  
    grd_Excel.DataSource = ds.Tables["Book1"].DefaultView;  
    grd_Excel.DataBind();  
}

例3,读出excel特定区域的数据。
 

复制代码 代码示例:

protected void Button1_Click(object sender, EventArgs e)
{
        string filepath=FileUpload1.PostedFile.FileName;
        ReadExcel(filepath, gdBom);
}
public void ReadExcel(string sExcelFile,GridView dgBom)
{
        DataTable ExcelTable;
        DataSet ds = new DataSet();
        //Excel的连接
        OleDbConnection objConn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + sExcelFile + ";" + "Extended Properties=Excel 8.0;");
        objConn.Open();
        DataTable schemaTable = objConn.GetOleDbSchemaTable(System.Data.OleDb.OleDbSchemaGuid.Tables, null);
        string tableName = schemaTable.Rows[0][2].ToString().Trim();//获取 Excel 的表名,默认值是sheet1
        string strSql = "select * from [" + tableName + "]";
        OleDbCommand objCmd = new OleDbCommand(strSql, objConn);
        OleDbDataAdapter myData = new OleDbDataAdapter(strSql, objConn);
        myData.Fill(ds, tableName);//填充数据

        dgBom.DataSource =ds;
        dgBom.DataBind();
        objConn.Close();
      
        ExcelTable = ds.Tables[tableName];
        int iColums = ExcelTable.Columns.Count;//列数
        int iRows = ExcelTable.Rows.Count;//行数

        //定义二维数组存储 Excel 表中读取的数据
        string[,] storedata = new string[iRows, iColums];
    
        for(int i=0;i<ExcelTable.Rows.Count;i++)
            for (int j = 0; j < ExcelTable.Columns.Count; j++)
            {
                //将Excel表中的数据存储到数组
                storedata[i, j] = ExcelTable.Rows[i][j].ToString();

            }
        int excelBom = 0;//记录表中有用信息的行数,有用信息是指除去表的标题和表的栏目,本例中表的用用信息是从第三行开始
        //确定有用的行数
        for (int k = 2; k < ExcelTable.Rows.Count; k++)
            if (storedata[k, 1] != "")
                excelBom++;
        if (excelBom == 0)
        {
            Response.Write("<script language=javascript>alert('您导入的表格不合格式!')</script>");
        }
        else
        {
            //LoadDataToDataBase(storedata,excelBom)//将 storedata 中有用的数据写入到数据库
        }

    }