使用com组件编辑word

一个普通的窗体应用,6个button

复制代码
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using MsWord = Microsoft.Office.Interop.Word;
using Microsoft.Office.Interop.Word;
using System.IO;
using Spire.Doc;
using Spire.Doc.Documents;
using Spire.Doc.Fields;

namespace wordcomtest
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {

        }
        public static class common
        {
             public static MsWord.Application oWordApplic;//a reference to Wordapplication
            public static MsWord.Document oDoc;//a reference to thedocument
            public static string doc_file_name = Directory.GetCurrentDirectory() + @"\content.doc";

        }

        private void button1_Click(object sender, EventArgs e)
        {
            
            try
            {
                
                if (File.Exists(common.doc_file_name))
                {
                    File.Delete(common.doc_file_name);
                }
                common.oWordApplic = new MsWord.Application();
                object missing = System.Reflection.Missing.Value;
            }
            catch (Exception e2)
            {
                MessageBox.Show(e2.Message);
            }
            try
            { }
            catch (Exception e2)
            {
                MessageBox.Show(e2.Message);
            }
        }

        private void button2_Click(object sender, EventArgs e)
        {
            try
            {
                MsWord.Range curRange;
                object curTxt;
                int curSectionNum = 1;
                common.oDoc = common.oWordApplic.Documents.Add();
                common.oDoc.Activate();
                //Console.WriteLine(" 正在生成文档小节");
                object section_nextPage = MsWord.WdBreakType.wdSectionBreakNextPage;
                object page_break = MsWord.WdBreakType.wdPageBreak;
                //添加三个分节符,共四个小节
                for (int si = 0; si < 2; si++)
                {
                    common.oDoc.Paragraphs[1].Range.InsertParagraphAfter();
                    common.oDoc.Paragraphs[1].Range.InsertBreak(ref section_nextPage);
                    
                 }
            }
            catch (Exception e2)
            {
                MessageBox.Show(e2.Message);
            }
        }

        private void button3_Click(object sender, EventArgs e)
        {

            try
            {
                
                int curSectionNum = 1;
                var curRange = common.oDoc.Sections[curSectionNum].Range.Paragraphs[1].Range;
                curRange.Select();
                string one_str, key_word;
                //摘要的文本来自 abstract.txt 文本文件
                StreamReader file_abstract = new StreamReader("abstract.txt");
                common.oWordApplic.Options.Overtype = false;//overtype 改写模式
                MsWord.Selection currentSelection = common.oWordApplic.Selection;
                if (currentSelection.Type == MsWord.WdSelectionType.wdSelectionNormal)
                {
                    one_str = file_abstract.ReadLine();//读入题目
                    currentSelection.TypeText(one_str);
                    currentSelection.TypeParagraph(); //添加段落标记
                    currentSelection.TypeText(" 摘要");//写入" 摘要" 二字
                    currentSelection.TypeParagraph(); //添加段落标记
                    key_word = file_abstract.ReadLine();//读入题目
                    one_str = file_abstract.ReadLine();//读入段落文本
                    while (one_str != null)
                    {
                        currentSelection.TypeText(one_str);
                        currentSelection.TypeParagraph(); //添加段落标记
                        one_str = file_abstract.ReadLine();
                    }
                    currentSelection.TypeText(" 关键字:");
                    currentSelection.TypeText(key_word);
                    currentSelection.TypeParagraph(); //添加段落标记
                }
                file_abstract.Close();
            }
            catch (Exception e2)
            {
                MessageBox.Show(e2.Message);
            }
        }

        private void button4_Click(object sender, EventArgs e)
        {
            try
            {
                
                int curSectionNum = 3;
                common.oDoc.Sections[curSectionNum].Range.Paragraphs[1].Range.Select();
                Range curRange = common.oDoc.Sections[curSectionNum].Range.Paragraphs[1].Range;
                Console.WriteLine(" 正在设置标题样式");
                object wdFontSizeIndex;
                wdFontSizeIndex = 14;//此序号在 word 中的编号是格式 > 显示格式 > 样式和格式 > 显示
                                     //14 即是标题一一级标题:三号黑体。
                common.oWordApplic.ActiveDocument.Styles.get_Item(ref wdFontSizeIndex).ParagraphFormat.Alignment =
                MsWord.WdParagraphAlignment.wdAlignParagraphCenter;
                common.oWordApplic.ActiveDocument.Styles.get_Item(ref wdFontSizeIndex).Font.Name = " 黑体";
                common.oWordApplic.ActiveDocument.Styles.get_Item(ref wdFontSizeIndex).Font.Size = 16;//三号
                wdFontSizeIndex = 15;//15 即是标题二二级标题:小三号黑体。
                common.oWordApplic.ActiveDocument.Styles.get_Item(ref wdFontSizeIndex).Font.Name = " 黑体";
                common.oWordApplic.ActiveDocument.Styles.get_Item(ref wdFontSizeIndex).Font.Size = 15;//小三
                                                                                               //用指定的标题来设定文本格式
                object Style1 = MsWord.WdBuiltinStyle.wdStyleHeading1;//一级标题:三号黑体。
                object Style2 = MsWord.WdBuiltinStyle.wdStyleHeading2;//二级标题:小三号黑体。
                common.oDoc.Sections[curSectionNum].Range.Select();
                
                var currentSelection = common.oWordApplic.Selection;
                //读入第一章文本信息
                StreamReader file_content = new StreamReader("content.txt");
                var one_str = file_content.ReadLine();//一级标题
                currentSelection.TypeText(one_str);
                currentSelection.TypeParagraph(); //添加段落标记
                one_str = file_content.ReadLine();//二级标题
                currentSelection.TypeText(one_str);
                currentSelection.TypeParagraph(); //添加段落标记
                one_str = file_content.ReadLine();//正文
                while (one_str != null)
                {
                    currentSelection.TypeText(one_str);
                    currentSelection.TypeParagraph(); //添加段落标记
                    one_str = file_content.ReadLine();//正文
                     }
                file_content.Close();
                //段落的对齐方式
                curRange = common.oDoc.Sections[curSectionNum].Range.Paragraphs[1].Range;
                curRange.set_Style(ref Style1);
                common.oDoc.Sections[curSectionNum].Range.Paragraphs[1].Alignment =
                MsWord.WdParagraphAlignment.wdAlignParagraphCenter;
                curRange = common.oDoc.Sections[curSectionNum].Range.Paragraphs[2].Range;
                curRange.set_Style(ref Style2);
                //第一章正文文本格式
                for (int i = 3; i < common.oDoc.Sections[curSectionNum].Range.Paragraphs.Count; i++)
                {
                    curRange = common.oDoc.Sections[curSectionNum].Range.Paragraphs[i].Range;
                    curRange.Select();
                    curRange.Font.Name = " 宋体";
                    curRange.Font.Size = 12;
                    common.oDoc.Sections[curSectionNum].Range.Paragraphs[i].LineSpacingRule =
                    MsWord.WdLineSpacing.wdLineSpaceMultiple;
                    //多倍行距,1.25 倍,这里的浮点值是以 point 为单位的,不是行距的倍数
                    common.oDoc.Sections[curSectionNum].Range.Paragraphs[i].LineSpacing = 15f;
                    common.oDoc.Sections[curSectionNum].Range.Paragraphs[i].IndentFirstLineCharWidth(2);
                }
            }
            catch (Exception e2)
            {
                MessageBox.Show(e2.Message);
            }
        }

        private void button5_Click(object sender, EventArgs e)
        {
            try
            {
                
                object missing = System.Reflection.Missing.Value;
                //设置页脚 section 1 摘要
                int curSectionNum = 1;
                common.oDoc.Sections[curSectionNum].Range.Select();
                //进入页脚视图
                common.oWordApplic.ActiveWindow.ActivePane.View.SeekView =
                MsWord.WdSeekView.wdSeekCurrentPageFooter;
                common.oDoc.Sections[curSectionNum].
                Headers[MsWord.WdHeaderFooterIndex.wdHeaderFooterPrimary].
                Range.Borders[MsWord.WdBorderType.wdBorderBottom].LineStyle =
                MsWord.WdLineStyle.wdLineStyleNone;
                common.oWordApplic.Selection.HeaderFooter.PageNumbers.RestartNumberingAtSection = true;
                common.oWordApplic.Selection.HeaderFooter.PageNumbers.NumberStyle
                = MsWord.WdPageNumberStyle.wdPageNumberStyleUppercaseRoman;
                common.oWordApplic.Selection.HeaderFooter.PageNumbers.StartingNumber = 1;
                //切换到文档
                common.oWordApplic.ActiveWindow.ActivePane.View.SeekView =
                MsWord.WdSeekView.wdSeekMainDocument;
                //Console.WriteLine(" 正在设置第二节目录页眉内容");
                //设置页脚 section 2 目录
                curSectionNum = 2;
                common.oDoc.Sections[curSectionNum].Range.Select();
                

                //进入页脚视图
                common.oWordApplic.ActiveWindow.ActivePane.View.SeekView =
                MsWord.WdSeekView.wdSeekCurrentPageFooter;
                common.oDoc.Sections[curSectionNum].
                Headers[MsWord.WdHeaderFooterIndex.wdHeaderFooterPrimary].
                Range.Borders[MsWord.WdBorderType.wdBorderBottom].LineStyle =
                MsWord.WdLineStyle.wdLineStyleNone;
                common.oWordApplic.Selection.HeaderFooter.PageNumbers.RestartNumberingAtSection = false;
                common.oWordApplic.Selection.HeaderFooter.PageNumbers.NumberStyle
                = MsWord.WdPageNumberStyle.wdPageNumberStyleUppercaseRoman;
                //oWordApplic.Selection.HeaderFooter.PageNumbers.StartingNumber = 1;
                //切换到文档
                common.oWordApplic.ActiveWindow.ActivePane.View.SeekView =
                MsWord.WdSeekView.wdSeekMainDocument;
                //第一章页眉页码设置
                curSectionNum = 3;
                common.oDoc.Sections[curSectionNum].Range.Select();
                //切换入页脚视图
                common.oWordApplic.ActiveWindow.ActivePane.View.SeekView =
                MsWord.WdSeekView.wdSeekCurrentPageFooter;
                var currentSelection = common.oWordApplic.Selection;
                var curRange = currentSelection.Range;
                //本节页码不续上节
                common.oWordApplic.Selection.HeaderFooter.PageNumbers.RestartNumberingAtSection = true;
                //页码格式为阿拉伯
                common.oWordApplic.Selection.HeaderFooter.PageNumbers.NumberStyle
                = MsWord.WdPageNumberStyle.wdPageNumberStyleArabic;
                //起如页码为 1
                common.oWordApplic.Selection.HeaderFooter.PageNumbers.StartingNumber = 1;
                //添加页码域
                object fieldpage = MsWord.WdFieldType.wdFieldPage;
                common.oWordApplic.Selection.Fields.Add(common.oWordApplic.Selection.Range,
                ref fieldpage, ref missing, ref missing);
                //居中对齐
                common.oWordApplic.Selection.ParagraphFormat.Alignment =
                MsWord.WdParagraphAlignment.wdAlignParagraphCenter;
                //本小节不链接到上一节
                common.oDoc.Sections[curSectionNum].Headers[Microsoft.Office.Interop.
                Word.WdHeaderFooterIndex.wdHeaderFooterPrimary].LinkToPrevious = false;
                //切换入正文视图

                common.oWordApplic.ActiveWindow.ActivePane.View.SeekView =
                MsWord.WdSeekView.wdSeekMainDocument;

                
            }
            catch (Exception e2)
            {
                MessageBox.Show(e2.Message);
            }
        }

        private void button6_Click(object sender, EventArgs e)
        {
            try
            {

                //common.oDoc.Fields[1].Update();
                
                //保存文档
                //Console.WriteLine(" 正在保存 Word 文档");
                //string doc_file_name = Directory.GetCurrentDirectory() + @"\content.doc";
                object fileName;
                fileName = common.doc_file_name;
                common.oDoc.SaveAs(ref fileName);
                common.oDoc.Close();
                //释放 COM 资源
                System.Runtime.InteropServices.Marshal.ReleaseComObject(common.oDoc);
                common.oDoc = null;
                common.oWordApplic.Quit();
                System.Runtime.InteropServices.Marshal.ReleaseComObject(common.oWordApplic);
                common.oWordApplic = null;


                
                Spire.Doc.Document document = new Spire.Doc.Document(@"content.doc");
                Spire.Doc.Section section = document.AddSection();
                Spire.Doc.HeaderFooter footer = document.Sections[0].HeadersFooters.Footer;

                //Add text and image to the footer
                Spire.Doc.Documents.Paragraph paragraph = footer.AddParagraph();
                DocPicture footerImage = paragraph.AppendPicture(Image.FromFile("whu.png"));
                TextRange TR = paragraph.AppendText("Supported and Hosted by the non-profit Wikimedia Foundation.");

                //Format the text and image
                paragraph.Format.HorizontalAlignment = Spire.Doc.Documents.HorizontalAlignment.Left;
                TR.CharacterFormat.FontName = "Calibri";
                TR.CharacterFormat.Bold = true;


                //添加一个Shape,并设置其大小和样式
                Spire.Doc.Documents.Paragraph paragraph1 = section.AddParagraph();
                ShapeObject shape = paragraph1.AppendShape(240, 60, ShapeType.TextWave);

                //设置shape的位置
                shape.VerticalPosition = 80;
                shape.HorizontalPosition = 100;

                //写入艺术字文本和设置斜体
                shape.WordArt.Text = "艺术字效果";
                shape.WordArt.Italic = true;

                //设置文字填充样式
                shape.FillColor = System.Drawing.Color.Red;
                shape.StrokeColor = System.Drawing.Color.Gray;

                // Save the document and launch to see the output




                Spire.Doc.Documents.Paragraph paragraph2 = document.Sections[0].Paragraphs[2];
                Spire.Doc.Fields.Footnote footnote = paragraph2.AppendFootnote(FootnoteType.Footnote);
                DocumentObject obj = null;

                for (int i = 0; i < paragraph.ChildObjects.Count; i++)

                {

                    obj = paragraph.ChildObjects[i];

                    if (obj.DocumentObjectType == DocumentObjectType.TextRange)

                    {

                        TextRange textRange = obj as TextRange;

                        if (textRange.Text == "推箱子")

                        {

                            //为添加脚注的字符串设置加粗格式

                            textRange.CharacterFormat.Bold = true;

                            //插入脚注

                            paragraph.ChildObjects.Insert(i + 1, footnote);

                            break;

                        }

                    }

                }
                TextRange text = footnote.TextBody.AddParagraph().AppendText("推箱子是一款来自日本的古老游戏,其设计目的是训练人的逻辑思维能力。游戏场景一般是设定在空间狭小的仓库中,要求把箱子摆放到指定位置。这就要求玩家巧妙的运用有限的空间和通道,合理的安排箱子的位置和移动次序才可能完成任务。");

                text.CharacterFormat.FontName = "Arial Black";

                text.CharacterFormat.FontSize = 9;

                text.CharacterFormat.TextColor = Color.DarkGray;

                footnote.MarkerCharacterFormat.FontName = "Calibri";

                footnote.MarkerCharacterFormat.FontSize = 12;

                footnote.MarkerCharacterFormat.Bold = true;

                footnote.MarkerCharacterFormat.TextColor = Color.DarkGreen;




                document.SaveToFile("content.doc", FileFormat.Doc);
                //System.Diagnostics.Process.Start("text.docx");
            }
            catch (Exception e2)
            {
                MessageBox.Show(e2.Message);
            }
        }
    }
}

添加com引用

使用菜单:项目 -- 添加引用,在 COM 标签页添加名为 "MicrosoftWord 15.0 Object Library" 的 Word 对象互操作库

复制代码
在程序代码源文件中添加命名空间支持:
using MsWord=Microsoft.Office.Interop.Word;

所有操作 Word 对象的 COM 方法调用代码必须处在在异常处理代码块中,先创建 Word 的
Application 对象,它是 Word 对象操作的最开始,创建此对象时 WINWORD.EXE 进程启动。
MsWord.Application oWordApplic;//a reference to Wordapplication
MsWord.Document oDoc;//a reference to thedocument
try
{
}
catch (Exception e2)
{
MessageBox.Show(e2.Message);
}
后续所有操作 Word 对象的代码都要处于 Try 语法块中。

检测到旧的 word 文 档后删除旧文档。

复制代码
string doc_file_name = Directory.GetCurrentDirectory() + @"\content.doc";
if (File.Exists(doc_file_name))
{
File.Delete(doc_file_name);
}
oWordApplic = new MsWord.Application();
object missing = System.Reflection.Missing.Value;

创建 Word 文档的小节

分节符在 Word 文档中是用来生成小节的控制符,每小节的页眉页脚的内容,页码格式等
保持一致。本项目生成的 Word 文档要求有不同的页码格式和页眉内容,首先插入 4 个分节符获得 5 个小节,第 1 小节是摘要内容,第 2 小节是目录,第 3 小节是第一章,第 4 小节是表 格,第 5 小节是图片。第 1, 、 2 小节的页码是大写罗马数字,第 3 、 4 、 5 小节的页码是阿拉伯 数字,且起始页码为 1 。

复制代码
MsWord.Range curRange;
object curTxt;
int curSectionNum = 1;
oDoc = oWordApplic.Documents.Add(ref missing, ref missing, ref missing, ref missing);
oDoc.Activate();
Console.WriteLine(" 正在生成文档小节");
object section_nextPage = MsWord.WdBreakType.wdSectionBreakNextPage;
object page_break = MsWord.WdBreakType.wdPageBreak;
//添加三个分节符,共四个小节
for (int si = 0; si < 4; si++)
{
oDoc.Paragraphs[1].Range.InsertParagraphAfter();
oDoc.Paragraphs[1].Range.InsertBreak(ref section_nextPage);
 }
相关推荐
fangzhanpeng1687 天前
快速掌握C#语言基础知识点(1.基础数据类型)
开发语言·c#·1024程序员节
无己心9 天前
面向多平台 AI 搜索引擎的适配层架构设计
前端·人工智能·搜索引擎·ai·1024程序员节
u01030552715 天前
AI驱动的安卓UI自动生成功能实现
人工智能·1024程序员节
u01030552716 天前
长株潭智能体赋能腾讯元器链接共享
1024程序员节
云贝贝贝17 天前
OceanBase认证体系介绍与备考指南
运维·服务器·oceanbase·1024程序员节
u01030552717 天前
Java图像处理实战指南
人工智能·1024程序员节
u01030552718 天前
Java AWT鼠标事件全解析
人工智能·1024程序员节
u01030552720 天前
Java实用类应用精讲
人工智能·1024程序员节
u01030552721 天前
Java I/O核心操作实战
人工智能·1024程序员节
u01030552722 天前
ArrayList操作详解与实战应用
人工智能·1024程序员节