25. Автоматизация с использованием данных Excel
Если данные представлены в Excel, можно использовать функции UpdateChart
и PresentationFromTemplate
для программного управления применением этих данных.
С помощью UpdateChart
можно заменить таблицу определенного элементами вашими данными Excel. С помощью PresentationFromTemplate
можно использовать данные для создания новой презентации на основе шаблона PowerPoint с элементами think-cell, связанными с диапазонами данных в Excel, как описано в 21. Ссылки на данные 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, как описано в разделе 24. Введение в автоматизацию.
Для выбора правильных элементов в качестве целей убедитесь в том, что только у них Имя UpdateChart установлено на strName
в объекте, передаваемом как pres
.
Если целевой элемент связан с каким-либо диапазоном данных Excel во время вызова этой функции, связь будет нарушена. После этого элемент не будет связан ни с каким диапазоном Excel.
25.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#
Чтобы использовать этот образец, замените им код в шаблоне проекта 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();
}
}
}
Создание диаграмм
-
4.Введение в создание диаграмм
-
5.Ввод данных
-
6.Текстовые подписи
-
7.Гистограммы, линейные графики и диаграммы с областями
-
8.Оформление диаграмм
-
9.Каскадная диаграмма
-
10.Диаграмма Mekko
-
11.Круговая и кольцевая диаграмма
-
12.Точечная диаграмма и пузырьковая диаграмма
-
13.Диаграмма Ганта (временная шкала)