使用 Excel 宏提取 Powerpoint 数据
Powerpoint data extraction with Excel Macro
上周我一直在 VBA 开发一个 excel 宏,该宏从几张幻灯片中提取特定数据。我能够编写一个宏,该宏能够提取标题 object 中的所有详细信息并将它们全部放在一个列中。我需要能够从所有其他字段中提取数据,但它们是表格而不是文本框。我能够弄清楚如何提取文本框的内容,但我无法弄清楚如何引用幻灯片中的表格。一旦我能够参考这些细节的表格,我只需要从表格中提取特定的细节。我四处搜索,但未能找到任何关于如何从 PowerPoint 幻灯片中的表格中提取数据的具体内容。
使用我在 this thread
的最后 post 中找到的代码
Sub DataTransfer()
Dim shp As Shape, i%, j%
' Dim colCount As Integer
' Dim rowCount As Integer
Dim rowNum As Integer
Dim rng As Object
Set rng = GetObject(, "Excel.Application").Range("a1") ' start at top of worksheet
For i = 1 To ActivePresentation.Slides.Count
For Each shp In ActivePresentation.Slides(i).Shapes
If shp.HasTable Then
With shp.Table
' colCount = .Columns.Count
' rowCount = .Rows.Count
For rowNum = 0 To .Rows.Count - 1
For j = 0 To 4
rng.Offset(rowNum, j).Value = (.Cell(rowNum + 1, j + 1).Shape.TextFrame.TextRange)
Next j
' rng.Offset(rowNum, 4).Interior.Color = (.Cell(rowNum + 1, 5).Shape.TextFrame.TextRange)
Next rowNum
Set rng = rng.Offset(rowNum + 1) ' 1 blank row between tables
End With
End If
Next shp
Next i
End Sub
上面的代码示例适用于 5x5 table。但是,如果您想收集更多列,请更改此行:
对于 j = 0 至 4
您想要多少列(例如,对于 6 列,j = 0 到 5)
您可以将该列数更改为变量作为子项的参数。我确信有一种方法可以使用 For Each 循环遍历所有列来重写代码。但这应该可以帮助您入门。
上周我一直在 VBA 开发一个 excel 宏,该宏从几张幻灯片中提取特定数据。我能够编写一个宏,该宏能够提取标题 object 中的所有详细信息并将它们全部放在一个列中。我需要能够从所有其他字段中提取数据,但它们是表格而不是文本框。我能够弄清楚如何提取文本框的内容,但我无法弄清楚如何引用幻灯片中的表格。一旦我能够参考这些细节的表格,我只需要从表格中提取特定的细节。我四处搜索,但未能找到任何关于如何从 PowerPoint 幻灯片中的表格中提取数据的具体内容。
使用我在 this thread
的最后 post 中找到的代码Sub DataTransfer()
Dim shp As Shape, i%, j%
' Dim colCount As Integer
' Dim rowCount As Integer
Dim rowNum As Integer
Dim rng As Object
Set rng = GetObject(, "Excel.Application").Range("a1") ' start at top of worksheet
For i = 1 To ActivePresentation.Slides.Count
For Each shp In ActivePresentation.Slides(i).Shapes
If shp.HasTable Then
With shp.Table
' colCount = .Columns.Count
' rowCount = .Rows.Count
For rowNum = 0 To .Rows.Count - 1
For j = 0 To 4
rng.Offset(rowNum, j).Value = (.Cell(rowNum + 1, j + 1).Shape.TextFrame.TextRange)
Next j
' rng.Offset(rowNum, 4).Interior.Color = (.Cell(rowNum + 1, 5).Shape.TextFrame.TextRange)
Next rowNum
Set rng = rng.Offset(rowNum + 1) ' 1 blank row between tables
End With
End If
Next shp
Next i
End Sub
上面的代码示例适用于 5x5 table。但是,如果您想收集更多列,请更改此行: 对于 j = 0 至 4 您想要多少列(例如,对于 6 列,j = 0 到 5)
您可以将该列数更改为变量作为子项的参数。我确信有一种方法可以使用 For Each 循环遍历所有列来重写代码。但这应该可以帮助您入门。