أتمتة excel معالجة ملف في بيرل وتجنب الحوار/UI التفاعلات

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

سؤال

كيف أضمن أن لا المنبثقة الحوارات سوف تظهر عندما أتمتة Microsoft Excel من خلال OLE ؟ أنا باستخدام Perl module (Win32::OLE).لا يمكن تجنب معظم الحوار pop-ups باستخدام التعليمات البرمجية التالية:

use Win32::OLE;
use Win32::OLE::Variant;
use Win32::OLE::Const;

my $excel_symbols = Win32::OLE::Const->Load('Microsoft Excel');
my $excel = Win32::OLE->new('Excel.Application', sub { $_[0]->Quit();} );
$excel->{'Visible'} = 0;
$excel->{'DisplayAlerts'} = 0;
$excel->Workbooks->Open('c:\some_excel_file.xls',
  { 'UpdateLinks' => $excel_symbols->{'xlUpdateLinksNever'},
    'ReadOnly' => 1,
    'IgnoreReadOnlyRecommended' => 1
  });

ومع ذلك بالنسبة لبعض الملفات الاستمرار في الحصول على الحوار مع النص التالي:

هذا الملف لا يمكن التعرف عليه تنسيق.

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

حسنا إلغاء

في بعض الأحيان مماثلة سيظهر مربع حوار الذي يحتوي على 'موافق', 'إلغاء' و 'مساعدة' أزرار.

لا أستطيع التحكم في نوعية الملفات التي يتم توفيرها البرامج النصية.

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

المحلول 2

أنا إعادة النظر في هذه المسألة وجدت الحل.

نسخ الملف قبل المعالجة إلى موقع مؤقت.ثم حفظ الملف قبل إغلاقه في Excel:

File::Copy::copy('c:\some_excel_file.xls', 'c:\temp\SFO3jfd.xls');
my $book = $excel->Workbooks->Open('c:\temp\SFO3jfd.xls',
  { 'UpdateLinks' => $excel_symbols->{'xlUpdateLinksNever'},
    'ReadOnly' => 1,
    'IgnoreReadOnlyRecommended' => 1
  });
$book->Save();
$book->Close();

لماذا يعمل هذا:

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

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

نصائح أخرى

يمكنك أن تنظر في استخدام جدول::ParseExcel (وإن كان قد تفتقر إلى الميزات التي تحتاج إليها) أو Apache POI (وإن كان ذلك سوف تحتاج إلى بعض التفاف لاستخدامها في Perl) بدلا من استدعاء Excel المحرك على أوله.بهذه الطريقة لن تحصل على أي Excel من إنشاء الحوارات.

هنا هي وثائق كاملة عن الطريقة المفتوحة.أنا أتساءل عما إذا كان CorruptLoad المعلمة هو ما تحتاجه.

إذا كنت تحاول من عملية xl الملفات في شجرة ، وبعضها قد تكون مفتوحة من قبل المستخدمين الآخرين ولديهم ~ البادئة.

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