C# word控件编程

C# word控件WinWordControl可创建、编辑、保存word。


1、使用代码直接创建word文件,同时可以添加页眉、内容、图片及表格,示例代码:

/// <summary>
        /// 新创建word
        /// </summary>
        /// <param name="fileSaveDirectory">word保存路径(可默认)</param>
        /// <param name="fileName">word文件名称(可默认)</param>
        /// <param name="headerText">word页眉(可默认)</param>
        /// <param name="contentText">word内容</param>
        /// <returns></returns>
        public string CreateWordFile(string fileSaveDirectory, string fileName, string headerText,string contentText, string imgPath)
        {
            string fileSavePath = "";
            try
            {
                Object Nothing = System.Reflection.Missing.Value;
                //创建文件所在目录
                if (!string.IsNullOrEmpty(fileSaveDirectory))
                {
                    fileSaveDirectory = fileSaveDirectory.Replace("/", "\\");
                    if (!Directory.Exists(fileSaveDirectory))
                    {
                        Directory.CreateDirectory(fileSaveDirectory);
                    }
                }
                else
                {
                    fileSaveDirectory = System.Windows.Forms.Application.StartupPath+"" ;
                    Directory.CreateDirectory(fileSaveDirectory);
                }

if (!fileSaveDirectory.EndsWith("\\"))
                {
                    fileSaveDirectory += "\\";
                }
                if (string.IsNullOrEmpty(fileName))
                {
                    fileName = DateTime.Now.ToString("yyyyMMddHHmmss");
                }
                object filePath = fileSaveDirectory + fileName + ".doc"; //文件保存路径

//创建Word文档
                Microsoft.Office.Interop.Word.Application WordApp = new Microsoft.Office.Interop.Word.ApplicationClass();
                Microsoft.Office.Interop.Word.Document WordDoc = WordApp.Documents.Add(ref Nothing, ref Nothing, ref Nothing, ref Nothing);

if (string.IsNullOrEmpty(headerText))
                {
                    headerText = "泰安网站建设(www.taian-seo.com)";
                }
                // * 添加页眉
                WordApp.ActiveWindow.View.Type = WdViewType.wdOutlineView;
                WordApp.ActiveWindow.View.SeekView = WdSeekView.wdSeekPrimaryHeader;
                WordApp.ActiveWindow.ActivePane.Selection.InsertAfter(headerText);
                WordApp.Selection.ParagraphFormat.Alignment = Microsoft.Office.Interop.Word.WdParagraphAlignment.wdAlignParagraphRight;// 设置右对齐
                WordApp.ActiveWindow.View.SeekView = WdSeekView.wdSeekMainDocument;//跳出页眉设置

WordApp.Selection.ParagraphFormat.LineSpacing = 15f;//设置文档的行间距

//移动焦点并换行
                object count = 14;
                object WdLine = Microsoft.Office.Interop.Word.WdUnits.wdLine;//换一行;
                WordApp.Selection.MoveDown(ref WdLine, ref count, ref Nothing);//移动焦点
                WordApp.Selection.TypeParagraph();//插入段落

// * 文档中创建表格
                /*
                Microsoft.Office.Interop.Word.Table newTable = WordDoc.Tables.Add(WordApp.Selection.Range, 12, 3, ref Nothing, ref Nothing);
                //设置表格样式
                newTable.Borders.OutsideLineStyle = Microsoft.Office.Interop.Word.WdLineStyle.wdLineStyleThickThinLargeGap;
                newTable.Borders.InsideLineStyle = Microsoft.Office.Interop.Word.WdLineStyle.wdLineStyleSingle;
                newTable.Columns[1].Width = 100f;
                newTable.Columns[2].Width = 220f;
                newTable.Columns[3].Width = 105f;

//填充表格内容
                newTable.Cell(1, 1).Range.Text = "产品详细信息表";
                newTable.Cell(1, 1).Range.Bold = 2;//设置单元格中字体为粗体

//合并单元格
                newTable.Cell(1, 1).Merge(newTable.Cell(1, 3));
                WordApp.Selection.Cells.VerticalAlignment = Microsoft.Office.Interop.Word.WdCellVerticalAlignment.wdCellAlignVerticalCenter;// 垂直居中
                WordApp.Selection.ParagraphFormat.Alignment = Microsoft.Office.Interop.Word.WdParagraphAlignment.wdAlignParagraphCenter;// 水平居中

//填充表格内容
                newTable.Cell(2, 1).Range.Text = "产品基本信息";
                newTable.Cell(2, 1).Range.Font.Color = Microsoft.Office.Interop.Word.WdColor.wdColorDarkBlue;//设置单元格内字体颜色
                //合并单元格
                newTable.Cell(2, 1).Merge(newTable.Cell(2, 3));
                WordApp.Selection.Cells.VerticalAlignment = Microsoft.Office.Interop.Word.WdCellVerticalAlignment.wdCellAlignVerticalCenter;

//填充表格内容
                newTable.Cell(3, 1).Range.Text = "品牌名称:";
                newTable.Cell(3, 2).Range.Text = "BrandName";
                //纵向合并单元格
                newTable.Cell(3, 3).Select();//选中一行
                object moveUnit = Microsoft.Office.Interop.Word.WdUnits.wdLine;
                object moveCount = 5;
                object moveExtend = Microsoft.Office.Interop.Word.WdMovementType.wdExtend;
                WordApp.Selection.MoveDown(ref moveUnit, ref moveCount, ref moveExtend);
                WordApp.Selection.Cells.Merge();

//插入图片
                string FileName = System.Windows.Forms.Application.StartupPath + "图片所在路径
                object LinkToFile = false;
                object SaveWithDocument = true;
                object Anchor = WordDoc.Application.Selection.Range;
                WordDoc.Application.ActiveDocument.InlineShapes.AddPicture(FileName, ref LinkToFile, ref SaveWithDocument, ref Anchor);
                WordDoc.Application.ActiveDocument.InlineShapes[1].Width = 100f;//图片宽度
                WordDoc.Application.ActiveDocument.InlineShapes[1].Height = 100f;//图片高度
                //将图片设置为四周环绕型
                Microsoft.Office.Interop.Word.Shape s = WordDoc.Application.ActiveDocument.InlineShapes[1].ConvertToShape();
                s.WrapFormat.Type = Microsoft.Office.Interop.Word.WdWrapType.wdWrapSquare;

newTable.Cell(12, 1).Range.Text = "产品特殊属性";
                newTable.Cell(12, 1).Merge(newTable.Cell(12, 3));
                //在表格中增加行
                WordDoc.Content.Tables[1].Rows.Add(ref Nothing);
                */

WordDoc.Content.Text = contentText+"\n";

object missing = System.Reflection.Missing.Value;

object unit;

unit = Word.WdUnits.wdStory;

WordApp.Selection.HomeKey(ref unit, ref missing); //定位到文章开头

string FileName = imgPath; //System.Windows.Forms.Application.StartupPath + "图片所在路径

object LinkToFile = false;

object SaveWithDocument = true;

object Anchor = WordDoc.Application.Selection.Range;

object left = 0, top = 0, width = 100, height = 100;

object Anchor2 = WordApp.Selection.Range;

WordDoc.Application.ActiveDocument.InlineShapes.AddPicture(FileName, ref  LinkToFile, ref  SaveWithDocument, ref  Anchor2);

WordDoc.Application.ActiveDocument.InlineShapes[1].Width = 90f; // 图片宽度

WordDoc.Application.ActiveDocument.InlineShapes[1].Height = 90f; // 图片高度

WordDoc.Paragraphs.Last.Range.Text = "文档创建时间:" + DateTime.Now.ToString();//“落款”
                WordDoc.Paragraphs.Last.Alignment = Microsoft.Office.Interop.Word.WdParagraphAlignment.wdAlignParagraphRight;

//文件保存
                WordDoc.SaveAs(ref filePath, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing);
                WordDoc.Close(ref Nothing, ref Nothing, ref Nothing);
                WordApp.Quit(ref Nothing, ref Nothing, ref Nothing);
                fileSavePath = filePath.ToString();
            }
            catch (Exception e)
            {
                fileSavePath = e.Message;
            }
            return fileSavePath;
        }

2、使用C# word控件WinWordControl,加载word文件为母版,等于打开这个word文件编辑后另存为word。

private void btnCreate_Click(object sender, EventArgs e)
        {
            OpenWord(winWordControl1, "");
        }

private void btnSave_Click(object sender, EventArgs e)
        {
            SaveWord(winWordControl1, "");
        }

private void btnClose_Click(object sender, EventArgs e)
        {
            winWordControl1.CloseControl();
        }

//打开word
        public void OpenWord(WinWordControl.WinWordControl winWordControl1, string wordUrl)
        {
            if (string.IsNullOrEmpty(wordUrl))
            {
                wordUrl = System.Windows.Forms.Application.StartupPath + @"\template\template.doc";
            }

try
            {
                winWordControl1.CloseControl();
            }
            catch { }
            finally
            {
                winWordControl1.document = null;
                WinWordControl.WinWordControl.wd = null;
                WinWordControl.WinWordControl.wordWnd = 0;
            }
            try
            {
                winWordControl1.LoadDocument(wordUrl);
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
        }

/// <summary>
        /// 保存word
        /// </summary>
        /// <param name="winWordControl1">主控件</param>
        /// <returns></returns>
        public string SaveWord(WinWordControl.WinWordControl winWordControl1, string pFileName)
        {
            if (string.IsNullOrEmpty(pFileName))
            {
                pFileName = DateTime.Now.ToString("yyMMddHHmmss"); //1.""
            }
            string name = "";

string path = "";
            string savePath = "";
            string dic = "";
            string wordUrl = "";
            if (pFileName.Contains("\\") || pFileName.Contains("/")) //2.路径
            {
                wordUrl = System.Windows.Forms.Application.StartupPath + pFileName;
            }
            else
            {
                path = @"\doc\" + name;
                savePath = path + pFileName + ".doc";
                dic = System.Windows.Forms.Application.StartupPath + path;
                wordUrl = dic + pFileName + ".doc";
                if (!System.IO.Directory.Exists(dic))
                {
                    System.IO.Directory.CreateDirectory(dic);
                }
            }

object myNothing = System.Reflection.Missing.Value;
            object myFileName = wordUrl; // word路径
            object myWordFormatDocument = Microsoft.Office.Interop.Word.WdSaveFormat.wdFormatDocument;
            object myLockd = false;
            object myPassword = "";
            object myAddto = true;
            try
            {
                winWordControl1.document.SaveAs(ref myFileName, ref myWordFormatDocument, ref myLockd, ref myPassword, ref myAddto, ref myPassword,
                    ref myLockd, ref myLockd, ref myLockd, ref myNothing, ref myNothing);
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
            return savePath;
        }

使用WinWordControl控件时注意释放控件:

private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
            winWordControl1.Dispose();
        }

注:C#word控件WinWordControl使用后,如果word提示“此文件正由另一应用程序或用户使用(C:\...\Templates\Normal.dotm)”
原因为:word文档被重复打开;姐姐方法:右键“任务栏”--“任务管理器”,将winword.exe进程结束。

C# word控件编程

时间: 2024-10-10 04:30:24

C# word控件编程的相关文章

[WP8.1UI控件编程]SemanticZoom控件实现分组列表

11.1.5 SemanticZoom实现分组列表 SemanticZoom控件可以让用户实现一种更加高级的列表,这种列表可以对列表的项目进行分组,同时这个SemanticZoom控件会提供两个具有相同内容的不同视图,其中有一个是主视图,另外一个视图可以让用户进行快速导航的分组视图.例如,Windows Phone里面的人脉通讯录列表就是使用SemanticZoom控件实现的. SemanticZoom控件支持对GridView和ListView控件的视图效果进行缩放,在SemanticZoom

[WP8.1UI控件编程]Windows Phone理解和运用ItemTemplate、ContentTemplate和DataTemplate

2.2.5 ItemTemplate.ContentTemplate和DataTemplate 在理解ItemTemplate.ContentTemplate和DataTemplate的关系的之前,我们先来看看ContentControl类和ItemsControl类.ContentControl类是内容控件的基类,如Button, CheckBox,最明显的特征就是这个控件有Content属性,有Content属性的系统控件都是ContentControl的子类.ItemsControl类是列

[WP8.1UI控件编程]Windows Phone动画方案的选择

8.1 动画方案的选择 Windows Phone的动画实现方式有线性插值动画(3种类型).关键祯动画(4种类型)和基于帧动画,甚至还有定时器动画,然后动画所改变的UI元素属性可以是普通的UI元素属性,变换特效属性和三维特效属性,面对着这么多的选择,我们要实现一个动画效果该怎么去思考动画实现的思路以及怎么选择实现的技术呢?那么我们这小节会先讲解与动画性能相关的知识,然后再讲解怎么去选择动画的实现方案. 8.1.1 帧速率 帧速率是用于测量显示帧数的量度,测量单位为"每秒显示帧数"(Fr

[WP8.1UI控件编程]Windows Phone VirtualizingStackPanel、ItemsStackPanel和ItemsWrapGrid虚拟化排列布局控件

11.2.2 VirtualizingStackPanel.ItemsStackPanel和ItemsWrapGrid虚拟化排列布局控件 VirtualizingStackPanel.ItemsStackPanel和ItemsWrapGrid都是虚拟化布局控件,一般情况下在界面的布局上很少会用到这些虚拟化排列的控件,大部分都是封装在列表的布局面板上使用,主要的目的就是为了实现列表上大数据量的虚拟化,从而极大地提高列表的效率.那么其实这3个虚拟化布局控件都是列表控件的默认布局排列的方式,其中Vir

《深入理解Windows Phone 8.1 UI控件编程》

<深入理解Windows Phone 8.1 UI控件编程>本书基于最新的Windows Phone 8.1 Runtime SDK编写,全面深入地论述了最酷的UI编程技术:实现复杂炫酷的动画.掌握布局原理.列表虚拟化原理.高性能列表实现.图表编程.控件原理等. 目录如下: <深入理解Windows Phone 8 .1 UI控件编程>目录 第1章 深入解析程序界面 1.1 XAML的原理 1.1.1 XAML的概念 1.1.2 XAML页面的编译 1.1.3 动态加载XAML 1

Microsoft Word 控件Essential DocIO下载及介绍

Essential DocIO是一款强大的.NET控件,可用于读取Microsoft Word 文件,使你的应用程序可以很容易地创建丰富的Word文档,支持多种像Office word一样的操作,可以导出为多种文件格式,对文档进行格式化等,开发人员可以使用该控件创建出像Word一样的报表文档. 具体功能: 仅需要一行代码就可以创建出一个新的Word文档,并可以进行很多自定义选项,如:插入片段.段落.书签.图片等 所有标准和自定义属性都可以查看和修改 支持创建和取得文档里的变量 支持设置页边距 当

[WP8.1UI控件编程]Windows Phone大数据量网络图片列表的异步加载和内存优化

11.2.4 大数据量网络图片列表的异步加载和内存优化 虚拟化技术可以让Windows Phone上的大数据量列表不必担心会一次性加载所有的数据,保证了UI的流程性.对于虚拟化的技术,我们不仅仅只是依赖其来给列表加载数据,还可以利用虚拟化的特性去做更多的事情.虚拟化技术有一个很重要的特性就是,它可以准确地判断出哪些列表项处于手机屏幕中,可以动态地去更新这些数据.基于这样的特性,我们可以给列表的功能做更多的优化. 那么下面我们基于一个例子来讲解利用虚拟化技术去做列表的性能优化.有这么一个需求,需要

[WP8.1UI控件编程]Windows Phone自定义布局规则

3.2 自定义布局规则 上一节介绍了Windows Phone的系统布局面板和布局系统的相关原理,那么系统的布局面板并不一定会满足所有的你想要实现的布局规律,如果有一些特殊的布局规律,系统的布局面板是不支持,这时候就需要去自定义实现一个布局面板,在自定义的布局面板里面封装布局规律的逻辑.那么我们这一节从一个实际的需求出发,来实现一个自定义规律的布局面板.我们这一小节要实现的布局规律是把布局面板里面的子元素,按照圆形的排列规则进行排列,下面我们来看下这个例子的详细实现过程. 3.2.1 创建布局类

利用Aspose.Word控件和Aspose.Cell控件,实现Word文档和Excel文档的模板化导出

我们知道,一般都导出的Word文档或者Excel文档,基本上分为两类,一类是动态生成全部文档的内容方式,一种是基于固定模板化的内容输出,后者在很多场合用的比较多,这也是企业报表规范化的一个体现. 我的博客介绍过几篇关于Aspose.Word控件和Aspose.Cell控件的使用操作,如下所示. <使用Aspose.Cell控件实现Excel高难度报表的生成(一)> <使用Aspose.Cell控件实现Excel高难度报表的生成(二)> <使用Aspose.Cell控件实现Ex