سؤال

نحن نستخدم Excel لتحويل SprEateSheetml إلى XLS في WebService ASP.NET. علاوة على ذلك، إذا كان المستخدم يتحقق من خانات الاختيار الأيمن، فنحن نفرز مؤشر ترابط يستخدم Excel لطباعة جدول البيانات.

في الآونة الأخيرة، نشرنا التطبيق في بيئة جديدة، ثم بدأنا في الحصول على مشاكل: المرة الأولى التي يحاول فيها شخص ما الطباعة، يبدو أن Excel شنق على الخادم - أي المكالمة إلى PrintOut الطريقة على المصنف لا يعود أبدا.

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

أظن أن Excel يظهر invisible dialog - الأعراض هي نفسها كما كان لدينا في وقت سابق، في وقت يبدو الوقت الذي بدا فيه Excel كشكها على "لا يمكن استخدام ربط الكائنات وتضمين" -Dialog الذي ظهر عند فتح Excel.

أعلم أن استخدام أتمتة Office Side Sidel-Side أمر سيء، ولكن هذا تطبيق Legacy من الصعب للغاية تغييره، لذا يرجى عدم تقديم المشورة لي فقط لإعادة تصميم حلنا.

هل كان لدى أي شخص أي تجارب مع هذا النوع من السلوك؟

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

المحلول

حسنا، يبدو أنه لا يوجد لديه هذه المشكلة.

الشيء الغريب حقا هو أن وظائفي الليلية (العادية .NET .ENT .EXE) قادرة تماما على الطباعة - إنها فقط خدمات الويب الخاصة بي التي تحتوي على هذه المشكلة.

لذلك قمت بحل المشكلة عن طريق القيام بما يجب أن فعلت منذ فترة طويلة منذ فترة طويلة: لقد قمت بخدمة Windows بسيطة مع الرف العلوي, ، يستجيب ذلك لبعض رسائل MSMQ ويفعل الطباعة، ثم يمكن لخدمات الويب الخاصة بي طلب عمليات الطباعة عبر قائمة انتظار الرسائل.

أجمل كثيرا في كل شيء!

نصائح أخرى

لم يكن لدي أي نهاية من المشكلات (ضعف الأداء، العمليات المعلقة، عمليات تحطمها، إلخ) باستخدام Microsoft Excel و Word و PowerPoint عبر Interop في خدمة ويب لطباعة مستندات Office بتنسيق PDF. لقد واجهت أيضا مشاكل أشك في أنها بسبب مربعات الحوار غير المرئية (ربما ملف تالف، تم تعيين القراءة أو الموصى بها، الملف محمي بكلمة مرور، أو أيا كان).

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

لذلك، بينما أفترض أنني أقول "لا أتمت أتمتة Microsoft Office"، فأنا لا أقترح عليك التخلي عن الأتمتة تماما؛ فقط أنني كان كثير المزيد من النجاح أتمتة OpenOffice من Microsoft Office.

streationshetegear ل .NET. يمكن قراءة مصنفات XLS أو XLSX ويمكن الطباعة إلى الطابعة الافتراضية دون عرض أي مربعات حوار (راجع طريقة WorkBookView.print ().

يمكنك تنزيل تقييم هنا.

إخلاء المسئولية: أنا أملك

مثل الكثير من الناس، أنا يملك شاهد هذا النوع من السلوك. هو ناتج عن استخدام Office APIs في الخادم، وخاصة تطبيق ASP.NET متعدد المراحل.

ومع ذلك، قلت أنك لا تريد أن تعرف عن عدم تصوير نفسك في القدم، لذلك لا يوجد المزيد من القول. يبدو أنك محاصر بموجب عواقب الحماقة السابقة.


حسنا، توقفني إذا سمعت هذه واحد:

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

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

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

لم أحاول ذلك أبدا، لكنها تبدو وكأنها تعمل بشكل أفضل من محاولة الحصول على أتمتة Office للقيام بشيء لم يتم تصميمه للقيام به.

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