网站首页站长博客下载中心域名交易站长论坛域名主机免费电邮免费域名中文排行排名查询站长书库书籍教程下载
设为首页
加入收藏
总编信箱
投稿或申请专栏请先 [登 陆]
学院首页 网络编程 网页设计 图形图象 数 据 库 服 务 器 网络媒体 网络安全 个人专栏 站长CLUB 业界新闻 信息公告
 当前位置:首页 >> 网络编程 >> NET专区 >> 正文
公告通知
返回上级列表
资料搜索
相关文章
用户自定义控件的应用
c#.net常用函数和方法集
在VB中使用水晶报表的一种简易编
C#调用父类的父类的方法
浏览.NET Framework 2.0 类型库中
为.Text Blog 添加 计数器
编程实现邮件地址有效性检测 
VB/VB.NET/C#导出到Excel的方法
c#高性能在WEB端产生验证图片
用System.Web.Caching.Cache保存
也说C#实现对Word文件读写
[ 来源:中国站长学院中国站长学院中国站长学院 | 作者:郁郁小蝎 | 时间:2005-7-6 13:26:26 | 浏览:人次 ]
收藏到新浪ViVi 收藏到365KEY 收藏到我摘  字号选择〖    〗/ 双击滚屏 单击停止  
  手头上的一个项目报表相对比较简单,所以报表打印采用VBA引擎,通过定制Word模版,然后根据模版需要填充数据,然后OK,打印即可。

实现方法:首先需要引用VBA组建,我用的是Office2003 Professional,Dll版本号为Microsoft Word11.0,

另外当然还需要引用Interop.Word.Dll.

代码如下:

#region 打开Word文档,并且返回对象wDoc,wDoc
  ///


  /// 打开Word文档,并且返回对象wDoc,wDoc
  ///

  /// 完整Word文件路径+名称  
  /// 返回的Word.Document wDoc对象
  /// 返回的Word.Application对象
  public static void CreateWordDocument(string FileName,ref Word.Document wDoc,ref  Word.Application WApp)
  {
   if(FileName == "") return;
   Word.Document thisDocument = null;
   Word.FormFields   formFields = null;
   Word.Application thisApplication = new Word.ApplicationClass();
   thisApplication.Visible = true;
   thisApplication.Caption = "";
   thisApplication.Options.CheckSpellingAsYouType = false;
   thisApplication.Options.CheckGrammarAsYouType = false;

   Object filename = FileName;
   Object ConfirmConversions = false;
   Object ReadOnly = true;
   Object AddToRecentFiles = false;

   Object PasswordDocument = System.Type.Missing;
   Object PasswordTemplate = System.Type.Missing;
   Object Revert = System.Type.Missing;
   Object WritePasswordDocument = System.Type.Missing;
   Object WritePasswordTemplate = System.Type.Missing;
   Object Format = System.Type.Missing;
   Object Encoding = System.Type.Missing;
   Object Visible = System.Type.Missing;
   Object OpenAndRepair = System.Type.Missing;
   Object DocumentDirection =  System.Type.Missing;
   Object NoEncodingDialog = System.Type.Missing;
   Object XMLTransform = System.Type.Missing;

   try
   {
    Word.Document wordDoc =
     thisApplication.Documents.Open(ref filename, ref ConfirmConversions,
     ref ReadOnly, ref AddToRecentFiles, ref PasswordDocument, ref PasswordTemplate,
     ref Revert,ref WritePasswordDocument, ref WritePasswordTemplate, ref Format,
     ref Encoding, ref Visible, ref OpenAndRepair, ref DocumentDirection,
     ref NoEncodingDialog, ref XMLTransform );
    
    thisDocument = wordDoc;
    wDoc = wordDoc;
    WApp = thisApplication;
    formFields = wordDoc.FormFields;
   }
   catch(Exception ex)
   {
    MessageBox.Show(ex.Message);
   }
   
  }
  #endregion

调用上面静态方法,打开目标文件并且把DataGrid中数据填充到对应Word标签中去

#region Word填充数据(For Example)
  ///


  /// Word填充数据
  ///

  private void WordLoadData()
  {
   Word.Document wDoc=null;
   Word.Application wApp=null;
   sysFun.CreateWordDocument("E:\\监测报告(new).dot",ref wDoc,ref wApp);

   //对标签"C"进行填充
   object bkmC="C";
   if(wApp.ActiveDocument.Bookmarks.Exists("C") == true)
   {
    wApp.ActiveDocument.Bookmarks.get_Item
     (ref bkmC).Select();
   }
   wApp.Selection.TypeText(this.txt1.Text);
   object bkmG = "TWaterTable3";
   object unit;
   object count; //移动数
   object extend;
    

   extend = Word.WdMovementType.wdExtend;
   unit = Word.WdUnits.wdCell;
   //把DataGrid中数据填充到标签TWaterTable3上
   if(wApp.ActiveDocument.Bookmarks.Exists("TWaterTable3") == true)
   {
    wApp.ActiveDocument.Bookmarks.get_Item
     (ref bkmG).Select();

    for(int i=0;i    {
     if(i==0)
     {
      count=1;
     }
     else
     {
      count=0;
     }
     //需填充5列数据
     wApp.Selection.Move(ref unit,ref count);
     wApp.Selection.TypeText(gridEX1.GetRow(i).Cells[0].Text);
     count=1;
      
     wApp.Selection.Move(ref unit,ref count);
     wApp.Selection.TypeText(gridEX1.GetRow(i).Cells[1].Text);
      
     wApp.Selection.Move(ref unit,ref count);
     wApp.Selection.TypeText(gridEX1.GetRow(i).Cells[2].Text);
      
     wApp.Selection.Move(ref unit,ref count);
     wApp.Selection.TypeText(gridEX1.GetRow(i).Cells[3].Text);
     
     wApp.Selection.Move(ref unit,ref count);
     wApp.Selection.TypeText(gridEX1.GetRow(i).Cells[4].Text);
     //换行
     wApp.Selection.MoveRight(ref unit,ref count,ref extend);
    }
   }
  }
  #endregion

然后就OK了,在对标签表控制要注意列循环和换行,不知道还有没有其它好办法,欢迎探讨!


[发送给好友]  [打印本页]  [关闭窗口]  [返回顶部]   转载请注明来源:http://edu.chinaz.com   
特别声明: 本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作者。文章版权归文章原始作者所有。对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转载的文章有版权问题请联系编辑人员,我们尽快予以更正。
栏目编辑: 设计风 责任编辑: 设计风设计风设计风
原始作者: 郁郁小蝎 录入时间: 2005-7-6 13:26:26
信息来源: 中国站长学院中国站长学院中国站长学院 投稿信箱: Edu#chinaz.com
设为首页 - 加入收藏 - 关于我们 - 广告服务 - 版权申明 - 友情链接 - 联系方式 - 总编信箱 - 会员投稿