سؤال

أنا على دراية تامة بمقالة قاعدة دعم Microsoft التي تنص على أنه غير مدعوم لأتمتة واجهة مستخدم المنتجات المكتبية بشكل أقل.يبدو أن ويندوز سيرفر 2008 إلى x64 و إكسل 2007 تنفيذ البيان المعطى.

أقوم بتشغيل التعليمة البرمجية التالية في طريقة OnStart لخدمة NT (حساب النظام المحلي).كل ما يفعله هو أتمتة Excel بالطريقة التي يعمل بها عند تشغيل نفس الكود في تطبيق وحدة التحكم.

يتكون الكود المقدم من جزأين.يقوم الجزء الأول بتشغيل برنامج Excel وإنشاء كتاب عمل جديد وحفظه في اسم الملف المحدد.يقوم الجزء الثاني بتشغيل مثيل جديد لبرنامج Excel ويفتح الملف المحدد.تنتهي العملية المفتوحة بهذا الاستثناء:

لا يمكن بدء الخدمة.System.Runtime.InteropServices.COMException (0x800A03EC):لا يمكن لـ Microsoft Office Excel الوصول إلى الملف 'c: emp est.xls'.هناك العديد من الأسباب المحتملة:

• اسم الملف أو المسار غير موجود.• الملف قيد الاستخدام بواسطة برنامج آخر.• المصنف الذي تحاول حفظه يحمل نفس اسم المصنف المفتوح حاليًا.

لماذا كان برنامج Excel الآلي قادرًا على تشغيل الملفات وكتابتها على القرص ولكنه يفشل عندما يُطلب منه "فقط" فتح ملف موجود؟

System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("en-US");
// launch excel and create/save a new work book
Microsoft.Office.Interop.Excel.ApplicationClass excel = new       Microsoft.Office.Interop.Excel.ApplicationClass();
excel.UserLibraryPath, excel.Interactive));
//            
string filename = "c:\\temp\\test.xls";
if(System.IO.File.Exists(filename)) System.IO.File.Delete(filename);
//
excel.Workbooks.Add(System.Reflection.Missing.Value);
excel.Save(filename);
excel.Quit();
excel = null;
// lauch new instance of excel and open saved file
excel = new Microsoft.Office.Interop.Excel.ApplicationClass();
try
{
    Microsoft.Office.Interop.Excel.Workbook book = excel.Workbooks.Open(filename,
                System.Reflection.Missing.Value,
                System.Reflection.Missing.Value,
                System.Reflection.Missing.Value,
                System.Reflection.Missing.Value,
                System.Reflection.Missing.Value,
                true,
                System.Reflection.Missing.Value,
                System.Reflection.Missing.Value,
                false,
                false,
                System.Reflection.Missing.Value,
                false,
                System.Reflection.Missing.Value,
                System.Reflection.Missing.Value);
     book.Close(false, System.Reflection.Missing.Value, System.Reflection.Missing.Value);
      book = null;
  }
  finally
  {
      excel.Quit();
      excel = null;
  }
  //
  GC.Collect();
هل كانت مفيدة؟

المحلول

الحل بسيط حقا.يمكن العثور على موضوع منتدى msdn هنا

لإختصار القصة الطويلة، أقوم بنشر الحل هنا، ويعود الفضل إلى ح أوجاوا

هذا الحل هو...

・ويندوز 2008 سيرفر x64

يرجى إنشاء هذا المجلد.

C:\Windows\SysWOW64\config\systemprofile\Desktop

・ خادم ويندوز 2008 x86

يرجى إنشاء هذا المجلد.

C:\Windows\System32\config\systemprofile\Desktop

...بدلاً من dcomcnfg.exe.

أدت هذه العملية إلى إزالة مشكلات التشغيل الآلي للمكاتب في نظامي.

يبدو أن مجلد سطح المكتب ضروري في مجلد ملف تعريف النظام لفتح الملف بواسطة Excel.

يختفي من Windows2008 ، Windows2003 كان لدى المجلد ، وأعتقد أنه يسبب هذا الخطأ.

نصائح أخرى

كما هو مذكور أيضًا في المصدر، تحتاج إلى تعيين الحقوق الصحيحة لمجلد سطح المكتب.لقد نجح هذا الأمر بالنسبة لي على نظامي التشغيل Windows 2008-64 بت وOffice 2010 32 بت.

  1. إنشاء الدليل "C:\Windows\SysWOW64\config\systemprofile\Desktop" (لنظام التشغيل Windows 64 بت) أو "C:\Windows\System32\config\systemprofile\Desktop" (لنظام التشغيل Windows 32 بت)

  2. قم بتعيين المستخدم "خدمات الشبكة (Service Réseau)" الحقوق التالية للمجلد الذي تم إنشاؤه:

القراءة والتنفيذ، قائمة محتويات المجلد، القراءة

جون.

لقد وجدت في كثير من الأحيان أن استدعاء Quit() لا يكفي لتحرير الموارد.حاول إضافة:-

System.Runtime.InteropServices.Marshal.ReleaseComObject(excel);

بين عبارة Quit() وتعيينها إلى قيمة خالية.

هناك العديد من الأخطاء أكثر من تلك المذكورة والتي ستحتاج إلى حلها حتى يعمل برنامج Excel على نظام التشغيل Windows Server 2007 64 بت.يرى الخطوات التي عملت بها بعد العمل على هذا لمدة يومين كاملين!

إذا كنت تستخدم Apache، فقد تحتاج أيضًا إلى اتباع هذه الخطوات لجعل برنامج MS Word يعمل بشكل صحيح (إلى جانب كل ما هو موضح في الإجابات الأخرى):

فيما يلي لقطة شاشة توضح مربعي الحوار اللذين ستحتاج إلى إظهارهما:enter image description here

بالنسبة لأباتشي:

الخدمات->أباتشي->النقر بزر الماوس الأيمن (خصائص)->علامة التبويب تسجيل الدخول

مايكروسوفت اوفيس:

قم بتشغيل dcomcnfg.exe->جذر وحدة التحكم->خدمات المكونات->أجهزة الكمبيوتر->جهاز الكمبيوتر->تكوين DCOM->البحث عن تطبيق Microsoft->النقر بزر الماوس الأيمن (الخصائص)->علامة تبويب الهوية

**إذا لم تتمكن من العثور على MS Word، فتأكد من تشغيل تكوين DCOM الصحيح (64 بت مقابل 32 بت) اعتمادًا على إصدار Office الذي قمت بتثبيته.

هناك خياران هنا، يمكنك ضبط Apache للاستخدام حساب النظام المحلي وحدد مربع الاختيار للسماح بالتفاعل مع سطح المكتب.إذا قمت بذلك، فأنت بحاجة إلى تعيين هوية لبرنامج MS Word مستخدم تفاعلي.

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

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