أتمتة الوظيفة في العمل:استيراد نص Powerpoint Bullet إلى ورقة Excel

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

سؤال

لقد طُلب مني أتمتة مهمة معينة في العمل اليوم والتي تستغرق الكثير من وقتنا!فيما يلي ما يجب القيام به وسأكون ممتنًا لأي مساعدة حول كيفية القيام بذلك (نصيحة التنفيذ) في نطاق معرفتي، إن أمكن.

مشكلة

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

لذلك، في الأساس:مقتطف من ppt -> أدخل في ورقة Excel كل صف يمثل نقطة نقطية.

التقنيات المتاحة لي

بيرل، PHP وجافا.

أود تفضل PHP لأكون صادقًا لأن هذه هي لغتي الأساسية، لكن يسعدني التفكير في أي شيء آخر تعتقدون أنه الأفضل يا رفاق/بنات.الثاني سيكون بيرل ثم جافا.لا أريد تجميع الفصول الدراسية وتثبيت JDK لهذا الغرض فقط!:)

الأسئلة الرئيسية

  • كيف يمكنك الرجوع إلى نقطة نقطية؟
  • هل من المحتمل أن ينتهي بي الأمر بكمية كبيرة من النص غير المنظم في ورقة Excel؟
  • هل هناك أي عوائق أمام القراءة من ملف ppt؟

تحديث

سأفكر في تقنيات MS (VB، وما إلى ذلك) إذا كانت تجعل الحياة أسهل ولكني لم أستخدمها أبدًا وأحتقر تكنولوجيا MS!آمل ألا أشتعل من قبل المبشرين!:)

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

المحلول

إليك نموذج نصي باستخدام Win32::OLE.

بالمناسبة، بمجرد تحويل الشرائح إلى تنسيق يمكنك معالجته، يمكنك استخدامه جدول البيانات::WriteExcel على أنظمة غير MS لكتابة الإخراج.لذلك أنصح ببرنامجين:أحدهما لتحويل مستندات PowerPoint والآخر لإنشاء ملفات Excel.

لاحظ أن مصدرًا ممتازًا للمعلومات لتطبيقات Microsoft Office هو متصفح الكائنات.يمكنك الوصول إليه عبر الأدوات → ماكرو → محرر Visual Basic.بمجرد دخولك إلى المحرر، اضغط على F2 لتصفح الواجهات والأساليب والخصائص التي توفرها تطبيقات Microsoft Office.

#!/usr/bin/perl

use strict;
use warnings;

use FindBin qw( $Bin );
use File::Spec::Functions qw( catfile );

use Win32::OLE;
use Win32::OLE::Const 'Microsoft PowerPoint';
$Win32::OLE::Warn = 3;

my $ppt = get_ppt();
$ppt->{Visible} = 1;

my $ppt_file = catfile $Bin, 'test.ppt';
my $doc = $ppt->Presentations->open( $ppt_file );
my $slides = $doc->Slides;
my $num_slides = $slides->Count;

for my $slide_idx (1 .. $num_slides) {
    print "=== Begin Slide $slide_idx ===\n";

    my $slide = $doc->Slides->Item( $slide_idx );
    my $shapes = $slide->Shapes;
    my $num_shapes = $shapes->Count;

    for my $shape_idx (1 .. $num_shapes) {
        my $shape = $shapes->Item($shape_idx);
        next unless $shape->HasTextFrame;

        my $pars = $shape->TextFrame->TextRange->Paragraphs;
        my $num_pars = $pars->Count;
        for my $par_idx (1 .. $num_pars) {
            my $par = $pars->Paragraphs($par_idx,1);
            print_par( $par );
        }
    }

    print "=== End Slide $slide_idx ===\n\n";
}

sub print_par {
    my ($par) = @_;
    my @bullets = qw( - * > + = @ );

    my $bullet_format = $par->ParagraphFormat->Bullet;
    my $bullet_type = $bullet_format->Type;

    my $bullet_char = '';

    if ($bullet_type == ppBulletNumbered) {
        $bullet_char = $bullet_format->Number . "\t";
    }
    elsif( $bullet_type == ppBulletUnnumbered ) {
        # Need a Unicode => ASCII mapping if you want to use
        # $bullet_format->Character
        my $indent = $par->IndentLevel % scalar @bullets;
        $bullet_char = $bullets[$indent] . "\t";
    }

    my $text = $par->Text;
    $text =~ s/\s+$//;

    print $bullet_char, $text,"\n";
}

sub get_ppt {
    my $app;
    eval {
        $app = Win32::OLE->GetActiveObject('PowerPoint.Application');
    };

    die "$@\n" if $@;

    unless($app) {
        $app = Win32::OLE->new(
            'PowerPoint.Application', sub { $_[0]->Quit }
        ) or die "Oops, cannot start PowerPoint: ",
                 Win32::OLE->LastError, "\n";
    }
    return $app;
}

نصائح أخرى

يمكن القيام بذلك باستخدام لغة بيرل.تقريبًا أي شيء يمكنك القيام به باستخدام VBA يمكن القيام به باستخدام Perl عبر Win32::OLE.لقد استخدمت وحدة Win32::OLE للعمل مع مستندات MS-Office، سواء في استخراج المحتوى أو إنشائه.لقد مرت بعض الوقت بالرغم من ذلك.أبدأ هنا، http://win32.perl.org/wiki/index.php?title=Win32_Perl_Modules حول منتصف الصفحة.

تعد وثائق VBA الخاصة بكل كائن مفيدة كمرجع، والعثور على الكائنات الموجودة والطرق والخصائص المتاحة عليها.

Puh...ستواجه صعوبة في التعامل مع ملفات MS Office باستخدام لغة Perl أو PHP أو Java.عندما اضطررت إلى إجراء أتمتة لملفات MS Office، كنت أستخدم VBA (Visual Basic for Applications) في أغلب الأحيان.نلقي نظرة على ذلك.بالنسبة للكثير من الأشياء، يمكنك فقط تسجيل ماكرو وإلقاء نظرة على التعليمات البرمجية المنتجة ومعرفة كيفية الرجوع إلى الأشياء.ثم خذ أجزاء من التعليمات البرمجية التي تم إنشاؤها وقم بإنشاء وحدات وأدوات VBA الخاصة بك.أستطيع أن أتخيل أن مثل هذه الوظيفة يمكن أن تكون مناسبة تمامًا كوظيفة إضافية لبرنامج Power Point.

هل Visual Basic للتطبيقات غير متوفر لك؟يجب أن يكون ذلك مدمجًا في Office، وبما أنك ستنتقل من مكتب إلى مكتب، فقد يكون الأمر أسهل.

يمكنك استخدام تطبيق العرض التقديمي الخاص بـ OpenOffice.org (Impress) لاستيراد ملف Powerpoint.يمكنك بعد ذلك تصديره بتنسيق OpenOffice.org الأصلي، وهو XML.يجب أن تكون قادرًا بعد ذلك على تحليل ملف XML للنص العادي باللغة التي تختارها.

كما أشار أشخاص آخرون، إذا كنت تريد العمل باستخدام تنسيق Powerpoint مباشرةً، فأنت تحتاج حقًا إلى استخدام لغة Microsoft (VB، VBA، C#، وما إلى ذلك).

أعتقد أنك قد ترغب في البحث في البرامج التي تقوم بالتحويل من PPT إلى ملف CSV ربما مع وجود PDF في المنتصف؟بمجرد أن تكون البيانات بتنسيق CSV، قد تتمكن من معالجتها عن طريق php/Perl بسهولة أكبر.

سيستغرق القيام بذلك من البداية وقتًا طويلاً نظرًا لأن تنسيقات مستندات Office معقدة للغاية بشكل عام.

إذا كان لديك Zend Framework متاحًا، فيمكن أن يساعدك بشكل كبير. انظر هناللتوثيق المفيد. انظر هنا للكتابة على ملفات الاكسل

وهذا يشبه إلى حد كبير ما أقوم به في العمل، على الرغم من أنني أعمل في الغالب في Excel وWord.أفضل رهان لك هو استخدام VBA في PowerPoint للنظر إلى كل صفحة والعثور على الرموز النقطية.ثم اكتب إلى ملف بتنسيق CSV، كل رمز نقطي على سطر مختلف، والذي سيتم فتحه في برنامج Excel، كل رمز نقطي في صف خاص به.

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

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