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

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

Поделиться