使用open xml编辑docx

时间:2014-09-04 09:17:45

标签: c#

我正在尝试使用open xml编辑word文档,但我没有取得令人满意的结果:

这是原始文件:

enter image description here

在这里,我得到一个句子来启动文件。在:后我必须添加几行。

我想要的结果是这样的(出于某些原因,我不得不擦除屏幕上的一些数据,但这不会影响问题):

enter image description here

但我只得到这样的结果:

enter image description here

因此,在第三张图片中,文字不是中心,也没有任何标签。 另外,is不是粗体(如果不是下划线,那不是问题)。

但真正的问题是它保持对齐,没有标签,而它应该与标签对齐。

这是我的代码:

                                    Text text = sdtFils.Descendants<Text>().FirstOrDefault();
                                    string[] lst = variableCourrier.Tables[0].Rows[0][v_ligne["NOM_CHAMP"].ToString()].ToString().Split("$".ToCharArray());
                                    Paragraph existPar = sdtFils.Descendants<Paragraph>().FirstOrDefault();
                                    if (existPar == null)
                                    {
                                        existPar = sdtFils.Ancestors<Paragraph>().FirstOrDefault();
                                    }
                                    Run existRun = sdtFils.Descendants<Run>().FirstOrDefault();
                                    foreach (string str in lst)
                                    {
                                        Paragraph p = new Paragraph();

                                        ParagraphProperties pPr = new ParagraphProperties(new Tabs(new TabStop() { Val = TabStopValues.Center, Position = 7372 }),
                                            new Justification() { Val = JustificationValues.Left },
                                            new ParagraphStyleId() { Val = "Paragraphedeliste" },
                                            new Indentation() { Start = (int.Parse(existPar.ParagraphProperties.Indentation.Left.Value) + int.Parse(existPar.ParagraphProperties.Indentation.FirstLine.Value)).ToString() });

                                        string[] lstDetails = str.Split(";".ToCharArray());
                                        int j = 0;
                                        foreach (string strDetail in lstDetails)
                                        {
                                            if (!string.IsNullOrEmpty(strDetail))
                                            {
                                                TabChar tab = new TabChar();
                                                Text t = new Text();
                                                Run r = new Run();
                                                RunProperties runPr = new RunProperties(new FontSize() { Val = existRun.RunProperties.FontSize.Val });

                                                r.AppendChild(runPr);
                                                t.Text = j == 0 ? "" + strDetail : " " + strDetail;
                                                r.AppendChild(t);


                                                if (j != lstDetails.Length - 1)
                                                {
                                                    Break br = new Break();
                                                    r.AppendChild(br);
                                                }
                                                p.AppendChild(r);
                                                j++;
                                            }
                                        }

                                        text.Parent.Parent.Parent.Parent.InsertAfterSelf(p);
                                    }

使用此代码,我将字符串的每个部分分开,以便我可以将它们放入它们的行中。

我认为不正确的部分是我定义Paragraph元素时,但我不知道如何纠正它,以获得看起来像第二张图像的重复。< / p>

任何人都可以帮我这个吗?

如果不够清楚,请告诉我,我会编辑问题。

谢谢。

1 个答案:

答案 0 :(得分:0)

您可以使用 Open XML SDK 2.5 Productivity Tool (请记住.docx文件是压缩成单个文件的XML文档集合),打开* .docx并单击反映代码以查看正确设置文档样式所需的代码。

enter image description here

此外,您还可以使用Open XML Package Editor for Visual Studio加载项,它提供了一种简单的方法来解析和编辑Open Packaging Conventions文件,包括Word,Excel,PowerPoint和Visio文档。

一切都是open source,可以在Github上找到。