У меня есть связанная таблица в моем PPT (PowerPoint 2010), которая является частью листа Excel 2010. Когда я обновляю данные в Excel, таблица автоматически обновляется в PPT, что работает отлично и ожидаемо.
Теперь проблема в том, как оформить эту связанную таблицу с помощью встроенных стилей PowerPoint 2010. Поэтому, когда вы вставляете обычную таблицу PowerPoint, у вас есть две вкладки на ленте под Инструментами таблиц: Дизайн и Макет. На вкладке Дизайн в разделе Стили таблиц вы можете быстро оформить таблицу, используя набор встроенных стилей таблиц.
Однако, когда у меня есть связанная таблица из Excel, у меня нет этих опций: когда я выбираю таблицу, появляется только одна вкладка под Table Tools на ленте, которая называется Format. И я не могу использовать ни один из встроенных стилей таблиц PowerPoint. Это делает связанную таблицу непоследовательной с точки зрения стиля по сравнению с другими обычными таблицами PowerPoint.
решение1
К сожалению, встроенные стили доступны только для оформления таблиц, созданных в PowerPoint, а не для связанных или вставленных.
Небольшой трюк, который может дать приемлемые результаты, а может и нет, — это создать пустую таблицу PowerPoint в выбранном вами стиле, а затем наложить связанную таблицу Excel. Небольшая корректировка вперед-назад между Excel и PowerPoint может дать разумное выравнивание, соответствие шрифтов и т. д. На рисунке показаны результаты очень быстрого макета, который я сделал.
решение2
Проблема со связанным контентом в целом заключается в том, что PowerPoint понятия не имеет, что это такое; у него есть изображение контента (переданное ему приложением, которое создало контент... Excel в данном случае), и ссылка на файл, содержащий фактические данные. Все, что он может сделать для вас, если вы хотите редактировать контент, это активировать его в исходном приложении.
Лучшим вариантом для начала будет отформатировать таблицу в Excel.
Если вы пытаетесь соответствовать определенному стилю PPT, создайте таблицу в PPT, скопируйте/вставьте ее в Excel. Сначала вам нужно будет заполнить все ячейки текстом, иначе Excel применит свое форматирование текста по умолчанию к пустым ячейкам. Отрегулируйте ширину столбцов по мере необходимости, добавьте ваши реальные данные и сохраните файл. Затем сделайте ссылку из него обратно в PPT.
решение3
Спасибо за ответы. Но мне кажется, что лучшим решением все равно будет оформить таблицу в PPT и редактировать данные в Excel. Поэтому я написал небольшой фрагмент кода VBA для переноса данных из Excel в PPT, и он отлично работает для меня.
Вот код:
Option Explicit
Option Base 1
Const WB_FINANCIALS As String = "\CPMR Financials.xlsm"
Const WS_SALES As String = "Sales Forecast"
Const SLIDE_SALES_FORECAST As String = "SalesForecast"
Const TABLE_SALES_FORECAST As String = "TableSalesForecast"
Const R_CPMA_COM_SALES As String = "cpma_complete_sales"
Const R_CPMA_LARGE_ATC_SALES As String = "cpma_large_atc_sales"
Const R_CPMA_REGULAR_ATC_SALES As String = "cpma_regular_atc_sales"
Const R_CPMA_REPORTS_SALES As String = "cpma_reports_sales"
Const R_RXR_REPORTS_SALES As String = "rxr_reports_sales"
Const R_TOTAL_SALES As String = "total_sales"
Sub ReadFinancialsBook()
Dim XLApp As Excel.Application
Dim FBook As Excel.Workbook
Dim SalesForecast As Excel.Worksheet
Set XLApp = Excel.Application
Set FBook = XLApp.workbooks.Open(FileName:=ActivePresentation.Path + WB_FINANCIALS, ReadOnly:=True)
Set SalesForecast = FBook.Worksheets(WS_SALES)
Dim PPT As Presentation
Dim SalesSlide As Slide
Set PPT = ActivePresentation
Set SalesSlide = PPT.Slides(SLIDE_SALES_FORECAST)
Call ReadSalesForecast(SalesSlide, SalesForecast)
Set SalesSlide = Nothing
Set PPT = Nothing
FBook.Close
Set SalesForecast = Nothing
Set FBook = Nothing
Set XLApp = Nothing
End Sub
Private Sub ReadSalesForecast(S As Slide, WS As Excel.Worksheet)
Dim T As Table
Set T = S.Shapes(TABLE_SALES_FORECAST).Table
Call WriteWSRangeToTable(T, 2, 4, WS, R_CPMA_COM_SALES)
Call WriteWSRangeToTable(T, 5, 4, WS, R_CPMA_LARGE_ATC_SALES)
Call WriteWSRangeToTable(T, 8, 4, WS, R_CPMA_REGULAR_ATC_SALES)
Call WriteWSRangeToTable(T, 11, 4, WS, R_CPMA_REPORTS_SALES)
Call WriteWSRangeToTable(T, 14, 4, WS, R_RXR_REPORTS_SALES)
Call WriteWSRangeToTable(T, 17, 4, WS, R_TOTAL_SALES)
Set T = Nothing
End Sub
Private Sub WriteWSRangeToTable(T As Table, row As Integer, col As Integer, WS As Excel.Worksheet, Name As String)
Dim i, j, r, c As Integer
Dim str As String
r = WS.Range(Name).Rows.Count
c = WS.Range(Name).Columns.Count
For i = 1 To r
For j = 1 To c
str = CStr(WS.Range(Name).Cells(i, j))
str = Format(str, "#,##0")
T.Cell(row + i - 1, col + j - 1).Shape.TextFrame.TextRange.Text = str
Next j
Next i
End Sub