25. التنفيذ التلقائي مع بيانات Excel

عندما تكون البيانات متوفرة في Excel، يمكنك استخدام الوظيفتين UpdateChart وPresentationFromTemplate للتحكم برمجيًا باستخدام هذه البيانات.

باستخدام UpdateChart، يمكنك استبدال ورقة بيانات عنصر معين ببيانات Excel الخاصة بك. باستخدام PresentationFromTemplate، يمكنك استخدام بياناتك لإنشاء عرض تقديمي جديد يستند إلى قالب PowerPoint يحتوي على عناصر think-cell مرتبطة بنطاقات بيانات في Excel على النحو الموضح في ارتباطات بيانات Excel.

واجهة كلتا الوظيفتين مدمجة في نموذج التنفيذ التلقائي لتطبيقات Office، بحيث يمكن الوصول إليها من أي لغة تستخدمها لبرمجة Office، مثل Visual Basic for Applications (VBA) أو C#. راجع بدء الاستخدام للحصول على إرشادات تفصيلية.

نقطة الدخول إلى think-cell هي كائن الوظيفة الإضافية think-cell. يمكن الوصول إليه عبر المجموعة Application.COMAddIns. دائمًا ما تكون عمليات الاستدعاء في think-cell متأخرة الربط. راجع قاعدة معارف Microsoft للحصول على توضيح:

استخدام الربط المبكر والربط المتأخر في التنفيذ التلقائي

لذلك، يكون نوع كائن الوظيفة الإضافية think-cell هو Object ببساطة، ولا توجد مكتبة نوع أو مرجع للإضافة. ما عليك سوى الحصول على الكائن، وستكون جاهزًا لإجراء استدعاءات. على سبيل المثال، في لغة البرمجة VBA في Excel:

Dim tcXlAddIn As Object 
Set tcXlAddIn = Application.COMAddIns("thinkcell.addin").Object

في لغة C#، يمكنك تحقيق الربط المتأخر من خلال توضيح المرجع لكائن الوظيفة الإضافية think-cell بمثابة dynamic؛ هذا هو أيضًا النوع الذي يستنتجه برنامج التحويل البرمجي عند توضيح المرجع بمثابة var، حتى تستطيع بسهولة كتابة:

var tcXlAddIn = xlapp.COMAddIns.Item("thinkcell.addin").Object;

هنا xlapp هو مرجع لكائن Excel.Application يتم تحميل think-cell بداخله.

25.1
UpdateChart
25.2
PresentationFromTemplate

25.1 UpdateChart

25.1.1 التوقيع

VBA
tcXlAddIn.UpdateChart( _ 
    target As Object, _ 
    strName As String, _ 
    rgData As Excel.Range, _ 
    bTransposed As Boolean _ 
)
C#
void tcXlAddIn.UpdateChart(
    object target,
    string strName,
    Excel.Range rgData,
    bool bTransposed
);

25.1.2 الوصف

تقوم هذه الوظيفة بتحديث كل العناصر في target التي تحمل الاسم strName بالبيانات الواردة في rgData. لكي يتم تفسير البيانات بصورة صحيحة للمخططات، يجب أن يكون النطاق rgData مطابقًا لتخطيط ورقة البيانات الافتراضي، أو الإصدار المبدّل، انظر أيضًا إنشاء مخطط من Excel وإدخال تخطيط البيانات. يتم تحديد استخدام الإصدار الافتراضي أو المبدّل بواسطة تعيين bTransposed على false أو trueعلى التوالي. للعناصر الأخرى بخلاف المخططات، مثل الجداول، يتم تجاهل قيمة bTransposed.

target يجب أن يكون Presentation، أو SlideRange، أو Slide مفرد، أو Master، أو CustomLayout.

تتم مطابقة الاسم strName دون حساسية لحالة الأحرف. يجب أن يكون قد تم تعيينه مسبقًا في PowerPoint باستخدام عنصر تحكم الخاصية اسم UpdateChart على النحو الموضح في مقدمة عن التنفيذ التلقائي.

لضمان استهداف العناصر الصحيحة، تأكد من أنها العناصر الوحيدة التي تم تعيين اسم UpdateChart لها على strName في الكائن المنقول بمثابة pres.

إذا كان العنصر المستهدف مرتبطًا بأي نطاق بيانات Excel عند استدعاء هذه الوظيفة، يتم قطع الارتباط. بعد ذلك، لن يتم ربط العنصر بأي نطاق Excel.

25.1.3 أمثلة

لاستخدام هذه النماذج، قم بإعداد عرض تقديمي على النحو الموضح في مقدمة عن التنفيذ التلقائي، واحفظه بمثابة C:\Samples\UpdateChart\template.pptx.

VBA

لاستخدام هذا النموذج، قم بإضافته إلى وحدة نمطية في مصنف Excel.

وهو يتطلب مرجع لمكتبة كائنات Microsoft PowerPoint 16.0 (انظر Visual Basic for Applications لمعرفة التفاصيل).

سيؤدي تشغيل UpdateChart_Sample في مصنف إلى تحديث المخطط في قالب العرض التقديمي بالبيانات الموجودة في النطاق A1:D5 بأول ورقة منه.

Option Explicit 
 
Sub UpdateChart_Sample() 

    ' Get the range containing the new data 
    Dim rng As Excel.Range 
    Set rng = ActiveWorkbook.Sheets(1).Range("A1:D5") 

    ' Get the think-cell add-in object 
    Dim tcXlAddIn As Object 
    Set tcXlAddIn = Application.COMAddIns("thinkcell.addin").Object 

    ' Get a PowerPoint instance. Hold on to this 
    ' object as long as you want to access the 
    ' generated presentations. There can only be a 
    ' single PowerPoint instance. If there is no 
    ' PowerPoint running, one will be started. 
    ' Otherwise the existing one is used.

    Dim ppapp As Object 
    Set ppapp = New PowerPoint.Application 

    Dim pres As PowerPoint.Presentation 

    ' PowerPoint window visible 
    ' Set pres = ppapp.Presentations.Open( _ 
    '  Filename:="C:\\Samples\\UpdateChart\\template.pptx", _
    '  Untitled:=msoTrue) 

    ' PowerPoint window invisible 

    Set pres = ppapp.Presentations.Open( _
    Filename:="C:\\Samples\\UpdateChart\\template.pptx", _
    Untitled:=msoTrue, _
    WithWindow:=msoFalse)

    Call tcXlAddIn.UpdateChart(pres, "Chart1", rng, False) 

    ' Save the updated presentation 
    pres.SaveAs ("C:\\Samples\\UpdateChart\\template_updated.pptx") 
    pres.Close 

    ppapp.Quit 
End Sub

C#

لاستخدام هذا النموذج، استبدل التعليمة البرمجية في Program.cs ضمن قالب المشروع تطبيق وحدة التحكم بلغة C# به.

وهو يتطلب مراجع لمكتبة كائنات Microsoft PowerPoint 16.0، ومكتبة كائنات Microsoft Excel 16.0، ومكتبة كائنات Microsoft Office 16.0 (انظر C# لمعرفة التفاصيل).

سيؤدي تشغيل التطبيق الناتج إلى تحديث المخطط في قالب العرض التقديمي لكي يحتوي على سلسلة فردية باسم "السلسلة 1" تحمل القيم 1، و2، و3 وحفظ النتيجة بمثابة template_updated.pptx.

using Excel = Microsoft.Office.Interop.Excel;
using PowerPoint = Microsoft.Office.Interop.PowerPoint;
using Office = Microsoft.Office.Core;

namespace ConsoleApplication_UpdateChart
{
    class Program
    {
        static void Main()
        {
            Excel.Application xlapp = new Excel.Application { Visible = true };

            Excel.Workbook workbook = xlapp.Workbooks.Add(1);
            Excel.Worksheet worksheet = (Excel.Worksheet)workbook.Sheets[1];
            worksheet.Cells[3, 1] = "Series 1";
            worksheet.Cells[3, 2] = 1;
            worksheet.Cells[3, 3] = 2;
            worksheet.Cells[3, 4] = 3;

            PowerPoint.Application ppapp = new PowerPoint.Application();
            PowerPoint.Presentation presentation = ppapp.Presentations.Open(
                    "C:\\Samples\\UpdateChart\\template.pptx",
                    Office.MsoTriState.msoFalse,
                    Office.MsoTriState.msoTrue
            );

            var tcXlAddIn = xlapp.COMAddIns.Item("thinkcell.addin").Object;
            tcXlAddIn.UpdateChart(
                presentation,
                "Chart1",
                worksheet.get_Range("A1", "D3"),
                false
            );

            presentation.SaveAs("C:\\Samples\\UpdateChart\\template_updated.pptx");
            presentation.Close();
            ppapp.Quit();

            workbook.Close(false);
            xlapp.Quit();
        }
    }
}

25.2 PresentationFromTemplate

25.2.1 التوقيع

VBA
tcXlAddIn.PresentationFromTemplate( _ 
    wb As Excel.Workbook, _ 
    strTemplate As String, _ 
    ppapp As PowerPoint.Application _ 
) As PowerPoint.Presentation
C#
PowerPoint.Presentation tcXlAddIn.PresentationFromTemplate(
    Excel.Workbook wb,
    string strTemplate,
    PowerPoint.Application ppapp
);

25.2.2 الوصف

تستخدم هذه الوظيفة ارتباطات البيانات بين مصنف Excel wb والقالب الذي يحمل اسم الملف strTemplate لإنشاء مثيل لذلك القالب من خلال تحديث العناصر المرتبطة باستخدام البيانات المستمدة من النطاقات المرتبطة بها. تكون النتيجة عرضًا تقديميًا جديدًا داخل مثيل PowerPoint ppapp.

strTemplate قد يكون مسارًا كاملاً أو مسارًا نسبيًا يتم التعامل معه بعد ذلك باعتباره نسبيًا إلى موقع ملف مصنف Excel wb.

يتم تحديث كل العناصر الموجودة في strTemplate والمرتبطة بمصنف Excel wb (بصرف النظر عما إذا كان قد تم تعيينها على التحديث التلقائي أم لا). في العرض التقديمي الناتج، يتم قطع ارتباطات البيانات الخاصة بها لمنع إجراء تغييرات إضافية بهذه العناصر.

يتم ترك العناصر الموجودة في strTemplate والمرتبطة بمصنفات Excel أخرى بخلاف wb دون تغيير وتظل مرتبطة، لذلك يمكن تحديث الارتباطات من مصنفات Excel متعددة من خلال حفظ نتيجة هذه الوظيفة كقالب جديد ثم استدعاء هذه الوظيفة مرة أخرى مع المصنف التالي.

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

تأكد من تعيين خيارات التنسيق ذات الصلة وتنسيق الأرقام للخلايا المعنية في Excel قبل استدعاء PresentationFromTemplate.

25.2.3 أمثلة

لاستخدام هذه النماذج، قم أولاً بإنشاء عرض تقديمي يحتوي على مخطط مكدس مرتبط بالنطاق G1:K4 بأول ورقة في مصنف Excel على النحو الموضح في إنشاء مخطط من Excel. احفظ العرض التقديمي الناتج بمثابة C:\Samples\PresentationFromTemplate\template.pptx والمصنف بمثابة data.xlsx في نفس الدليل.

VBA

لاستخدام هذا النموذج، قم بإضافته إلى وحدة نمطية في مصنف Excel data.xlsx الذي تم إعداده على النحو الموضح أعلاه.

وهو يتطلب مرجع لمكتبة كائنات Microsoft PowerPoint 16.0 (انظر Visual Basic for Applications لمعرفة التفاصيل).

سيؤدي تشغيل PresentationFromTemplate_Sample إلى تغيير القيمة في الخلية Sheet1!H3 المرتبطة بالقيمة الأولى في السلسلة الأولى من المخطط الموجود في template.pptx من i=1 إلى 10، وإنشاء عرض تقديمي جديد مع تحديث المخطط الموجود في القالب لكي يحتوي على تلك القيمة، والتي لم تعد مرتبطة بالمصنف، وحفظه بمثابة output_i.pptx في نفس الدليل الخاص بالقالب.

Option Explicit

Sub PresentationFromTemplate_Sample()
    ' Get the range to modify. It is more efficient
    ' to do this once rather than within the loop.
    Dim rng As Excel.Range
    Set rng = ActiveWorkbook.Sheets(1).Cells(3, 8)

    ' Get the think-cell add-in object
    Dim tcXlAddIn As Object
    Set tcXlAddIn = Application.COMAddIns("thinkcell.addin").Object

    ' Get a PowerPoint instance. Hold on to this
    ' object as long as you want to access the
    ' generated presentations. There can only be a
    ' single PowerPoint instance. If there is no
    ' PowerPoint running, one will be started.
    ' Otherwise the existing one is used.
    Dim ppapp As Object
    Set ppapp = New PowerPoint.Application

    Dim i As Integer
    For i = 1 To 10
        ' Modify the range value.
        ' Note: Avoid selecting the cell prior to
        ' changing it. It is very slow and has
        ' undesirable side-effects.
        ' BAD:
        ' rng.Select
        ' ActiveWindow.Selection.Value = 0
        ' GOOD:
        rng.Value = i

        ' Generate a new presentation based on the
        ' linked template.
        Dim pres As PowerPoint.Presentation
        Set pres = tcXlAddIn.PresentationFromTemplate( _
            Excel.ActiveWorkbook, "template.pptx", ppapp _
        )

        ' If you want to modify the new presentation
        ' before saving it this is the place to do it.
        
        ' Save the new presentation
        pres.SaveAs "C:\Samples\PresentationFromTemplate\output_" & i & ".pptx"
        
        ' Explicitly close the presentation when we
        ' are done with it to free its memory.
        ' Letting the object go out of scope is not
        ' sufficient.
        pres.Close
    Next
End Sub

C#

لاستخدام هذا النموذج، استبدل التعليمة البرمجية في Program.cs ضمن قالب المشروع تطبيق وحدة التحكم بلغة C# به.

وهو يتطلب مراجع لمكتبة كائنات Microsoft PowerPoint 16.0، ومكتبة كائنات Microsoft Excel 16.0، ومكتبة كائنات Microsoft Office 16.0 (انظر C# لمعرفة التفاصيل).

سيؤدي تشغيل التطبيق الناتج إلى فتح تطبيق Excel أمامك، وتحميل المصنف data.xlsx، وتغيير القيمة في الخلية H3 المرتبطة بالقيمة الأولى في السلسلة الأولى من المخطط الموجود في template.pptx من i=1 إلى 10، وإنشاء عرض تقديمي جديد مع تحديث المخطط الموجود في القالب لكي يحتوي على تلك القيمة، والتي لم تعد مرتبطة بالمصنف، وحفظه بمثابة output_i.pptx في نفس الدليل الخاص بالقالب.

using PowerPoint = Microsoft.Office.Interop.PowerPoint;
using Excel = Microsoft.Office.Interop.Excel;

namespace ConsoleApplication_PresentationFromTemplate
{
    class Program
    {
        static void Main()
        {
            var xlapp = new Excel.Application { Visible = true };
            var tcXlAddIn = xlapp.COMAddIns.Item("thinkcell.addin").Object;
            var workbook = xlapp.Workbooks.Open("C:\\Samples\\PresentationFromTemplate\\data.xlsx");
            var ppapp = new PowerPoint.Application();
            for (var i = 1; i <= 10; ++i)
            {
                workbook.Sheets[1].Cells[3, 8] = i;

                PowerPoint.Presentation presentation = tcXlAddIn.PresentationFromTemplate(
                    workbook,
                    "C:\\Samples\\PresentationFromTemplate\\template.pptx",
                    ppapp
                );

                presentation.SaveAs("C:\\Samples\\PresentationFromTemplate\\output" + i + ".pptx");
                presentation.Close();
            }
            ppapp.Quit();
            workbook.Close(false);
            xlapp.Quit();
        }
    }
}

مشاركة