F. API 文档

think-cell 允许您以编程的方式通过 API 控制一些功能。在这里,您可以找到所有可用的 API 函数概述,以及关于如何设置您的开发环境的一般说明,以便编写能访问开发环境的宏、加载项或独立程序。

F.1
入门
F.2
API 引用

F.1 入门

think-cell 的 API 已集成到 Office Automation 模型中,因此可以通过能对 Office 编程的任何语言(例如 Visual Basic for Applications (VBA) 或 C#)进行访问。

think-cell 的入口点是 think-cell 加载项对象。可以通过 Application.COMAddIns 集合对其进行访问。调用 think-cell 始终采用后期绑定,因此没有要添加的类型库或引用。如需说明,请参阅 Microsoft 的知识库:

在自动化中使用初期绑定和后期绑定

一些 API 函数是 think-cell 加载项对象在 PowerPoint 中的方法,一些则是 think-cell 加载项对象在 Excel 中的方法。我们将使用 tcPpAddIn 作为对 PowerPoint 加载项的引用,并使用 tcXlAddIn 作为对 Excel 加载项的引用。

F.1.1 Visual Basic for Applications

若要使用 Visual Basic for Applications (VBA) 编写宏,您可以使用集成到 Office 主机应用程序的开发环境。可以按 Alt+F11 进行访问。宏的定义通常包含在一个模块中,您可以通过插入模块进行添加。您可以按 Alt+F8 查看为给定文件定义的所有宏。

若要指出调用 think-cell 加载项的方法为后期绑定,您需要将包含对其引用的变量宣布为 Object

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

默认情况下,始终引用 Office 主机应用程序的类型库。如果您需要访问另一个 Office 应用程序的对象模型,您需要将其类型库添加为引用。

例如,如果您使用宏在 PowerPoint 中修改 Excel 表格内的数据,之后再从表格中更新 think-cell 图表,您需要通过 VBA 开发环境的工具引用对话框手动添加 Microsoft Excel 16.0 Object Library

注释:16.0 是 Office 2016 和更新版本的版本号。对于 Office 2010 或 2013,您分别需要使用 14.0 或 15.0 对象库。如果您安装了多个版本的 Office,引用对话框将会只显示安装的最新版本的对象库。在以下内容中,我们将假设您使用的是 Office 2016 或更新版本。

使用 Application.COMAddIns("thinkcell.addin").Object 始终能让您获得当前 Office 主机应用程序的 think-cell 加载项对象,即 tcPpAddIntcXlAddIn,具体取决于您是在 PowerPoint 或 Excel 中使用。若要获取其他 Office 应用程序中的加载项对象引用,并访问其所揭示的 API 函数,请通过适当的应用程序实例获取它。

例如,从 PowerPoint 获取 tcXlAddIn 的引用:

Dim xlapp As Object
Set xlapp = New Excel.Application

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

请注意,这需要将 Excel 对象库添加为引用。

我们建议使用强制显式说明所有变量的 Option Explicit 陈述,从而帮助避免常见的编程错误,并改进 IntelliSense 提供的建议。您可以通过激活工具选项代码设置需要变量声明,将其自动添加到所有模块中。它包含在我们的所有代码示例中。

F.1.2 C#

在开发 Office 主机应用程序内运行的加载项和文件代码扩展时,以及在部署独立应用程序时,您都可以使用 C# 的 think-cell API。

我们将在以下部分中假设,您在使用 Visual Studio 2017 或更新版本来在 C# 中开发 Office 解决方案。请参阅下一节,了解关于加载项开发的具体设置说明的更多信息。我们将在每个代码示例中指出要使用哪个 Visual Studio 项目模板。

若要使调用 think-cell 加载项对象的方法为后期绑定,请宣布包含 think-cell 加载项对象的引用为 dynamic;这也是在宣布引用为 var 时编译程序推断的类型,这样您只需编写即可:

var tcPpAddIn = ppapp.COMAddIns.Item("thinkcell.addin").Object;

在这里,ppapp 是加载了 think-cell 的 PowerPoint Application 对象的引用。

若要访问 Office 应用程序的对象模型,您需要将其类型库或其主互操作程序集 (PIA) 添加为您的项目的引用。如有可能,我们建议添加类型库,因为如果有可用的 PIA,Visual Studio 会自动添加对应 PIA 的引用,或如果没有可用 PIA,Visual Studio 会从类型库生成互操作程序集(参阅此处)。

例如,为了能够获得上述 think-cell 加载项对象的引用,您要添加引用管理器对话框的 COM类型库选项卡中发现的 Microsoft PowerPoint 16.0 对象库。根据您的项目类型,可以通过右击解决方案资源管理器中的引用依赖项,并选择添加 (COM) 引用来访问此对话框。

注释:16.0 是 Office 2016 和更新版本的版本号。通过使用嵌入互操作类型选项(该选项默认启用)以引用 COM 类型库,只要所使用的接口存在于其对象模型中,则使用该引用进行编译的应用程序将向后(和向前)兼容 Office 的其他版本。如需更多信息,请参阅此处

think-cell 的 API 函数使用 COM HRESULT 指示错误。其中一些会自动映射到对应的 .NET 异常类上,请参阅如何:映射 HRESULT 和异常

F.1.2.1 加载项开发

若要开发 Office 加载项,或 Office 文件代码扩展,您可以使用 PowerPoint/Excel VSTO 加载项Excel VSTO 模板/工作簿项目模板。这些是作为默认配置的一部分而安装的 Office Visual Studio 开发者工具的一部分。如果这些工具和模板在您的 Visual Studio 安装中不可用,您可以通过以下方式添加它们,例如前往设置应用程序Visual Studio 2022修改其他工具集,勾选 Office/SharePoint 开发并点击修改。另请在此处此处参阅 Microsoft 文档。

选定模板的 Office 主机应用程序的 PIA 始终默认加载。如果您需要访问另一个 Office 应用程序的对象模型,您需要按照上面的说明将其类型库添加为引用。

注释:think-cell 的 API 无法从 Office Web 加载项使用 – 遗憾的是,Microsoft 现在简单地将其称为“Office 加载项”– 因为它们无法与 Office 应用程序的对象模型直接进行互动,尤其是无法与 think-cell 等 COM 加载项进行互动。

F.2 API 引用

F.2.1
使用 Excel 数据更新元素和演示文稿模板
F.2.2
控制样式
F.2.3
导入 Mekko Graphics 图表
F.2.4
杂项

F.2.1 使用 Excel 数据更新元素和演示文稿模板

本节中的函数可以用来以编程的方式,使用 Excel 数据更新 think-cell 元素,通常为演示文稿模板中的占位符。UpdateChart 使用作为参数传递的 Excel 范围内的数据更新 think-cell 元素,这些元素由其在模板中分配的名称指定。另请参阅 自动化简介 了解如何准备模板。

PresentationFromTemplate 使用链接的 Excel 工作簿的数据将演示文稿模板实例化。另请参阅 Excel 数据链接 了解如何创建 Excel 链接。

本节中的函数为 Excel 中 think-cell 加载项的方法。

F.2.1.1 UpdateChart

F.2.1.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
);
F.2.1.1.2 描述

此函数会使用 rgData 中包含的数据,更新 target 中所有名称为 strName 的元素。为了正确地解读图表中的数据,范围 rgData 必须符合其默认数据表布局,或其转置版本,另请参阅 从 Excel 创建图表适合数据布局。通过将 bTransposed 设置成 falsetrue,以分别表示使用默认或转置版本。对于图表之外的元素,例如表格,会忽略 bTransposed 值。

target 必须为 PresentationSlideRange,或单一的 SlideMasterCustomLayout

名称 strName 的匹配不区分大小写。先前必须已经按照中所述在 PowerPoint 中使用 UpdateChart 名称自动化简介属性控件分配该名称。

为了确保针对了正确的元素,请确保在作为 pres 传递的对象中将它们的 UpdateChart 名称设置为 strName

若已将目标元素链接到 Excel 数据范围,则调用此函数时,链接将中断。此后,不会将元素链接到任何 Excel 范围。

F.2.1.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#

若要使用此模板,请用它更换 C# 控制台应用程序项目模板的 Program.cs 中的代码。

它需要引用 Microsoft PowerPoint 16.0 对象库Microsoft Excel 16.0 对象库Microsoft Office 16.0 对象库(请参阅 C# 了解详细信息)。

运行生成的应用程序后,将会更新演示文稿模板中的图表,使其包含带有值 1、2 和 3,名为“系列 1”的单一系列,并将结果保存为 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();
        }
    }
}

F.2.1.2 PresentationFromTemplate

F.2.1.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
);
F.2.1.2.2 描述

此函数使用 Excel 工作簿 wb 和文件名为 strTemplate 的模板之间的数据链接,通过使用与它们相链接的范围内的数据来更新链接的元素,从而将该模板实例化。结果是,在 PowerPoint 实例 ppapp 中产生新的演示文稿。

strTemplate 可以是完整路径,也可以是相对路径(随后会将其作为相对于 Excel 工作簿文件 所在位置的相对路径)wb

将更新 strTemplate 中已链接到 Excel 工作簿 wb 的所有元素(不论是否已将其设为自动更新,都是如此)。在生成的演示文稿中,它们的数据链接会被中断,以防止对这些元素进行进一步更改。

strTemplate 中已链接到除 wb 外其他 Excel 工作簿的元素将保持不变,并且仍保持链接状态,因此可以将此函数的结果另存为新模板,然后使用下一个工作簿再次调用此函数,以便更新多个 Excel 工作簿中的链接。

若您希望使用 Excel 链接控制图表段的颜色或表格单元格的格式,可以分别将配色方案设为在顶部使用数据表填充(请参阅 配色方案)或使用数据表…选项(请参阅 设置表格的格式)。同样,若要使用 Excel 链接控制数字格式,请将其设为使用 Excel 格式(请参阅数字格式)。

请确保先设置 Excel 中各单元格的相关格式选项和数字格式,然后再调用 PresentationFromTemplate

F.2.1.2.3 示例

若要使用这些示例,先按照 从 Excel 创建图表 中的说明,创建一个演示文稿,里面包含一个堆积图,该图链接到 Excel 工作簿的第一个表格的范围 G1:K4。在同一个目录中将生成的演示文稿保存为 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=110),使用更新后包含该值的模板中的图表创建新的演示文稿(该值不再链接到工作簿),并在与模板相同的目录中将其保存为 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#

若要使用此模板,请用它更换 C# 控制台应用程序项目模板的 Program.cs 中的代码。

它需要引用 Microsoft PowerPoint 16.0 对象库Microsoft Excel 16.0 对象库Microsoft Office 16.0 对象库(请参阅 C# 了解详细信息)。

运行生成的应用程序显然将会打开 Excel,加载工作簿 data.xlsx,更改单元格 H3 中的值(该值链接到 template.pptx 中包含的图表的第一系列的第一个值,从 i=110),使用更新后包含该值的模板中的图表创建新的演示文稿(该值不再链接到工作簿),并在与模板相同的目录中将其保存为 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();
        }
    }
}

F.2.2 控制样式

本节中的函数可以用来以编程方式加载、检查和删除 think-cell 样式。LoadStyle 会从样式文件中加载样式到母版幻灯片或单个自定义布局中。LoadStyleForRegion 会从样式文件中加载样式到自定义布局的特定区域内。GetStyleName 会返回加载到母版或自定义布局的样式名称。RemoveStyles 会从自定义布局中删除所有样式。

请参阅 创建 think-cell 样式样式文件格式,了解更多关于创建和编辑样式的信息。请参阅 加载样式文件,了解更多关于加载它们的信息。

本节中的函数为 PowerPoint 中 think-cell 加载项的方法。

F.2.2.1 LoadStyle

F.2.2.1.1 签名
VBA
tcPpAddIn.LoadStyle( _ 
    CustomLayoutOrMaster As Object, _ 
    FileName As String 
)
C#
void tcPpAddIn.LoadStyle(
    object CustomLayoutOrMaster,
    string FileName
);
F.2.2.1.2 描述

此函数可将 FileName 的样式文件中包含的样式加载到母板或通过参数 CustomLayoutOrMaster 指定的自定义布局中。

CustomLayoutOrMaster 必须为 CustomLayoutMaster

当应用到设置了区域样式的自定义布局时(请参阅 LoadStyleForRegion),该区域样式将被删除。这意味着您需要加载应使用此函数应用到幻灯片其余部分的样式,之后才能加载限制在某个区域的样式。

在应用到母版时,加载到该区域且无限制的母版中包含的自定义布局的任何样式都将被删除。这意味着您在使用此函数加载应用到特定自定义布局的样式之前,需要将应该用于没有特定样式的自定义布局的样式加载到母版中。

F.2.2.1.3 示例
VBA

若要使用此示例,请将以下代码添加到 PowerPoint 中的模块(请参阅 Visual Basic for Applications 了解详细信息)。

Option Explicit
 
Sub LoadStyle_Sample() 

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

    Dim master As Master
    Set master = Application.ActivePresentation.Designs(1).SlideMaster

    Dim style As String
    style = "C:\some\path\styles\style.xml"

    Call tcPpAddIn.LoadStyle(master, style)
End Sub

F.2.2.2 LoadStyleForRegion

F.2.2.2.1 签名
VBA
tcPpAddIn.LoadStyleForRegion( _ 
    CustomLayout As PowerPoint.CustomLayout, _ 
    FileName As String, _
    Left as Single, _
    Top as Single, _
    Width as Single, _
    Height as Single _
)
C#
void tcPpAddIn.LoadStyleForRegion(
    PowerPoint.CustomLayout CustomLayout,
    string FileName,
    float Left,
    float Top,
    float Width,
    float Height
);
F.2.2.2.2 描述

此函数可将 FileName 中的样式文件加载到自定义布局 CustomLayout 中,并将样式限制在由 LeftTopWidthHeight 指定的区域。在幻灯片的其余部分上,加载到母版的样式,或之前使用 LoadStyle 加载到自定义布局的样式适用。

参数 LeftTopWidthHeight 由 PowerPoint 点指定。LeftTop 分别指定从自定义布局的左和上边缘到该区域的左和上边缘的距离。通常,您会将其设置为幻灯片总高度和总宽度的分数。例如,对于覆盖自定义布局右侧三分之二的区域,您可以设置

Left = CustomLayout.Width / 3
Top = 0
Width = CustomLayout.Width * 2 / 3
Height = CustomLayout.Height

您也可以手动将形状添加到幻灯片或自定义布局中,以编程方式查询其属性 LeftTopWidthHeight,并将这些值与 LoadStyleForRegion 搭配使用,以便将样式限制在该形状所覆盖的区域。

think-cell 支持每个自定义布局最多有两种样式。一种样式使用 LoadStyle 进行设置,涵盖不限制在某区域的所有内容,另一种样式使用 LoadStyleForRegion 进行设置。

F.2.2.2.3 示例
VBA

若要使用此示例,请将以下代码添加到 PowerPoint 中的模块(请参阅 Visual Basic for Applications 了解详细信息)。

Option Explicit
 
Sub LoadStyleForRegion_Sample() 

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

    Dim layout As CustomLayout
    Set layout = Application.ActivePresentation.Designs(1).SlideMaster.CustomLayouts(2)

    ' Define a region covering the left half of the custom layout
    Dim left, top, width, height As Single
    left = 0
    top = 0
    width = layout.Width / 2
    height = layout.Height

    Dim style As String
    style = "C:\some\path\styles\style.xml"

    Call tcPpAddIn.LoadStyleForRegion(layout, style, left, top, width, height)
End Sub

F.2.2.3 GetStyleName

在 think-cell 13 和更新版本中受支持。

F.2.2.3.1 签名
VBA
tcPpAddIn.GetStyleName( _ 
    CustomLayoutOrMaster As Object _ 
) As String
C#
string tcPpAddIn.GetStyleName(
    object CustomLayoutOrMaster
);
F.2.2.3.2 描述

此函数返回加载到 CustomLayoutMaster 的样式名称CustomLayoutOrMaster。这是对应的样式文件的 <style> 元素的 name 属性中指定的同一名称(请参阅 样式)。

当没有样式加载到 CustomLayoutOrMaster 时,它会返回空字符串。注意,当 think-cell 处于活动状态时,母版始终有加载样式,且样式名称不能为空。

如果为 CustomLayout 返回了名称,则它是用 LoadStyle 加载的样式名称,不是用 LoadStyleForRegion 加载的样式名称(若有)。

F.2.2.3.3 示例
VBA

若要使用此示例,请将以下代码添加到 PowerPoint 中的模块(请参阅 Visual Basic for Applications 了解详细信息)。

Option Explicit

Sub GetStyleName_Sample()

    ' Get the think-cell add-in object 
    Dim tcPpAddIn As Object
    Set tcPpAddIn = Application.COMAddIns("thinkcell.addin").Object
    
    ' Get the Master of the first slide of the current presentation
    Dim master As Master
    Set master = Application.ActivePresentation.Slides(1).Master
    
    ' Print the name of the style loaded to the debug console
    Dim name As String
    name = tcPpAddIn.GetStyleName(master)
    Debug.Print name
End Sub

F.2.2.4 RemoveStyles

F.2.2.4.1 签名
VBA
tcPpAddIn.RemoveStyles( _ 
    CustomLayout As PowerPoint.CustomLayout _ 
)
C#
void tcPpAddIn.RemoveStyles(
    PowerPoint.CustomLayout CustomLayout
);
F.2.2.4.2 描述

此函数可删除自定义布局 CustomLayout 中的所有样式。然后将应用加载到母板中的样式。可能存在以下情况:已将一个样式加载到自定义布局,而将另一个样式限制在自定义布局的特定区域。由于 RemoveStyles 会删除所有样式,因此这两种样式都会遭删除。无法删除加载到母板中的样式,因为始终需要存在与母板关联的有效样式。可以使用其他样式文件将其覆盖。

F.2.2.4.3 示例
VBA

若要使用此示例,请将以下代码添加到 PowerPoint 中的模块(请参阅 Visual Basic for Applications 了解详细信息)。

Option Explicit
 
Sub RemoveStyles_Sample() 

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

    Dim layout As CustomLayout
    Set layout = Application.ActivePresentation.Designs(1).SlideMaster.CustomLayouts(2)

    Call tcPpAddIn.RemoveStyles(layout)
End Sub

F.2.3 导入 Mekko Graphics 图表

本节中的函数可以用来以编程方式导入和检查用 Mekko Graphics 在 think-cell 中创建的图表。ImportMekkoGraphicsCharts 会以同等 think-cell 图表取代 Mekko Graphics 图表。GetMekkoGraphicsXML 会提取 Mekko Graphics 图表的 XML 定义。

本节中的函数为 PowerPoint 中 think-cell 加载项的方法。

F.2.3.1 ImportMekkoGraphicsCharts

在 think-cell 13 和更新版本中受支持。

F.2.3.1.1 签名
VBA
tcPpAddIn.ImportMekkoGraphicsCharts ( _
    ashp As PowerPoint.Shape() _
) As PowerPoint.Slide
C#
PowerPoint.Slide tcPpAddIn.ImportMekkoGraphicsCharts(
    PowerPoint.Shape[] ashp
);
F.2.3.1.2 描述

此函数取代在 Shape 阵列中以同等 think-cell 图表传递给它的所有 Mekko Graphics 图表。所有形状必须位于同一张幻灯片上。在修改幻灯片之前,此函数将复制一份未修改的幻灯片,并将其直接插入到修改后版本的后面。

如果创建了副本,则此函数会返回此副本的引用。

例如,如果演示文稿未被修改,它会返回 Nothing/null,因为阵列不含任何 Mekko Graphics 图表。

F.2.3.1.3 示例
VBA

若要使用此示例,请将其添加到 PowerPoint 中的模块(请参阅 Visual Basic for Applications 了解详细信息)。

在演示文稿上运行 ImportAll 后,将会查阅演示文稿中的幻灯片,并以同等 think-cell 图表取代所有可见 Mekko Graphics 图表,在对其进行修改前复制一份每张包含一个图表的幻灯片。

Option Explicit

Sub ImportAll()

    ' Get reference to think-cell Object

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

    ' Iterate over copy of original Slides to avoid
    ' iterating over copies inserted by ImportMekkoGraphicsCharts again

    Dim SlidesCopy As New Collection
    Dim Slide As PowerPoint.Slide
    For Each Slide In ActivePresentation.Slides
        SlidesCopy.Add Slide
    Next Slide
    
    For Each Slide In SlidesCopy
    
        ' Construct Array containing only visible shapes on slide
        
        Dim visibleShapes() As PowerPoint.Shape
        ReDim visibleShapes(1 To Slide.Shapes.Count)
        Dim shapeIndex As Long
        For shapeIndex = 1 To Slide.Shapes.Count
            If Slide.Shapes(shapeIndex).Visible Then
                Set visibleShapes(shapeIndex) = Slide.Shapes(shapeIndex)
            End If
        Next shapeIndex
        
        ' Pass Array to ImportMekkoGraphics and store return value
        
        Dim CopySlide As PowerPoint.Slide
        Set CopySlide = tcPpAddIn.ImportMekkoGraphicsCharts(visibleShapes)
        
        ' If Slide was modified...
        If Not CopySlide Is Nothing Then
        ' ... do things with copy of unmodified slide
        End If
    Next Slide
End Sub
C#

若要使用此示例,请将此方法添加到 C# PowerPoint VSTO 加载项项目模板的 ThisAddIn 类别(请参阅 C# 加载项开发 了解详细信息)。

private void ImportAll(PowerPoint.Presentation presentation)
    {
        var tcPpAddIn = presentation.Application.COMAddIns.Item("thinkcell.addin").Object;
        foreach (PowerPoint.Slide slide in presentation.Slides.Cast<PowerPoint.Slide>().ToList())
        {
            PowerPoint.Slide slideCopy = tcPpAddIn.ImportMekkoGraphicsCharts(
                slide.Shapes.Cast<PowerPoint.Shape>().ToArray()
            );
        }
    }

添加以下行到 ThisAddIn_Startup 方法,以便在每个打开的演示文稿上运行 ImportAll

Application.PresentationOpen += new PowerPoint.EApplication_PresentationOpenEventHandler(ImportAll);

F.2.3.2 GetMekkoGraphicsXML

在 think-cell 13 和更新版本中受支持。

F.2.3.2.1 签名
VBA
tcPpAddIn.GetMekkoGraphicsXML ( _
    shp As PowerPoint.Shape _
) As String
C#
string tcPpAddIn.GetMekkoGraphicsXML(
    PowerPoint.Shape shp
);
F.2.3.2.2 描述

此函数将 shp 中 Mekko Graphics 图表的 XML 作为字符串返回。它不会修改传递给它的形状。

如果 shp 不是 Mekko Graphics 图表,则会产生 E_INVALIDARG (0x80070057) 错误。

F.2.3.2.3 示例
VBA

若要使用此示例,请将以下代码添加到 PowerPoint 中的模块(请参阅 Visual Basic for Applications 了解详细信息)。

Option Explicit

Sub GetMekkoGraphicsXMLOfAllShapes()

    ' Get reference to think-cell Object

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

    ' Go through the slides in the presentation and
    ' output the XML of each Mekko Graphics chart on the slide
    ' to the debug console

    Dim slide As PowerPoint.slide
    For Each slide In Application.ActivePresentation.Slides
        Dim shape As PowerPoint.shape
        For Each shape In slide.Shapes
            Debug.Print tcPpAddIn.GetMekkoGraphicsXML(shape)
        Next shape
    Next slide
End Sub
C#

若要使用此示例,用它取代控制台应用程序Program.cs 中的代码。

它需要引用 Microsoft PowerPoint 16.0 对象库Microsoft Office 16.0 对象库(请参阅 C# 了解详细信息)。

运行应用程序后,将会查阅 C:\Samples\GetMekkoGraphicsXML\presentation.pptx 中的演示文稿,并将其中包含的 Mekko Graphics 图表的 XML 打印到控制台。

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

namespace Sample
{
    class Program
    {
        static void Main()
        {
            var ppapp = new PowerPoint.Application();
            var presentation = ppapp.Presentations.Open(
                "C:\\Samples\\GetMekkoGraphicsXML\\presentation.pptx",
                /*ReadOnly*/Office.MsoTriState.msoTrue,
                /*Untitled*/Office.MsoTriState.msoTrue,
                /*WithWindow*/Office.MsoTriState.msoFalse
            );

            var tcPpAddIn = ppapp.COMAddIns.Item("thinkcell.addin").Object;
            foreach (PowerPoint.Slide slide in presentation.Slides)
            {
                foreach (PowerPoint.Shape shape in slide.Shapes)
                {
                    string xml = tcPpAddIn.GetMekkoGraphicsXML(shape);
                    Console.WriteLine(xml);
                }
            }

            presentation.Close();
            ppapp.Quit();
        }
    }
}

F.2.4 杂项

本节中的函数为 PowerPoint 中 think-cell 加载项的方法。

F.2.4.1 StartTableInsertion

在 think-cell 13 和更新版本中受支持。

F.2.4.1.1 签名
VBA
tcPpAddIn.StartTableInsertion()
C#
void tcPpAddIn.StartTableInsertion();
F.2.4.1.2 描述

调用此方法跟点击 PowerPoint 中元素菜单中的表格具有相同的效果。

分享