وارد کردن فایل اکسل در دیتاگریدویو

یک پروژه ویندوزی مانند شکل زیر ایجاد کنید :

3

یک فایل اکسل در پوشه bin پروژه با نام Book1.xlsx قرار دهید.
در قسمت SolutionEplorer بر روی راست کلیک  refrence  و سپس بر روی Add Refrences کلیک کنید :

1

یک پنجره به صورت زیر باز می شود ، مسیرهای نمایش داده شده را طی کنید :

2

حال به محیط کدنویسی رفته و کدهای زیر را کپی کنید:

using System;
using System.Windows.Forms;
using Excel = Microsoft.Office.Interop.Excel;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void releaseObject(object obj)
        {
            try
            {
                System.Runtime.InteropServices.Marshal.ReleaseComObject(obj);
                obj = null;
            }
            catch (Exception ex)
            {
                obj = null;
                MessageBox.Show("Unable to release the Object " + ex.ToString());
            }
            finally
            {
                GC.Collect();
            }
        } 


        private void button1_Click(object sender, EventArgs e)
        {
            Excel.Application xlApp;
            Excel.Workbook xlWorkBook;
            Excel.Worksheet xlWorkSheet;
            Excel.Range range;

            

            xlApp = new Excel.Application();
            xlWorkBook = xlApp.Workbooks.Open(Application.StartupPath + "\\Book1.xlsx", 0, true, 5, "", "", true, Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "\t", false, false, 0, true, 1, 0);
            xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1);

            range = xlWorkSheet.UsedRange;

            for (int columnCounter = 1; columnCounter <= range.Columns.Count; columnCounter++)
            {
                this.dataGridView1.Columns.Add(xlWorkSheet.Cells[1, columnCounter].Value2, xlWorkSheet.Cells[1, columnCounter].Value2);
            }
            //get the value of each excel cell and put into this variable
            string str;
            //Loop counters
            int rowCounter = 0;
            int columnCounter2 = 0;

            for (rowCounter = 2; rowCounter <= range.Rows.Count; rowCounter++)
            {
                //Create a new row into the datagridview
                this.dataGridView1.Rows.Add();
                for (columnCounter2 = 1; columnCounter2 <= range.Columns.Count; columnCounter2++)
                {
                    str = Convert.ToString((range.Cells[rowCounter, columnCounter2] as Excel.Range).Value2);
                    //add the value of excel file into the new row
                    this.dataGridView1.Rows[rowCounter - 2].Cells[columnCounter2 - 1].Value = str;
                }
            }
            xlWorkBook.Close(true, null, null);
            xlApp.Quit();

            releaseObject(xlWorkSheet);
            releaseObject(xlWorkBook);
            releaseObject(xlApp);
        }
    }
}

برنامه را اجرا و نتیجه را مشاهده کنید :

4

لطفا اگر نظر، پیشنهاد و یا انتقادی در باره مطلب بالا دارید در قسمت زیر و اگر سوالی دارید در بخش پرسش و پاسخ مطرح بفرمایید.

  1. ghasem110deh پاسخ دادن

    سلام
    بعد میشه اطلاعات ورودی رو مستقیم تو بانک اکسس یا sql ذخیره کرد ؟

  2. ghasem110deh پاسخ دادن

    سلام … آقا یونس واسه من تو این خط :

    this.dataGridView1.Columns.Add(xlWorksheet.Cells[1, columnCounter].Value2, xlWorksheet.Cells[1, columnCounter].Value2);

    از Value2 ها خطا میگیره :

    Error	۱: 'object' does not contain a definition for 'Value2' and no extension method 'Value2' accepting a first argument of type 'object' could be found (are you missing a using directive or an assembly reference?)
  3. سینا پاسخ دادن

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

  4. اكبر قره باغي پاسخ دادن

    سلام و بسیار ممنون از سایت خوبتون.

    من میخوام زمانیکه از اکسل اطلاعات وارد DataGridView میکنم دیگه سطون هایی رو که در وجود DataGridView داره رو دوباره نسازه!

    به نظرم باید یک if در اولین for که مربوط به ساختن سطون هاست بگذاریم!
    امــــــا چطوری؟

    ممنون میشم راهنمایی کنید

  5. مهدی پاسخ دادن

    این مسیری را که فرمودید در ویندوز۷ رفتم و برنامه اجرا شد ولی همین برنامه در ویندوز ۸ خطا می دهد
    در ویندوز ۸ بایستی چه مسیری را برویم

    • یونس ابراهیمی پاسخ دادن

      سلام دوست عزیز چه خطایی میده .
      اگر امکان داره سوالاتتون رو در بخش پرسش و پاسخ سایت بپرسید
      با تشکر

  6. شبنم پاسخ دادن

    با سلام این برنامه رو وقتی به صورت تنها اجرا میکنم مشکلی نداره ولی وقتی میخوام همین کد رو تو برنامه خودم استفاده کنم از Value2 ایراد میگیره مشکلش چیه؟

  7. مرتضی پاسخ دادن

    سلام میشه توضیح کد ها رو هم بزارین یا اگه جایی هست کمک کنین چون من برایه پروژم میخوام باید استفاده ازش رو یاد بگیرم

  8. akakala پاسخ دادن

    سلام

    دمتون گرم

    خیلی خیلی خیلی خیلی ممنونم

    خدا خیرتون بده

    • یونس ابراهیمی پاسخ دادن

      لطف دارین دوست عزیز
      ممنون میشم سایت رو به دوستاتون معرفی بفرمایید

  9. رضا مردی پاسخ دادن

    خیلی ممنون از راهنماییتون

  10. سعید پاسخ دادن

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

    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 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;
    }
    
    • یونس ابراهیمی پاسخ دادن

      سلام، ممنون میشم سوالتونو تو بخش پرسش و پاسخ سایت مطرح بفرمایید (www.w3-farsi.com/forum)

  11. Farhad Mohseni پاسخ دادن

    واسه متون فارسی کار نمیکنه مشکل داره . میشه حل کنید؟

    • یونس ابراهیمی پاسخ دادن

      مشکل نداره، شما عکس آخر رو ببینید