سؤال

أحاول قراءة ملف Excel (XLSX) باستخدام الرمز الموضح أدناه. أحصل على "جدول خارجي ليس في التنسيق المتوقع." خطأ ما لم يكن لدي الملف مفتوح بالفعل في Excel. بمعنى آخر، يجب أن أفتح الملف في Excel أولا قبل أن أتمكن من القراءة إذا كان من برنامج C #. ملف XLSX على مشاركة على شبكتنا. كيف يمكنني قراءة الملف دون الحاجة إلى فتحه أولا؟ شكرا

string sql = "SELECT * FROM [Sheet1$]";
string excelConnection = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + pathname + ";Extended Properties=\"Excel 8.0;HDR=YES;IMEX=1;\"";

using (OleDbDataAdapter adaptor = new OleDbDataAdapter(sql, excelConnection)) {
    DataSet ds = new DataSet();
    adaptor.Fill(ds);
}
هل كانت مفيدة؟

المحلول

"الجدول الخارجي ليس في التنسيق المتوقع." يحدث عادة عند محاولة استخدام ملف Excel 2007 مع سلسلة اتصال تستخدم: Microsoft.jet.oledb.4.0 والخصائص الموسعة = Excel 8.0

يبدو أن استخدام سلسلة الاتصال التالية إصلاح معظم المشكلات.

public static string path = @"C:\src\RedirectApplication\RedirectApplication\301s.xlsx";
public static string connStr = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + path + ";Extended Properties=Excel 12.0;";

نصائح أخرى

شكرا لهذا الرمز :) أنا حقا أقدر ذلك. تناسبني.

public static string connStr = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + path + ";Extended Properties=Excel 12.0;";

لذلك إذا كان لديك إصدار Diff من ملف Excel، احصل على اسم الملف، إذا كان ملحقه .xlsx., ، استخدم هذا:

Private Const connstring As String = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + path + ";Extended Properties=Excel 12.0;";

وإذا كان كذلك .xls., ، استعمال:

Private Const connstring As String = "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source=" + path + ";Extended Properties=""Excel 8.0;HDR=YES;"""

(لدي سمعة منخفضة للغاية للتعليق، ولكن هذا هو التعليق على دخول جوشقة، باستخدام محرك ACE بدلا من Jet for Excel 2007)

إذا لم يكن لديك ECE مثبتة / مسجلة على جهازك، فيمكنك الحصول عليها في: https://www.microsoft.com/en-us/download/details.aspx؟id=13255.

إنه ينطبق على Excel 2010 أيضا.

فقط أضف حالتي. تم إنشاء ملف XLS الخاص بي بواسطة وظيفة تصدير البيانات من موقع ويب، تمديد الملف هو XLS، ويمكن افتتاحه عادة بواسطة MS Excel 2003. ولكن كلا من Microsoft.jet.oledb.4.0 و Microsoft.ace.ace.oledb.12.0 حصلت على " الجدول الخارجي ليس في استثناء التنسيق المتوقع ".

أخيرا، المشكلة هي، كما قال الاستثناء، "ليس في التنسيق المتوقع". على الرغم من أن اسم Extenty هو XLS، ولكن عندما أفتحها مع محرر نصوص، فهذا في الواقع ملف HTML جيد الشكل، كل البيانات موجودة فيu003Ctable style=";text-align:right;direction:rtl"> ، كلu003Ctr> هو صف واحدu003Ctd> هي خلية. ثم أعتقد أنني أستطيع تحليلها بطريقة HTML.

كان لدي هذه المشكلة نفسها (باستخدام ACE.OLEDB) وما الذي حله بالنسبة لي كان هذا الرابط:

http://support.microsoft.com/kb/2459087.

من GIST من ذلك هو أن تثبيت إصدارات مكاتب متعددة ومختلف Office SDK، والجمعيات، وما إلى ذلك قد أدت إلى مرجع ACEOLEDB.DLL في التسجيل الذي يشير إلى مجلد Office12 بدلا من Office14 في

C: ملفات البرنامج الملفات المشتركة Microsoft Shared Office14 ACEOLEDB.DLL

من الرابط:

بدلا من ذلك، يمكنك تعديل مفتاح التسجيل تغيير مسار DLL لتتناسب مع ذلك من إصدار الوصول الخاص بك.

يجب أن يستخدم Access 2007 Office12، Access 2010 - Office14 والوصول إلى 2013 - Office15

(نظام التشغيل: مكتب 64bit: 64bit) أو (OS: 32bit Office: 32bit)

مفتاح: HKCR CLSID {3BE786A0-0366-4F5C-9434-25CF162E475E} InProcServer32

اسم القيمة: (افتراضي)

بيانات القيمة: C: Program Files Files المشترك Microsoft Shared Office14 ACEOLEDB.DLL

(نظام التشغيل: مكتب 64bit: 32bit)

مفتاح: HKCR WW6432Node Clsid {3BE786A0-0366-4F5C-9434-25CF162E475E} InProcServer32

اسم القيمة: (افتراضي)

بيانات القيمة: C: Program Files (x86) Files Common Microsoft Shared Office14 ACEOLEDB.DLL

لقد رأيت أيضا هذا الخطأ عند محاولة استخدام الصيغ غير المباشرة المعقدة () على الورقة التي يتم استيرادها. لقد لاحظت ذلك لأن هذا كان الفرق الوحيد بين المصنفين حيث كان أحد المستوردين والآخر لم يفعل ذلك. كلاهما كان 2007+ ملفات .xlsx، وتم تثبيت محرك 12.0.

أكدت أن هذه هي المشكلة عن طريق:

  • إجراء نسخة من الملف (لا يزال لديه المشكلة، لذلك لم يكن بعض الفرق في الحفظ)
  • اختيار جميع الخلايا في الورقة مع الصيغ غير المباشرة
  • لصق القيم فقط

واختفى الخطأ.

كنت أحصل على أخطاء مع طرف ثالث وقراءة OLEDB لمصنف XLSX. يبدو أن المشكلة ورقة عمل مخفية تسبب خطأ. إخراج ورقة العمل مكن المصنف استيراد.

كان لي نفس المشكلة. والتي كما تم حلها باستخدام هذه الخطوات:

1.) انقر فوق ملف

2.) حدد "حفظ باسم"

3.) انقر فوق القائمة المنسدلة (احفظ كنوع)

enter image description here

4.) حدد Excel 97-2003 المصنف

enter image description here

5.) انقر فوق الزر "حفظ"

enter image description here

كان لدي هذه المشكلة وتغيير الخصائص الموسعة إلى استيراد HTML ثابتة حسب هذه المشاركة من قبل ماركوس ميريس:

strCon = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & importedFilePathAndName _
         & ";Extended Properties=""HTML Import;HDR=No;IMEX=1"";"

بدلا من OLEDB، يمكنك استخدام Excel Interop وفتح ورقة العمل كقراءة فقط.

https://msdn.microsoft.com/en-us/library/microsoft.office.interop.excel.workbooks.open(v=office.15).aspx.

ركض في نفس المشكلة ووجدت هذا الموضوع. ساعد أي من الاقتراحات أعلاه باستثناء تعليق @ سميث على الإجابة المقبولة في 17 أبريل '13.

خلفية مشكلتي قريبة بما يكفي ل @ Zhiyazw - محاولة أساسا لتعيين ملف Excel المصدر (SSRS في حالتي) كصدر بيانات في حزمة DTSX. كل ما قمت به، بعد بعض العبث، كان إعادة تسمية ورقة العمل. ليس من الضروري أن تكون صغيرة حيث اقترح Smith.

أفترض أن ACE OLEDB تتوقع أن يتبع ملف Excel بنية XML معينة ولكن خدمات التقارير بطريقة ما لا تدرك ذلك.

قد يحتوي عنوان ملف Excel على ملحق غير صحيح. يمكنك تغيير الملحق من XLS إلى XLSX أو العكس والعكس مرة أخرى.

إذا كان الملف للقراءة فقط، فما عليك سوى إزالته ويجب أن يعمل مرة أخرى.

قد يتم تأمين الملف بعملية أخرى، تحتاج إلى نسخه ثم تحميله كما يقول في هذا بريد

يمكن أن يكون هذا أيضا ملف يحتوي على صور أو مخططات، راجع هذا: http://kb.tableausoftware.com/articles/knowledgebase/resolving-error-external-table-is-not-in-expected-format.

التوصية هي حفظ ك excel 2003

فقط إضافة الحل الخاص بي لهذه المشكلة. كنت أقوم بتحميل ملف .xlsx إلى خادم الويب، ثم القراءة منه والمعالجة السائبة إلى SQL Server. كان يحصل على نفس رسالة الخطأ، حاول كل الإجابات المقترحة ولكن لا شيء يعمل. في النهاية قمت بحفظ الملف ك excel 97-2003 (.xls) الذي عمل ... المشكلة فقط لدي الآن هو أن الملف الأصلي لديه 110،000+ صفوف.

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

وآمل أن يساعد أنت.

ايس قد حارس النفاثة

يدعم ACE جميع الإصدارات السابقة من Office

هذا الرمز يعمل بشكل جيد!

        OleDbConnection MyConnection;
        DataSet DtSet;
        OleDbDataAdapter MyCommand;

        MyConnection = new System.Data.OleDb.OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=..\\Book.xlsx;Extended Properties=Excel 12.0;");
        MyCommand = new System.Data.OleDb.OleDbDataAdapter("select * from [Sheet1$]", MyConnection);
        DtSet = new System.Data.DataSet();

        MyCommand.Fill(DtSet);
        dataGridView1.DataSource = DtSet.Tables[0];
        MyConnection.Close();

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

لقد رأيت مؤخرا هذا الخطأ في سياق لم يطابق أي من الإجابات المدرجة مسبقا. اتضح أنه تعارض مع سيارته. وبعد الحل البديل: تعطيل مؤقت مؤقت.

لقد أجريت مؤخرا هذا "system.data.oledb.oledbexception (0x80004005): الجدول الخارجي ليس في التنسيق المتوقع." يحدث خطأ. كنت أعتمد على وقت تشغيل Microsoft Access 2010. قبل التحديث الذي تم تثبيته تلقائيا على الخادم الخاص بي في 12 ديسمبر 2018 رمد رمز C # بخير باستخدام مزود Microsoft.ace.oledb.12.0. بعد تثبيت التحديث من 12 ديسمبر 2018، بدأت في الحصول على "الجدول الخارجي ليس في التنسيق المتوقع" في ملف السجل الخاص بي.

قمت بتغريم وقت تشغيل Microsoft Access 2010 وتثبيت وقت تشغيل Microsoft Access 2013 وبدأ رمز C # في العمل مرة أخرى بدون "System.Data.oledb.oledbexception (0x80004005): الجدول الخارجي ليس في التنسيق المتوقع." أخطاء.

إصدار 2013 الذي تم إصلاح هذا الخطأ بالنسبة ليhttps://www.microsoft.com/en-us/download/confirmation.aspx؟id=39358.

إصدار 2010 الذي عمل لي قبل التحديث الذي تم تثبيته تلقائيا على الخادم الخاص بي في 12 ديسمبر.https://www.microsoft.com/en-us/download/confirmation.aspx؟id=10910. https://www.microsoft.com/en-us/download/confirmation.aspx؟id=10910.

كان لدي أيضا هذا الخطأ يحدث الشهر الماضي في عملية آلية. ركض رمز C # غرامة عندما صعدت تصحيحها. لقد وجدت أن حساب الخدمة الذي يقوم بتشغيل التعليمات البرمجية يحتاج أيضا إلى أذونات إلى مجلد C: Windows Temp.

يتكون نطاقي من تنزيل القالب وتحقق من القالب عند ملء البيانات بذلك،

1) قم بتنزيل ملف القالب (.xlsx) مع صف الرأس. يتم إنشاء الملف باستخدام openxml وانها تعمل تماما.

2) قم بتحميل نفس الملف دون أي تغيير من الحالة التي تم تنزيلها. سيؤدي ذلك إلى أن خطأ اتصال وفشل (اتصال OLEDB يستخدم لقراءة ورقة Excel).

هنا إذا تم ملء البيانات يعمل البرنامج كما هو متوقع.

أي شخص لديه فكرة أن المشكلة مرتبطة بالملف الذي نقوم بإنشاءه XML التنسيق إذا فتحناه وإنقاذ فقط تحويله إلى تنسيق Excel ويعمل بشكل جيد.

أي فكرة لتنزيل Excel باستخدام نوع الملف المفضل؟

العمل مع بعض الرمز الأقدم واتصل عبر هذا الاستثناء العام نفسه. من الصعب جدا تعقب المشكلة، لذلك اعتقدت أنني سأضيف هنا في حال تساعد شخص آخر.

في حالتي، كان هناك رمز في مكان آخر في المشروع الذي تم فتح StreamReader على ملف Excel قبل حاول oledbconnection فتح الملف (تم ذلك في فئة أساسية).

لذلك في الأساس أنا فقط بحاجة للاتصال Close() على كائن StreamReader أولا، ثم يمكنني فتح اتصال OLEDB بنجاح. لا علاقة له بملف Excel نفسه، أو بسلسلة OLEDBCONNECTION (من الطبيعي، حيث كنت أبحث في البداية).

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