文件部分

时间:2016-04-13 03:29:27

标签: c# ms-word export sections

我使用C#

将数据从数据库导出到WinForms中的word文档

由于使用了以下结果文件有5个部分:

    //whoever extends this has to be some kind of Toy
    abstract class Toy
    {
        public void play(){
            //do some play
        }
    }

    //whoever implements this will be able to Fly
    interface Flyable
    {
        public void fly();
    }

    BirdToy extends Toy implements Flyable 
    {

    }

    Vehicle1Toy extends Toy
    {
        //like Truck
    }

    Vehicle2Toy extends Toy implements Flyable
    {
        //like helicopter
    }

    class Person implements Flyable
    {
      //like superman
    }

我想知道的是,我如何单独引用每个部分 - 所以我可以为每个部分设置不同的标题,而不是这样做:

Range.InsertBreak(WdBreakType.wdSectionBreakNextPage);

因为这会将每个标题设置为"某些标题在这里"

2 个答案:

答案 0 :(得分:1)

默认情况下,在Word文档中生成新部分时,属性LinkToPrevious将设置为True。这意味着新部分“继承”上一部分的页眉和页脚。

为了在每个部分中包含不同的页眉/页脚内容,必须将LinkToPrevious设置为False。这可以在您创建部分时完成,也可以在此之后的任何时间完成,但应在之前将内容写入页眉/页脚。如果链接在页眉/页脚包含内容后中断,则该内容将丢失(但仍保留在该部分所链接的“父”页眉/页脚中)。

因此,要解决单个部分,请删除链接,然后将内容写入其标题:

Word.Section sec = doc.Sections[indexValue]
Word.HeaderFooter hf = sec.Headers[Word.WdHeaderFooterIndex.wdHeaderFooterPrimary];
hf.LinkToPrevious = false;
hf.Range.Text = "Content for this header";

注意:无需将这些部分写入List,以便为它们提供不同的内容。

答案 1 :(得分:0)

由于Sections属性只是一个无类型的IEnumerable,您可以执行以下操作从中创建一个类型的部分列表。请注意,您需要导入System.LinqSystem.Collections.Generic命名空间才能生效。

List<Section> sections = new List<Section>(aDoc.Sections.Cast<Sections>());

现在,如果您需要设置特定部分的标题,可以编写

Section section1 = sections[0];
var section1HeaderRange = section1.Headers[WdHeaderFooterIndex.wdHeaderFooterPrimary].Range;
section1HeaderRange.Text = "Section 1 Header";

Section section2 = sections[1];
var section2HeaderRange = section2.Headers[WdHeaderFooterIndex.wdHeaderFooterPrimary].Range;
section2HeaderRange.Text = "Section 2 Header";