在 Word 文档的段落开头、中部和最后添加日期域,能够实现动态时间戳的嵌入,使得文档内容能够根据打开或打印文档的时间自动更新日期。在段落开头添加日期域,可以快速标注文档创建或更新时间;在段落中部插入,则可用于记录特定事件的发生日期;而在段落尾部添加,常见于版权声明、修订记录或作为时间戳证明文档的完整性。本文将介绍如何使用 Spire.Doc for .NET 在 C# 项目中在 Word 文档段落开头、中部和最后添加日期域。
安装 Spire.Doc for .NET
首先,您需要将 Spire.Doc for.NET 包含的 DLL 文件作为引用添加到您的 .NET 项目中。DLL 文件可以从此链接下载,也可以通过 NuGet 安装。
PM> Install-Package Spire.DocC# 在 Word 文档段落开头插入日期域
为了实现在 Word 文档的段落开头精准插入日期域的目标,需要利用 Paragraph.ChildObjects.Insert(0, DateField) 方法将自定义的日期字段 DateField 插入到 Paragraph 对象的 ChildObjects 集合的起始位置(索引0),即可确保日期域是出现在段落的最前端。以下是详细的步骤:
- 创建一个新的 Document 实例。
- 使用 Document.LoadFromFile() 方法从文件系统中加载一个Word文档。
- 通过 Document.Sections[0] 访问文档的第一个 Section 对象。
- 通过 Section.Body.Paragraphs[0] 访问章节主体内的第一个 Paragraph 对象。
- 提取源文本的字符格式 CharacterFormat 对象。
- 创建一个新的 Field 对象,并设定其类型为日期字段 FieldType.FieldDate。
- 定义日期字段的显示格式为 "yyyy年MM月dd日"。
- 将前面提取的字符格式应用于日期字段。
- 修改日期字段的字符格式,使字体变为加粗。
- 在段落的开始处插入创建好的日期字段。
- 通过 Document.CreateParagraphItem(ParagraphItemType.FieldMark) 创建一个字段标记并设置其类型为结束标记 FieldMarkType.FieldEnd。
- 紧接着日期字段之后,在段落中插入字段结束标记。
- 将字段结束标记与日期字段进行关联。
- 设置 Document.IsUpdateFields 为 true,确保文档中的所有字段得到更新。
- 使用 Document.SaveToFile() 方法将修改保存到文档。
- C#
using Spire.Doc;
using Spire.Doc.Documents;
using Spire.Doc.Fields;
using Spire.Doc.Formatting;
namespace SpireDocDemo
{
    internal class Program
    {
        static void Main(string[] args)
        {
            // 创建一个新的文档对象
            Document document = new Document();
            // 从文件加载文档
            document.LoadFromFile("示例01.docx");
            // 获取文档的第一个章节
            Section section = document.Sections[0];
            // 获取章节主体的第一个段落
            Paragraph paragraph = section.Body.Paragraphs[0];
            // 创建一个字符格式对象
            CharacterFormat charaterFormat = new CharacterFormat(document);
            for (int i = 0; i < paragraph.ChildObjects.Count; i++)
            {
                // 检查段落子对象是否为文本范围
                if (paragraph.ChildObjects[i].DocumentObjectType == DocumentObjectType.TextRange)
                {
                    // 设置字符格式为当前文本范围的格式
                    charaterFormat = ((TextRange)paragraph.ChildObjects[i]).CharacterFormat;
                    break;
                }
            }
            // 创建一个日期字段
            Field dateField = new Field(document);
            dateField.Type = FieldType.FieldDate;
            // 设置字段代码,以显示日期格式为"yyyy年MM月dd日"
            dateField.Code = @"DATE  \@ " + "\"yyyy年MM月dd日\" ";
            // 应用之前获取的字符格式到日期字段
            dateField.ApplyCharacterFormat(charaterFormat);
            // 设置日期字段的字体加粗
            dateField.CharacterFormat.Bold = true;
            // 在段落开始处插入日期字段
            paragraph.ChildObjects.Insert(0, dateField);
            // 创建字段结束标记
            FieldMark fieldEnd = (FieldMark)document.CreateParagraphItem(ParagraphItemType.FieldMark);
            fieldEnd.Type = FieldMarkType.FieldEnd;
            // 在段落中插入字段结束标记
            paragraph.ChildObjects.Insert(1, fieldEnd);
            // 设置日期字段的结束标记
            dateField.End = fieldEnd;
            // 更新文档中的所有字段
            document.IsUpdateFields = true;
            // 将文档保存到新的文件
            document.SaveToFile("在段落开头插入日期域.docx", FileFormat.Docx);
            // 释放文档对象所占用的资源
            document.Dispose();
        }
    }
}
C# 在 Word 文档段落中插入日期域
为了在段落中精确地插入日期域,首先得锁定其具体位置。这一过程通常是基于对文档中特定目标文本的定位来实现的。换句话说,我们先寻找一个已知的文本标记:例如“发货”作为参照点,然后在此标记前方无缝嵌入日期域,从而确保其准确无误地出现在预期位置上。以下是详细的步骤:
- 创建一个新的 Document 实例。
- 使用 Document.LoadFromFile() 方法从文件系统中加载一个 Word 文档。
- 使用 Document.FindString() 方法搜索目标文本 TextSelection 对象。
- 通过 TextSelection.GetAsOneRange() 方法获取搜索结果的文本范围。
- 从文本范围中提取其字符格式,以便后续应用到插入的日期字段上。
- 使用 TextRange.OwnerParagraph 属性确定文本范围所在的段落。
- 利用 Paragraph.ChildObjects.IndexOf(textRange) 方法找到文本范围在段落中的相对位置,以确定插入日期字段的具体位置。
- 创建一个新的 Field 对象,类型设为 FieldType.FieldDate,用于插入日期。
- 定义日期字段的代码,设置显示格式为 "yyyy年MM月dd日"。
- 在段落的适当位置(在找到的文本之前)插入日期字段。
- 在段落中,在日期字段后插入字段结束标记。
- 将字段结束标记关联到日期字段上,完成字段定义。
- 设置 Document.IsUpdateFields 属性为 true,确保文档中的所有字段得到更新。
- 使用 Document.SaveToFile() 方法将修改保存到文档。
- C#
using Spire.Doc;
using Spire.Doc.Documents;
using Spire.Doc.Fields;
using Spire.Doc.Formatting;
namespace SpireDocDemo
{
    internal class Program
    {
        static void Main(string[] args)
        {
            // 创建一个新的文档对象
            Document document = new Document();
            // 从文件加载文档
            document.LoadFromFile("示例02.docx");
            // 查找文档中的字符串
            TextSelection textSelection = document.FindString("发货", false, false);
            // 获取找到的文本范围
            TextRange textRange = textSelection.GetAsOneRange();
            // 获取文本范围的字符格式
            CharacterFormat charaterFormat = textRange.CharacterFormat;
            // 获取文本范围所属的段落
            Paragraph paragraph = textRange.OwnerParagraph;
            // 获取文本范围在段落中的位置索引
            int index = paragraph.ChildObjects.IndexOf(textRange);
            // 创建一个日期字段
            Field dateField = new Field(document);
            dateField.Type = FieldType.FieldDate;
            // 设置字段代码,以显示日期格式为"yyyy年MM月dd日"
            dateField.Code = @"DATE  \@ " + "\"yyyy年MM月dd日\" ";
            // 应用之前获取的字符格式到日期字段
            dateField.ApplyCharacterFormat(charaterFormat);
            // 设置日期字段的字体加粗
            dateField.CharacterFormat.Bold = true;
            // 在段落开始处插入日期字段,位置在找到的文本之前
            paragraph.ChildObjects.Insert(index, dateField);
            // 创建字段结束标记
            FieldMark fieldEnd = (FieldMark)document.CreateParagraphItem(ParagraphItemType.FieldMark);
            fieldEnd.Type = FieldMarkType.FieldEnd;
            // 在段落中插入字段结束标记,紧随日期字段之后
            paragraph.ChildObjects.Insert(index + 1, fieldEnd);
            // 设置日期字段的结束标记
            dateField.End = fieldEnd;
            // 更新文档中的所有字段
            document.IsUpdateFields = true;
            // 将文档保存到新的文件
            document.SaveToFile("在段落中插入日期域.docx", FileFormat.Docx);
            // 释放文档对象所占用的资源
            document.Dispose();
        }
    }
}
C# 在 Word 文档段落尾部添加日期域
为了在段落尾部高效地插入一个日期字段,Spire.Doc 库提供了一项便利的功能。具体而言,只需简单调用 Paragraph.AppendField("Date", FieldType.FieldDate) 这一方法。 以下是详细的步骤:
- 创建一个新的 Document 对象。
- 使用 Document.LoadFromFile() 方法从文件系统中加载一个 Word 文档。
- 通过 Document.Sections[0] 访问文档的第一个 Section 对象。
- 从章节 Section 的 Body 属性中获取最后一个 Paragraph 段落对象,这是为了在段落的末尾插入日期字段。
- 创建一个 CharacterFormat 对象,用于存储和应用字符格式。
- 遍历段落的 ChildObjects 集合,查找其中的 TextRange 对象,目的是为了获取段落中现有文本的字符格式。
- 当找到第一个 TextRange 时,获取其 CharacterFormat 属性,然后停止循环。这是因为我们只需获取段落中任一文本的格式,以便应用到即将创建的日期字段上。
- 使用 AppendField 方法向段落末尾添加一个日期字段,类型为 FieldType.FieldDate。
- 设置日期字段的代码,以显示日期格式为 "yyyy年MM月dd日"。
- 将上面获取的 CharacterFormat 应用到刚创建的日期字段上,以保持文档格式的一致性。
- 设置日期字段的字体为加粗,以突出显示日期。
- 将 Document.IsUpdateFields 属性设置为 true,确保在保存文档前更新所有字段的内容。
- 使用 Document.SaveToFile() 方法将修改保存到文档。
- C#
using Spire.Doc;
using Spire.Doc.Documents;
using Spire.Doc.Fields;
using Spire.Doc.Formatting;
namespace SpireDocDemo
{
    internal class Program
    {
        static void Main(string[] args)
        {
            // 创建一个新的文档对象
            Document document = new Document();
            // 从文件加载文档
            document.LoadFromFile("示例03.docx");
            // 获取文档的第一个章节
            Section section = document.Sections[0];
            // 获取章节主体的最后一个段落
            Paragraph paragraph = (Paragraph)section.Body.LastParagraph;
            // 创建一个字符格式对象
            CharacterFormat charaterFormat = new CharacterFormat(document);
            for (int i = 0; i < paragraph.ChildObjects.Count; i++)
            {
                // 检查段落子对象是否为文本范围
                if (paragraph.ChildObjects[i].DocumentObjectType == DocumentObjectType.TextRange)
                {
                    // 设置字符格式为当前文本范围的格式
                    charaterFormat = ((TextRange)paragraph.ChildObjects[i]).CharacterFormat;
                    break;
                }
            }
            // 创建一个日期字段
            Field dateField = paragraph.AppendField("Date", FieldType.FieldDate);
            // 设置字段代码,以显示日期格式为"yyyy年MM月dd日"
            dateField.Code = @"DATE  \@ " + "\"yyyy年MM月dd日\" ";
            // 应用之前获取的字符格式到日期字段
            dateField.ApplyCharacterFormat(charaterFormat);
            // 设置日期字段的字体加粗
            dateField.CharacterFormat.Bold = true;
            // 更新文档中的所有字段
            document.IsUpdateFields = true;
            // 将文档保存到新的文件
            document.SaveToFile("在段落末尾插入日期域.docx", FileFormat.Docx);
            // 释放文档对象所占用的资源
            document.Dispose();
        }
    }
}
申请临时 License
如果您希望删除结果文档中的评估消息,或者摆脱功能限制,请该Email地址已收到反垃圾邮件插件保护。要显示它您需要在浏览器中启用JavaScript。获取有效期 30 天的临时许可证。
 



 
					



