我的 PPT(PowerPoint 2010)中有一个链接表,它来自 Excel 2010 工作表的一部分。当我在 Excel 中更新数据时,PPT 中的表格会自动更新,一切正常,符合预期。
现在,问题是如何使用 PowerPoint 2010 的内置样式来设计此链接表的样式。因此,当您插入常规 PowerPoint 表时,功能区上的“表格工具”下有两个选项卡:设计和布局。在“设计”选项卡下的“表格样式”部分中,您可以使用一组内置表格样式快速设计表格样式。
但是,当我从 Excel 获得链接表时,我没有这些选项:当我选择表时,功能区上的“表格工具”下只会出现一个选项卡,即“格式”。而且我无法使用 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