word操作类

Posted on   云起  阅读(4)  评论(0编辑  收藏  举报  
public class WordUtility
    {
        private _Application wordApp = null;

        private _Document wordDoc = null;

        public _Application Application
        {
            get
            {
                return wordApp;
            }
            set
            {
                wordApp = value;
            }
        }

        public _Document Document
        {
            get
            {

                return wordDoc;

            }
            set
            {
                wordDoc = value;
            }
        }



        //通过模板创建新文档

        public void CreateNewDocument(string filePath)
        {

            killWinWordProcess();

            wordApp = new Application();

            wordApp.DisplayAlerts = WdAlertLevel.wdAlertsNone;

            wordApp.Visible = false;

            object missing = System.Reflection.Missing.Value;

            object templateName = filePath;

            wordDoc = wordApp.Documents.Add(ref templateName, ref missing,

                ref  missing, ref  missing);

            //ref  missing, ref  missing, ref missing,

            //    ref  missing, ref  missing, ref  missing, ref  missing, ref missing,

            //    ref  missing, ref  missing, ref  missing, ref  missing);

        }

        private void HideFile(String path)
        {
            try
            {
                FileAttributes fa = FileAttributes.Hidden | FileAttributes.ReadOnly | FileAttributes.System;

                File.SetAttributes(path, fa);
            }
            catch
            {
            }
        }



        //保存新文件

        public void SaveDocument(string filePath)
        {

            object fileName = filePath;

            object format = WdSaveFormat.wdFormatDocument;//保存格式

            object miss = System.Reflection.Missing.Value;

            wordDoc.SaveAs(ref fileName, ref  format, ref  miss,

                ref  miss, ref  miss, ref  miss, ref  miss,

                ref  miss, ref  miss, ref  miss, ref  miss,

                ref  miss, ref  miss, ref  miss, ref  miss,

                ref  miss);

            //关闭wordDoc,wordApp对象

            object SaveChanges = WdSaveOptions.wdSaveChanges;

            object OriginalFormat = WdOriginalFormat.wdOriginalDocumentFormat;

            object RouteDocument = false;

            wordDoc.Close(ref SaveChanges, ref OriginalFormat, ref RouteDocument);

            wordApp.Quit(ref SaveChanges, ref OriginalFormat, ref RouteDocument);

        }


        /// <summary>
        /// 获取所有的书签
        /// </summary>
        /// <returns></returns>
        public Bookmarks GetDocBookmarks()
        {
            return wordApp.ActiveDocument.Bookmarks;
        }

        public void SetText(object markName, String text)
        {
            try
            {
                Bookmark mark = wordDoc.Bookmarks.get_Item(ref markName);
                if (mark != null)
                {
                    mark.Range.Text = text;
                    //wordApp.Selection.TypeText(text);
                }//wordDoc.Bookmarks.get_Item(ref markName).Range.Text = text;
            }
            catch
            {
            }
        }


        //在书签处插入值

        public bool InsertValue(string bookmark, string value)
        {
            object bkObj = bookmark;

            if (wordApp.ActiveDocument.Bookmarks.Exists(bookmark))
            {

                wordApp.ActiveDocument.Bookmarks.get_Item(ref bkObj).Select();

                wordApp.Selection.TypeText(value);

                return true;

            }

            return false;
        }



        //插入表格,bookmark书签

        public Table InsertTable(string bookmark, int rows, int columns, float width)
        {

            object miss = System.Reflection.Missing.Value;

            object oStart = bookmark;

            Range range = wordDoc.Bookmarks.get_Item(ref oStart).Range;//表格插入位置

            Table newTable = wordDoc.Tables.Add(range, rows, columns, ref  miss, ref miss);

            //设置表的格式

            newTable.Borders.Enable = 1; //允许有边框,默认没有边框(为0时报错,1为实线边框,2、3为虚线边框,以后的数字没试过)

            newTable.Borders.OutsideLineWidth = WdLineWidth.wdLineWidth050pt;//边框宽度

            if (width != 0)
            {

                newTable.PreferredWidth = width;//表格宽度

            }

            newTable.AllowPageBreaks = false;

            return newTable;

        }



        //合并单元格 表名,开始行号,开始列号,结束行号,结束列号

        public void MergeCell(Microsoft.Office.Interop.Word.Table table, int row1, int column1, int row2, int column2)
        {

            table.Cell(row1, column1).Merge(table.Cell(row2, column2));

        }



        //设置表格内容对齐方式Align水平方向,Vertical垂直方向(左对齐,居中对齐,右对齐分别对应Align和Vertical的值为-1,0,1)

        public void SetParagraph_Table(Microsoft.Office.Interop.Word.Table table, int Align, int Vertical)
        {

            switch (Align)
            {

                case -1: table.Range.ParagraphFormat.Alignment = WdParagraphAlignment.wdAlignParagraphLeft; break;//左对齐

                case 0: table.Range.ParagraphFormat.Alignment = WdParagraphAlignment.wdAlignParagraphCenter; break;//水平居中

                case 1: table.Range.ParagraphFormat.Alignment = WdParagraphAlignment.wdAlignParagraphRight; break;//右对齐

            }

            switch (Vertical)
            {

                case -1: table.Range.Cells.VerticalAlignment = WdCellVerticalAlignment.wdCellAlignVerticalTop; break;//顶端对齐

                case 0: table.Range.Cells.VerticalAlignment = WdCellVerticalAlignment.wdCellAlignVerticalCenter; break;//垂直居中

                case 1: table.Range.Cells.VerticalAlignment = WdCellVerticalAlignment.wdCellAlignVerticalBottom; break;//底端对齐

            }

        }



        //设置表格字体

        public void SetFont_Table(Microsoft.Office.Interop.Word.Table table, string fontName, double size)
        {

            if (size != 0)
            {

                table.Range.Font.Size = Convert.ToSingle(size);

            }

            if (fontName != "")
            {

                table.Range.Font.Name = fontName;

            }

        }



        //是否使用边框,n表格的序号,use是或否

        public void UseBorder(int n, bool use)
        {

            if (use)
            {

                wordDoc.Content.Tables[n].Borders.Enable = 1;  //允许有边框,默认没有边框(为0时无边框,1为实线边框,2、3为虚线边框,以后的数字没试过)

            }

            else
            {

                wordDoc.Content.Tables[n].Borders.Enable = 2;  //允许有边框,默认没有边框(为0时无边框,1为实线边框,2、3为虚线边框,以后的数字没试过)

            }

        }



        //给表格插入一行,n表格的序号从1开始记

        public void AddRow(int n)
        {

            object miss = System.Reflection.Missing.Value;

            wordDoc.Content.Tables[n].Rows.Add(ref miss);

        }



        //给表格添加一行

        public void AddRow(Microsoft.Office.Interop.Word.Table table)
        {

            object miss = System.Reflection.Missing.Value;

            table.Rows.Add(ref miss);

        }



        //给表格插入rows行,n为表格的序号

        public void AddRow(int n, int rows)
        {

            object miss = System.Reflection.Missing.Value;

            Microsoft.Office.Interop.Word.Table table = wordDoc.Content.Tables[n];

            for (int i = 0; i < rows; i++)
            {

                table.Rows.Add(ref miss);

            }

        }



        //给表格中单元格插入元素,table所在表格,row行号,column列号,value插入的元素

        public void InsertCell(Microsoft.Office.Interop.Word.Table table, int row, int column, string value)
        {

            table.Cell(row, column).Range.Text = value;

        }



        //给表格中单元格插入元素,n表格的序号从1开始记,row行号,column列号,value插入的元素

        public void InsertCell(int n, int row, int column, string value)
        {

            wordDoc.Content.Tables[n].Cell(row, column).Range.Text = value;

        }



        //给表格插入一行数据,n为表格的序号,row行号,columns列数,values插入的值

        public void InsertCell(int n, int row, int columns, string[] values)
        {

            Microsoft.Office.Interop.Word.Table table = wordDoc.Content.Tables[n];

            for (int i = 0; i < columns; i++)
            {

                table.Cell(row, i + 1).Range.Text = values[i];

            }

        }



        //插入图片

        public void InsertPicture(string bookmark, string picturePath, float width, float hight)
        {

            object miss = System.Reflection.Missing.Value;

            object oStart = bookmark;

            Object linkToFile = false;       //图片是否为外部链接

            Object saveWithDocument = true;  //图片是否随文档一起保存

            object range = wordDoc.Bookmarks.get_Item(ref oStart).Range;//图片插入位置

            wordDoc.InlineShapes.AddPicture(picturePath, ref  linkToFile, ref  saveWithDocument, ref range);

            wordDoc.Application.ActiveDocument.InlineShapes[1].Width = width;  //设置图片宽度

            wordDoc.Application.ActiveDocument.InlineShapes[1].Height = hight; //设置图片高度

        }

        public void InsertPicture(string bookmark, string picturePath)
        {

            object miss = System.Reflection.Missing.Value;

            object oStart = bookmark;

            Object linkToFile = false;       //图片是否为外部链接

            Object saveWithDocument = true;  //图片是否随文档一起保存

            object range = wordDoc.Bookmarks.get_Item(ref oStart).Range;

            wordDoc.Bookmarks.get_Item(ref oStart).Select();//图片插入位置

            InlineShape inlineShape = wordApp.Selection.InlineShapes.AddPicture(picturePath,
                ref  linkToFile, ref  saveWithDocument, ref range);
            //点位信息表格式调整,局部图像及位置略图调整大小为245*245,实地照片大小调整为245*185


            if (bookmark == "局部图像")
            {
                inlineShape.Width = 180;// 180;
                inlineShape.Height = 180; //210;
            }
            else if (bookmark == "位置略图")
            {
                inlineShape.Width = 180;// 120;
                inlineShape.Height = 180; //150;
            }
            else
            {
                inlineShape.Width = 180;
                inlineShape.Height = 120;// 210;  
            }
        }


        //插入一段文字,text为文字内容

        public void InsertText(string bookmark, string text)
        {

            object oStart = bookmark;

            object range = wordDoc.Bookmarks.get_Item(ref oStart).Range;

            Paragraph wp = wordDoc.Content.Paragraphs.Add(ref range);

            wp.Format.SpaceBefore = 6;

            wp.Range.Text = text;

            wp.Format.SpaceAfter = 24;

            wp.Range.InsertParagraphAfter();

            wordDoc.Paragraphs.Last.Range.Text = "\n";

        }



        //杀掉winword.exe进程

        public void killWinWordProcess()
        {
            try
            {
                System.Diagnostics.Process[] processes = System.Diagnostics.Process.GetProcessesByName("WINWORD");

                foreach (System.Diagnostics.Process process in processes)
                {

                    bool b = process.MainWindowTitle == "";

                    if (process.MainWindowTitle == "")
                    {

                        process.Kill();

                    }

                }
            }
            catch (Exception ex)
            {
            }
        }

    }

编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义

随笔 - 119, 文章 - 0, 评论 - 3, 阅读 - 4066

Copyright © 2025 云起
Powered by .NET 9.0 on Kubernetes

点击右上角即可分享
微信分享提示