سؤال

حسنًا، دعونا نرى ما إذا كان بإمكاني جعل هذا منطقيًا.

لدي برنامج مكتوب يقوم بتوزيع ملف Excel وهو يعمل بشكل جيد.أستخدم ما يلي للوصول إلى الملف:

string FileToConvert = Server.MapPath(".") + "\\App_Data\\CP-ARFJN-FLAG.XLS";
string connectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + FileToConvert + ";Extended Properties=Excel 8.0;";
OleDbConnection connection = new OleDbConnection(connectionString);
connection.Open();
//this next line assumes that the file is in default Excel format with Sheet1 as the first sheet name, adjust accordingly
OleDbDataAdapter adapter = new OleDbDataAdapter("SELECT * FROM [CP-ARFJN-FLAG$]", connection);

وهذا يعمل بشكل جيد.ولكن عندما أحاول ذلك على الملف الفعلي (يتم توفيره لي بواسطة برنامج آخر) أحصل على هذا الخطأ:

System.Data.OleDb.OleDbException: External table is not in the expected format. at System.Data.OleDb.OleDbConnectionInternal..ctor(OleDbConnectionString constr, OleDbConnection connection) at System.Data.OleDb.OleDbConnectionFactory.CreateConnection(DbConnectionOptions options, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningObject) at System.Data.ProviderBase.DbConnectionFactory.CreateNonPooledConnection(DbConnection owningConnection, DbConnectionPoolGroup poolGroup) at System.Data.ProviderBase.DbConnectionFactory.GetConnection(DbConnection owningConnection) at System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory) at System.Data.OleDb.OleDbConnection.Open() at wetglobe.Page_Load(Object sender, EventArgs e)

ولكن هذا هو المكان الذي أعتقد أن المشكلة تكمن فيه.إذا أخذت هذا الملف وحفظته باستخدام برنامج Excel المحلي الخاص بي، فسوف أحصل أولاً على هذه النافذة المنبثقة:

قد يحتوي CP-ARFJN-FLAG.xls على ميزات غير متوافقة مع النص (TAB SELIMITED).هل تريد الاحتفاظ بمصنف في هذا التنسيق؟

  • للحفاظ على هذا التنسيق ، الذي يترك أي ميزات غير متوافقة ، انقر فوق نعم.
  • للحفاظ على الميزات، انقر فوق لا.عشرة حفظ نسخة بتنسيق Excel الأخير.
  • لمعرفة ما يمكن أن يضيع ، انقر على المساعدة.

إذا قمت بالنقر فوق "لا" ثم قمت بحفظه بتنسيق Excel الحالي، فسيعمل البرنامج بشكل جيد.

لذا أفترض أن هذا تم حفظه بتنسيق Excel القديم المجنون؟

أعتقد أن أسئلتي ستكون:

  • كيف يمكنني معرفة ما هو إصدار Excel الذي أنقذ هذا؟
  • كيف يمكنني تحليلها في حالتها الحالية؟
  • -أو- هل يمكنني حفظه برمجياً كإصدار أحدث؟

اتمنى أن يكون هذا واضحا...شكرًا لك.

هل كانت مفيدة؟

المحلول

يبدو أن ملف XLS الذي تم إنشاؤه بواسطة تطبيق الطرف الثالث الخاص بك قد لا يكون بالفعل بتنسيق Excel - فقد يكون في الواقع ملفًا نصيًا محددًا بعلامات جدولة بامتداد .xls.

حاول فتحه باستخدام محرر النصوص وانظر.

إذا كان محددًا بعلامات جدولة، فيمكنك التخلص من محول OleDB وفتحه/تحليله كملف نصي قياسي.

نصائح أخرى

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

حللت المشاكل.يجب أن يتم إنشاء ملف Excel بواسطة MS EXCEL 2003، وليس من MS EXCEL 2007 "حفظ باسم 97-2003".لذلك عليك تنزيل ملف من أي مصدر.ثم انسخ البيانات يدويًا إلى الورقة.عملت معي.

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