25. Автоматизация с использованием данных Excel
Если данные представлены в Excel, как описано в разделе Ссылки на данные Excel, вы можете использовать функции UpdateChart
и PresentationFromTemplate
, чтобы программно управлять применением этих данных.
С помощью UpdateChart
вы можете заменить таблицу на определенную диаграмму с вашими данными. С помощью PresentationFromTemplate
вы можете использовать данные, чтобы создать новую презентацию на основе шаблона PowerPoint с диаграммами think-cell, связанными с диапазонами данных в Excel.
Интерфейс обеих функций интегрирован в модель автоматизации Office, что позволяет использовать его на любом языке, который поддерживает Office, таком как Visual Basic for Applications и C#.
Точка входа в think-cell — это объект надстройки think-cell. Доступ к нему можно получить через коллекцию Application.COMAddIns
. Вызовы think-cell всегда являются вызовами с поздним связыванием. Описание см. в статье базы знаний Microsoft:
http://support.microsoft.com/kb/245115
Таким образом, объект надстройки think-cell — это просто Object
, поэтому не требуется добавлять библиотеку типов или ссылку. Просто получите объект, вы сможете совершать вызовы:
Dim tcaddin As Object
Set tcaddin = Application.COMAddIns("thinkcell.addin").Object
- 25.1
- UpdateChart
- 25.2
- PresentationFromTemplate
25.1 UpdateChart
25.1.1 Подпись
tcaddin.UpdateChart( _
pres As PowerPoint.Presentation, _
strName As String, _
rgData As Excel.Range, _
bTransposed As Boolean _
)
25.1.2 Описание
Эта функция вызывается из Excel и обновляет диаграмму strName
в pres
с использованием чисел, которые содержатся в rgData
. Диапазон rgData
должен соответствовать макету, описанному в разделе Создание диаграммы на основе данных Excel.
Обратите внимание, что объект презентации pres
также может использоваться для ссылки на диапазон слайдов в презентации. Для получения дополнительных сведений см.:
http://msdn.microsoft.com/en-us/vba/powerpoint-vba/articles/slide-object-powerpoint
При сопоставлении имени диаграммы strName
регистр не учитывается. Оно должно было быть назначено ранее в PowerPoint с использованием элемента управления свойством Имя UpdateChart, как описано в разделе Введение в автоматизацию. Имя диаграммы должно быть уникальным в рамках презентации или диапазона слайдов, который определен pres
.
Если диаграмма связана с каким-либо диапазоном данных Excel во время вызова этой функции, связь будет нарушена. После этого диаграмма не будет связана с каким-либо диапазоном Excel.
25.1.3 Пример
Чтобы использовать этот пример, в окне Visual Basic for Applications в Excel перейдите в меню Инструменты, затем Ссылки и добавьте библиотеку объектов Microsoft PowerPoint.
' When Option Explicit appears in a file, you must
' explicitly declare all variables using the Dim
' or ReDim statements. If you attempt to use an
' undeclared variable name, an error occurs at
' compile time.
' Use Option Explicit to avoid incorrectly typing
' the name of an existing variable or to avoid
' confusion in code where the scope of the
' variable is not clear. If you do not use the
' Option Explicit statement, all undeclared
' variables are of Object type.
' http://msdn.microsoft.com/en-us/
' library/y9341s4f%28v=vs.80%29.aspx
Option Explicit
Sub UpdateChart_Sample()
' Get the range containing the new data
Dim rng As Excel.Range
Set rng = ActiveWorkbook.Sheets("Sheet1").Range("A1:D5")
' Get the think-cell add-in object
Dim tcaddin As Object
Set tcaddin = 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:\\template.pptx", _
' Untitled:=msoTrue)
' PowerPoint window invisible
Set pres = ppapp.Presentations.Open( _
Filename:="c:\\template.pptx", _
Untitled:=msoTrue, _
WithWindow:=msoFalse)
' The name "Chart1" must have been
' previously assigned to the chart using
' the control in the floating toolbar.
' The final argument indicates whether
' the data range is transposed or not.
Call tcaddin.UpdateChart(pres, "Chart1", rng, False)
' Save the updated presentation
pres.SaveAs ("c:\\template_updated.pptx")
pres.Close
ppapp.Quit
End Sub
В следующем примере показано, как использовать UpdateChart
из C#.
using Excel = Microsoft.Office.Interop.Excel;
using PowerPoint = Microsoft.Office.Interop.PowerPoint;
using Office = Microsoft.Office.Core;
// Open the Solution Explorer > right-click the project file > "Add Reference..." button and add he following references:
// .NET tab > Microsoft.Office.Interop.Excel 12.0.0.0
// .NET tab > Microsoft.Office.Interop.PowerPoint 12.0.0.0
// COM tab > Microsoft Office 14.0 Object Library
namespace ConsoleApplication_UpdateChart
{
class Program
{
static void Main()
{
Excel.Application xlapp = new Excel.Application();
xlapp.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://template.pptx", Office.MsoTriState.msoFalse, Office.MsoTriState.msoTrue);
object[] aobjArg = new object[] { (object)presentation, "Chart1", worksheet.get_Range("A1", "D3"), false };
Office.COMAddIn comaddin = xlapp.COMAddIns.Item("thinkcell.addin");
object objAddIn = comaddin.Object;
objAddIn.GetType().InvokeMember("UpdateChart", System.Reflection.BindingFlags.InvokeMethod, null, objAddIn, aobjArg);
presentation.SaveAs("C://template_updated.pptx");
presentation.Close();
ppapp.Quit();
workbook.Close(false);
xlapp.Quit();
}
}
}
25.2 PresentationFromTemplate
25.2.1 Подпись
tcaddin.PresentationFromTemplate( _
wb As Excel.Workbook, _
strTemplate As String, _
ppapp As PowerPoint.Application _
) As PowerPoint.Presentation
25.2.2 Описание
Эта функция вызывается из Excel и применяет все ссылки на данные в wb
к шаблону с именем файла strTemplate
. Результатом будет новая презентация в экземпляре PowerPoint ppapp
.
strTemplate
может быть полный путь или относительный путь, который считается относительным для расположения файла книги Excel wb
.
Все диаграммы в strTemplate
, которые связаны с книгой Excel wb
, обновляются (независимо от того, обновляются они автоматически или нет). Затем ссылки на данные удаляются, чтобы предотвратить дальнейшее изменение этих диаграмм.
Диаграммы в strTemplate
, которые связаны с книгами Excel, отличными от wb
, не меняются и остаются связанными, поэтому можно обновить ссылки из множества книг Excel, сохранив результат этой функции как новый шаблон и вызвав эту функцию снова для следующей книги.
Если вы хотите контролировать цвета сегментов диаграммы с помощью ссылки на Excel, вы можете выбрать в качестве цветовой схемы параметр Использовать функцию «Заполнять сверху» Excel (см. раздел Цветовая схема). Чтобы контролировать формат чисел с помощью ссылки на Excel, выберите параметр Использовать формат Excel (см. раздел Формат чисел). Установите цвет фона и формат чисел соответствующих ячеек в Excel перед вызовом PresentationFromTemplate
.
25.2.3 Пример
Чтобы использовать этот пример, в окне Visual Basic for Applications в Excel перейдите в меню Инструменты, затем Ссылки и добавьте библиотеку объектов Microsoft PowerPoint.
' When Option Explicit appears in a file, you must
' explicitly declare all variables using the Dim
' or ReDim statements. If you attempt to use an
' undeclared variable name, an error occurs at
' compile time.
' Use Option Explicit to avoid incorrectly typing
' the name of an existing variable or to avoid
' confusion in code where the scope of the
' variable is not clear. If you do not use the
' Option Explicit statement, all undeclared
' variables are of Object type.
' http://msdn.microsoft.com/en-us/
' library/y9341s4f%28v=vs.80%29.aspx
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("Sheet1").Cells(3, 2)
' Get the think-cell add-in object
Dim tcaddin As Object
Set tcaddin = 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
rng.Value = i
' Generate a new presentation based on the
' linked template.
Dim pres As PowerPoint.Presentation
Set pres = tcaddin.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:\\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
Диаграммы
-
4.Введение в создание диаграмм
-
5.Ввод данных
-
6.Текстовые подписи
-
7.Гистограммы, линейные графики и диаграммы с областями
-
8.Оформление диаграмм
-
9.Каскадная диаграмма
-
10.Диаграмма Mekko
-
11.Круговая и кольцевая диаграммы
-
12.Точечная и пузырьковая диаграммы
-
13.Диаграмма Ганта (временная шкала)