نمایش نتایج 1 تا 21 از 21

نام تاپیک: نمایش نام شیت های اکسل در کمبوباکس

  1. #1

    نمایش نام شیت های اکسل در کمبوباکس

    سلام و وقت بخیر دوستان چگونه تعداد نام های شیت یک اکسل را داخل کمبوباکس نماش بدهم مثلا اگر سربرگ یک اکسل دارای چند شیت باشد نام آنها را داخل کمبوباکس قرار دهم با تشکر و سپاس

  2. #2
    کاربر دائمی آواتار mazoolagh
    تاریخ عضویت
    اردیبهشت 1384
    سن
    71
    پست
    3,141

    نقل قول: نمایش نام شیت های اکسل در کمبوباکس

    سلام و روز خوش

    خب اول باید بتونین خود فایل اکسل رو باز کنین.

    یک راه این هست که از کتابخانه office.interop.excel استفاده کنین (کافی هست از nuget manager نصبش کنین)

    using EXCEL= microsoft.office.interop.excel;

    string PATH= "path to excel file";
    EXCEL.application APP= new EXCEL.application();
    APP.visible= false;
    EXCEL.workbook WB = APP.workbooks.open(PATH);
    for (int i=1 ; i <= WB.worksheets.count ; i++)
    {
    combobox.items.add(WB.worksheets[i].name);
    }
    APP.workbooks.close();
    APP.quit();

  3. #3
    کاربر دائمی آواتار mazoolagh
    تاریخ عضویت
    اردیبهشت 1384
    سن
    71
    پست
    3,141

    نقل قول: نمایش نام شیت های اکسل در کمبوباکس

    کتابخانه های دیگه هم هست: مثل LinqToExcel

    using LinqToExcel;

    string PATH = "path to excel file";
    using (ExcelQueryFactory EQF = new ExcelQueryFactory(path))
    {
    IEnumerable <string> SheetNames = EQF.GetWorksheetNames();
    comboBox1.DataSource = SheetNames.ToList();
    }

  4. #4

    نقل قول: نمایش نام شیت های اکسل در کمبوباکس

    نقل قول نوشته شده توسط mazoolagh مشاهده تاپیک
    کتابخانه های دیگه هم هست: مثل LinqToExcel

    using LinqToExcel;

    string PATH = "path to excel file";
    using (ExcelQueryFactory EQF = new ExcelQueryFactory(path))
    {
    IEnumerable <string> SheetNames = EQF.GetWorksheetNames();
    comboBox1.DataSource = SheetNames.ToList();
    }


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

  5. #5

    نقل قول: نمایش نام شیت های اکسل در کمبوباکس

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

  6. #6
    کاربر دائمی آواتار mazoolagh
    تاریخ عضویت
    اردیبهشت 1384
    سن
    71
    پست
    3,141

    نقل قول: نمایش نام شیت های اکسل در کمبوباکس

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

    مهم هست که از چه کتابخانه ای استفاده میکنین؛
    مثلا در office.interop.excel باید حتما هر object که باز میکنین (sheet و ...) ببندین،

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

  7. #7

    نقل قول: نمایش نام شیت های اکسل در کمبوباکس

    نقل قول نوشته شده توسط mazoolagh مشاهده تاپیک
    الان مشخص نیست که با چه روشی دیتا اکسل رو خوندین و گرید رو پر کردین،
    و چه جوری بستین.

    مهم هست که از چه کتابخانه ای استفاده میکنین؛
    مثلا در office.interop.excel باید حتما هر object که باز میکنین (sheet و ...) ببندین،

    کتابخانه هایی که connection به فایل اکسل میزنن دردسر کمتری دارن.
    با تشکر و سپاس از پاسختان
    من از روش office.interop.excel استفاده کردم من آمدم در پوشه اصلی برنامه دیابک یک فایل اکسل از قبل طراحی کردم و موقع خواندن اون فایل اکسل را باز می کنم و بعد از پر کردن اطلاعات اونو داخل گریدویو فراخوانی و می ریزم بعد در دیتابیس ذخیره می کنم

    میشه کمی در مورد این کتابخانه connection با مثال توضیح بدهید با تشکر و سپاس

  8. #8
    کاربر دائمی آواتار mazoolagh
    تاریخ عضویت
    اردیبهشت 1384
    سن
    71
    پست
    3,141

    نقل قول: نمایش نام شیت های اکسل در کمبوباکس

    نقل قول نوشته شده توسط safari_m4 مشاهده تاپیک
    من از روش office.interop.excel استفاده کردم من آمدم در پوشه اصلی برنامه دیابک یک فایل اکسل از قبل طراحی کردم و موقع خواندن اون فایل اکسل را باز می کنم و بعد از پر کردن اطلاعات اونو داخل گریدویو فراخوانی و می ریزم بعد در دیتابیس ذخیره می کنم
    نیاز هست که بیشتر و دقیق توضیح بدین که چی کار دارین میکنین و خواسته واقعی چی هست.
    الان شما در اکسل data entry میکنین، بعد در برنامه اون رو میخونین و در گرید نمایش میدین و از گرید در یک دیتابیس (منظور اکسس یا sql هست؟) میریزین؟ چرا؟
    سناریو اصلی رو شرح بدین.
    و برای پیدا کردن مشکل کد باید اونها رو پیوست کنین (حتما در تگ csharp یا code)

    نقل قول نوشته شده توسط safari_m4 مشاهده تاپیک
    میشه کمی در مورد این کتابخانه connection با مثال توضیح بدهید
    همچین کتابخانه ای نداریم!
    نوشتم که بعضی از کتابخانه ها به اکسل کانکشن میزنن،
    یعنی مثل office.interop اون رو باز نمیکنن که نیاز باشه در بستن آبجکت ها و quit دقت کنین.
    مثل همین نمونه دوم (LinqToExcel) که از oledbconnection استفاده میکنه،
    یا کتابخانه epplusکه از openxml استفاده میکنه و در این دو آبجکتها disposable هست.

  9. #9

    نقل قول: نمایش نام شیت های اکسل در کمبوباکس

    نقل قول نوشته شده توسط mazoolagh مشاهده تاپیک
    نیاز هست که بیشتر و دقیق توضیح بدین که چی کار دارین میکنین و خواسته واقعی چی هست.
    الان شما در اکسل data entry میکنین، بعد در برنامه اون رو میخونین و در گرید نمایش میدین و از گرید در یک دیتابیس (منظور اکسس یا sql هست؟) میریزین؟ چرا؟
    سناریو اصلی رو شرح بدین.
    و برای پیدا کردن مشکل کد باید اونها رو پیوست کنین (حتما در تگ csharp یا code)


    همچین کتابخانه ای نداریم!
    نوشتم که بعضی از کتابخانه ها به اکسل کانکشن میزنن،
    یعنی مثل office.interop اون رو باز نمیکنن که نیاز باشه در بستن آبجکت ها و quit دقت کنین.
    مثل همین نمونه دوم (LinqToExcel) که از oledbconnection استفاده میکنه،
    یا کتابخانه epplusکه از openxml استفاده میکنه و در این دو آبجکتها disposable هست.
    با سلام تشکر
    از دیتابیس اسکیوال استفاده می کنم
    من آمدم اطلاعات دفتر تلفن را که داخل یک فایل اکسل می باشد را داخل دیتاگریدویو فراخوانی می کنم و بعد فراخوانی آن را داخل دیتابیس ذخیره می کنم
    در اینجا یک پنجره ای باز می شه که همون کار ار مشکل می کنه - تمام مراحل را هم تست کردم - طبق تصویر ارسالی

    اینجا فراخوانی مسیر فایل
    private void BtnRedFile_Click(object sender, EventArgs e)
    {
    APP = null;
    PATH = string.Empty;
    APP = new Excel.Application();
    OpenFileDialog op = new OpenFileDialog();
    op.Title = "یک فایل اکسل انتخاب کنید";
    op.Multiselect = false;
    op.FileName = TxtAddress.Text;
    op.Filter = "Excel Sheet(*.xlsx;*.xls)|*.xlsx;*.xls";
    //op.InitialDirectory = Application.StartupPath + @"\Excels";
    //op.RestoreDirectory = true;
    if (op.ShowDialog() == DialogResult.OK)
    {

    ReadExcel(op.FileName, Path.GetExtension(op.FileName));
    TxtAddress.Text = op.FileName;
    PATH = TxtAddress.Text;
    //------------------------------------
    CmbSheet.Items.Clear();


    WB = APP.Workbooks.Open(PATH);
    //-----------------------------------------------------------
    for (int i = 1; i <= WB.Worksheets.Count; i++)
    {
    CmbSheet.Items.Add(WB.Worksheets[i].name);
    }
    //------------------------------------------------------

    APP = null;

    //------------------------------------
    }
    //************************************************** ******

    }

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

    private void CmbSheet_SelectedIndexChanged(object sender, EventArgs e)
    {
    dt_excel = null;
    if (CmbSheet.SelectedIndex != -1)
    {
    OleDbConnection con = new OleDbConnection(Adress);
    OleDbDataAdapter adp = new OleDbDataAdapter("SELECT * FROM [" + CmbSheet.Text.Trim() + "$]", con);
    dt_excel = new DataTable();
    adp.Fill(dt_excel);
    DgvExele.DataSource = dt_excel;
    dt_excel = null;
    APP = null;
    }
    else
    {
    dt_excel = null;
    APP = null;
    if (DgvExele.Rows.Count != 0)
    {
    DgvExele.DataSource = null;
    }
    }
    }
    در آخر هم ذخیره می کنم داخل دینابیس

    foreach (DataGridViewRow row in DgvExele.Rows)
    {
    if (row.Cells[1].Value.ToString() != "" && row.Cells[3].Value.ToString() != "")
    {
    string[] parameter = new string[] { row.Cells[1].Value.ToString(), row.Cells[2].Value.ToString(), row.Cells[3].Value.ToString(), row.Cells[4].Value.ToString() };
    q.QueryInsert("TB_NumberPish_Tell", " Name_Ostan, Name_M_Ostan, Number_Pish, Name_Sayt", parameter);
    }
    else { return; }
    }

    ضمنا ما اگر خواسته باشیم فایل اکسل را که در پنجره دیباک هست را خذف کنیم اجازه حذف نمی ده و می گوید فایل باز و در حال استفاده است بخاطر همین پیامی که تصویر آن را ارسال کردم
    عکس های ضمیمه عکس های ضمیمه
    آخرین ویرایش به وسیله safari_m4 : دوشنبه 04 تیر 1403 در 08:01 صبح

  10. #10
    کاربر دائمی آواتار mazoolagh
    تاریخ عضویت
    اردیبهشت 1384
    سن
    71
    پست
    3,141

    نقل قول: نمایش نام شیت های اکسل در کمبوباکس

    سلام دوباره

    موارد رو یکی یکی بررسی میکنیم و جلو میریم.

    ولی قبل از هر چیز:
    من آمدم اطلاعات دفتر تلفن را که داخل یک فایل اکسل می باشد را داخل دیتاگریدویو فراخوانی می کنم و بعد فراخوانی آن را داخل دیتابیس ذخیره می کنم
    این رو نگفتین چرا از اکسل میخونین و در گرید میریزین و بعد از گرید میخونین و در دیتابیس اضافه میکنین؟
    مستقیم هم میشه، با console app هم میشه، حتی از داخل خود اکسل هم میشه (بدون نیاز به این برنامه).
    کلا هدف نهایی رو هنوز نگفتین چی هست تا روش مناسب پیدا بشه.

  11. #11
    کاربر دائمی آواتار mazoolagh
    تاریخ عضویت
    اردیبهشت 1384
    سن
    71
    پست
    3,141

    نقل قول: نمایش نام شیت های اکسل در کمبوباکس

    قرار بود کدها رو در تگ مناسب بذارین تا خوانا باشه:

    private void BtnRedFile_Click(object sender, EventArgs e)
    {
    APP = null;
    PATH = string.Empty;
    APP = new Excel.Application();
    OpenFileDialog op = new OpenFileDialog();
    op.Title = "یک فایل اکسل انتخاب کنید";
    op.Multiselect = false;
    op.FileName = TxtAddress.Text;
    op.Filter = "Excel Sheet(*.xlsx;*.xls)|*.xlsx;*.xls";
    //op.InitialDirectory = Application.StartupPath + @"\Excels";
    //op.RestoreDirectory = true;
    if (op.ShowDialog() == DialogResult.OK)
    {
    ReadExcel(op.FileName, Path.GetExtension(op.FileName));
    TxtAddress.Text = op.FileName;
    PATH = TxtAddress.Text;
    CmbSheet.Items.Clear();
    WB = APP.Workbooks.Open(PATH);
    for (int i = 1; i <= WB.Worksheets.Count; i++)
    {
    CmbSheet.Items.Add(WB.Worksheets[i].name);
    }
    APP = null;
    }
    }



    private void CmbSheet_SelectedIndexChanged(object sender, EventArgs e)
    {
    dt_excel = null;
    if (CmbSheet.SelectedIndex != -1)
    {
    OleDbConnection con = new OleDbConnection(Adress);
    OleDbDataAdapter adp = new OleDbDataAdapter("SELECT * FROM [" + CmbSheet.Text.Trim() + "$]", con);
    dt_excel = new DataTable();
    adp.Fill(dt_excel);
    DgvExele.DataSource = dt_excel;
    dt_excel = null;
    APP = null;
    }
    else
    {
    dt_excel = null;
    APP = null;
    if (DgvExele.Rows.Count != 0)
    {
    DgvExele.DataSource = null;
    }
    }
    }



    foreach (DataGridViewRow row in DgvExele.Rows){
    if (row.Cells[1].Value.ToString() != "" && row.Cells[3].Value.ToString() != "")
    {
    string[] parameter = new string[] {
    row.Cells[1].Value.ToString(),
    row.Cells[2].Value.ToString(),
    row.Cells[3].Value.ToString(),
    row.Cells[4].Value.ToString() };
    q.QueryInsert(
    "TB_NumberPish_Tell",
    " Name_Ostan,
    Name_M_Ostan,
    Number_Pish,
    Name_Sayt",
    parameter);
    }
    else { return; }
    }

  12. #12
    کاربر دائمی آواتار mazoolagh
    تاریخ عضویت
    اردیبهشت 1384
    سن
    71
    پست
    3,141

    نقل قول: نمایش نام شیت های اکسل در کمبوباکس

    1- شما به نمونه کد پست شماره 2 و
    توضیحات پست های بعدی درباره بستن آبجکت ها و quit کردن excel application باز شده
    وقتی از office.interop استفاده میکنین، دقت نکردین!

    APP = null فایل باز رو نمیبنده و هنوز فایل در محیط اکسل باز هست!

  13. #13
    کاربر دائمی آواتار mazoolagh
    تاریخ عضویت
    اردیبهشت 1384
    سن
    71
    پست
    3,141

    نقل قول: نمایش نام شیت های اکسل در کمبوباکس

    2- برای خوندن شیت به فایل اکسل کانکشن زدین که نیازی نیست،
    وقتی فایل اکسل رو با office.interop باز کردین دیگه خوندن شیت ها رو هم میتونین با اون انجام بدین.
    و اگر قرار هست کانکشن بزنین دیگه لازم نیست از office.interop استفاده کنین،
    مستقیم هم میتونستین اسم شیت ها رو بخونین:

    StringBuilder ConnectionString = new StringBuilder();
    ConnectionString.Append("Provider=Microsoft.ACE.OL EDB.12.0;");
    ConnectionString.Append($"Data Source={path};");
    ConnectionString.Append("Extended Properties="Excel 12.0;HDR=YES";");


    using (OleDbConnection CONN = new OleDbConnection(ConnectionString.ToString()))
    {
    CONN.Open();
    DataTable Schema = CONN.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" });
    comboBox1.DataSource = Schema;
    comboBox1.DisplayMember = "TABLE_NAME";
    }


    دقت کنین که برای connection و reader و ... حتما از using استفاده کنین،
    وگرنه خودتون باید اونها رو dispose کنین.

  14. #14
    کاربر دائمی آواتار mazoolagh
    تاریخ عضویت
    اردیبهشت 1384
    سن
    71
    پست
    3,141

    نقل قول: نمایش نام شیت های اکسل در کمبوباکس

    3 - برای خوندن شیت ها اینجور عمل کنین (از using استفاده کنین تا آبجکتها خودکار dispose بشن):

    StringBuilder ConnectionString = new StringBuilder();
    ConnectionString.Append("Provider=Microsoft.ACE.OL EDB.12.0;");
    ConnectionString.Append($"Data Source={path};");
    ConnectionString.Append("Extended Properties="Excel 12.0;HDR=YES";");

    using (OleDbConnection CONN = new OleDbConnection(ConnectionString.ToString()))
    {
    CONN.Open();
    using (OleDbDataAdapter DA = new OleDbDataAdapter($"SELECT * FROM [{comboBox1.Text}]", CONN))
    {
    sheet = new DataTable();
    DA.Fill(sheet);
    dataGridView1.DataSource = sheet;
    }
    }

  15. #15

    نقل قول: نمایش نام شیت های اکسل در کمبوباکس

    نقل قول نوشته شده توسط mazoolagh مشاهده تاپیک
    2- برای خوندن شیت به فایل اکسل کانکشن زدین که نیازی نیست،
    وقتی فایل اکسل رو با office.interop باز کردین دیگه خوندن شیت ها رو هم میتونین با اون انجام بدین.
    و اگر قرار هست کانکشن بزنین دیگه لازم نیست از office.interop استفاده کنین،
    مستقیم هم میتونستین اسم شیت ها رو بخونین:

    StringBuilder ConnectionString = new StringBuilder();
    ConnectionString.Append("Provider=Microsoft.ACE.OL EDB.12.0;");
    ConnectionString.Append($"Data Source={path};");
    ConnectionString.Append("Extended Properties="Excel 12.0;HDR=YES";");


    using (OleDbConnection CONN = new OleDbConnection(ConnectionString.ToString()))
    {
    CONN.Open();
    DataTable Schema = CONN.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" });
    comboBox1.DataSource = Schema;
    comboBox1.DisplayMember = "TABLE_NAME";
    }


    دقت کنین که برای connection و reader و ... حتما از using استفاده کنین،
    وگرنه خودتون باید اونها رو dispose کنین.
    ببخشید اینجا وقتی می خواهد conn.open انجام بشه خطا می دهد که جدول خارجی در قالب مورد انتظار نیست External table is not in the expected format
    گفته بودید که فایل اکسل برای چیست می خواهم اطلاعات تلفن هام را که در اکسل از قبل ثبت دارم از طریق شودیالوک انتخاب کند- و از طریق گریدویو هم چنانچه خواست ویرایش کند داخل سلول گرید انجام دهم و بعد ذخیره کند در کل می خوام این روش را درست و خوب یاد بگیرم ضمنا چگونه باید dispose کنم چون تمام موارد را انجام دادم ولی به خطا می خوردم با تشکر و سپاس فراوان از اینکه وقت حوصله می کنید
    آخرین ویرایش به وسیله safari_m4 : سه شنبه 05 تیر 1403 در 08:51 صبح

  16. #16
    کاربر دائمی آواتار mazoolagh
    تاریخ عضویت
    اردیبهشت 1384
    سن
    71
    پست
    3,141

    نقل قول: نمایش نام شیت های اکسل در کمبوباکس

    وقتی می خواهد conn.open انجام بشه خطا می دهد که جدول خارجی در قالب مورد انتظار نیست External table is not in the expected format
    این کد تست شده است.
    قبل از اجرای این کد، کد دیگه ای اجرا نشده که فایل اکسل رو باز کرده و تغییر داده باشه؟

    گفته بودید که فایل اکسل برای چیست می خواهم اطلاعات تلفن هام را که در اکسل از قبل ثبت دارم از طریق شودیالوک انتخاب کند- و از طریق گریدویو هم چنانچه خواست ویرایش کند داخل سلول گرید انجام دهم
    خب، الان قضیه روشنتر شد.
    اگر این اکسپورت از اکسل به sql فقط یک بار انجام میشه،
    میتونین اول اکسپورت ها رو انجام بدین (به هر روشی که راحتترین) و فایل های اکسل رو بگذارین کنار.
    بعد از اون برای خوندن/ویرایش/آپدیت هم فقط با sql سروکار دارین.

    ضمنا چگونه باید dispose کنم
    این که کی و چجوری آبجکتها و ریسورس ها رو dispose کنیم مبحثی نیست که در این تاپیک بگنجه،
    و شما باید با مفاهیم garbage collector و dispose و finilize و native resource و managed/unmanaged code آشنا باشین.

    ولی خیلی ساده اگر بگیم:
    در دات نت فریمورک آزاد کردن حافظه از آبجکتهای managed (منظور بومی خود دات نت یا native) ،
    به طور خودکارتوسط garbage collector انجام میشه و نیازی نیست نگران اون باشیم.
    ولی یک سری آبجکتها/منابع هستن که کدهای اونا unmanaged هست،
    و اینها رو باید خودتون بلافاصله بعد از این که دیگه نیازی بهشون نیست dispose کنین (تا حافظه تخصیص داده شده به اونها آزاد بشه).
    موارد مربوط به فایل و دیتابیس از این دسته ان.

    پس کانکشن به دیتابیس رو خودمون باید dispose کنیم،
    حالا این میتونه با اجرای متد dispose باشه (مثلا conn.dispose) یا بهتر اینکه در بلوک using بذاریم.

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

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

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

  17. #17

    نقل قول: نمایش نام شیت های اکسل در کمبوباکس

    Untitled2.jpg
    نقل قول نوشته شده توسط mazoolagh مشاهده تاپیک
    این کد تست شده است.
    قبل از اجرای این کد، کد دیگه ای اجرا نشده که فایل اکسل رو باز کرده و تغییر داده باشه؟


    خب، الان قضیه روشنتر شد.
    اگر این اکسپورت از اکسل به sql فقط یک بار انجام میشه،
    میتونین اول اکسپورت ها رو انجام بدین (به هر روشی که راحتترین) و فایل های اکسل رو بگذارین کنار.
    بعد از اون برای خوندن/ویرایش/آپدیت هم فقط با sql سروکار دارین.


    این که کی و چجوری آبجکتها و ریسورس ها رو dispose کنیم مبحثی نیست که در این تاپیک بگنجه،
    و شما باید با مفاهیم garbage collector و dispose و finilize و native resource و managed/unmanaged code آشنا باشین.

    ولی خیلی ساده اگر بگیم:
    در دات نت فریمورک آزاد کردن حافظه از آبجکتهای managed (منظور بومی خود دات نت یا native) ،
    به طور خودکارتوسط garbage collector انجام میشه و نیازی نیست نگران اون باشیم.
    ولی یک سری آبجکتها/منابع هستن که کدهای اونا unmanaged هست،
    و اینها رو باید خودتون بلافاصله بعد از این که دیگه نیازی بهشون نیست dispose کنین (تا حافظه تخصیص داده شده به اونها آزاد بشه).
    موارد مربوط به فایل و دیتابیس از این دسته ان.

    پس کانکشن به دیتابیس رو خودمون باید dispose کنیم،
    حالا این میتونه با اجرای متد dispose باشه (مثلا conn.dispose) یا بهتر اینکه در بلوک using بذاریم.


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

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


    نظر لطف شماست،
    امیدوارم تونسته باشم کمک کنم.
    ]قبل از اجرای این کد، کد دیگه ای اجرا نشده که فایل اکسل رو باز کرده و تغییر داده باشه؟[/COLOR]
    با سلام خسته نباشید و تشکر اولا کمک خیلی عالی کردید
    در پاسخ به این سوالات من آمد کلیه کدها را غیر فعال کردم و کد شما را مستقیما داخل یک باتن اجرا کردم که خطای پیوست می دهد و عین کدها را ارسال می کنم

    private void loadsheet()
    {
    //---------------------------------------------
    StringBuilder ConnectionString = new StringBuilder();
    ConnectionString.Append("Provider=Microsoft.Jet.OL EDB.4.0;");
    ConnectionString.Append($"Data Source={Application.StartupPath + @"\Excels\KodNumberPish_Tell.xlsx"};");
    ConnectionString.Append("Extended Properties='Excel 4.0;HRD=Yes;IMEX=1';");
    //ConnectionString.Append("provider=Microsoft.Jet.OL EDB.4.0;Data Source=" + (Application.StartupPath + @"\Excels\KodNumberPish_Tell.xlsx" + ";Extended Properties='Excel 8.0;HRD=yes;IMEX=1';"));
    using (OleDbConnection CONN = new OleDbConnection(ConnectionString.ToString()))
    {
    CONN.Open();
    DataTable Schema = CONN.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" });
    CmbSheet.DataSource = Schema;
    CmbSheet.DisplayMember = "TABLE_NAME";
    }

    ]قبل از اجرای این کد، کد دیگه ای اجرا نشده که فایل اکسل رو باز کرده و تغییر داده باشه؟[/COLOR]
    با سلام خسته نباشید و تشکر اولا کمک خیلی عالی کردید
    در پاسخ به این سوالات من آمد کلیه کدها را غیر فعال کردم و کد شما را مستقیما داخل یک باتن اجرا کردم که خطای پیوست می دهد و عین کدها را ارسال می کنم

    private void loadsheet()
    {
    //---------------------------------------------
    StringBuilder ConnectionString = new StringBuilder();
    ConnectionString.Append("Provider=Microsoft.Jet.OL EDB.4.0;");
    ConnectionString.Append($"Data Source={Application.StartupPath + @"\Excels\KodNumberPish_Tell.xlsx"};");
    ConnectionString.Append("Extended Properties='Excel 4.0;HRD=Yes;IMEX=1';");
    //ConnectionString.Append("provider=Microsoft.Jet.OL EDB.4.0;Data Source=" + (Application.StartupPath + @"\Excels\KodNumberPish_Tell.xlsx" + ";Extended Properties='Excel 8.0;HRD=yes;IMEX=1';"));
    using (OleDbConnection CONN = new OleDbConnection(ConnectionString.ToString()))
    {
    CONN.Open();
    DataTable Schema = CONN.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" });
    CmbSheet.DataSource = Schema;
    CmbSheet.DisplayMember = "TABLE_NAME";
    }

  18. #18
    کاربر دائمی آواتار vahidmasoudi1391
    تاریخ عضویت
    فروردین 1391
    محل زندگی
    استان مازندران
    پست
    294

    نقل قول: نمایش نام شیت های اکسل در کمبوباکس

    سلام به همه دوستان
    می تونید از لینک زیر هم کمک بگیرید.
    امیدوارم بدردتون بخوره
    https://stackoverflow.com/questions/...-names-which-i

  19. #19

    نقل قول: نمایش نام شیت های اکسل در کمبوباکس

    سلام! برای این منظور می توانید از فرمول ها و Power Query نیز استفاده کنید. اگر کار با فرمول ها راحت تر است، می توانم با مثال کمک کنم.

  20. #20

    نقل قول: نمایش نام شیت های اکسل در کمبوباکس

    نقل قول نوشته شده توسط vahidmasoudi1391 مشاهده تاپیک
    سلام به همه دوستانمی تونید از لینک زیر هم کمک بگیرید.امیدوارم بدردتون بخورهhttps://stackoverflow.com/questions/...-names-which-i
    با تشکر و سپاس فراوان
    در حال حاضر از همین روش استفاده می کنم .من می خواستم اگر بشه خواندن و پر کردن نام شیت ها را همانند کد های پر کردن کریدویو انجام بدهم که با خطا مواجه می شوم با تشکر

  21. #21

    نقل قول: نمایش نام شیت های اکسل در کمبوباکس

    نقل قول نوشته شده توسط Alex_Cobe مشاهده تاپیک
    سلام! برای این منظور می توانید از فرمول ها و Power Query نیز استفاده کنید. اگر کار با فرمول ها راحت تر است، می توانم با مثال کمک کنم.
    با تشکر اگر امکانش هست لطفا یک مثال بزنید

تاپیک های مشابه

  1. سوال: روش آپلود کردن سایت بر روی هاست و مدیریت محتوای سایت...
    نوشته شده توسط vahid1993 در بخش طراحی وب (Web Design)
    پاسخ: 1
    آخرین پست: جمعه 07 خرداد 1395, 19:48 عصر
  2. پاسخ: 3
    آخرین پست: چهارشنبه 02 اردیبهشت 1394, 12:02 عصر
  3. سوال: مگر 8 بیت یک بایت نمی شود پس چگونه در این الگوریتم تعداد بیت ها یک بایت میشوند؟
    نوشته شده توسط complexcoding در بخش برنامه نویسی با زبان C و ++C
    پاسخ: 2
    آخرین پست: دوشنبه 14 فروردین 1391, 15:21 عصر
  4. هزینه های احتمالی یک وبسایت تجاری در صورت رعایت کپی رایت
    نوشته شده توسط میلاد قاضی پور در بخش گفتگوی عمومی کامپیوتر و فناوری اطلاعات
    پاسخ: 5
    آخرین پست: یک شنبه 30 آبان 1389, 08:22 صبح

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •