Tengo una tabla vinculada en mi PPT (PowerPoint 2010), que proviene de una parte de una hoja de cálculo de Excel 2010. Cuando actualizo los datos en Excel, la tabla se actualiza automáticamente en PPT, lo que funciona bien y como se esperaba.
Ahora, el problema es cómo darle estilo a esta tabla vinculada usando los estilos integrados de PowerPoint 2010. Entonces, cuando inserta una tabla de PowerPoint normal, tiene dos pestañas en la cinta debajo de Herramientas de tabla: Diseño y Diseño. En la pestaña Diseño, en la sección Estilos de tabla, puede diseñar rápidamente la tabla utilizando una serie de estilos de tabla integrados.
Sin embargo, cuando tengo una tabla vinculada de Excel, no tengo esas opciones: cuando selecciono la tabla, solo aparece una pestaña en Herramientas de tabla en la cinta, que es Formato. Y no puedo usar ninguno de los estilos de tabla integrados en PowerPoint. Esto hace que la tabla vinculada sea inconsistente en términos de estilo, en comparación con otras tablas normales de PowerPoint.
Respuesta1
Desafortunadamente, los estilos integrados sólo están disponibles para tablas de estilo creadas en PowerPoint en lugar de vincularlas o pegarlas.
Una pifia que puede o no producir resultados aceptables para usted sería crear una tabla de PowerPoint vacía en el estilo de su elección y luego superponer una tabla de Excel vinculada. Un poco de ajuste de ida y vuelta entre Excel y PowerPoint puede producir una alineación razonable, coincidencia de fuentes, etc. El gráfico muestra los resultados de una maqueta muy rápida que hice.
Respuesta2
Lo que pasa con el contenido vinculado en general es que PowerPoint no tiene idea de qué es; tiene una imagen del contenido (entregada por la aplicación que produjo el contenido... Excel en este caso) y un enlace al archivo que contiene los datos reales. Todo lo que puede hacer por ti si quieres editar el contenido es activarlo en la aplicación original.
Para empezar, lo mejor que puede hacer es formatear la tabla en Excel.
Si está intentando hacer coincidir un estilo PPT específico, cree una tabla en PPT, cópiela y péguela en Excel. Primero querrá llenar todas las celdas con texto; de lo contrario, Excel aplicará su formato de texto predeterminado a las celdas vacías. Ajuste el ancho de las columnas según sea necesario, agregue sus datos reales y guarde el archivo. Luego vincúlelo de nuevo a PPT.
Respuesta3
Gracias por las respuestas. Pero me parece que la mejor solución sigue siendo diseñar la tabla en PPT y editar los datos en Excel. Entonces escribí un pequeño fragmento de código VBA para transferir datos de Excel a PPT y funciona perfectamente para mí.
Aquí está el código:
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