.Net 操作Word

来源:互联网 发布:wp7软件下载 编辑:程序博客网 时间:2024/06/05 22:24

使用.Net 操作Word

摘要:很多朋友在使用Office三大件做文档报告时,都会发现每天做的工作都是十分的繁琐和重复,要是有一款程序自动化生成word文档,那么是不是可以减轻我们的工作量,为公司节约工作量呢,并且还能减少出错率。下面用一个实例来讲解:简历自动生成软件。

  • 关键字
  • VB.NET
  • 操作Word,Excel
  • Winform
  • C#.net

说明:使用VS2012创建的程序。在类库中需要引用以下DLL。

这里写图片描述
- 注意
- 名称 Microsoft.Office.Interop.Word
- 开发工具vs2012

(一) 新建程序

在VS中搭建如下界面
这里写图片描述

(二) 添加代码

代码块

 /// <summary>        /// 生成简历        /// </summary>        /// <param name="sender"></param>        /// <param name="e"></param>        private void BtnReport_Click(object sender, EventArgs e)        {            string TemplateFile = System.IO.Path.Combine(Application.StartupPath, @"模板\简历表.doc");            //判断模板文件是否存在, 如果不存在则终止程序继续运行            if (System.IO.File.Exists(TemplateFile) == false) { MessageBox.Show("找不到模板文件 : " + TemplateFile); }            /// <summary>            /// Office 操作函数 wordClass 类            /// </summary>            OfficeClass.wordClass Word = new OfficeClass.wordClass();            Word.NewCom(true);//激活Word            //将两个字符串组合成一个路径。            //从模板新建一个 Word 文件            Word.NewDocWithModel(TemplateFile, true);            //将当前线程挂起一段时间, 以待 Word 文件完成加载            System.Threading.Thread.Sleep(1000);            //写入主题            Word.GotoBookMark("theme");//跳转到这个书签            Word.InsertText(TbxTheme.Text);//写入文本            #region 关于代码 GotoSelectTableInsText 的解释            /* Word.GotoSelectTableInsText(1, 3,TbxName.Text);                 * 此种书签定位数据插入法是和单个书签定位插入法不同之处在于,                  * 此种方法是跳转到一个书签, 而这个书签的指定的内容必须是一个范围, 此范围内包含有 X 行和 X 列,                  * 然后找到此范围书签内的 X 行 X 列来进行数据插入                 */            #endregion            //写入简历基本信息            #region 开始写入数据到基本资料表格, 第一个            Word.GotoBookMark("table1");//跳转到这个书签            Word.GotoSelectTableInsText(1, 2, TbxName.Text);  //姓名            Word.GotoSelectTableInsText(2, 2,TbxAge.Text);  //年龄            Word.GotoSelectTableInsText(3, 2,TbxAddress.Text);  //籍贯            Word.GotoSelectTableInsText(4, 2,TbxHealth.Text);  //健康状况            Word.GotoSelectTableInsText(1, 4, TbxSex.Text);  //性别            Word.GotoSelectTableInsText(2, 4, TbxNation.Text);  //民资            Word.GotoSelectTableInsText(3, 4, TbxPoliticalStatus.Text);  //政治面貌            Word.GotoSelectTableInsText(4, 4, TbxHistory.Text);  //疾病历史            //插入头像            string temPic=System.IO.Path.Combine(Application.StartupPath, @"模板\1.bmp");            if (System.IO.File.Exists(temPic) == false)             {                 MessageBox.Show("找不到图片文件 : " + temPic);            }            else            {                Word.GotoBookMark("picture");//跳转到这个书签                           Word.InsertPic(temPic);            }            Word.SaveAsButQuit(System.IO.Path.Combine(TbxSave.Text,TbxTheme.Text+".doc"));//保存后不退出            #endregion        }

(三) 模板设定

增加添加一个简历的模板,在Bin文件夹下,内容如下图所示
这里写图片描述

添加头像的图片,如下图所示
这里写图片描述

(四) Office类库

这是一个用VB编写的类库,可以用工具转换成C#代码。这里代码很简单。
如果有功能不够用,可以在VBA中然后添加到这个类库的方法中。

Imports Microsoft.Office.InteropImports System.IOImports System.Windows.FormsImports System.Globalization'###########################'###QQ:570534352   ########'###作者:郑礼帅    ########Public Class wordClass    Public oWordApplic As Word.Application 'Word应用程序    Public oDocument As Word.Document '当前word文档    Public iDocument As Word.Document '另一份word文档    Public oRange As Word.Range '一个范围    Public oSelection As Word.Selection '选中    Public oTable As Word.Table '表格    Public Function oWordApp() As Word.Application        Return oWordApplic    End Function    ''' <summary>    ''' 激活当前文档    ''' </summary>    ''' <remarks></remarks>    Public Sub oDocumentActivate()        oDocument.Activate()    End Sub    ''' <summary>    ''' 激活com  word接口    ''' </summary>    ''' <remarks></remarks>    ''' <param name="viewDoc" >是否显示word</param>    Public Sub NewCom(ByVal viewDoc As Boolean)        '激活com  word接口        oWordApplic = New Word.Application        oWordApplic.Visible = viewDoc    End Sub    ''' <summary>    '''  生成空的新文档    ''' </summary>    ''' <remarks></remarks>    ''' <param name="viewDoc" >是否显示word</param>    Public Sub NewDocument(ByVal viewDoc As Boolean)        Dim missing = System.Reflection.Missing.Value        Dim isVisible As Boolean = viewDoc        oDocument = oWordApplic.Documents.Add(missing, missing, missing, missing)        oDocument.Activate()    End Sub    ''' <summary>    ''' 建立一个新的模板    ''' </summary>    ''' <remarks></remarks>    ''' <param name="FileName">传入一个word的路径</param>    ''' <param name="viewDoc" >是否显示word</param>    Public Sub NewDocWithModel(ByVal FileName As String, ByVal viewDoc As Boolean)        Try            Dim missing = System.Reflection.Missing.Value            Dim isVisible As Boolean = viewDoc            Dim strName As String            strName = FileName            oDocument = oWordApplic.Documents.Add(strName, missing, missing, isVisible)            oDocument.Activate()            ChangeNormalView() '切换普通视图        Catch ex As Exception            Log(ex.Message, ex.StackTrace)            Log("报告路径 : ", FileName)        End Try    End Sub    ''' <summary>    ''' 打开已有文档    ''' </summary>    ''' <remarks></remarks>    ''' <param name="FileName">传入一个word的路径</param>    Public Sub OpenFile(ByVal FileName As String)        Dim strName As String        Dim isReadOnly As Boolean        Dim isVisible As Boolean        Dim missing = System.Reflection.Missing.Value        strName = FileName        isReadOnly = False        isVisible = True        oWordApplic = New Microsoft.Office.Interop.Word.Application        oDocument = oWordApplic.Documents.Open(strName, missing, isReadOnly, missing, missing, missing, missing, missing, missing, missing, missing, isVisible, missing, missing, missing, missing)        oDocument.Activate()    End Sub    ''' <summary>    '''  退出Word    ''' </summary>    ''' <remarks></remarks>    Public Sub Quit()        Dim missing = System.Reflection.Missing.Value        oWordApplic.Quit()        System.Runtime.InteropServices.Marshal.ReleaseComObject(oWordApplic)        oWordApplic = Nothing    End Sub    ''' <summary>    '''  关闭所有打开的文档    ''' </summary>    ''' <remarks></remarks>    Public Sub CloseAllDocuments()        oWordApplic.Documents.Close(Word.WdSaveOptions.wdDoNotSaveChanges)    End Sub    ''' <summary>    ''' 保存当前文档    ''' </summary>    ''' <remarks></remarks>    Public Sub Save()        Try            oDocument.Save()        Catch            Log("", Err.Description, "")        End Try    End Sub    ''' <summary>    ''' 插入图片        ''' </summary>    ''' <remarks></remarks>    ''' <param name="FileName" >图片的路径</param>    Public Sub InsertPic(ByVal FileName As String)        Try            Dim missing = System.Reflection.Missing.Value            oWordApplic.Selection.InlineShapes.AddPicture(FileName, False, True, missing)        Catch ex As Exception            InsertTextRed("没有找到这张图片")        End Try    End Sub    ''' <summary>    ''' 插入图片并且设置图片的高度    ''' </summary>    ''' <param name="FileName">图片的路径</param>    ''' <param name="height">图片高度(传283.45就等于10cm)</param>    ''' <remarks></remarks>    Public Sub InsertPicSetHeight(ByVal FileName As String, ByVal height As Single)        Try            Dim missing = System.Reflection.Missing.Value            '选中            Dim startpos = oWordApplic.Selection.Start            '光标下移            oWordApplic.Selection.InlineShapes.AddPicture(FileName, False, True, missing)            '选中            oWordApplic.Selection.Start = startpos            oWordApplic.Selection.InlineShapes(1).Height = height        Catch ex As Exception            InsertTextRed("没有找到这张图片")        End Try    End Sub    ''' <summary>    '''   插入文本    ''' </summary>    ''' <remarks></remarks>    ''' <param name="text">传入文本</param>    Public Sub InsertText(ByVal text As String)        oWordApplic.Selection.TypeText(text)    End Sub    '转到书签    ''' <summary>    ''' 转到书签    ''' </summary>    ''' <remarks></remarks>    ''' <param name="strBookMark">书签的名字</param>    Public Sub GotoBookMark(ByVal strBookMark As String)        Try            Dim missing = System.Reflection.Missing.Value            Dim BookMark = CInt(Word.WdGoToItem.wdGoToBookmark)            oWordApplic.Selection.GoTo(BookMark, missing, missing, strBookMark)        Catch ex As Exception            Log(strBookMark, ex.Message, "")        End Try    End Sub

(五) 运行效果

  1. 运行图
    这里写图片描述
  2. 简历图
    这里写图片描述
    (六) 下载
    下载源码:http://download.csdn.net/download/nihaohhyy/9982925
    下载运行程序:http://download.csdn.net/download/nihaohhyy/9982919