C#生成Word文件(图片、文字)

本文实例为大家分享了C#生成Word文件的具体代码,供大家参考,具体内容如下

通过Microsoft.Office.Interop.Word生成Word文档

1.引用类 WordReport.cs,代码如下:

using System;
using System.Collections.Generic;
using System.Text;
using Microsoft.Office.Interop.Word;
using MSWord = Microsoft.Office.Interop.Word;
using System.Reflection;
using System.IO;

namespace CRM.Common
{
  public class WordReport
  {
    private _Application wordApp = null;
    private _Document wordDoc = null;
    object unite = MSWord.WdUnits.wdStory;
    Object Nothing = Missing.Value;
    public _Application Application
    {
      get
      {
        return wordApp;
      }
      set
      {
        wordApp = value;
      }
    }
    public _Document Document
    {
      get
      {
        return wordDoc;
      }
      set
      {
        wordDoc = value;
      }
    }

    // 通过模板创建新文档
    public void CreateNewDocument(string filePath)
    {
      try
      {
        killWinWordProcess();
        wordApp = new ApplicationClass();
        wordApp.DisplayAlerts = WdAlertLevel.wdAlertsNone;
        wordApp.Visible = false;
        object missing = System.Reflection.Missing.Value;
        object templateName = filePath;
        wordDoc = wordApp.Documents.Open(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);
      }
      catch (Exception ex)
      {

      }
    }
    public void CreateNewDocument()
    {
      try
      {
        //killWinWordProcess();
        wordApp = new ApplicationClass();
        wordApp.DisplayAlerts = WdAlertLevel.wdAlertsNone;
        wordApp.Visible = false;
        Object Nothing = Missing.Value;
        wordDoc = wordApp.Documents.Add(ref Nothing, ref Nothing, ref Nothing, ref Nothing);
      }
      catch (Exception ex)
      {

      }
    }
    // 保存新文件
    public void SaveDocument(string filePath)
    {
      if (File.Exists((string)filePath))
      {
        File.Delete((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);
    }
    public void InsertText(string strContent)
    {
      //写入普通文本
      wordDoc.Content.InsertAfter(strContent);
      wordApp.Selection.EndKey(ref unite, ref Nothing); //将光标移动到文档末尾

    }
    public void InsertTitle(string strContent)
    {
      //写入普通文本
      wordApp.Selection.EndKey(ref unite, ref Nothing); //将光标移动到文档末尾

      try
      {
        wordDoc.Paragraphs.Last.Range.set_Style("标题 5");
      }
      catch (Exception ex)
      {
        wordDoc.Paragraphs.Last.Range.set_Style("Heading 5");
      }
      wordDoc.Paragraphs.Last.Range.Font.Color = MSWord.WdColor.wdColorBlack;
      wordDoc.Paragraphs.Last.Range.Font.Size = 11;
      wordDoc.Paragraphs.Last.Range.Font.Name = "宋体";
      wordDoc.Paragraphs.Last.Range.Text = strContent;
      wordApp.Selection.EndKey(ref unite, ref Nothing); //将光标移动到文档末尾
      try
      {
        wordDoc.Paragraphs.Last.Range.set_Style("Normal");
      }
      catch (Exception ex)
      {
        wordDoc.Paragraphs.Last.Range.set_Style("正文");
      }

    }
    // 在书签处插入值
    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;
    }

    // 合并单元格 表id,开始行号,开始列号,结束行号,结束列号
    public void MergeCell(int n, int row1, int column1, int row2, int column2)
    {
      wordDoc.Content.Tables[n].Cell(row1, column1).Merge(wordDoc.Content.Tables[n].Cell(row2, column2));
    }

    // 合并单元格 表名,开始行号,开始列号,结束行号,结束列号
    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)Microsoft.Office.Interop.Word.Table table
    public void SetParagraph_Table(int n, int Align, int Vertical)
    {
      switch (Align)
      {
        case -1: wordDoc.Content.Tables[n].Range.ParagraphFormat.Alignment = WdParagraphAlignment.wdAlignParagraphLeft; break;//左对齐
        case 0: wordDoc.Content.Tables[n].Range.ParagraphFormat.Alignment = WdParagraphAlignment.wdAlignParagraphCenter; break;//水平居中
        case 1: wordDoc.Content.Tables[n].Range.ParagraphFormat.Alignment = WdParagraphAlignment.wdAlignParagraphRight; break;//右对齐
      }
      switch (Vertical)
      {
        case -1: wordDoc.Content.Tables[n].Range.Cells.VerticalAlignment = WdCellVerticalAlignment.wdCellAlignVerticalTop; break;//顶端对齐
        case 0: wordDoc.Content.Tables[n].Range.Cells.VerticalAlignment = WdCellVerticalAlignment.wdCellAlignVerticalCenter; break;//垂直居中
        case 1: wordDoc.Content.Tables[n].Range.Cells.VerticalAlignment = WdCellVerticalAlignment.wdCellAlignVerticalBottom; break;//底端对齐
      }
    }

    // 设置单元格内容对齐方式
    public void SetParagraph_Table(int n, int row, int column, int Align, int Vertical)
    {
      switch (Align)
      {
        case -1: wordDoc.Content.Tables[n].Cell(row, column).Range.ParagraphFormat.Alignment = WdParagraphAlignment.wdAlignParagraphLeft; break;//左对齐
        case 0: wordDoc.Content.Tables[n].Cell(row, column).Range.ParagraphFormat.Alignment = WdParagraphAlignment.wdAlignParagraphCenter; break;//水平居中
        case 1: wordDoc.Content.Tables[n].Cell(row, column).Range.ParagraphFormat.Alignment = WdParagraphAlignment.wdAlignParagraphRight; break;//右对齐
      }
      switch (Vertical)
      {
        case -1: wordDoc.Content.Tables[n].Cell(row, column).Range.Cells.VerticalAlignment = WdCellVerticalAlignment.wdCellAlignVerticalTop; break;//顶端对齐
        case 0: wordDoc.Content.Tables[n].Cell(row, column).Range.Cells.VerticalAlignment = WdCellVerticalAlignment.wdCellAlignVerticalCenter; break;//垂直居中
        case 1: wordDoc.Content.Tables[n].Cell(row, column).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;
      }
    }

    // 设置单元格字体
    public void SetFont_Table(int n, int row, int column, string fontName, double size, int bold)
    {
      if (size != 0)
      {
        wordDoc.Content.Tables[n].Cell(row, column).Range.Font.Size = Convert.ToSingle(size);
      }
      if (fontName != "")
      {
        wordDoc.Content.Tables[n].Cell(row, column).Range.Font.Name = fontName;
      }
      wordDoc.Content.Tables[n].Cell(row, column).Range.Font.Bold = bold;// 0 表示不是粗体,其他值都是
    }

    // 是否使用边框,n表格的序号,use是或否
    // 该处边框参数可以用int代替bool可以让方法更全面
    // 具体值方法中介绍
    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 = 0;
      }
    }

    // 给表格插入一行,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);
      }
    }

    // 删除表格第rows行,n为表格的序号
    public void DeleteRow(int n, int row)
    {
      Microsoft.Office.Interop.Word.Table table = wordDoc.Content.Tables[n];
      table.Rows[row].Delete();
    }

    // 给表格中单元格插入元素,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 picturePath, float width, float hight,WdParagraphAlignment align)
    {
      object unite = MSWord.WdUnits.wdStory;
      Object Nothing = Missing.Value;
      Application.Selection.EndKey(ref unite, ref Nothing); //将光标移动到文档末尾
      //要向Word文档中插入图片的位置
      Object range = wordDoc.Paragraphs.Last.Range;
      //定义该插入的图片是否为外部链接
      Object linkToFile = false;        //默认,这里貌似设置为bool类型更清晰一些
      //定义要插入的图片是否随Word文档一起保存
      Object saveWithDocument = true;       //默认
      //使用InlineShapes.AddPicture方法(【即“嵌入型”】)插入图片
      InlineShape shape = wordDoc.InlineShapes.AddPicture(picturePath, ref linkToFile, ref saveWithDocument, ref range);
      wordApp.Selection.ParagraphFormat.Alignment = align;//

      //设置图片宽高的绝对大小
      if (width!=-1)
        wordDoc.InlineShapes[1].Width = width;
      if(hight!=-1)
        wordDoc.InlineShapes[1].Height = hight;
      try
      {
        wordDoc.Paragraphs.Last.Range.set_Style("正文");
      }
      catch(Exception ex)
      {
        wordDoc.Paragraphs.Last.Range.set_Style("Normal");
      }
      shape.Borders.Enable = 12;

      //shape.ConvertToShape().WrapFormat.Type = MSWord.WdWrapType.wdWrapSquare;//四周环绕的方式
    }

    // 插入一段文字,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()
    {
      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();
        }
      }
    }

    internal void InsertTable(int tableRow, int tableColumn,List<string> imagePaths)
    {
      wordApp.Selection.EndKey(ref unite, ref Nothing); //将光标移动到文档末尾
      MSWord.Table table = wordDoc.Tables.Add(wordApp.Selection.Range,
                          tableRow, tableColumn, ref Nothing, ref Nothing);

      //默认创建的表格没有边框,这里修改其属性,使得创建的表格带有边框
      table.Borders.Enable = 0;//这个值可以设置得很大,例如5、13等等

      //表格的索引是从1开始的。
      for (int i = 1; i <= tableRow; i++)
      {
        for (int j = 1; j <= tableColumn; j++)
        {

          int index = (i-1) * tableColumn + j-1;
          if (index < imagePaths.Count)//有文件
          {
            string FileName = imagePaths[index]; //图片所在路径
            object LinkToFile = false;
            object SaveWithDocument = true;
            object Anchor = table.Cell(i, j).Range;//选中要添加图片的单元格
            MSWord.InlineShape il = wordDoc.Application.ActiveDocument.InlineShapes.AddPicture(FileName, ref LinkToFile, ref SaveWithDocument, ref Anchor);

            //图片大小
            il.Width = 100;//图片宽度
            il.Height = 100;//图片高度
            table.Rows[i].Cells[j].Split(2, 1);
            table.Cell(i+1, j).Range.Text = "图片名称:"+(index+1).ToString(); //
            table.Cell(i+1, j).Merge(table.Cell(i, j));//纵向合并
          }
        }
      }
      //设置table样式
      table.Rows.HeightRule = MSWord.WdRowHeightRule.wdRowHeightAtLeast;//高度规则是:行高有最低值下限?
      table.Rows.Height = wordApp.CentimetersToPoints(float.Parse("0.8"));// 

      table.Range.Font.Size = 10.5F;
      table.Range.Font.Bold = 0;

      table.Range.ParagraphFormat.Alignment = MSWord.WdParagraphAlignment.wdAlignParagraphCenter;//表格文本居中
      table.Range.Cells.VerticalAlignment = MSWord.WdCellVerticalAlignment.wdCellAlignVerticalBottom;//文本垂直贴到底部
      //设置table边框样式
      table.Borders.OutsideLineStyle = MSWord.WdLineStyle.wdLineStyleNone;//表格外框是双线
      table.Borders.InsideLineStyle = MSWord.WdLineStyle.wdLineStyleNone;//表格内框是单线

      table.Rows[1].Range.Font.Bold = 1;//加粗
      table.Rows[1].Range.Font.Size = 12F;
      table.Cell(1, 1).Range.Font.Size = 10.5F;
    }
  }
}

2.生成Word文档

/// <summary>
///
/// </summary>
/// <param name="path">like string path=@"c:\\temp\\"</param>
public void GengerateWord(string path)
    {
      string fileName = "test.doc";
      WordReport report = new WordReport();
      report.CreateNewDocument(); //创建文件
      report.InsertTitle("标题");
      float width = 420;//图片宽度
      float height = 200;//图片高度
      report.InsertPicture("图片地址", width, height, WdParagraphAlignment.wdAlignParagraphCenter);
      report.SaveDocument(path+ fileName);
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

时间: 2019-05-26

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

本文实例为大家分享了C#根据Word模版生成Word文的具体代码,供大家参考,具体内容如下 1.指定的word模版 2.生成word类 添加com Microsoft word 11.0 Object Library 引用 using System; using System.Collections.Generic; using System.Data; using System.Windows.Forms; using Word = Microsoft.Office.Interop.Word;

C#生成Word文档代码示例

public bool CreateWordFile(string _filename, "数据List或者你C#要写的数据") { #region 开始生成Word try { string strtitle = "任务导出"; object oEndOfDoc = "//endofdoc"; Object Nothing = System.Reflection.Missing.Value; Object filename = _filenam

C#生成word记录实例解析

本文以实例形式讲述了C#生成Word记录的方法,具体实现代码如下: private void button1_Click(object sender, System.EventArgs e) { object oMissing = System.Reflection.Missing.Value; object oEndOfDoc = "\\endofdoc"; /* \endofdoc是预定义的bookmark */ //创建一个document. Word._Application

Mybatis generator自动生成代码插件实例解析

mybatis自动生成代码(实体类.Dao接口等)是很成熟的了,就是使用mybatis-generator插件. 它是一个开源的插件,使用maven构建最好,可以很方便的执行 插件官方简介: http://www.mybatis.org/generator/index.html 插件的GitHub地址: https://github.com/mybatis/generator 如何使用mybatis-generator插件呢?只需要三步: 1.修改pom.xml配置文件 网上大部分说法都要添加依

python解析html提取数据,并生成word文档实例解析

简介 今天试着用ptyhon做了一个抓取网页内容,并生成word文档的功能,功能很简单,做一下记录以备以后用到. 生成word用到了第三方组件python-docx,所以先进行第三方组件的安装.由于windows下安装的python默认不带setuptools这个模块,所以要先安装setuptools这个模块. 安装 1.在python官网上找到 https://bootstrap.pypa.io/ez_setup.py ,把代码保存到本地并执行: python ez_setup.py 2.下载

Django数据库表反向生成实例解析

本文我们研究下如何在django中反向生成mysql model代码,接下来我们看看具体介绍. 我们在展示django ORM反向生成之前,我们先说一下怎么样正向生成代码. 正向生成,指的是先创建model.py文件,然后通过django内置的编译器,在数据库如mysql中创建出符合model.py的表. 反向生成,指的是先在数据库中create table,然后通过django内置的编译器,生成model代码. 1.准备工作 创建django工程以及app 创建django工程,名字是hell

php生成word并下载代码实例

本文实例讲述了php如何生成word并下载的具体实例.分享给大家供大家参考,具体如下: 1.前端代码 <!DOCTYPE html> <html> <head> <title>PHP生成Word文档</title> <meta charset="utf-8"> </head> <body> <h1 style="text-align: center">xxx的

nodejs 生成和导出 word的实例代码

前段时间由于项目需求,得做excel和word的导出功能,excel的导出百度一下一大把,小伙伴们都写的好详细,基本打来改改就可以用,可导出word的功能,百度了貌似都找不到可用资料,哎,费解呀.后来找同事,同事们也没整过,看来还得自己上呀... 第一次发现原来百度Google这强大,同事推荐的 http://www.baigoogledu.com/ 百度Google一起摆 nodejs word  找到https://github.com/Ziv-Barber/officegen   看到这里

JVM内存结构划分实例解析

这篇文章主要介绍了JVM内存结构划分实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 数据区域划分 运行时内存区域划分:程序计数器.虚拟机栈.本地方法栈.堆.方法区 程序计数器 线程私有 通过寄存器实现 不会存在运行溢出 当前线程所执行的行号指示器,记住下一条JVM指令的执行地址 虚拟机栈 垃圾回收不涉及栈内存 栈内存是线程私有的,可以理解为线程运行需要的内存空间 栈由栈帧组成,每个栈帧代表一个方法执行时需要的内存(参数,局部变量,返回地

Java对象的XML序列化与反序列化实例解析

上一篇文章我们介绍了java实现的各种排序算法代码示例,本文我们看看Java对象的xml序列化与反序列化的相关内容,具体如下. XML是一种标准的数据交换规范,可以方便地用于在应用之间交换各类数据.如果能在Java对象和XML文档之间建立某种映射,例如Java对象的XML序列化和反序列化,那么就可以使Java的对象方便地与其他应用进行交换. java.beans包里面有两个类XMLEncoder和Decoder,分别用于将符合JabaBeans规范的Java对象以XML方式序列化和反序列化.以下

java使用Jsoup组件生成word文档

先利用jsoup将得到的html代码"标准化"(Jsoup.parse(String html))方法,然后利用FileWiter将此html内容写到本地的template.doc文件中,此时如果文章中包含图片的话,template.doc就会依赖你的本地图片文件路径,如果你将图片更改一个名称或者将路径更改,再打开这个template.doc,图片就会显示不出来(出现一个叉叉).为了解决此问题,利用jsoup组件循环遍历html文档的内容,将img元素替换成${image_自增值}的标

Python建立Map写Excel表实例解析

本文主要研究的是用Python语言建立Map写Excel表的相关代码,具体如下. 前言:我们已经能够很熟练的写Excel表相关的脚本了.大致的操作就是,从数据库中取数据,建立Excel模板,然后根据模板建立一个新的Excel表,把数据库中的数据写入.最后发送邮件.之前的一篇记录博客,写的很标准了.这里我们说点遇到的新问题. 我们之前写类似脚本的时候,有个问题没有考虑过,为什么要建立模板然后再写入数据呢?诶-其实也不算是没考虑过,只是懒没有深究罢了.只求快点完成任务... 这里对这个问题进行思考阐