Net开发日记4

今天编写了一个c#的windows应用程序,主窗口是一个form,现在有一些计算出来的数据,想做成word格式输出来,
在该应用程序中生成一个word文档

Word._Application   app   =   new   Word.ApplicationClass();  
  app.Visible   =   false;  
   
  object   nothing   =   System.Reflection.Missing.Value;  
  object   temp   =   Environment.CurrentDirectory   +   @"/resume.doc";  
   
  Word.Document   doc  
  =   app.Documents.Open(ref   temp,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);  
   
  for   (i   =   0;   i   <   ds.Tables[3].Rows.Count;   i   ++)  
  {  
  int   intTableID   =   "";     //需要添加内容的tableID  
   
  intRow   =   doc.Tables[intTable].Rows.Count;  
  doc.Tables[intTable].Cell(intRow,1).Range.Text  
  =   ds.Tables[3].Rows[i]["ExperenceDate"].ToString();  
  doc.Tables[intTable].Cell(intRow,2).Range.Text  
  =   ds.Tables[3].Rows[i]["Company"].ToString();  
  doc.Tables[intTable].Cell(intRow,3).Range.Text  
  =   ds.Tables[3].Rows[i]["Department"].ToString();  
  doc.Tables[intTable].Cell(intRow,4).Range.Text  
  =   ds.Tables[3].Rows[i]["Station"].ToString();  
  doc.Tables[intTable].Rows.Add(ref nothing);  
  }  
 
 
 
  在CreateWord.cs文件里面添加:

using System.Reflection;

using Microsoft.Office.Interop.Word;

 

然后在按钮事件里面添加如下代码:

ApplicationClass wordApp = new ApplicationClass();

object missing = System.Reflection.Missing.Value;

object tempName = @"d:/Temp.dot";   // 模板名称,本例中的模板如后面的图

     object docName = @"D:/WebSite/a.doc"; // 生成的word文件,可以不放在web目录下,当然,实际应用中可能会涉及到动态生成文件名,相信这点难不倒你吧 ^_^

    

     // 生成新文档,这里使用了上面提到的模板,如果不想使用指定的模板,可使用missing,这是会使用默认的模板。关于生成word文件的几个方法,参阅MSDN

     Document MyDoc = wordApp.Documents.Add(ref tempName, ref missing, ref missing, ref    missing);

 

     wordApp.Visible = true;

     MyDoc.Activate();

      

     wordApp.Selection.Font.Size = 30;           // 字体大小

     wordApp.Selection.ParagraphFormat.Alignment = WdParagraphAlignment.wdAlignParagraphCenter;  // 居中

     wordApp.Selection.Font.Bold = (int)WdConstants.wdToggle;    // 黑体

     // 还有很多很多的格式可以在这里设置,发挥你的想像力尽情研究吧,吼吼~~~~~~~~

 

     wordApp.Selection.TypeText("hello");                        // 文字内容,这里我没有从数据库里面读取,只是测试了一下写入的内容

    

     // 保存word文档

    MyDoc.SaveAs(ref docName, 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);

 

     // 关闭,释放

     MyDoc.Close(ref missing, ref missing, ref missing);

     wordApp.Quit(ref missing, ref missing, ref missing);

     MyDoc = null;

     wordApp = null;

 

     Response.Redirect("DownloadWord.aspx?id=" + "a.doc");

下载页面的代码(DownloadWord.aspx.CS):

     string FullFileName = Request.QueryString["id"];

     FileInfo DownloadFile = new FileInfo(HostingEnvironment.ApplicationPhysicalPath + FullFileName); // 需要转换为绝对路径,否则会自动认到C盘系统里那个IIS目录下面去,而且,无法通过URI的方式来进行数据流读取。如果你生成的文件不在web目录下,也需要明确指出。  

     // 下面到就是读取文件,通过数据流的方式下载了。

     Response.Clear();

     Response.ClearHeaders();

     Response.Buffer = false;

     Response.ContentType = "application/octet-stream";

     Response.AppendHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode(FullFileName, System.Text.Encoding.UTF8));

     Response.AppendHeader("Content-Length", DownloadFile.Length.ToString());

     Response.WriteFile(DownloadFile.FullName);

     Response.Flush();

     Response.End();

又一方法:
private void WriteFile()
   {

    strFileName=System.Windows.Forms.Application.StartupPath+"//试题库【"+GetRandomString()+"】.doc";
    Object Nothing=System.Reflection.Missing.Value;
    myWordDoc=myWordApp.Documents.Add(ref Nothing,ref Nothing,ref Nothing,ref Nothing);

    #region 将数据库中读取得数据写入到word文件中

    strContent="d://试题库/n/n/r";
    Response.WriteFile(strContent);

    strContent="试题库";
    Response.WriteFile(strContent);


    #endregion

    //将WordDoc文档对象的内容保存为DOC文档
    myWordDoc.SaveAs(ref strFileName,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);
    //关闭WordDoc文档对象
    myWordDoc.Close(ref Nothing, ref Nothing, ref Nothing);
    //关闭WordApp组件对象
    myWordApp.Quit(ref Nothing, ref Nothing, ref Nothing);
   }
        string   title="C#生成文档";  
     object   titleLengh=title.Length;  
     string   first="/n         公司最近需要利用C#对项目进行编程,其"+  
      "中存在一个功能就是可自动生成WORD文档,但一直以来都"+  
      "找不到什么好办法,无奈之下,只有自已学着写一个了.";  
     object   firstLengh=first.Length;  
     string   second="/n         如果能真正生成WORD文档的好处有:";  
     object   secondLengh=second.Length;  
     string   third="/n1、根据数据库信息自动生成文档;";  
     object   thirdLengh=third.Length;  
     string   forth="/n2、免去书写文档之苦;";  
     object   forthLengh=forth.Length;  
     string   fifth="/n3、可以通过邮件方式传出文档。";  
     object   fifthLengh=fifth.Length;  
     object   missing;  
     object   zero=0;  
     object   one=1;  
     object   two=2;  
     object   tree=3;  
     object   four=4;  
     object   five=5;  
     object   six=6;  
     object   seven=7;  
     object   eight=8;  
     object   nine=9;  
     object   ten=10;  
     Word.ApplicationClass   wa=new   Word.ApplicationClass();  
     missing=System.Reflection.Missing.Value;  
     wa.Visible=true;  
     wa.Documents.Add(ref   missing,ref   missing,ref   missing,ref   missing);  
     Word.Range   myRange=wa.ActiveDocument.Range(ref   zero,ref   zero);  
     object   r=myRange;  
     Word.Paragraph   p=wa.ActiveDocument.Paragraphs.Add(ref   r);  
     p.Range.InsertBefore(title);  
     Word.Range   titleRange=wa.ActiveDocument.Range(ref   zero,ref   titleLengh);  
     titleRange.Font.Size=24;  
     titleRange.Font.Name="隶书";  
     titleRange.Font.Color=Word.WdColor.wdColorBlue;  
     //MessageBox.Show("NO.1");  
     titleRange.Paragraphs.Alignment=Word.WdParagraphAlignment.wdAlignParagraphCenter;  
     Word.Range firstR=wa.ActiveDocument.Paragraphs.Item(2).Range;  
     r=firstR;  
     p=wa.ActiveDocument.Paragraphs.Add(ref   r);  
     firstR.Font.Size=12;  
     firstR.Paragraphs.Alignment=Word.WdParagraphAlignment.wdAlignParagraphJustify;  
     firstR.InsertAfter(first);  
     firstR.InsertParagraphAfter();  
     //firstR=wa.ActiveDocument.Paragraphs.Item(3).Range;  
     firstR.InsertAfter(second);  
     firstR.InsertAfter(third);  
     firstR.InsertAfter(forth);  
     firstR.InsertAfter(fifth);  

 

posted on 2006-05-14 15:31  badyue  阅读(167)  评论(0编辑  收藏  举报

导航