技術(shù)頻道導(dǎo)航
HTML/CSS
.NET技術(shù)
IIS技術(shù)
PHP技術(shù)
Js/JQuery
Photoshop
Fireworks
服務(wù)器技術(shù)
操作系統(tǒng)
網(wǎng)站運(yùn)營(yíng)

贊助商

分類目錄

贊助商

最新文章

搜索

C# .NET使用OleDb讀取Excel數(shù)據(jù)的一個(gè)范例

作者:admin    時(shí)間:2023-5-23 15:19:26    瀏覽:

這是我?guī)啄昵笆褂?.NET 在 C# 中編寫的代碼,使用OleDb讀取Excel數(shù)據(jù),它展示了如何獲取工作表名稱。

using System;
using System.Data;
using System.Data.OleDb;

namespace ExportExcelToAccess
{
    /// <summary>
    /// Summary description for ExcelHelper.
    /// </summary>
    public sealed class ExcelHelper
    {
        private const string CONNECTION_STRING = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=<FILENAME>;Extended Properties=\"Excel 8.0;HDR=Yes;\";";

        public static DataTable GetDataTableFromExcelFile(string fullFileName, ref string sheetName)
        {
            OleDbConnection objConnection = new OleDbConnection();
            objConnection = new OleDbConnection(CONNECTION_STRING.Replace("<FILENAME>", fullFileName));
            DataSet dsImport = new DataSet();

            try
            {
                objConnection.Open();

                DataTable dtSchema = objConnection.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);

                if( (null == dtSchema) || ( dtSchema.Rows.Count <= 0 ) )
                {
                    //raise exception if needed
                }

                if( (null != sheetName) && (0 != sheetName.Length))
                {
                    if( !CheckIfSheetNameExists(sheetName, dtSchema) )
                    {
                        //raise exception if needed
                    }
                }
                else
                {
                    //Reading the first sheet name from the Excel file.
                    sheetName = dtSchema.Rows[0]["TABLE_NAME"].ToString();
                }

                new OleDbDataAdapter("SELECT * FROM [" + sheetName + "]", objConnection ).Fill(dsImport);
            }
            catch (Exception)
            {
                //raise exception if needed
            }
            finally
            {
                // Clean up.
                if(objConnection != null)
                {
                    objConnection.Close();
                    objConnection.Dispose();
                }
            }


            return dsImport.Tables[0];
            #region Commented code for importing data from CSV file.
            //              string strConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" +"Data Source=" + System.IO.Path.GetDirectoryName(fullFileName) +";" +"Extended Properties=\"Text;HDR=YES;FMT=Delimited\"";
            //
            //              System.Data.OleDb.OleDbConnection conText = new System.Data.OleDb.OleDbConnection(strConnectionString);
            //              new System.Data.OleDb.OleDbDataAdapter("SELECT * FROM " + System.IO.Path.GetFileName(fullFileName).Replace(".", "#"), conText).Fill(dsImport);
            //              return dsImport.Tables[0];

            #endregion
        }

        /// <summary>
        /// This method checks if the user entered sheetName exists in the Schema Table
        /// </summary>
        /// <param name="sheetName">Sheet name to be verified</param>
        /// <param name="dtSchema">schema table </param>
        private static bool CheckIfSheetNameExists(string sheetName, DataTable dtSchema)
        {
            foreach(DataRow dataRow in dtSchema.Rows)
            {
                if( sheetName == dataRow["TABLE_NAME"].ToString() )
                {
                    return true;
                }   
            }
            return false;
        }
    }
}

前段時(shí)間我用 C# 讀取了很多 Excel 文件,我們使用了兩種方法:

  • COM API,你可以在其中直接訪問 Excel 的對(duì)象并通過方法和屬性對(duì)其進(jìn)行操作。
  • 允許像數(shù)據(jù)庫一樣使用 Excel 的 ODBC 驅(qū)動(dòng)程序。

后一種方法要快得多:通過 COM 讀取一個(gè)包含 20 列和 200 行的大表需要 30 秒,通過 ODBC 需要半秒。因此,如果你只需要數(shù)據(jù),我會(huì)推薦數(shù)據(jù)庫方法。請(qǐng)參閱文章:

 有網(wǎng)友展示了一種使用 .NET 讀取 xls/xlsx 文件的簡(jiǎn)單方法,我們可以看看它是如何讀取工作表名稱的。

private DataTable ReadExcelToTable(string path)     
 { 

     //連接字符串

     string connstring = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + path + ";Extended Properties='Excel 8.0;HDR=NO;IMEX=1' ;";  
     //同名
     //string connstring = Provider=Microsoft.JET.OLEDB.4.0;Data Source=" + path + //";Extended Properties='Excel 8.0;HDR=NO;IMEX=1';";

     使用(OleDbConnection conn = new OleDbConnection(connstring)) 
     { 
        conn.Open(); 
        //獲取所有工作表名稱
        DataTable sheetsName = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables,new object[]{null,null,null,"Table"}) ;   

        //獲取第一個(gè)工作表名稱
        字符串 firstSheetName = sheetsName.Rows[0][2].ToString(); 

        //查詢字符串
        string sql = string.Format("SELECT * FROM [{0}]",firstSheetName); 
        OleDbDataAdapter ada =new OleDbDataAdapter(sql,connstring); 
        數(shù)據(jù)集設(shè)置=新數(shù)據(jù)集();
        ada.填充(設(shè)置);
        返回 set.Tables[0];   
   } 
 }

相關(guān)文章

標(biāo)簽: asp.net  CSharp  Excel  
x
  • 站長(zhǎng)推薦
/* 左側(cè)顯示文章內(nèi)容目錄 */