C#读取Excel数据操作大全

  • 苦丁茶 发表于 2014-02-10 12:58:00 | 分类标签: ASP.NET 读取Excel
  • 本文介绍下,用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)

    {

    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 中有用的数据写入到数据库中

    }

    }

  • 转载自http://www.hello-code.com/blog/asp.net/201402/2687.html