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 加载项对象,即 tcPpAddIn
或 tcXlAddIn
,具体取决于您是在 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 元素,这些元素由其在模板中分配的名称指定。另请参阅 24. 自动化简介 了解如何准备模板。
PresentationFromTemplate
使用链接的 Excel 工作簿的数据将演示文稿模板实例化。另请参阅 21. 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
设置成 false
或 true
,以分别表示使用默认或转置版本。对于图表之外的元素,例如表格,会忽略 bTransposed
值。
target
必须为 Presentation
或 SlideRange
,或单一的 Slide
、Master
或 CustomLayout
。
名称 strName
的匹配不区分大小写。先前必须已经按照中所述在 PowerPoint 中使用 UpdateChart 名称24. 自动化简介 属性控件分配该名称。
为了确保针对了正确的元素,请确保在作为 pres
传递的对象中将它们的 UpdateChart 名称 设置为 strName
。
若已将目标元素链接到 Excel 数据范围,则调用此函数时,链接将中断。此后,不会将元素链接到任何 Excel 范围。
F.2.1.1.3 示例
若要使用这些示例,请根据 24. 自动化简介 中的描述准备演示文稿,并将其保存为 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=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#
若要使用此模板,请用它更换 C# 控制台应用程序 项目模板的 Program.cs
中的代码。
它需要引用 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();
}
}
}
F.2.2 控制样式
本节中的函数可以用来以编程方式加载、检查和删除 think-cell 样式。LoadStyle
会从样式文件中加载样式到母版幻灯片或单个自定义布局中。LoadStyleForRegion
会从样式文件中加载样式到自定义布局的特定区域内。GetStyleName
会返回加载到母版或自定义布局的样式名称。RemoveStyles
会从自定义布局中删除所有样式。
请参阅 创建 think-cell 样式 和 D. 样式文件格式 ,了解更多关于创建和编辑样式的信息。请参阅 加载样式文件 ,了解更多关于加载它们的信息。
本节中的函数为 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
必须为 CustomLayout
或 Master
。
当应用到设置了区域样式的自定义布局时(请参阅 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
中,并将样式限制在由 Left
、Top
、Width
、Height
指定的区域。在幻灯片的其余部分上,加载到母版的样式,或之前使用 LoadStyle
加载到自定义布局的样式适用。
参数 Left
、Top
、Width
、Height
由 PowerPoint 点指定。Left
和 Top
分别指定从自定义布局的左和上边缘到该区域的左和上边缘的距离。通常,您会将其设置为幻灯片总高度和总宽度的分数。例如,对于覆盖自定义布局右侧三分之二的区域,您可以设置
Left = CustomLayout.Width / 3
Top = 0
Width = CustomLayout.Width * 2 / 3
Height = CustomLayout.Height
您也可以手动将形状添加到幻灯片或自定义布局中,以编程方式查询其属性 Left
、Top
、Width
、Height
,并将这些值与 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 描述
此函数返回加载到 CustomLayout
或 Master
的样式名称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 中元素 菜单中的表格 具有相同的效果。