ورود / ثبت نام
0
0

خواندن فایل های Excel در سی شارپ

3874 بازدید
خواندن فایل های Excel

خواندن فایل های Excel

در این مقاله با هم به بررسی نحوه خواندن فایل های Excel می پردازیم. ما یک برنامه ویندوز با استفاده از سی شارپ خواهیم ساخت. علاوه بر آموزش گام به گام به همراه تصاویر سورس این پروژه نیز برایتان در ادامه مطلب قرار داده شده است …

خواندن فایل های Excel

ابتدا ویژوال استودیوی خود را باز کنید. گزینه ی New Project و سپس Windows Form Application را انتخاب کنید.

نامی به انتخاب خود برای آن قرار دهید. من از نام ReadExcelFileApp استفاده کرده ام.

خواندن فایل های Excel

قبل از هر کاری مراجع را از کتابخانه ی Excel ، Reference میدهیم. بر روی Reference در قسمت Solution Explorer راست کلیک کنید. به ترتیب Assemblies ، Extensions و Microsoft.Office.Interop.Excel .

اگر شما از ویژوال استودیوی ۲۰۱۰ استفاده میکنید ، آنگاه میتوانید مراجع را از ۲ طریق Reference دهید :

بر روی References راست کلیک کنید و گزینه ی Add References را انتخاب کنید و پس از پنجره ای نمایش داده میشود.

۱ – به قسمت زیر بروید :

C:/Microsoft Office/Office12/EXCEL.EXE

۲ – تب .NET را انتخاب کنید و گزینه ی Microsoft.Office.Interop.Excel را انتخاب کنید.

خواندن فایل های Excel

پس از افزودن مراجع ، فضای نام using Excel = Microsoft.Office.Interop.Excel را اضافه کنید و بقیه فضای نام ها نیز در تصویر نشان داده شده اند.

دو دکمه ، یکی برای انتخاب و خواندن فایل و دیگری برای بستن بسازید.

یک DataGridView برای مشاهده ی نتیجه نیز بسازید.

خواندن فایل های Excel

یک متد با نام ReadExcel بسازید که برای برگرداندن یک Data Table با استفاده از منطق زیر پیاده میشود :

public DataTable ReadExcel(string fileName, string fileExt) {  
    string conn = string.Empty;  
    DataTable dtexcel = new DataTable();  
    if (fileExt.CompareTo(".xls") == 0)  
        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=NO';"; //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 {}  
    }  
    return dtexcel;  
}  

بیایید کمی در رابطه با متد ReadExcel() صحبت کنیم.

اول از همه تصمیم میگیریم که فایل دارای فرمت .xls یا .xlsx هست یا خیر زیرا تفاوتی بین رشته ی اتصال هر دو فایل وجود دارد.

اگر فایل دارای فرمت .xls بود ، آنگاه رشته ی اتصال به صورت زیر خواهد بود :

provider=Microsoft.Jet.OLEDB.4.0;Data Source='fileName';Extended Properties='Excel 8.0;HRD=Yes;IMEX=1';

در غیر اینصورت :

Provider=Microsoft.ACE.OLEDB.12.0;Data Source='FileName';Extended Properties='Excel 12.0;HDR=NO';"

در اینجا HDR قسمت header میباشد ، بسته به اینکه بخواهید چیزی اضافه کنید یا خیر.

IMEX=1 نیز برای دریافت داده های ترکیب شده از ستون ها استفاده میشود.

حال با استفاده از خط زیر یک OleDbDataAdapter را تعریف میکنیم :

OleDbDataAdapter oleAdpt = new OleDbDataAdapter("select * from [Sheet1$]", con);

در اینجا sheet1 شماره ی صفحه ایست که میخواهید انتخاب کنید ، میتوانید هر صفحه ای که بخواهید را انتخاب کنید. اگر بخواهید که برخی از ستون های به خصوص را انتخاب کنید ، از این طریق میتوانید. به عنوان مثال شما تنها میخواهید که دو ستون با نام های Name و Salary را از فایل Excel بخوانید ، آنگاه Query شما به صورت زیر خواهد بود :

Select F11,F41,F70 from [Sheet1$]

کد های زیر را در رویداد کلیک دکمه وارد کنید :

private void btnChooseFile_Click(object sender, EventArgs e) {  
    string filePath = string.Empty;  
    string fileExt = string.Empty;  
    OpenFileDialog file = new OpenFileDialog(); //open dialog to choose file  
    if (file.ShowDialog() == System.Windows.Forms.DialogResult.OK) //if there is a file choosen by the user  
    {  
        filePath = file.FileName; //get the path of the file  
        fileExt = Path.GetExtension(filePath); //get the file extension  
        if (fileExt.CompareTo(".xls") == 0 || fileExt.CompareTo(".xlsx") == 0) {  
            try {  
                DataTable dtExcel = new DataTable();  
                dtExcel = ReadExcel(filePath, fileExt); //read excel file  
                dataGridView1.Visible = true;  
                dataGridView1.DataSource = dtExcel;  
            } catch (Exception ex) {  
                MessageBox.Show(ex.Message.ToString());  
            }  
        } else {  
            MessageBox.Show("Please choose .xls or .xlsx file only.", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Error); //custom messageBox to show error  
        }  
    }  
}  
  
private void btnClose_Click(object sender, EventArgs e) {  
    this.Close(); //to close the window(Form1)  
}  

پس از انتخاب فایل نتیجه همانند زیر خواهد بود :

خواندن فایل های Excel

امیدوارم از آن لذت برده باشید !
موفق باشید !

آیا این مطلب را می پسندید؟
https://www.mspsoft.com/?p=15961
اشتراک گذاری:
واتساپتوییترفیسبوکپینترستلینکدین
داریوش فرخی
داریوش فرخی هستم از سال 92 شروع به یادگیری برنامه نویسی و از سال 93 در بخش برنامه نویسی و تولید محتوای سایت mspsoft.com مشغول هستم. فعالیتم نیز بیشتر در زمینه های برنامه نویسی با سی شارپ و asp.net بوده است. اوقات فراغتم را هم غالبا با تماشای فیلم یا بازی های کامپیوتری پر میکنم .
مطالب بیشتر
برچسب ها:

نظرات

42 نظر در مورد خواندن فایل های Excel در سی شارپ

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

      1. سلام
        من تو خود فروم تعریف کردم اما به درستی ران نمیشه وقتی باتن رو می زنم برنامه متوقف میشه و از اروور not implemented Exception was handled رو میده

        ۱

  1. با سلام ، ممنون از آموزش خوبتون ، من فایل اکسلی دارم که یکی ز ستونها اون دیتای mix داره (عدد ،space ، کاراکتر ) به این صورت ۱۲۳۴۵ ۲۵۶/الف ، با ستفاده از IMEX=1 مشکل من حل نشد لطفا راهنمایی کنید (برای یکی دوبار جواب داد اما بعد از اون هر بار که پروژه را اجرا کردم مشکل باز هم وجود داشت )

    ۱

      1. نه اطلاعات در دیتا بیس ذخیره نمی شه ، فقط فایل خوانده شده در دیتا تیبل ذخیره می شود با این connectionstring

        excelConnectionString = “Provider=Microsoft.Jet.Oledb.4.0;Data Source=” + SourceFilePath + “;Extended Properties=’Excel 8.0;IMEX=1′;”;

        ۱

        1. پروژه را به نظر من دیباگ کنید خط به خط ببینید چه پیغامی میده و همچنین نوع مقداری که باید در فیلد مورد نظر قرار بده چی هست.شاید از این طریق بشه مشکل رو پیدا کرد.

          لایک

      2. برای مثال تو اکسل این دیتا رو( ۷۰۹۰۴۹ عبدشیخی ) تو یکی از ستونها دارم خروجی این سلول در برنامه وقتی فایل اکسل خونده می شه خالی هست

        ۲

  2. با سلام و خسته نباشید.
    پروژه رو اجرا میکنم و فایل هایی با پسوند xls رو انتخاب میکنم و نشون میده ولی وقتی فایل هایی با پسوند xlsx رو انتخاب میکنم با خطای زیر روبرو میشم:
    The ‘Microsoft.ACE.OLEDB.12.0’ provider is not registered on the local machine.
    لطفا راهنمایی کنید.
    با تشکر

    ۱

          1. من هم همین مشکل را دارم. امکانش هست یه نمونه که برای فایل اکسل ۲۰۱۰ به بالا کار خواهد کرد برای من ارسال کنید؟

            ۱

  3. سلام خسته نباشید میخواستم بدونم که اگه بخوایم هر چی رو تغییر بدیم ذخیره کنیم چیکار باید بکنیم ؟
    و سوال بعدی هم اینکه کامپوننتی وجود نداره که بشه فایل های اکسل رو با فرمت های مختلف خوند ؟
    اگه جواب بدید ممنون میشم !

    لایک

  4. سلام
    ممنون بابت آموزش خوبتون.
    سوالی دارم که مربوط به این قسمت نمیشه ولی میپرسم.
    من تعدادی عدد دارم که “دو به دو” وارد نرم افزار میشن و نیاز دارم معادله خطشون رو بدست بیارم.
    توی اکسل من این نقاط رو select میکنم و بعد نمودارشون رو میبینم و سپس کلید (f(x رو میزنم و معادله خط رو نمایش میده.
    چطوری میتونم از این کتابخانه استفاده کنم؟
    با تشکر

    ۱

  5. سلام ممنونم عالی بود
    من یه سری اطلاعات رو از اکسل در برنامه خوندم یه سری عملیات روش انجام شد و میخوام دوباره در یک فایل اکسل ذخیره بشه
    چجوری ممکنه نتایج در اکسل ذخیره بشه؟
    ممنونم

    ۱

  6. سلام من یه فایل اکسل دارم که توسط یه نرم افزار دیگه خروجی گرفته شده حالا اون نرم افزار رو نمیدونم چیه ولی مهم اینه که خروجی اکسل داده حالا من میخوام این خروجی اکسل رو داخل دیتا گرید ویو نشون بدم از کد شما استفاده کردم ولی خیلی بهم ریخته نشون میده میخواستم راهنماییم کنین

    ۱

  7. سلام یه راهنمایی می خواستم در مورد اضافه کردن فایل اکسل به برنامم. یه شرح کوچولو از برنامم رو میدم خدمتتون. یه برنامه نوشتم تو سی شارپ که تحت وب هست. از سرویس کلاد آژور استفاده کردم. و با زبان سی شارپ نوشتم. تو ویژال استادیو ۲۰۱۵. الان می خوام به برنامه یه کد هایی اضافه کنم که داده های ورودی ۰ و ۱ منو از یک فایل اکسل یا یه فایل متلب بگیره. و متاسفانه نمیتونم. یعنی در کل بلد نیستم. در ضمن میتونم تو برنامه داده های خودم رو تو یه گرید ویو تو صفحه وب آفلاین چاپ کنم. ولی از ورودی ها رو از بیرون گرفتن رو بلد نیستم. خیلی ممنون میشم زودتر جوابم رو بدیدد.

    ۱

  8. با سلام و خسته نباشید و تشکر از آموزش عالیتان بنده از این روش استفاده کردم و خیلی هم خوبه حالا استاد گرامی چطوری این فایل اکسل رادر بانک اطلاعاتی اکسس ذخیره اش کنیم با تشکر

    ۲

  9. سلام.
    اگه بخوایم روی سیستمی که excel نصب نشده فایل فوق ایجاد شود همچنین اطلاعات از روی همین سیستم خوانده شده و در دیتابیس ذخیره شود چه روشی می بایست انجام شود؟
    عملیات خواندن و ذخیره در دیتابیس از طریق وب سرویس انجام می شود. امکان نصب excel بر روی سیستم وجود ندارد ولی خروجی را می بایست به صورت فایل excel تحویل مشتری شود و بعد از اعمال تغییرات مجددا از روی همین سیستم اطلاعات اصلاح شده در دیتابیس ذخیره سازی شود.

    با تشکر

    ۲

    1. فقط کافیست هسته ms office را نصب کنید ، بعد خروجی اکسل انجام میشود ، برای نمایش نیز میتوانید فقط نرم افزار اکسل را نصب کنید.

      ۱