gpt4 book ai didi

c# - 是否可以从 C# 生成 PowerPoint 路线图时间线?

转载 作者:太空宇宙 更新时间:2023-11-03 11:47:17 24 4
gpt4 key购买 nike

我知道 PowerPoint 有类似 Excel 和 word 的 API。有没有办法以编程方式生成时间线路线图(我有一个来自数据库的里程碑和日期列表)?

是否有人有关于如何开始尝试以编程方式在 powerpoint 中填写时间线路线图模板的任何链接或示例代码

这是我正在尝试做的(不是很好)示例:http://www.jumpdesign.net/aboutcd/02history/Short_history_timeline.jpg

最佳答案

好的,这仍然需要大量的工作,但希望这足以让您入门。

Sub GenerateTimeLine()
Dim ap As Presentation
Set ap = ActivePresentation

'Set to first slide
Dim sl As Slide
Set sl = ap.Slides(1)

'Use Slide Master for Presentation dimensions
Dim sm As Master
Set sm = ap.SlideMaster

'Create a timeline body of 75% the width of the slide
Dim w As Integer
w = sm.Width * 0.75

'Create a timeline body of 5% the height of the slide
Dim h As Integer
h = sm.Height * 0.1

'Center horizontal position of timeline body
Dim posX As Integer
posX = Abs(w - sm.Width) / 2

'Center vertical position of timeline body
Dim posY As Integer
posY = Abs(h - sm.Height) / 2

'Add main shape
Dim timeLineBodyShape As Shape
Set timeLineBodyShape = sl.Shapes.AddShape(msoShapeRectangle, posX, posY, w, h)

'Set up initial variables
Dim timeLineBodyName As String
timeLineBodyName = "Showjumping"
Dim yearMin As Integer
Dim yearMax As Integer
yearMin = 1864
yearMax = 2006

'Add to variables timeline
With timeLineBodyShape.TextFrame
With .Ruler.TabStops
.Add ppTabStopLeft, 0
.Add ppTabStopCenter, timeLineBodyShape.Width / 2
.Add ppTabStopRight, timeLineBodyShape.Width
End With
With .TextRange
.InsertAfter CStr(yearMin) + Chr(9) + timeLineBodyName + Chr(9) + CStr(yearMax)
.Font.Bold = msoTrue
End With
End With

'Create time line nodes
Dim timeLineNodeYear As Integer
Dim timeLineNodeText As String
Dim timeLineNodeTop As Boolean

timeLineNodeYear = 1864
timeLineNodeText = "First Competition. Horse Show of the Royal Dublin Society"
timeLineNodeTop = True
AddtimeLineNode timeLineBodyShape, timeLineNodeYear, timeLineNodeText, timeLineNodeTop, _
sl, yearMin, yearMax, sm

timeLineNodeYear = 1912
timeLineNodeText = "Stockholm Olympic Games. Team competition for first time in jumping"
timeLineNodeTop = False
AddtimeLineNode timeLineBodyShape, timeLineNodeYear, timeLineNodeText, timeLineNodeTop, _
sl, yearMin, yearMax, sm

timeLineNodeYear = 1925
timeLineNodeText = "Aachen. For the first time Aachen Grand Prix"
timeLineNodeTop = True
AddtimeLineNode timeLineBodyShape, timeLineNodeYear, timeLineNodeText, timeLineNodeTop, _
sl, yearMin, yearMax, sm

timeLineNodeYear = 1953
timeLineNodeText = "Paris. For first time World Championship for men"
timeLineNodeTop = False
AddtimeLineNode timeLineBodyShape, timeLineNodeYear, timeLineNodeText, timeLineNodeTop, _
sl, yearMin, yearMax, sm

timeLineNodeYear = 1979
timeLineNodeText = "The first Volvo World Cup Final"
timeLineNodeTop = True
AddtimeLineNode timeLineBodyShape, timeLineNodeYear, timeLineNodeText, timeLineNodeTop, _
sl, yearMin, yearMax, sm

timeLineNodeYear = 1990
timeLineNodeText = "Stockholm. The first World Equestrian Games"
timeLineNodeTop = False
AddtimeLineNode timeLineBodyShape, timeLineNodeYear, timeLineNodeText, timeLineNodeTop, _
sl, yearMin, yearMax, sm

timeLineNodeYear = 2006
timeLineNodeText = "Aachen. Biggest World Equestrian Games until now"
timeLineNodeTop = True
AddtimeLineNode timeLineBodyShape, timeLineNodeYear, timeLineNodeText, timeLineNodeTop, _
sl, yearMin, yearMax, sm

End Sub
Sub AddtimeLineNode(tlShape As Shape, tlYear As Integer, tlText As String, tlTop As Boolean, _
sl As Slide, yearMin As Integer, yearMax As Integer, sm As Master)

'Positioning calculations
Dim shapeDifference As Single
shapeDifference = tlShape.Width - tlShape.Left

Dim yearDifference
yearDifference = yearMax - yearMin

Dim timeLineNodeShape As Shape

timeLineNodeShapeWidth = 100
timeLineNodeShapeHeight = 100

timeLineNodeShapePosLeft = (tlShape.Left + (((tlYear - yearMin) / yearDifference) * shapeDifference))
timeLineNodeShapePosTop = 30

If tlTop Then
Set timeLineNodeShape = sl.Shapes.AddShape(msoShapeRectangularCallout, timeLineNodeShapePosLeft, _
timeLineNodeShapePosTop, timeLineNodeShapeWidth, timeLineNodeShapeHeight)
timeLineNodeShapeMid = timeLineNodeShape.Top + timeLineNodeShape.Height / 2
timeLineBodyShapeHeight = tlShape.Height
Distance = tlShape.Top - timeLineNodeShapeMid
handleYplacement = Distance / timeLineNodeShape.Height
timeLineNodeShape.Adjustments(2) = handleYplacement
Else
timeLineNodeShapePosBottom = sm.Height - timeLineNodeShapeHeight - timeLineNodeShapePosTop
Set timeLineNodeShape = sl.Shapes.AddShape(msoShapeRectangularCallout, timeLineNodeShapePosLeft, _
timeLineNodeShapePosBottom, timeLineNodeShapeWidth, timeLineNodeShapeHeight)
timeLineNodeShapeMid = timeLineNodeShape.Top + timeLineNodeShape.Height / 2
timeLineBodyShapeHeight = tlShape.Height
Distance = (tlShape.Top + tlShape.Height) - timeLineNodeShapeMid
handleYplacement = Distance / timeLineNodeShape.Height
timeLineNodeShape.Adjustments(2) = handleYplacement
End If

timeLineNodeShape.TextFrame.TextRange = CStr(tlYear) & ", " & tlText
timeLineNodeShape.TextFrame2.AutoSize = msoAutoSizeTextToFitShape
End Sub

关于c# - 是否可以从 C# 生成 PowerPoint 路线图时间线?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3098594/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com