我使用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);
因为这会将每个标题设置为"某些标题在这里"
答案 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.Linq
和System.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";