如何使用openxml以编程方式在Word文档中插入图表?

问题描述

我正在尝试使用openxml通过代码创建word文档。您可以在下图中找到我要实现的目标。使用Open XML SDK 2.5生产力工具验证xml时没有错误

enter image description here

当我尝试打开时,会出现以下内容

Word尝试打开文件时遇到错误。尝试这些建议。检查文档或驱动器的文件权限。确保有足够的内存和磁盘空间。使用文本恢复转换器打开文件

这是代码

' Create a document by supplying the filepath.
Using wordDocument As WordprocessingDocument =
WordprocessingDocument.Create(filepath,WordprocessingDocumentType.Document)

' Add a main document part.
Dim mainPart As MainDocumentPart = wordDocument.AddMainDocumentPart()

' Create the document structure and add some text.
mainPart.Document = New Document()

'Dim excel As EmbeddedPackagePart
'excel = mainPart.AddEmbeddedPackagePart("application/vnd.ms-excel")

Dim body As Body = mainPart.Document.AppendChild(New Body())

body.RemoveAllChildren()

Dim extent As New Extent()
extent.Cx = 5486400
extent.Cy = 3200400

Dim effectExtent As New EffectExtent()
effectExtent.LeftEdge = 0
effectExtent.TopEdge = 0
effectExtent.RightEdge = 0
effectExtent.BottomEdge = 0

Dim docPro As New DocProperties()
docPro.Id = 1
docPro.Name = "Chart 1"

Dim nonVisualGraph As New NonVisualGraphicFrameDrawingProperties()

Dim grouping As New Grouping()

Dim axId1 As New AxisId()
axId1.Val = 556268704

Dim axId2 As New AxisId()
axId2.Val = 556263784

Dim index0 As New Index()
index0.Val = 0

Dim order0 As New Order()
order0.Val = 0

Dim seriesTextValue As New NumericValue("2020")

Dim seriesText As New SeriesText()
seriesText.AppendChild(seriesTextValue)

Dim pCount1 As New PointCount()
pCount1.Val = 4

Dim txt0 As New NumericValue("Janeiro")
Dim pt0 As New StringPoint()
pt0.Index = 0
pt0.AppendChild(txt0)

Dim txt1 As New NumericValue("Fevereiro")
Dim pt1 As New StringPoint()
pt1.Index = 1
pt1.AppendChild(txt1)

Dim txt2 As New NumericValue("Março")
Dim pt2 As New StringPoint()
pt2.Index = 2
pt2.AppendChild(txt2)

Dim txt3 As New NumericValue("Abril")
Dim pt3 As New StringPoint()
pt3.Index = 3
pt3.AppendChild(txt3)

Dim str1 As New StringLiteral()
str1.AppendChild(pCount1)
str1.AppendChild(pt0)
str1.AppendChild(pt1)
str1.AppendChild(pt2)
str1.AppendChild(pt3)

Dim cat1 As New CategoryAxisData()
cat1.AppendChild(str1)

Dim code1 As New FormatCode("General")

Dim pCount2 As New PointCount()
pCount2.Val = 4

Dim vtxt0 As New NumericValue("4.3")
Dim vpt0 As New StringPoint()
vpt0.Index = 0
vpt0.AppendChild(vtxt0)

Dim vtxt1 As New NumericValue("2.5")
Dim vpt1 As New StringPoint()
vpt1.Index = 1
vpt1.AppendChild(vtxt1)

Dim vtxt2 As New NumericValue("3.5")
Dim vpt2 As New StringPoint()
vpt2.Index = 2
vpt2.AppendChild(vtxt2)

Dim vtxt3 As New NumericValue("4.5")
Dim vpt3 As New StringPoint()
vpt3.Index = 3
vpt3.AppendChild(vtxt3)

Dim num1 As New NumberLiteral()
num1.AppendChild(pCount2)
num1.AppendChild(vpt0)
num1.AppendChild(vpt1)
num1.AppendChild(vpt2)
num1.AppendChild(vpt3)

Dim val1 As New Values()
val1.AppendChild(num1)

Dim series1 As New LineChartSeries()
series1.AppendChild(index0)
series1.AppendChild(order0)
series1.AppendChild(seriesText)
series1.AppendChild(cat1)
series1.AppendChild(val1)

Dim lineChart As New LineChart()
lineChart.AppendChild(grouping)
lineChart.AppendChild(series1)
lineChart.AppendChild(axId1)
lineChart.AppendChild(axId2)

Dim catAxid1 As New AxisId()
catAxid1.Val = 556268704

Dim orientation As New Orientation()
orientation.Val = OrientationValues.MinMax

Dim scaling As New Scaling()
scaling.AppendChild(orientation)

Dim axisPos As New AxisPosition()
axisPos.Val = AxisPositionValues.Bottom

Dim crossAx As New CrossingAxis()
crossAx.Val = 556263784

Dim catAx As New CategoryAxis()
catAx.AppendChild(catAxid1)
catAx.AppendChild(scaling)
catAx.AppendChild(axisPos)
catAx.AppendChild(crossAx)

Dim valAxid1 As New AxisId()
valAxid1.Val = 556263784

Dim orientation2 As New Orientation()
orientation2.Val = OrientationValues.MinMax

Dim scaling2 As New Scaling()
scaling2.AppendChild(orientation2)

Dim axisPos2 As New AxisPosition()
axisPos2.Val = AxisPositionValues.Left

Dim crossAx2 As New CrossingAxis()
crossAx2.Val = 556268704

Dim valAx As New ValueAxis()
valAx.AppendChild(valAxid1)
valAx.AppendChild(scaling2)
valAx.AppendChild(axisPos2)
valAx.AppendChild(crossAx2)

Dim plotArea As New PlotArea()
plotArea.AppendChild(lineChart)
plotArea.AppendChild(catAx)
plotArea.AppendChild(valAx)

Dim chart As New Chart()
chart.AppendChild(plotArea)

Dim chartSpace As New ChartSpace()
chartSpace.AppendChild(chart)

Dim graphicData As New GraphicData()
graphicData.Uri = "http://schemas.openxmlformats.org/drawingml/2006/chart"
graphicData.AppendChild(chartSpace)

Dim graphic As New Graphic()
graphic.AppendChild(graphicData)

Dim inline As New Inline()
inline.AppendChild(Extent)
inline.AppendChild(effectExtent)
inline.AppendChild(docPro)
inline.AppendChild(nonVisualGraph)
inline.AppendChild(Graphic)

Dim drawing As New Drawing()
drawing.AppendChild(inline)

Dim r As New Run()
r.AppendChild(drawing)

Dim p As New Paragraph()
p.AppendChild(r)

body.AppendChild(p)

End Using

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)