现在的位置: 首页 > 综合 > 正文

C# 使用Word模板做报表套打(不使用书签)

2013年01月01日 ⁄ 综合 ⁄ 共 5169字 ⁄ 字号 评论关闭

http://yuyingying1986.blog.hexun.com/37649659_d.html

1.制作一个Word模板

   查看更多精彩图片

2.编码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Office.Interop.Word;
using System.Windows.Forms;

namespace ConcreteDispatch
{
    class WordFormatPrint
    {
        private Microsoft.Office.Interop.Word.Application app = null;

        /// <summary>
        /// Word文本替换
        /// </summary>
        /// <param name="doc">文档</param>
        /// <param name="args">要替换的内容</param>
        internal void ReplaceWord(Document doc, params object[] args)
        {
            try
            {
                object first = 0;
                object last = doc.Characters.Count;
                Range range = doc.Range(ref first, ref last);

                Microsoft.Office.Interop.Word.Find finder = range.Find;
                finder.ClearFormatting();

                object missingValue = Type.Missing;
                object replaceArea = Microsoft.Office.Interop.Word.WdReplace.wdReplaceAll;

                int i = 0;
                foreach (object item in args)
                {
                    object findStr = "{" + i + "}";
                    object replaceStr = item;
                    //替换内容
                    finder.Execute(ref findStr, ref missingValue, ref missingValue,
                      ref missingValue, ref missingValue, ref missingValue,
                      ref missingValue, ref missingValue, ref missingValue,
                      ref replaceStr, ref replaceArea, ref missingValue,
                      ref missingValue, ref missingValue, ref missingValue);

                    i++;
                }

            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "提示  ReplaceWord", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }
        }

        /// <summary>
        /// word文档资源释放
        /// </summary>
        /// <param name="doc">要释放资源的文档</param>
        internal void DisposeWord(Document doc)
        {
            try
            {
                object oMissing = System.Reflection.Missing.Value;

                if (doc != null)
                {
                    //关闭Word并回收资源
                    doc.Close(ref oMissing, ref oMissing, ref oMissing);
                    System.Runtime.InteropServices.Marshal.ReleaseComObject(doc);
                    doc = null;
                }

                if (app != null)
                {
                    app.Quit(ref oMissing, ref oMissing, ref oMissing);
                    System.Runtime.InteropServices.Marshal.ReleaseComObject(app);
                    app = null;
                    System.GC.Collect();
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "提示  DisposeWord", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }
        }

        /// <summary>
        /// 从模板创建Word文件
        /// </summary>
        /// <param name="fileName">模板位置及名称</param>
        /// <returns></returns>
        internal Document CreateWord(string fileName)
        {
            try
            {
                app = new Microsoft.Office.Interop.Word.Application();//打开word程序

                Document doc = new Document();//创建word对象
                object unknow = Type.Missing;

                object savefilename = System.Windows.Forms.Application.StartupPath + "//test.doc";//保存路径

                object File = fileName;
                app.Visible = false;//设置word程序为不可见
                doc = app.Documents.Open(ref File,
                ref unknow, ref unknow, ref unknow, ref unknow, ref unknow,
                ref unknow, ref unknow, ref unknow, ref unknow, ref unknow,
                ref unknow, ref unknow, ref unknow, ref unknow, ref unknow);//打开word文档

                doc.SaveAs(ref savefilename, ref unknow, ref unknow, ref unknow, ref unknow, ref unknow, ref unknow, ref unknow, ref unknow, ref unknow, ref unknow, ref unknow, ref unknow, ref unknow, ref unknow, ref unknow);//保存word文档

                return doc;
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "提示  CreateWord", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return null;
            }
        }

        /// <summary>
        /// 打印Word文件
        /// </summary>
        /// <param name="doc"></param>
        internal void PrintWord(Document doc)
        {
            try
            {
                object missing = System.Reflection.Missing.Value;

                ////打印预览
                //if (app != null) app.Visible = true;
                //doc.PrintPreview();

                //打印
                doc.PrintOut(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, ref missing, ref missing, ref missing);

            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "提示  PrintWord", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }
        }

    }
}

 

3.使用:

        private void btnSavePrint_Click(object sender, EventArgs e)
        {
            WordFormatPrint wfp = new WordFormatPrint();
            Document doc = wfp.CreateWord(@"F:/软件版本/Gps2009/客户端/混凝土设计/混凝土生产任务单.dot");
            if (doc == null) return;
            wfp.ReplaceWord(doc, txtNumbers.Text.Trim(), DateTime.Today, cmbGuestName.Text.Trim());
            wfp.PrintWord(doc);
            wfp.DisposeWord(doc);
        }

抱歉!评论已关闭.