`
jljlpch
  • 浏览: 323257 次
  • 性别: Icon_minigender_1
  • 来自: 南昌
社区版块
存档分类
最新评论

C#编写的Word操作类,有换页,添加表格,文本功能

阅读更多
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Drawing;
using Word = Microsoft.Office.Interop.Word;
using Microsoft.Office.Interop.Word;
using System.Windows.Forms;
/************************************************************************************************************************************
 * * 文件名  : 
 * * 声明   : 
 * * 创建者  : 黄聪
 * * 创建日期 : 2009.10.8
 * * 修改者  : 黄聪
 * * 最新修改日期 : 2009.10.8
 ************************************************************************************************************************************/
namespace Tool
{
  /********************************************************************************************************************************
   * * 类名   : WordPlayer
   * * 声明   : 
   * * 创建者  : 黄聪
   * * 创建日期 : 2009.7.15
   * * 修改者  : 黄聪
   * * 最新修改日期 : 2009.7.15
   ********************************************************************************************************************************/
  public class WordPlayer
  {
    #region - 属性 -
    private static Microsoft.Office.Interop.Word._Application oWord = null;
    private static Microsoft.Office.Interop.Word._Document odoc = null;
    private static Microsoft.Office.Interop.Word._Document oDoc
    {
      get
      {
        if (odoc == null)
        {
          odoc = oWord.Documents.Add(ref Nothing, ref Nothing, ref Nothing, ref Nothing);
        }
        return odoc;
      }
      set
      {
        if (value != null)
        {
          odoc = value;
        }
      }
    }
    private static object Nothing = System.Reflection.Missing.Value;
    public enum Orientation
    {
      横板,
      竖板
    }
    public enum Alignment
    {
      左对齐,
      居中,
      右对齐
    }
    #endregion
    #region - 添加文档 -
    #region - 创建并打开一个空的word文档进行编辑 -
    public static void OpenNewWordFileToEdit()
    {
      oDoc = oWord.Documents.Add(ref Nothing, ref Nothing, ref Nothing, ref Nothing);
    }
    #endregion
    #endregion
    #region - 创建新Word -
    public static bool CreateWord(bool isVisible)
    {
      try
      {
        oWord = new Microsoft.Office.Interop.Word.Application();
        oWord.Visible = isVisible;
        return true;
      }
      catch (Exception)
      {
        return false;
      }
    }
    public static bool CreateWord()
    {
      return CreateWord(false);
    }
    #endregion
    #region - 打开文档 -
    public static bool Open(string filePath, bool isVisible)
    {
      try
      {
        oWord.Visible = isVisible;
        object path = filePath;
        oDoc = oWord.Documents.Open(ref path,
        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);
        return true;
      }
      catch (Exception)
      {
        return false;
      }
    }
    #endregion
    #region - 插入表格 -
    public static bool InsertTable(DataTable dt, bool haveBorder, double[] colWidths)
    {
      try
      {
        object Nothing = System.Reflection.Missing.Value;
        int lenght = oDoc.Characters.Count - 1;
        object start = lenght;
        object end = lenght;
        //表格起始坐标
        Microsoft.Office.Interop.Word.Range tableLocation = oDoc.Range(ref start, ref end);
        //添加Word表格   
        Microsoft.Office.Interop.Word.Table table = oDoc.Tables.Add(tableLocation, dt.Rows.Count, dt.Columns.Count, ref Nothing, ref Nothing);
        if (colWidths != null)
        {
          for (int i = 0; i < colWidths.Length; i++)
          {
            table.Columns[i + 1].Width = (float)(28.5F * colWidths[i]);
          }
        }
        ///设置TABLE的样式
        table.Rows.HeightRule = Microsoft.Office.Interop.Word.WdRowHeightRule.wdRowHeightAtLeast;
        table.Rows.Height = oWord.CentimetersToPoints(float.Parse("0.8"));
        table.Range.Font.Size = 10.5F;
        table.Range.Font.Name = "宋体";
        table.Range.Font.Bold = 0;
        table.Range.ParagraphFormat.Alignment = Microsoft.Office.Interop.Word.WdParagraphAlignment.wdAlignParagraphCenter;
        table.Range.Cells.VerticalAlignment = Microsoft.Office.Interop.Word.WdCellVerticalAlignment.wdCellAlignVerticalCenter;
        if (haveBorder == true)
        {
          //设置外框样式
          table.Borders.OutsideLineStyle = Microsoft.Office.Interop.Word.WdLineStyle.wdLineStyleSingle;
          table.Borders.InsideLineStyle = Microsoft.Office.Interop.Word.WdLineStyle.wdLineStyleSingle;
          //样式设置结束
        }
        for (int row = 0; row < dt.Rows.Count; row++)
        {
          for (int col = 0; col < dt.Columns.Count; col++)
          {
            table.Cell(row + 1, col + 1).Range.Text = dt.Rows[row][col].ToString();
          }
        }
        return true;
      }
      catch (Exception e)
      {
        MessageBox.Show(e.ToString(), "错误提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
        return false;
      }
      finally
      {
      }
    }
    public static bool InsertTable(DataTable dt, bool haveBorder)
    {
      return InsertTable(dt, haveBorder, null);
    }
    public static bool InsertTable(DataTable dt)
    {
      return InsertTable(dt, false, null);
    }
    #endregion
    #region - 插入文本 -
    public static bool InsertText(string strText, System.Drawing.Font font, Alignment alignment, bool isAftre)
    {
      try
      {
        Word.Range rng = oDoc.Content;
        int lenght = oDoc.Characters.Count - 1;
        object start = lenght;
        object end = lenght;
        rng = oDoc.Range(ref start, ref end);
        if (isAftre == true)
        {
          strText += "\r\n";
        }
        rng.Text = strText;
        rng.Font.Name = font.Name;
        rng.Font.Size = font.Size;
        if (font.Style == FontStyle.Bold) { rng.Font.Bold = 1; } //设置单元格中字体为粗体
        SetAlignment(rng, alignment);
        return true;
      }
      catch (Exception)
      {
        return false;
      }
    }
    public static bool InsertText(string strText)
    {
      return InsertText(strText, new System.Drawing.Font("宋体", 10.5F, FontStyle.Bold), Alignment.左对齐, false);
    }
    #endregion
    #region - 设置对齐方式 -
    private static Microsoft.Office.Interop.Word.WdParagraphAlignment SetAlignment(Range rng, Alignment alignment)
    {
      rng.ParagraphFormat.Alignment = SetAlignment(alignment);
      return SetAlignment(alignment);
    }
    private static Microsoft.Office.Interop.Word.WdParagraphAlignment SetAlignment(Alignment alignment)
    {
      if (alignment == Alignment.居中)
      {
        return Word.WdParagraphAlignment.wdAlignParagraphCenter;
      }
      else if (alignment == Alignment.左对齐)
      {
        return Word.WdParagraphAlignment.wdAlignParagraphLeft;
      }
      else
      { return Word.WdParagraphAlignment.wdAlignParagraphRight; }
    }
    #endregion
    #region - 页面设置 -
    public static void SetPage(Orientation orientation, double width, double height, double topMargin, double leftMargin, double rightMargin, double bottomMargin)
    {
      oDoc.PageSetup.PageWidth = oWord.CentimetersToPoints((float)width);
      oDoc.PageSetup.PageHeight = oWord.CentimetersToPoints((float)height);
      if (orientation == Orientation.横板)
      {
        oDoc.PageSetup.Orientation = Microsoft.Office.Interop.Word.WdOrientation.wdOrientLandscape;
      }
      oDoc.PageSetup.TopMargin = (float)(topMargin * 25);//上边距 
      oDoc.PageSetup.LeftMargin = (float)(leftMargin * 25);//左边距 
      oDoc.PageSetup.RightMargin = (float)(rightMargin * 25);//右边距 
      oDoc.PageSetup.BottomMargin = (float)(bottomMargin * 25);//下边距
    }
    public static void SetPage(Orientation orientation, double topMargin, double leftMargin, double rightMargin, double bottomMargin)
    {
      SetPage(orientation, 21, 29.7, topMargin, leftMargin, rightMargin, bottomMargin);
    }
    public static void SetPage(double topMargin, double leftMargin, double rightMargin, double bottomMargin)
    {
      SetPage(Orientation.竖板, 21, 29.7, topMargin, leftMargin, rightMargin, bottomMargin);
    }
    #endregion
    #region - 插入分页符 -
    public static void InsertBreak()
    {
      Word.Paragraph para;
      para = oDoc.Content.Paragraphs.Add(ref Nothing);
      object pBreak = (int)WdBreakType.wdSectionBreakNextPage;
      para.Range.InsertBreak(ref pBreak);
    }
    #endregion
    #region - 关闭当前文档 -
    public static bool CloseDocument()
    {
      try
      {
        object doNotSaveChanges = Word.WdSaveOptions.wdDoNotSaveChanges;
        oDoc.Close(ref doNotSaveChanges, ref Nothing, ref Nothing);
        oDoc = null;
        return true;
      }
      catch (Exception)
      {
        return false;
      }
    }
    #endregion
    #region - 关闭程序 -
    public static bool Quit()
    {
      try
      {
        object saveOption = Word.WdSaveOptions.wdDoNotSaveChanges;
        oWord.Quit(ref saveOption, ref Nothing, ref Nothing);
        return true;
      }
      catch (Exception)
      {
        return false;
      }
    }
    #endregion
    #region - 保存文档 -
    public static bool Save(string savePath)
    {
      return Save(savePath, false);
    }
    public static bool Save(string savePath, bool isClose)
    {
      try
      {
        object fileName = savePath;
        oDoc.SaveAs(ref fileName, 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);
        if (isClose)
        {
          return CloseDocument();
        }
        return true;
      }
      catch (Exception)
      {
        return false;
      }
    }
    #endregion
    #region - 插入页脚 -
    public static bool InsertPageFooter(string text, System.Drawing.Font font, WordPlayer.Alignment alignment)
    {
      try
      {
        oWord.ActiveWindow.View.SeekView = Word.WdSeekView.wdSeekCurrentPageFooter;//页脚 
        oWord.Selection.InsertAfter(text);
        GetWordFont(oWord.Selection.Font, font);
        SetAlignment(oWord.Selection.Range, alignment);
        return true;
      }
      catch (Exception)
      {
        return false;
      }
    }
    public static bool InsertPageFooterNumber(System.Drawing.Font font, WordPlayer.Alignment alignment)
    {
      try
      {
        oWord.ActiveWindow.View.SeekView = WdSeekView.wdSeekCurrentPageHeader;
        oWord.Selection.WholeStory();
        oWord.Selection.ParagraphFormat.Borders[WdBorderType.wdBorderBottom].LineStyle = WdLineStyle.wdLineStyleNone;
        oWord.ActiveWindow.View.SeekView = Word.WdSeekView.wdSeekMainDocument;
        oWord.ActiveWindow.View.SeekView = Word.WdSeekView.wdSeekCurrentPageFooter;//页脚 
        oWord.Selection.TypeText("第");
        object page = WdFieldType.wdFieldPage;
        oWord.Selection.Fields.Add(oWord.Selection.Range, ref page, ref Nothing, ref Nothing);
        oWord.Selection.TypeText("页/共");
        object pages = WdFieldType.wdFieldNumPages;
        oWord.Selection.Fields.Add(oWord.Selection.Range, ref pages, ref Nothing, ref Nothing);
        oWord.Selection.TypeText("页");
        GetWordFont(oWord.Selection.Font, font);
        SetAlignment(oWord.Selection.Range, alignment);
        oWord.ActiveWindow.View.SeekView = Word.WdSeekView.wdSeekMainDocument;
        return true;
      }
      catch (Exception)
      {
        return false;
      }
    }
    #endregion
    #region - 字体格式设定 -
    public static void GetWordFont(Microsoft.Office.Interop.Word.Font wordFont, System.Drawing.Font font)
    {
      wordFont.Name = font.Name;
      wordFont.Size = font.Size;
      if (font.Bold) { wordFont.Bold = 1; }
      if (font.Italic) { wordFont.Italic = 1; }
      if (font.Underline == true)
      {
        wordFont.Underline = Microsoft.Office.Interop.Word.WdUnderline.wdUnderlineNone;
      }
      wordFont.UnderlineColor = Microsoft.Office.Interop.Word.WdColor.wdColorAutomatic;
      if (font.Strikeout)
      {
        wordFont.StrikeThrough = 1;//删除线
      }
    }
    #endregion
    #region - 获取Word中的颜色 -
    public static WdColor GetWordColor(Color c)
    {
      UInt32 R = 0x1, G = 0x100, B = 0x10000;
      return (Microsoft.Office.Interop.Word.WdColor)(R * c.R + G * c.G + B * c.B);
    }
    #endregion
  }
}

 新建一个窗体工程,拖入一个按钮,复制下面代码进去,按F5运行

 

private void button2_Click(object sender, EventArgs e)
    {
      if (WordPlayer.CreateWord() == false)
      {
        MessageBox.Show("文件创造失败.", "错误提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
        return;
      }
      DataTable storedt = new DataTable();
      storedt.Columns.Add("Book_ISBN");
      storedt.Columns.Add("Book_Name");
      storedt.Columns.Add("Store_Num");
      storedt.Columns.Add("CanBorrow_Num");
      storedt.Columns.Add("InShop_Num");
      storedt.Columns.Add("OutShop_Num");
      storedt.Rows.Add("1", "1", "1", "1", "1", "1");
      storedt.Rows.Add("2", "2", "2", "2", "2", "2");
      storedt.Rows.Add("3", "3", "3", "3", "3", "3");
      storedt.Rows.Add("4", "4", "4", "4", "4", "4");
      storedt.Rows.Add("5", "5", "5", "5", "5", "5");
      storedt.Rows.Add("6", "6", "6", "6", "6", "6");
      WordPlayer.SetPage(WordPlayer.Orientation.横板, 18.4, 26, 3, 2.4, 1.87, 2.1);
      WordPlayer.InsertText("工 资 变 动 情 况 审 批 表", new Font("微软雅黑", 14, FontStyle.Bold), WordPlayer.Alignment.居中, true);
      WordPlayer.InsertText("", new Font("微软雅黑", 14, FontStyle.Bold), WordPlayer.Alignment.居中, true);
      WordPlayer.InsertText("姓名:A                                 审批单位:广西师范大学",
        new Font("宋体", 12, FontStyle.Regular), WordPlayer.Alignment.左对齐, false);
      WordPlayer.InsertTable(storedt, true);
      WordPlayer.InsertText("制表时间:2007年1月15日", new Font("宋体", 12, FontStyle.Regular), WordPlayer.Alignment.右对齐, false);
      WordPlayer.Save(Application.StartupPath + "\\test.doc",true);
    }

 

分享到:
评论

相关推荐

    C#操作word文档 C#实现Word中表格信息读取

    根据提供的文件信息,我们可以归纳出两个主要的知识点:一是如何使用C#操作Word文档并插入图片;二是如何利用C#批量替换Word文档中的书签文本。下面将对这两个知识点进行详细解析。 ### 一、使用C#操作Word文档并...

    C#操作word,签入书签,图表,表格

    本主题将深入探讨如何使用C#来处理Word文档,包括添加文本、图片和表格,绘制表格,管理书签,删除空白页,以及对文档内容进行格式调整。 1. **添加文本、图片和表格**: 在C#中,可以使用`Microsoft.Office....

    C#操作Word表格

    C#操作Word表格是指使用C#语言来操作Microsoft Word文档中的表格,包括向表格中添加行、合并单元格、拆分单元格、设置表格样式等操作。本文将总结C#操作Word表格的常用方法。 一、向表格中添加行 向表格中添加行有...

    C# NPOI生成word插入图片和表格

    本篇文章将深入探讨如何利用C#和NPOI库来创建Word文档,并在其中插入图片和表格。 首先,让我们了解一下NPOI的基本用法。NPOI提供了IWorkbook接口,它是处理Word文档的核心。对于Word文档,我们可以选择使用...

    C#操作Word文档(根据模板生成文档、替换内容、插入表格等)

    本主题聚焦于如何利用C#来操作Microsoft Word文档,包括根据模板生成文档、替换内容以及插入表格等核心功能。这对于自动化报告生成、数据导出、文档处理等场景非常有用。 首先,要实现这些功能,我们需要引用...

    C#操作word文档(多种方法)

    在C#中操作Word文档,通常使用Microsoft Office Interop库,这是一个允许.NET应用程序与Office应用程序交互的组件。以下是一些关键知识点和实现方法: 1. **引用Microsoft Word对象库**: 在C#项目中,首先需要...

    C#操作word里面的书签

    本篇文章将深入探讨如何使用C#来操作Microsoft Word中的书签,以及如何将DataGridView的数据作为表格插入到书签指定的位置。书签在Word文档中起到了定位和标记的作用,它们可以帮助开发者精确地在文档的特定位置进行...

    C# ACCESS 数据库操作类

    "C# ACCESS 数据库操作类"是一个自定义的C#类,设计用来简化对Access数据库的增、删、改、查等操作。这个类通常封装了ADO.NET的核心组件,如Connection、Command、DataAdapter和DataSet,使得代码更加模块化和易于...

    C#操作Word代码生成表格,添加图片等

    学习操作Word,找了一些资源整理出来,含一些生成表格、图片、书签等的代码,还有一个SQLLiteToWord文件,这个免费提供,是控制台写的Npoi操作Word方面的代码,可以参考他的代码,我是没跑起来,这个有问题别来差评...

    易语言WORD辅助操作类源码,易语言在WORD中操作表格例程源码,易语

    易语言操作WORD例程源码,操作WORD例程,替换内容,创建,退出,可视,打开文档,新建文档,关闭文档,另存文档,激活文档,撤消,选中单元格,插入一行,重做,保存文档,添加表格,激活表格,置单元格字体格式,插入图片,打印文档,...

    C# 根据Word模版生成Word文件

    在C#编程中,生成Word文件...总的来说,这个C#代码段展示了如何利用Microsoft Office Interop库在C#中根据Word模板动态生成新的Word文件,同时处理表格数据和静态文本替换,适用于批量生成类似格式但内容不同的文档。

    C#编写的简单文本编辑器

    【正文】 在编程领域,C#是一种广泛应用的面向对象的编程语言,由微软公司开发,...同时,这个项目也可以作为进一步改进和扩展的基础,例如添加查找替换功能、支持多种格式的文本文件、实现自动保存或集成代码高亮等。

    C# 操作word 接口方法大全

    本文将深入探讨C#与Word交互的接口方法,以及如何利用这些方法来实现诸如添加书签、插入图片、文字、表格以及图表等功能。 首先,C#操作Word主要依赖于Microsoft.Office.Interop.Word库,这是一个COM组件,允许.NET...

    最新PHPword整合,优化添加导出表格,表格内部换行,合并单元格

    这个最新的PHPword整合主要关注了表格的处理,包括添加表格、行内换行以及单元格的合并,这些都是在处理复杂文档时非常重要的功能。下面将详细介绍这些知识点。 首先,`PHPWord` 是一个用PHP编写的开源库,它允许...

    C#操作Word(word对象模型)

    通过对Word对象模型的理解,开发者可以使用C#语言编写脚本来实现对Word文档的各种自动化操作,如创建文档、编辑内容、格式化样式等。这些能力在处理大量文档时尤其有用,可以帮助提高工作效率,减少重复性劳动。此外...

    C#实现word转图片

    C#的`System.IO`命名空间提供了所有必要的类和方法,如`File`和`Directory`,用于文件和目录的读写操作。 7. **异常处理**:在实际的代码实现中,需要对可能出现的错误情况进行处理,例如文件不存在、权限问题、...

    C# NPOI替换Word文档模板

    C#版本 NPOI 批量替换Word文档(doc文件)变量的方法。 网上各种代码都是直接替换run,但实际上很多变量是由多个run表示的,并不能直接用,本代码完美支持{变量}替换。

    c# 读取WORD的内容并显示在页面上

    本程序的主要功能是利用C#语言读取一个Word文档的内容,并将这些内容展示在一个网页上。实现这一功能的关键技术包括:通过`Microsoft.Office.Interop.Word`命名空间调用Word对象模型来读取文档内容,以及如何将获取...

    C#版Oracle数据库通用操作类

    ### C# 版 Oracle 数据库通用操作类解析 在现代软件开发中,数据库操作是必不可少的一部分,而 C# 结合 Oracle 数据库的应用尤为广泛。本文将深入探讨一个用于简化 Oracle 数据库操作的 C# 类——`ConnForOracle`。...

Global site tag (gtag.js) - Google Analytics