سؤال

أنا أقرأ ملف XLSX كإصدار ديسيبل للقيام ببعض الأعمال

لقد لاحظت أن قراءة بعض feilds في int والتاريخ على الرغم من أنني أريد فقط أن يأتي كل شيء كنص. هل هناك على أي حال لتجاوز هذه الميزة؟

الرمز أدناه

(لا تتردد في الإشارة إلى أي شيء يمكن أن أفعله بشكل أفضل مع الكود الخاص بي أيضًا)

  private DataSet ExceltoDT(OpenFileDialog dialog)
    {
        try
        {
            string connst = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + dialog.FileName + ";Extended Properties=\"Excel 12.0 Xml;HDR=NO\";";
            string sheet = "Sheet1$";
            string strSQL = "SELECT * FROM [" + sheet + "]";
            //string Table = "081710";
            OleDbConnection xlsdb = new OleDbConnection(connst);
            xlsdb.Open();
            OleDbDataAdapter adp = new OleDbDataAdapter(strSQL, xlsdb);
            DataSet ds2 = new DataSet();
            adp.Fill(ds2);


            adp.Dispose();
            xlsdb.Close();
            xlsdb.Dispose();

            return ds2;
        }
        catch (StackOverflowException stack_ex2)
        {
            MessageBox.Show("(2007 Excel file) Stack Overflowed!" + "\n" + stack_ex2.Message);
            return null;

        }
        catch (OleDbException ex_oledb2)
        {
            MessageBox.Show("An OleDb Error Thrown!" + "\n" + ex_oledb2.Message);
            return null;
        }
    }
هل كانت مفيدة؟

المحلول

أضف ' (اقتصد) أمام كل قيمة خلية. سيخبر هذا Excel "تعامل مع هذا كنص حتى عندما يبدو أنه رقم/تاريخ/أيا كان".

ليس ما تريد؟ ثم لا تستخدم موصل DB لأنه مكسور بشكل سيء. ستلاحظ أنه عندما يكون لديك عمود مع خلايا مختلطة. في هذه الحالة ، سوف ينظر برنامج تشغيل DB إلى الصفوف الثمانية الأولى ويضع النوع على غالبية الأنواع التي يجدها وإرجاع أي شيء في هذا العمود الذي لا يناسب. يمكنك إصلاح ذلك عن طريق اختراق السجل الخاص بك.

بدلاً من ذلك ، استخدم OLE API لفتح المصنف ثم ابدأ من هناك ، وقراءة الصف حسب الصف ، وتحويل البيانات كما تحتاج (هذا قائمة طويلة من المشاركات يجب أن تحتوي على كل طريقة ممكنة للوصول إلى Excel من C# بالإضافة إلى جميع الأخطاء والمشاكل التي يمكنك مواجهتها).

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top