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);
}

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

(0)

相关推荐

  • 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

  • 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文件(图片、文字)

    本文实例为大家分享了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.W

  • Java通过Freemarker模板实现生成Word文件

    目录 1.  准备模板 2.  代码实现 3. PDF文件加水印 1.  准备模板 模板 + 数据 = 模型 1.将准备好的Word模板文件另存为.xml文件(PS:建议使用WPS来创建Word文件,不建议用Office) 2.将.xml文件重命名为.ftl文件 3.用文本编辑器打开.ftl文件,将内容复制出来,格式化一下,再覆盖原来的内容 (PS:格式化一下是为了方便查找并设置变量/占位符,当然设置好模板参数变量以后可以再压缩后再写会.ftl文件) 另外,强烈不建议在word文件中去编辑设置模

  • js生成word中图片处理方法

    首先功能是要求前台导出word,但是前后台是分离的,图片存在后台,所以就存在跨域问题. 导出文字都是没有问题的(jquery.wordexport.js),但是导出图片就存在问题了: 图片是以链接形式存到word中,这样如果是需要vpn的网站就会存在生成的word在没有vpn的情况下打不开,有vpn的情况下必须启用编辑才能加载出来图片. 解决办法:将图片转换成Data URL格式,再导出. 详细代码如下所示: function changeImgToDataurl(){ var charImg

  • Java模板动态生成word文件的方法步骤

    最近项目中需要根据模板生成word文档,模板文件也是word文档.当时思考一下想用POI API来做,但是觉得用起来相对复杂.后来又找了一种方式,使用freemarker模板生成word文件,经过尝试觉得还是相对简单易行的. 使用freemarker模板生成word文档主要有这么几个步骤 1.创建word模板:因为我项目中用到的模板本身是word,所以我就直接编辑word文档转成freemarker(.ftl)格式的. 2.将改word文件另存为xml格式,注意使用另存为,不是直接修改扩展名.

  • Java实现给Word文件添加文字水印

    目录 方法思路 Jar引入 Java代码 Word中设置水印时,可预设的文字或自定义文字设置为水印效果,但通常添加水印效果时,会对所有页面都设置成统一效果,如果需要对每一页或者某个页面设置不同的水印效果,则可以参考本文中的方法.下面,将以Java代码为例,对Word每一页设置不同的文字水印效果作详细介绍. 方法思路 在给Word每一页添加水印前,首先需要在Word文档每一页正文的最后一个字符后面插入“连续”分节符,然后在每一节的页眉段落里添加艺术字类型的形状对象,并设置艺术字的坐标位置.样式.对

  • asp生成带有样式的word文件方法

    复制代码 代码如下: < % Set fso=Server.CreateObject("Scripting.FileSystemObject") str="<html><title>asp生成word文件举例</title><body><span style='color:#ff0000;font-size:36px; font-weight:bold;'>欢迎光临www.jb51.net(我们)</sp

  • 一个JAVA小项目--Web应用自动生成Word

    前段时间接到一个Web应用自动生成Word的需求,现整理了下一些关键步骤拿来分享一下. 思路:(注:这里只针对WORD2003版本,其它版本大同小异.) 因为WORD文件内部的数据及格式等是通过XML文件的形式存储的,所以WORD文件可以很方便的实现由DOC到XML格式的相互转换,而操作XML文件就方便的多了,这样就实现了与平台无关的各种操作,通过节点的查询.替换.删除.新增等生成Word文件.所以,根据模板生成WORD文件实质就是由用户数据替换XML文件中特殊标签,然后另存为一个DOC文件的过

  • 用Coldfusion生成 OFFICE 文件的代码

    这几天在经典.5D碰到很多人在问,如何用CF生成EXCEL文件,昨天夜晚就写了一个示范程序放上来供大家参考. 我建议大家先自己慢慢体会,程序本身并不复杂,如果看不懂的再来问,最好不要看都没看就来发问... 好的,我就用我CCF论坛的数据库来做是实验,目的是在线打开EXCEL文件和在线生成EXCEL文件.文件内容就是CCF论坛所有版块的名称和编号.我顺便做了个生成WORD文件的.代码就改了一处.大家仔细看看. 在线打开OFFICE文件必须你系统安装了OFFICE.记住这点,要不然就会提示下载. <

  • C#实现DataSet内数据转化为Excel和Word文件的通用类完整实例

    本文实例讲述了C#实现DataSet内数据转化为Excel和Word文件的通用类.分享给大家供大家参考,具体如下: 前不久因为项目的需要写的一个C#把DataSet内数据转化为Excel和Word文件的通用类,这些关于Excel.Word的导出方法,基本可以实现日常须要,其中有些方法可以把数据导出后 生成Xml格式,再导入数据库!有些屏蔽内容没有去掉,保留下来方便学习参考用之. 最后请引用Office相应COM组件,导出Excel对象的一个方法要调用其中的一些方法和属性. using Syste

随机推荐