سؤال

خلفية

نقوم بتطوير بعض الأدوات المساعدة الداخلية باستخدام ASP.NET 2.0.أحدها هو استخراج بعض المعلومات من قواعد البيانات وإنشاء مصنف Excel يحتوي على عدد من جداول البيانات مع البيانات بناءً على الاستعلامات في قاعدة البيانات.

مشكلة

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

غير قادر على تحويل كائن COM من النوع "Microsoft.Office.Interop.Excel.ApplicationClass" إلى نوع الواجهة "Microsoft.Office.Interop.Excel._Application".فشلت هذه العملية بسبب فشل استدعاء QueryInterface على مكون COM للواجهة ذات المعرف '{000208D5-0000-0000-C000-000000000046}' بسبب الخطأ التالي:لا توجد مثل هذه الواجهة مدعومة (استثناء من HRESULT:0x80004002 (E_NOINTERFACE)).

حل؟

نحن نستخدم PIA لبرنامج Excel 2003 ولدينا Excel 2003 وPIA مثبتان على الخادم.هل يمكن لأي شخص أن يشرح سبب عدم نجاح ذلك أو يقدم لنا بعض النصائح حول كيفية تتبع المشكلة؟

شكرا على اي مساعده بامكانك تقديمها.

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

المحلول

ويمكن للمستخدم أن يدير تجمع التطبيقات ASP.NET يكون تحت الوصول إلى التطبيق؟ حاول تسجيل الدخول باسم المستخدم (أو تغيير تجمع التطبيقات لتشغيل كمستخدم ذلك) وفتح إكسل. اذا كان يعمل حاول تشغيل تطبيق WinForms عناصر على الخادم كمستخدم ذلك مع التعليمات البرمجية التي يتم الفشل.

ولست متأكدا ولكن أعتقد أنه قد تحتاج إلى أن تكون مسجلة عبر REGSVR32 المجالس PIA.

وأظن أنه إذا قمت بتشغيل كخدمة الشبكة، فلن تكون قادرا على بدء تشغيل Excel (أي تسجيل الدخول التفاعلي، حساب مقيد، الخ). تشغيل التعليمات البرمجية ASP.NET الخاص داخل تجمع التطبيقات. يمكنك تغيير المستخدم يعمل تجمع التطبيقات من خلال إدارة IIS. إذا كنت تريد أن تحقق ما الشفرة يعمل حاليا منصب نظرة لعملية w3wp في إدارة المهام.

لاختبار وتغيير تجمع التطبيقات لتشغيل كمستخدم تعرف يعمل مع Excel.

نصائح أخرى

نستخدم Aspose (تجاري).المكتب على الخادم ليس ممتعًا كثيرًا.

  • عليك أن تكون حذرا بشأن الترخيص.
  • بين الحين والآخر تحتاج إلى إنهاء عملية الشنق.
  • يتطلب الحصول على الحقوق بشكل صحيح بعض الجهد.

يطلق عليه PI (t) A لسبب ما ...

النظر في العمل مع ملفات XLSX (جديد في Office 2007، ولكن يوجد مكون إضافي لـ Office 2003)، وهي مجرد ملفات ZIP تحتوي على ملفات XML والتي يمكنك معالجتها دون الحاجة إلى برنامج Excel.إن SpreadsheetML (المستند إلى XML) موثق جيدًا وليس معقدًا للغاية بحيث لا يمكن برمجته (قد تجد حتى LINQ إلى SpreadsheetML في مكان ما على الويب).

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

وأعتقد أن المشكلة هي أنه بمجرد نشر التطبيق الخاص بك إلى IIS كنت تشغل فجأة داخل شقة MTA COM. وأعتقد أن التفوق هو عنصر STA، وبالتالي لا يمكن أن تنشأ داخل MTA. سوف تحتاج إلى تعيين الخيار aspcompat في الصفحة التي تستخدم

<%@ page aspcompat=true %>

مزيد من المعلومات هنا

من مايكروسوفت, ، (التأكيد في المصدر الأصلي):

لا توصي Microsoft حاليًا، ولا تدعم، أتمتة تطبيقات Microsoft Office من أي تطبيق أو مكون عميل غير مراقب وغير تفاعلي (بما في ذلك خدمات ASP وASP.NET وDCOM وNT)، لأن Office قد يظهر سلوكًا غير مستقر و/ أو حالة توقف تام عند تشغيل Office في هذه البيئة.

مع قائمة بالأسباب التي تجعلك لا تفعل ذلك:

  • ...يتم تشغيل العديد من الخدمات ضمن حسابات لا تحتوي على ملفات تعريف للمستخدمين (مثل حساب SYSTEM أو حسابات IWAM_[servername]).ولذلك، قد لا تتم تهيئة Office بشكل صحيح عند بدء التشغيل.في هذه الحالة، يقوم Office بإرجاع خطأ في الدالة CreateObject أو الدالة CoCreateInstance.حتى إذا كان من الممكن بدء تشغيل تطبيق Office، فقد لا تعمل الوظائف الأخرى بشكل صحيح في حالة عدم وجود ملف تعريف للمستخدم.
  • في حالة حدوث خطأ غير متوقع، أو إذا كانت هناك حاجة إلى معلمة غير محددة لإكمال إحدى الوظائف، فقد تم تصميم Office لمطالبة المستخدم بمربع حوار مشروط يسأل المستخدم عما يريد المستخدم القيام به.لا يمكن استبعاد مربع حوار مشروط على سطح مكتب غير تفاعلي.لذلك، يتوقف مؤشر الترابط هذا عن الاستجابة (توقف) إلى أجل غير مسمى.على الرغم من أن بعض ممارسات الترميز يمكن أن تساعد في تقليل احتمالية حدوث هذه المشكلة، إلا أن هذه الممارسات لا يمكنها منع المشكلة تمامًا. هذه الحقيقة وحدها تجعل تشغيل تطبيقات Office من بيئة جانب الخادم محفوفًا بالمخاطر وغير مدعوم.
  • يجب أن تكون المكونات من جانب الخادم قابلة لإعادة الدخول بشكل كبير، ومكونات COM متعددة الخيوط ذات الحد الأدنى من الحمل الزائد والإنتاجية العالية للعديد من العملاء.تطبيقات Office هي العكس تمامًا من جميع النواحي تقريبًا.تطبيقات Office عبارة عن خوادم أتمتة قائمة على STA وغير قابلة لإعادة الدخول، وقد تم تصميمها لتوفير وظائف متنوعة ولكنها كثيفة الاستخدام للموارد لعميل واحد.

وقد يؤدي الكود الخاص بك إلى ظهور الأخطاء التالية:

  • CoCreateInstance

    • خطأ وقت التشغيل '429':لا يمكن لمكون ActiveX إنشاء كائن
    • خطأ وقت التشغيل "70":تم رفض الإذن
    • CO_E_SERVER_EXEC_FAILURE (0x80080005):فشل تنفيذ الخادم
    • تم رفض الوصول الإلكتروني (0x80070005):تم الرفض
    • توقف
    • يعود بدون خطأ، لكنه لم ينجح

وأخيرا:

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

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