My Programming Notes

Here are Notes.... come from debugging

My Programming Notes

Here are Notes.... come from debugging

جمعه, ۴ مرداد ۱۳۹۲، ۰۳:۰۷ ق.ظ

خواندن داده از یک فایل Excel در C#

اولین مطلبی که موقع کار کردن با WPF یاد گرفتم نحوه گرفتن داده از دیتا بیس بود.

فرض کنید دیتا بیس شما یک فایل Excel باشد. برای اینکه بتوانیم از اطلاعات موجود در آن استفاده کنیم باید با آن مثل Sql برخورد کنیم.

برای اینکار از کلاس oleDb استفاده می کنیم.

این کلاس یک Data Reader  است که برای خواندن سطر های دیتا بیس از آن استفاده می شود.

موقع استفاده از آن باید Namespace: using system.oleDb و Namespace : using system.Data رو حتما به Namespace   ها اضافه کنید.

حالا با استفاده از oleDb یک connection می سازیم که به دیتا بیس مورد نظر متصل بشیم.

یعنی یک متغیر را مثل زیر از جنس string تعریف می کنیم و عبارت زیر را مثل نمونه به آن می دهیم. این متغیر نشان می دهد که متا  می خواهیم از یک فایل Excel استفاده کنیم. پس از آن یک نمونه از  OleDbCommand می سازیم.


string ConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties= 'Excel 12.0;HDR=yes


;()OleDbCommand oleDBCmd = new OleDbCommand


از Command استفاده می کنیم تا بتوانیم دستور اتصال به دیتا بیس را صادر کنیم و نوع دستور و جزئیاتش را مشخص کنیم.


  ,oleDBCmd.Connection = new OleDbConnection(String.Format(connectionString 

;(("C:\Users\SZ\Desktop\New File - Sample.xlsx"@


        ( if (oleDBCmd.Connection.State != ConnectionState.Open

        }

         

;  () oleDBCmd.Connection.Open

       {

        ; oleDBCmd.CommandType = CommandType.Text


همان طور که در بالا می بینید ابتدا برای برقراری اتصال ، آدرس محل قرار گرفتن  فایل را قید کردم سپس وضعیت Connection  را  بررسی کردم که حتما open باشدسپس نوع  دستور را به  CommandType  به صورت Text  دادم که خودم دستور را دستی بنویسم مانند دستوراتی که در Query های Sql  می نویسیم.

با همان مقررات.

به کد زیر توجه کنید:

   [$string cmdText = "SELECT  [Name] as [Title] ,[Id] FROM [PersonId] from [Student

         

  

      ; oleDBCmd.CommandText = cmdText


با این روش اتصال به دیتابیس (فایل Excel ) برقرار می شود. برای خواندن فایل و جدول های موجود هم باید از کلاس OleDbDataReader استفاده کرد.


دانلود مثال WPF

! دقت کنید که همین مثال می تواند با توجه به شرایط Windows Forms Application نوشته شود.

موافقین ۶ مخالفین ۰ ۹۲/۰۵/۰۴
سارا زکی زاده

نظرات  (۴۴)

۰۷ مرداد ۹۲ ، ۰۰:۴۱ میثم هوشمند
سلام
تبریک خانم زکی زاده!
تبریــــک!

پاسخ:
سلام.متشکرم.
۰۷ مرداد ۹۲ ، ۱۲:۱۲ نسیم منافی
سلام سارا جان
مطلب خیلی خوبیه
منتظر مطالب جدیدت هستم ...
لینکت کردم اگه دوست داشتی لینکم کن
امیدوارم موفق باشی دوست من.
پاسخ:
سلام . ممنون ازت دوست خوبم.
باسلام
خیلی هم خووووب
تبریک بابت راه اندازی بلاگ تخصصی
باشد که استفاده کنیــــم
:)
پاسخ:
متشکرم. امیدوارم که مفید باشه.
۰۷ مرداد ۹۲ ، ۱۷:۳۵ احمد تاج بخش
سلام
خیلی عالی است.از تکنولوژی های گزارشگیری مثل crystal reporter هم مطلب بنویسید ..ما منتظر مطالب جدیدتتان هستیم...
پاسخ:
سلام .
ممنونم آقای تاجبخش.
انشالله هر مطلب جدیدی یادبگیرم حتما منتشر می کنم.
سلام
تبریـــــــــــــــک سارایی ;)

پاسخ:
ممنونم دوست خوبم.
۰۹ مرداد ۹۲ ، ۱۴:۳۸ زینب جهان بخش
سلام ..
تبریک می گم افتتاح وبلاگتون خانم زکی زاده . :)
انشاالله شاهد موفقیت بیشتر شما در زمینه برنامه نویسی باشیم.

موفق باشی .
پاسخ:
سلام...
ممنونم . ما هم منتظر موفقیت های شما هستیم.
۱۰ مرداد ۹۲ ، ۲۲:۵۵ شیما اسلامی فر
سارا جان با تاخیر تبریک منو هم پذیرا باش، البته من خصوصی تبریک گفته بودم ;)
چقدم که این مطلبو من دوست دارم مخصوصا که هر دومون از نزدیک دیدیم نتیجشو ^_^
ایشالله همیشه موفق باشی و پشتکارت به منم سرایت کنه :D
پاسخ:
ممنونم شیما جون. در اصل نویسنده این مطالب دو نفرن ، هم من و هم تو!
از تبریک صمیمانه تو هم ممنونم.
امیدوارم به زودی شاهد موفقیت های بیشتر تو هم باشم.
۱۱ مرداد ۹۲ ، ۱۶:۵۸ فائزه فاضلی
سلام
تبریک میگم بابت راه اندازی بلاگ تون
به امید موفقیت روزافزون شما
پاسخ:
ممنوم خانم فاضلی.
باز هم سلام و عرض خسته نباشید و خدا قوت خدمت شما
اگر امکان داره برام توضیح بدید که چرا از متغیری با جنس string باید استفاده کنیم
آیا در اینگونه جاها فقط متغیرمون باید از نوع string باشه یا حالت دیگه ای هم امکان پذیره؟

(منظورم اینه که چون فایلمون Excel بود از این نوع استفاده کردیم یا ربطی به این مساله نداره)


با تشکر
پاسخ:
عبارتی که محتوی Connection است به صورت یک رشته است و داخل " " نوشته شده است. پس ما هم مثل یک متغیر از جنس string با آن برخورد می کنیم.
ربطی هم به فایل اکسل ندارد حتی موقع استفاده از SQL هم ما String تعریف می کنیم.
امیدوارم فهمیده باشم منظورتون رو.
راحت تره که از OpenXml استفاده بشه یا کتابخونه هایی مثل EPPlus  یا NPOI
پاسخ:
سلام دوست عزیز.ممنون از نظرت.
من خودم خیلی نمی شناختم این راه رو ولی با سرچ(گوگل) این راه رو پیدا کردم و به نظرم راه آسونی بود توی پروژه ای که داشتم کار می کردم . چون خیلی شبیه کار کردن با sql بود.
حتما مواردی رو که فرمودید بررسی می کنم.
۱۶ مرداد ۹۲ ، ۲۲:۰۵ میثم هوشمند
خانم زکی زاده ممکنه نمونه پروژه ای حاوی همین کد و در واقع یک مثال عملی از آن را برای دانلود قرار دهید؟
با تشکر
پاسخ:
حتما . قرار میدم.
خواهش می کنم.
۰۱ آبان ۹۲ ، ۱۶:۳۴ طراحی سایت
عالی بود. مرسی
واقعا ممنون . خیلی خوب بود :)
پاسخ:
خواهش می کنم. موفق باشین.
۰۳ آبان ۹۳ ، ۱۰:۲۶ طراحی سایت

با سلام. خسته نباشید عرض می کنم و کمال تشکر را از شما دارم

۰۵ بهمن ۹۳ ، ۱۲:۱۷ طراحی سایت

با تشکر و خسته نباشید سایت خیلی خوب و مفیدی دارید موفق و پیروز باشید

۱۵ بهمن ۹۳ ، ۱۹:۲۶ طراحی سایت
سلام .. خوب بود ... واقعا مفید بود.. با تشکر...
۱۸ بهمن ۹۳ ، ۱۹:۴۸ هتل های مشهد
خیلی ممنون سایتتون حرف نداره
با سلام بسیار عالی بود موفق باشید
سپاسگزارم مرسی از سایت خوبتون موفق باشین
۲۴ تیر ۹۴ ، ۲۲:۵۱ <a href='http://sitecode.ir'> طراحی سایت</a>
عالی بود مرسی از سایت خوبتون
سلام داداش انصافا عالی بود همینجوری ادامه بده ایشالا که موفق میشی به سایت منم اگه سر بزنی خیلی خوشحال میشم خرید و فروش خودرو
سپاس بابت مطالب و آموزش های خوبت
۲۸ شهریور ۹۴ ، ۱۵:۲۷ <a href="http://neuosite.ir">طراحی سایت</a>
بسیار عالی و مفید بود ممنون از سایت خوبتون
عالی بود
ممنون از شما
بهاره
سلام خوب بود
مطلب مفیدی بود مرسی
۲۳ ارديبهشت ۹۵ ، ۱۱:۴۲ دستگاه حضور و غیاب
ممنون از سایت خیلی خوبتون
۲۷ تیر ۹۵ ، ۲۲:۳۳ <a href="http://ariyapayamak.com">پنل اس ام اس تبلیغاتی</a>
خسته نباشید
سایتتون عالیه 
ممنون از مطلب خوبتون
موفق باشین
   
۳۱ شهریور ۹۵ ، ۲۲:۴۹ <a href="http://webone.co/">طراحی سایت</a>
با سلام بسیار عالی بود ممنون
ممنون خیلی خوب بود
۲۷ آبان ۹۵ ، ۰۹:۳۶ جعبه کمکهای اولیه
ممنون از سایت خوبتون. خیلی مفید بود
مطلبت عالی بود. خیلی خوبه همینجوری ادامه بده. همیشه پایا و ماندگار باشی
۰۹ دی ۹۵ ، ۱۲:۰۸ سئو سایت
بسیار عالی و مفید بود مقاله تون. واقعا خسته نباشید
ممنون از سایت خوبتون اطلاعتتون جامع و مفید بود
ممنون از سایت خوبتون. خیلی مفید بود

طراحی سایت
هاست کد

با سلام - مطالب خوبی بود متشکرم
طراحی سایت مشهد
بسیار عالی بود متشکرم

چاپ لیوان کاغذی , تم تولد

۲۵ فروردين ۹۶ ، ۲۰:۰۰ <a href="http://net-thailand.com/" >تور تایلند</a>
عالی بود مرسی از سایت خوبتون
http://net-thailand.com/
۰۹ خرداد ۹۶ ، ۱۲:۱۹ طراحی سایت در کرج
موفق باشید.
سپاس فراوان.

بسیار سپاس گذارم از اطلاعاتی که در اختیار ما قرار دادید.
عالی بود

سلام
من از کد زیر برای خواندن و قرار دادن اطلاعات در دیتا گرید در wpf  استفاده کردم ولی متاسفانه چند تا از سلول های وسط ردیف رو نمیخونه اگه کد بهتری دارید یا میتونید این رو اصلاح کنید ممنون میشم برام ایمیل بزنید
saeedhomayoni@chmail.ir


    private void btnimbort_Click(object sender, RoutedEventArgs e)
        {
            string filePath = string.Empty;
            string fileExt = string.Empty;
            OpenFileDialog ofd = new OpenFileDialog();
            ofd.Filter = "Excel Files|*.xls;*.xlsx;*.xlsm";
            Nullable<bool> result = ofd.ShowDialog();

            if (result == true)//if there is a file choosen by the user
            {
                filePath = ofd.FileName;//get the path of the file



                try
                {
                    DataTable dtExcel = new DataTable();
                    dtExcel = ReadExcel(filePath, fileExt);//read excel file
                                                           // dataGrid.Visible = true;
                    dataGrid.ItemsSource = dtExcel.DefaultView;
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message.ToString());
                }
            }

            con.Close();
            btnupdate.IsEnabled = true;
        }


        public DataTable ReadExcel(string fileName, string fileExt)
        {
            string conn = string.Empty;
            DataTable dtexcel = new DataTable();
            if (fileExt.CompareTo(".xls") == 0)//compare the extension of the file
                conn = @"provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + fileName + ";Extended Properties='Excel 8.0;HRD=Yes;IMEX=1';";//for below excel 2007
            else
                conn = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + fileName + ";Extended Properties='Excel 12.0;HDR=Yes;IMEX=1';";//for above excel 2007
            using (OleDbConnection con = new OleDbConnection(conn))
            {
                try
                {
                    OleDbDataAdapter oleAdpt = new OleDbDataAdapter("select * from [Sheet1$]", con);//here we read data from sheet1
                    oleAdpt.Fill(dtexcel);//fill excel data into dataTable
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message.ToString());
                }
            }
            conn.Clone();
           
            return dtexcel;
        }


مطالب عالی بود تشکر
۱۸ بهمن ۹۶ ، ۱۵:۰۵ نیما رضایی
بلاگ خوبی دارید و پر از مطالب مفید
۲۰ اسفند ۹۶ ، ۱۴:۵۸ اسکوتر برقی
عالی بود

ارسال نظر

ارسال نظر آزاد است، اما اگر قبلا در بیان ثبت نام کرده اید می توانید ابتدا وارد شوید.
شما میتوانید از این تگهای html استفاده کنید:
<b> یا <strong>، <em> یا <i>، <u>، <strike> یا <s>، <sup>، <sub>، <blockquote>، <code>، <pre>، <hr>، <br>، <p>، <a href="" title="">، <span style="">، <div align="">
تجدید کد امنیتی