F. Документация по API

think-cell позволяет программно управлять некоторыми функциями через API. Здесь приводится обзор всех доступных функций API и общие инструкции, как установить свою среду разработки для написания макросов, надстроек или отдельных программ и получать к ним доступ.

F.1
Начало работы
F.2
Ссылка на API

F.1 Начало работы

API think-cell интегрирован в модель автоматизации Office, что позволяет использовать его на любом языке, который поддерживает 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, нужно вручную добавить библиотеку объектов Microsoft Excel 16.0 в диалоговом окне ИнструментыСсылки среду разработки VBA.

Примечание. 16.0 — номер версии Office 2016 и более поздних. С Office 2010 или 2013 необходимо использовать библиотеки объектов 14.0 или 15.0 соответственно. Если у вас установлено несколько версий Office, в диалоговом окне Ссылки отобразятся только библиотеки объектов самой последней установленной версии. Далее мы будем считать, что вы используете Office 2016 или более позднюю версию.

При использовании Application.COMAddIns("thinkcell.addin").Object вы всегда получите объект надстройки think-cell текущего ведущего приложения Office, то есть tcPpAddIn или tcXlAddIn, в зависимости от места использования — PowerPoint или Excel. Чтобы получить ссылку на объект надстройки в другом приложении Office и доступ к открываемым им функциям API, получите ее через соответствующий экземпляр приложения.

Например, для получения ссылки на tcXlAddIn из PowerPoint:

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#

API think-cell можно использовать из C# при разработке надстроек и расширений кодов документов, запуская внутри ведущего приложения Office, а также при разработке отдельных приложений.

Далее мы будем исходить из предположения, что для разработки решений Office в C# вы используете Visual Studio 2017 или более поздние версии. Более подробные конкретные инструкции по установке для разработки надстройки смотрите в следующем разделе. С каждым образцом кодов мы укажем, какой шаблон проекта Visual Studio нужно использовать.

Для позднего связывания вызова методов к объектам надстройки think-cell определите переменную, содержащую ссылку на объект надстройки think-cell как dynamic. Такой же тип выводится компилирующей программой при определении ссылки как var, так что можно просто написать:

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

Здесь ppapp является ссылкой на объект Application PowerPoint, куда загружается think-cell.

Для доступа к модели объекта приложения Office в качестве ссылки на проект необходимо добавить либо библиотеку типов, либо ее основную сборку взаимодействия (PIA). Мы рекомендуем по возможности добавить библиотеку типов, поскольку Visual Studio автоматически добавит ссылку на соответствующую PIA, если она доступна, или сгенерирует сборку взаимодействия из библиотеки типов, если она отсутствует (см. здесь).

Например, чтобы получить ссылку на объект надстройки think-cell, как указано выше, вы бы добавили библиотеку объектов Microsoft PowerPoint 16.0, которая находится во вкладке COMБиблиотеки типов диалогового окна Диспетчер ссылок. В зависимости от типа проекта к этому диалоговому окну можно получить доступ, щелкнув правой кнопкой мыши по вкладке Ссылки или Зависимости в Обозреватель решений и выбрав Добавить ссылку (COM).

Примечание. 16.0 — номер версии Office 2016 и более поздних. При использовании опции Внедрить типы взаимодействия, который включен по умолчанию для ссылки на библиотеку типов COM, составленное с этой ссылкой приложение будет иметь обратную (и восходящую) совместимость с другими версиями Office до тех пор, пока все используемые интерфейсы существуют в своей модели объектов. Дополнительные сведения см. здесь.

Функции API think-cell указывают ошибки при использовании COM HRESULT. Некоторые из них связываются автоматически с соответствующими классами исключений .NET. См. раздел  Как: связать HRESULTs и исключениями .

F.1.2.1 Разработка надстроек

Для разработки надстроек для Office или расширений кодов для документов Office используйте шаблоны проектов надстройки PowerPoint/Excel VSTO и Excel VSTO Template/Workbook. Они входят в пакет Office Developer Tools for Visual Studio, устанавливаемый в конфигурации по умолчанию. Если эти инструменты и шаблоны недоступны в вашей установке Visual Studio, вы можете их добавить, например, в меню НастройкиПриложенияVisual Studio 2022ИзменитьДругие наборы инструментов, отметив Разработка Office/SharePoint и щелкнув Изменить. Документацию Microsoft см. также здесь и здесь.

PIA для ведущего приложения Office выбранного шаблона всегда загружается по умолчанию. Если вам нужен доступ к модели объектов другого приложения Office, нужно добавить эту библиотеку типов в качестве ссылки, как разъясняется выше.

Примечание. API think-cell нельзя использовать из веб-надстроек Office (к сожалению, сейчас называются Microsoft просто «Надстройки Office»), так как не могут взаимодействовать напрямую с моделью объектов приложения Office и, в частности, не могут взаимодействовать с такими надстройками COM, как think-cell.

F.2 Ссылка на API

F.2.1
Обновление элементов и шаблонов презентаций данными Excel
F.2.2
Управление стилями
F.2.3
Импорт диаграмм Mekko Graphics
F.2.4
Разные аспекты

F.2.1 Обновление элементов и шаблонов презентаций данными Excel

Описанные в этом разделе функции можно использовать для программного обновления элементов think-cell (обычно заполнителей в шаблоне презентации) данными из Excel. UpdateChart обновляет элементы think-cell, указанные по назначенному ему в шаблоне имени, добавляя данные из диапазона Excel, передаваемые как аргумент. Как составить шаблон, см. также в Введение в автоматизацию.

PresentationFromTemplate приписывает значение шаблону презентации, добавляя данные из связанной рабочей книги Excel. Как создать связь Excel, см. также в Ссылки на данные Excel.

Функции в этом разделе являются методами надстройки think-cell в Excel.

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 Описание

Эта функция обновляет все элементы в target именем strName с данными, содержащимися в rgData. Для правильной интерпретации данных для диаграмм диапазон rgData должен соответствовать их макету таблицы по умолчанию или переставленной версии. См. также Создание диаграммы на основе данных Excel и Настройка макета данных. То, какую версию использовать — по умолчанию или переставленную, — указывается установкой bTransposed на false или true соответственно. В случае с элементами, которые не являются диаграммами, например, с таблицами, значение bTransposed игнорируют.

target должен быть Presentation или SlideRange, или один Slide, Master или CustomLayout.

При сопоставлении имени strName регистр не учитывается. Оно должно было быть назначено ранее в PowerPoint с использованием элемента управления свойством Имя UpdateChart, как описано в разделе Введение в автоматизацию.

Для выбора правильных элементов в качестве целей убедитесь в том, что только у них Имя UpdateChart установлено на strName в объекте, передаваемом как pres.

Если целевой элемент связан с каким-либо диапазоном данных 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#

Чтобы использовать этот образец, замените им код в шаблоне проекта 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();
        }
    }
}

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, которые связаны с книгами Excel, отличными от wb, не меняются и остаются связанными, поэтому можно обновить ссылки из множества книг Excel, сохранив результат этой функции как новый шаблон и вызвав эту функцию снова для следующей рабочей книги.

Если вы хотите управлять цветами сегментов диаграммы или форматированием ячеек таблицы со связью Excel, вы можете задать цветовую схему в опциях Использовать заливку таблицы сверху (см. раздел Цветовая схема) или Использовать таблицу... (см. раздел Форматирование таблицы) соответственно. Чтобы контролировать формат чисел с помощью ссылки на Excel, выберите параметр Использовать формат Excel (см. раздел Формат чисел).

Установите соответствующие опции форматирования и формат чисел соответствующих ячеек в Excel перед вызовом PresentationFromTemplate.

F.2.1.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();
        }
    }
}

F.2.2 Управление стилями

Функции в этом разделе можно использовать для программной загрузки, проверки и удаления стилей think-cell. LoadStyle загружает стиль из файла стилей на образец слайда или в отдельный индивидуальный макет. LoadStyleForRegion загружает стиль из файла стилей в конкретную область индивидуального макета. GetStyleName возвращает имя стиля, загруженного в основной или индивидуальный макет. RemoveStyles удаляет все стили из индивидуального макета.

Более подробная информация о создании и редактировании стилей приводится в Создание стиля think-cell и Формат файла стиля. Более подробная информацию об их загрузке приводится в Загрузка файлов стиля.

Функции в этом разделе являются методами надстройки think-cell в PowerPoint.

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. Это то же самое имя, которое указывается в атрибуте name элемента <style> соответствующего файла стиля (см. раздел style).

Оно возвращает пустую строку, когда в 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

Функции в этом разделе можно использовать для программируемого импорта в think-cell и проверки диаграмм, созданных с помощью Mekko Graphics. ImportMekkoGraphicsCharts заменяет диаграммы Mekko Graphics эквивалентными диаграммами think-cell. GetMekkoGraphicsXML извлекает определение XML диаграммы Mekko Graphics.

Функции в этом разделе являются методами надстройки think-cell в PowerPoint.

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 Описание

Эта функция заменяет все диаграммы Mekko Graphics в массиве Shape, переданном ей с эквивалентной диаграммой think-cell. Все фигуры должны быть на одном слайде. До изменения слайда функция создаст копию неизмененного слайда и вставит ее непосредственно после измененной версии.

Функция возвращает ссылку на эту копию (если создается).

Она возвращает Nothing/null, если презентация не была изменена, например, из-за того, что массив не содержал никаких диаграмм Mekko Graphics.

F.2.3.1.3 Примеры
VBA

Чтобы использовать этот образец, добавьте его в модуль в PowerPoint (см. детали в Visual Basic for Applications).

При запуске ImportAll в презентации пройдет через слайды и заменит все видимые диаграммы Mekko Graphics эквивалентными диаграммами think-cell, делая содержащую их копию каждого слайда до его изменения.

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#

Чтобы использовать этот образец, добавьте этот метод в класс ThisAddIn шаблона проекта надстройки PowerPoint VSTO C# (см. сведения в 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 Описание

Эта функция возвращает XML диаграммы Mekko Graphics в shp в качестве строки. Она не изменяет передаваемую ей фигуру.

Если 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 и напечатает в консоль XML содержащихся в нем диаграмм Mekko Graphics.

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 Разные аспекты

Функции в этом разделе являются методами надстройки think-cell в PowerPoint.

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.

Еще не пользуетесь нашим продуктом?

Поделиться