محاولة القيام بأتمتة Office مع Excel 2007، ولكن تبقي استخدام Excel 2003

StackOverflow https://stackoverflow.com/questions/2239472

سؤال

بيئة:

آلة نظام التشغيل Windows XP.
كلا Excel 2007 و Excel 2003 مثبتة (بهذا الطلب، وليس زمنيا).
C # 3.5.

مشكلة:

عندما أستخدم PIAS للقيام ببعض أتمتة Office، يمكنني استخدام السطر التالي من التعليمات البرمجية:

var excel = new ApplicationClass();

يشير إصدار PIA على وجه التحديد إلى إكسل 12.
C: Windows Assembles GAC Microsoft.Office.InterOp.excel 12.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0bce111e9429c microsoft.office.interop.excel.dll
ولكن:

 excel.Version;//this is 11.0 instead of 12.0

وبالتالي، عندما أحاول فتح ملف مع Extention .xlsx، فإنه يحذرني عن الوظائف المفقودة في تحويل الملفات، ويفتحه مع Excel 2003. أنا متأكد من أن الأمر يتعلق بطلب تثبيت 2007 -> 2003، لكنني لا أستطيع إلغاء تثبيت 2003 على جهازي B / C لدينا بعض أتمتة Office على خادم الويب الخاص بنا للحصول على مشروع غير مرتبط يستخدم Excel 2003.

لقد بحثت في السياسة .11.0.microsoft.office.interop.excel.config، لكنه يقول

<bindingRedirect oldVersion="11.0.0.0" newVersion="12.0.0.0"></bindingRedirect>

لذلك، أنا في حيرة. لماذا لا يمكنني إخبار COM Interop أي إصدار من Excel للاستخدام؟

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

المحلول

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

عندما يتعلق الأمر بتشغيل PIAS، إلا أنه سيتم تشغيله بالفعل ضد PIA أعلى مستوى مثبتا على النظام. لذلك إذا كنت تتطور مقابل برنامج PIA Excel 2003، ولكن لدى العميل Excel 2007 باستخدام Excel 2007 PIA، فسيتم تشغيل التعليمات البرمجية الخاصة بك مقابل برنامج Excel 2007 PIA - ويجب تشغيله بشكل جيد، لأن إكسل 2007 PIA متوافق مع الوراء. وهذا هو، كل إصدار PIA المرتفع أعلى رقم (ونموذج كائن Excel) متوافق مع الأوامر التي تم تجميعها ضد نموذج كائن OVEL الأقدم والأكبر. لاحظ أنه إذا كان لدى العميل على حد سواء Pias Excel 2007 و Excel 2003 على الجهاز، فسيحمل PIA الإصدار العالي، بغض النظر عن إصدار Excel الخاص به - لذلك سيتم تشغيل Excel 2007 PIA، إذا كان كلا التطويف متاحا.

تحرير: تحذير واحد هو أن يتم التوافق باخفاء Excel 2007 بنسبة 100٪ إلى الوراء عند استخدام VB.NET أو C # 4.0. إذا كنت تستخدم C # 3.0 أو أدناه، فإن حقيقة أن المعلمات الاختيارية مطلوبة بالفعل عند الاتصال من C # 3.0 أو أدناه سينشئ استراحة في بعض التعليمات البرمجية عند التشغيل مقابل نموذج PIA أو كائن أعلى. من النادر نسبيا، ومع C # 4.0، يجب أن تذهب هذه المشكلة، من الناحية النظرية.

انقر فوق موافق، لذلك ليس لديك الكثير من السيطرة على PIAS لأن PIA الذي قمت بتطويره في الواقع لا يتحكم في الواقع في تشغيل PIA في الواقع على جهاز العميل.

ليس لديك الكثير من التحكم حيث يتم إطلاق إصدار Excel أيضا أيضا. على سبيل المثال، عند إنشاء مثيل Excel جديد عبر:

Excel.Application excelApp = new Application();

يتم تعيين تطبيق Excel الذي تم تحميله وفقا للإصدار الحالي تعيين في التسجيل. يتم حفظ الإصدار الحالي في:

HKEY_CLASSES_ROOT\Excel.Application\CurVer

يبدو أن مفتاح "الذراف" في قضيتك سيكون له قيمة افتراضية ل "Excel.Application.11"، بدلا من "Excel.Application.12". قد يؤدي تغيير هذا وحده إلى القيام بالحيلة، لكنني أفضل إجراء إصلاح بدلا من ذلك للتأكد من تصحيح جميع إعدادات التسجيل بشكل صحيح. (ولم أتمكن من معرفة ما يجب أن تكون جميع الإعدادات.) حسنا، وجدت واحدة أخرى: ستحتاج أيضا إلى تغيير:

[HKEY_CLASSES_ROOT\CLSID\{00024500-0000-0000-C000-000000000046}\ProgID]

لعقد قيمة "Excel.Application.12". ولكن أود أن أوصي بشدة تشغيل إصلاح بدلا من ذلك. لا أعرف ما قد تحتاج إلى تغيير الإعدادات الأخرى، لذلك فإن تغييرها باليد محفوف بالمخاطر قليلا.

بالإضافة إلى ذلك، يجب أن تجد المفاتيح التالية أيضا:

HKEY_CLASSES_ROOT\Excel.Application.11
HKEY_CLASSES_ROOT\Excel.Application.12

لأن هذه هي إصدارات Excel التي قمت بتثبيتها.

(يرى هنا لمناقشة أخرى.)

أنا متأكد من أن الأمر يتعلق الأمر بترتيب التثبيت يجري 2007 -> 2003

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

ولكن ضع في اعتبارك أنه من خلال القيام بذلك، سيتم تشغيل Excel 2007 افتراضيا عند الاتصال Excel.Application excelApp = new Application().

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

اعتدت أن أحصل على إصدارات متعددة من Excel على نفس آلة التطوير الخاصة بي، وأشعر شخصيا أنني لم تكن السجلات السلبية معقدة لأن هذه المقالات تجعلها صوتا. بشكل عام، يعد Excel 2007 PIA متوافقا مع إكسل 2003 PIA وكل شيء يعمل بشكل جيد. لكنني دخلت ذات مرة في فوضى سجل مشابهة لكم وقررت "القيام بالأشياء الصحيحة". قمت بإلغاء تثبيت كليهما ثم إعادة تثبيت Excel 2007 فقط.

من هناك قمت بتثبيت جهاز الكمبيوتر الظاهري، وهو مجاني (Ware VM هو في الواقع أفضل قليلا، لكنه غير مجاني) ثم تثبيت الإصدارات السفلية من Excel ل 2003 و 2002 و 2000 و '97 على منفصلة VMS. من المؤكد أن بعض الأعمال التي تم إعدادها، ولكن بمجرد القيام بذلك، كل شيء نظيف بنسبة 100٪.

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

أتمنى أن يساعدك هذا!

مايك

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