C#生成word文檔

    最近兩天研究了一下如何使用VS2008(C#語言)輸出Word文檔。如下是幾點總結:shell

    1、很是簡單。app

    2、開發及運行環境要求。操做系統爲:WindowsXP(安裝.net framework2.0)/Vista/Win7;在操做系統必須安裝Word2003徹底安裝版。這裏必需要強調是Word2003徹底安裝版,由於軟件開發及運行都須要一個com組件:Microsoft word 11.0 Object Library。若是不是Word2003徹底安裝版,能夠下載這個com組件,並手動的安裝這個com組件。下載地址爲:http://www.microsoft.com/download/en/details.aspx?displaylang=en&id=20923,文件不大,只有4M左右。函數

    3C#工程設置。這裏的工程設置,就是添加com組件。步驟爲:在工程資源管理器中"添加引用"->"com"選項卡->在下拉列表中選Microsoft word 11.0 Object Libraryok了,看上去,跟添加通常的dll同樣,但實際上vs2008在這個過程當中完成一系列複雜的關於.net調用com組件的操做,不過,幸虧咱們不用管這個。ui

    4、接下就是寫代碼了。在這裏,使用Wordcom對像,跟使用通常的非com對像同樣,很是流暢,好像根本就無論它什麼comcom的。爲了使代碼比較簡潔,能夠在源代碼文件頂添加這樣的一條語句:using Word = Microsoft.Office.Interop.Word;this

    5、最好是對word對像模型有必定的瞭解,這樣在寫代碼的時候就不會那麼「迷茫」了。wore對像模型中有幾個比較重要的對像,它們是ApplicationDocumentSelectionRangeBookmark,以及其它的一些對像,:ParagraphSectionTable等級。剛開始學的時候,感受SelectionRangeBookmark這幾個對像有點迷惑人,Selection可能好理解,就是表示當前的選擇區域,若是沒有選擇就表示光標所在位置。RangeBookmark,其實在不少地方很像,不過也有一些區別,在這裏就很少說了,google一下"word.Range"就好了。google

    6、在寫代碼的過程當中,常常會想要實現的一些操做,可是因爲對word對像不熟悉而不知怎麼用代碼實現。好比設置頁眉、添加頁碼什麼的,若是在Word程序裏手動的操做固然很簡單,可是要用代碼來實現,對初學者來講就可能不那麼容易了。遇到這種狀況,通常有兩種方法能夠選擇:一種是"百度/google",別一種,也是我所推薦的一種就是,利用Word的「錄製宏」功能把想要實現的操做錄成宏以後,再看宏裏的代碼,宏裏的代碼其實幾乎就是你想要的代碼了(只不過語法有一點不同而已)。spa

   7、如下給出一個示例,這個示例裏面包括了一些經常使用的圖、文、表、公式的編輯與排版以及頁面設置、頁眉、頁碼的操做,裏面都有註釋,寫得很清楚。操作系統

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Text;

using Microsoft.Office.Interop;

using Word = Microsoft.Office.Interop.Word;

using System.Runtime.InteropServices; 

 

namespace WindowsFormsApplication1

{

    public partial class Form1 :System.Windows.Forms. Form

    {

 

        [DllImport("shell32.dll ")]

        public static extern int ShellExecute(IntPtr hwnd, String lpszOp, String lpszFile, String lpszParams, String lpszDir, int FsShowCmd); 

        public Form1()

        {

            InitializeComponent();

        }

 

        private void button1_Click(object sender, EventArgs e)

        {

            //新建文檔

           // Word.Application newapp = new Word.Application();//用這句也能初始化

            Word.Application newapp = new Word.ApplicationClass();

            Word.Document newdoc;

            object nothing=System.Reflection.Missing.Value;//用於做爲函數的默認參數

            newdoc = newapp.Documents.Add(ref nothing, ref nothing, ref nothing, ref nothing);//生成一個word文檔

            newapp.Visible = true ;//是否顯示word程序界面

 

            //頁面設置

            //newdoc.PageSetup.Orientation = Word.WdOrientation.wdOrientLandscape ;

            //newdoc.PageSetup.PageWidth = newapp.CentimetersToPoints(21.0f);

            //newdoc.PageSetup.PageHeight = newapp.CentimetersToPoints(29.7f);

            newdoc.PageSetup.PaperSize = Word.WdPaperSize.wdPaperA4;

            newdoc.PageSetup.Orientation = Word.WdOrientation.wdOrientPortrait;

            newdoc.PageSetup.TopMargin = 57.0f;

            newdoc.PageSetup.BottomMargin = 57.0f;

            newdoc.PageSetup.LeftMargin = 57.0f;

            newdoc.PageSetup.RightMargin = 57.0f;

            newdoc.PageSetup.HeaderDistance = 30.0f;//頁眉位置

 

            //設置頁眉

            newapp.ActiveWindow.View.Type = Word.WdViewType.wdOutlineView;//視圖樣式。

            newapp.ActiveWindow.View.SeekView = Word.WdSeekView.wdSeekPrimaryHeader;//進入頁眉設置,其中頁眉邊距在頁面設置中已完成

            newapp.Selection.ParagraphFormat.Alignment = Word.WdParagraphAlignment.wdAlignParagraphRight;

            //插入頁眉圖片

            string headerfile = "d:\\header.jpg";

            this.outpicture(headerfile, Properties.Resources.header);

            Word.InlineShape shape1= newapp.ActiveWindow.ActivePane.Selection.InlineShapes.AddPicture(headerfile, ref nothing, ref nothing, ref nothing);

            shape1.Height = 30;

            shape1.Width = 80;

            newapp.ActiveWindow.ActivePane.Selection.InsertAfter("中建東北院");

            //去掉頁眉的那條橫線

            newapp.ActiveWindow.ActivePane.Selection.ParagraphFormat.Borders[Microsoft.Office.Interop.Word.WdBorderType.wdBorderBottom].LineStyle = Word.WdLineStyle.wdLineStyleNone;

            newapp.ActiveWindow.ActivePane.Selection.Borders[Microsoft.Office.Interop.Word.WdBorderType.wdBorderBottom].Visible = false;

            newapp.ActiveWindow.ActivePane.View.SeekView = Word.WdSeekView.wdSeekMainDocument;//退出頁眉設置

 

            //添加頁碼

            Word.PageNumbers pns= newapp.Selection.Sections[1].Headers[Microsoft.Office.Interop.Word.WdHeaderFooterIndex.wdHeaderFooterEvenPages].PageNumbers;

            pns.NumberStyle = Word.WdPageNumberStyle.wdPageNumberStyleNumberInDash;

            pns.HeadingLevelForChapter = 0;

            pns.IncludeChapterNumber = false;

            pns.ChapterPageSeparator = Word.WdSeparatorType.wdSeparatorHyphen;

            pns.RestartNumberingAtSection = false;

            pns.StartingNumber = 0;

            object pagenmbetal=Word.WdPageNumberAlignment.wdAlignPageNumberCenter;

            object first=true; 

            newapp.Selection.Sections[1].Footers[Microsoft.Office.Interop.Word.WdHeaderFooterIndex.wdHeaderFooterEvenPages ].PageNumbers.Add(ref pagenmbetal, ref first);

 

            //文字設置(Selection表示當前選擇集,若是當前沒有選擇對像,則指對光標所在處進行設置)

            newapp.Selection.Font.Size = 14;

            newapp.Selection.Font.Bold = 0;

            newapp.Selection.Font.Color = Word.WdColor.wdColorBlack;

            newapp.Selection.Font.Name = "宋體";

 

            //段落設置

            newapp.Selection.ParagraphFormat.LineSpacingRule = Word.WdLineSpacing.wdLineSpaceExactly;

            newapp.Selection.ParagraphFormat.LineSpacing = 20;

            newapp.Selection.ParagraphFormat.Alignment = Word.WdParagraphAlignment.wdAlignParagraphLeft;

            newapp.Selection.ParagraphFormat.FirstLineIndent = 30;

            newdoc.Content.InsertAfter( WindowsFormsApplication1.Properties.Resources.PreViewWords);

           

            

 

            //插入公式

            object oEndOfDoc="\\endofdoc";

            Word.Range rang1 = newdoc.Bookmarks.get_Item(ref oEndOfDoc).Range;

            object fieldType = Word.WdFieldType.wdFieldEmpty;

            object formula = @"eq \i(a,b,ξxdx)";

            object presrveFormatting = false;

            rang1.Text = formula.ToString();

            rang1.Font.Size = 14;

            rang1.Font.Bold = 0;

            rang1.Font.Subscript = 0;

            rang1.Font.Color = Word.WdColor.wdColorBlue;

            rang1.Font.Name = "宋體";

            rang1.ParagraphFormat.LineSpacingRule = Word.WdLineSpacing.wdLineSpaceSingle;

            rang1.ParagraphFormat.Alignment = Word.WdParagraphAlignment.wdAlignParagraphRight;

            newdoc.Fields.Add(rang1, ref fieldType, ref formula, ref presrveFormatting);

 

            //將文檔的前三個字替換成"asdfasdf",並將其顏色設爲藍色

            object start=0;

            object end=3;

            Word.Range rang2 = newdoc.Range(ref start, ref end);

            rang2.Font.Color = Word.WdColor.wdColorBlue;

            rang2.Text = "as籤";

 

            //將文檔開頭的"as"替換成"袁波"

            rang1.Start = 0;

            rang1.End = 2;

            rang1.Text = "這是一個";

            rang1.InsertAfter("");

            //rang1.Select();

            object codirection = Word.WdCollapseDirection.wdCollapseStart;

            rang1.Collapse(ref codirection);//將rang1的起點和終點都定於起點或終點

 

            //對前三個字符進行加粗

            newdoc.Range(ref start, ref end).Bold = 1;

            object rang = rang2;

            newdoc.Bookmarks.Add("yb",ref rang);

            

            

            object unite = Word.WdUnits.wdStory;

            newapp.Selection.EndKey(ref unite, ref nothing);//將光標移至文末

            newapp.Selection.Font.Size = 10;

            newapp.Selection.TypeText("...............................(式1)\n");

 

 

            //插入圖片

            newapp.Selection.EndKey(ref unite, ref nothing);//將光標移至文末

            //newapp.Selection.HomeKey(ref unite, ref nothing);//將光標移至文開頭

            newapp.Selection.ParagraphFormat.LineSpacingRule = Word.WdLineSpacing.wdLineSpaceSingle;

            newapp.Selection.ParagraphFormat.Alignment = Word.WdParagraphAlignment.wdAlignParagraphCenter;

            object LinkToFile = false;

            object SaveWithDocument = true;

            object Anchor = newapp.Selection.Range;

            string picname = "d:\\kk.jpg";

            this.outpicture(picname, Properties.Resources.IMG_2169);

            newdoc.InlineShapes.AddPicture(picname, ref LinkToFile, ref SaveWithDocument, ref Anchor);

            newdoc.InlineShapes[1].Height = 200;

            newdoc.InlineShapes[1].Width = 200;

            newdoc.Content.InsertAfter("\n");

            newapp.Selection.EndKey(ref unite, ref nothing);//將光標移至文末

            newapp.Selection.ParagraphFormat.Alignment = Word.WdParagraphAlignment.wdAlignParagraphCenter;

            newapp.Selection.Font.Size = 10;

            newapp.Selection.TypeText("圖1  袁冶\n");

            newapp.Selection.ParagraphFormat.Alignment = Word.WdParagraphAlignment.wdAlignParagraphRight;

            newdoc.Content.InsertAfter("\n"); 

            newdoc.Content.InsertAfter("\n");

 

            //用這種方式也能夠插入公式,而且這種方法更簡單

            newapp.Selection.Font.Size = 14;

            newapp.Selection.InsertFormula(ref formula, ref nothing);

            newapp.Selection.Font.Size = 10;

            newapp.Selection.TypeText("..............................(式2)\n");

            newapp.Selection.ParagraphFormat.Alignment = Word.WdParagraphAlignment.wdAlignParagraphCenter;

            newapp.Selection.TypeText("表1  電子產品\n");

 

            //插入表格

            Word.Table table1 = newdoc.Tables.Add(newapp.Selection.Range, 4, 3, ref nothing, ref nothing);

            newdoc.Tables[1].Cell(1, 1).Range.Text = "產品\n項目";

            newdoc.Tables[1].Cell(1, 2).Range.Text = "電腦";

            newdoc.Tables[1].Cell(1, 3).Range.Text = "手機";

            newdoc.Tables[1].Cell(2, 1).Range.Text = "重量(kg)";

            newdoc.Tables[1].Cell(3, 1).Range.Text = "價格(元)";

            newdoc.Tables[1].Cell(4, 1).Range.Text = "共同信息";

            newdoc.Tables[1].Cell(4, 2).Range.Text = "信息A";

            newdoc.Tables[1].Cell(4,3).Range.Text = "信息B";

            

 

            table1.Select();

            table1.Rows.Alignment = Word.WdRowAlignment.wdAlignRowCenter;//整個表格居中

            newapp.Selection.Cells.VerticalAlignment = Word.WdCellVerticalAlignment.wdCellAlignVerticalCenter;

            newapp.Selection.ParagraphFormat.Alignment = Word.WdParagraphAlignment.wdAlignParagraphCenter;

            newapp.Selection.Cells.HeightRule = Word.WdRowHeightRule.wdRowHeightExactly;

            newapp.Selection.Cells.Height = 40;

            table1.Rows[2].Height = 20;

            table1.Rows[3].Height = 20;

            table1.Rows[4].Height = 20;

            table1.Range.ParagraphFormat.Alignment = Word.WdParagraphAlignment.wdAlignParagraphCenter;

            newapp.Selection.Cells.Width=150;

            table1.Columns[1].Width = 75;

            table1.Cell(1, 1).Range.ParagraphFormat.Alignment = Word.WdParagraphAlignment.wdAlignParagraphRight;

            table1.Cell(1, 1).Range.Paragraphs[2].Format.Alignment = Word.WdParagraphAlignment.wdAlignParagraphLeft;

 

            

            

 

            //表頭斜線

            table1.Cell(1, 1).Borders[Microsoft.Office.Interop.Word.WdBorderType.wdBorderDiagonalDown ].Visible = true;

            table1.Cell(1, 1).Borders[Microsoft.Office.Interop.Word.WdBorderType.wdBorderDiagonalDown].Color = Word.WdColor.wdColorGreen;

            table1.Cell(1, 1).Borders[Microsoft.Office.Interop.Word.WdBorderType.wdBorderDiagonalDown].LineWidth = Word.WdLineWidth.wdLineWidth050pt;

 

            //表格邊框

            table1.Borders[Microsoft.Office.Interop.Word.WdBorderType.wdBorderHorizontal ].Visible = true;

            table1.Borders[Microsoft.Office.Interop.Word.WdBorderType.wdBorderHorizontal].Color = Word.WdColor.wdColorGreen;

            table1.Borders[Microsoft.Office.Interop.Word.WdBorderType.wdBorderHorizontal].LineWidth = Word.WdLineWidth.wdLineWidth050pt;

 

            table1.Borders[Microsoft.Office.Interop.Word.WdBorderType.wdBorderVertical].Visible = true;

            table1.Borders[Microsoft.Office.Interop.Word.WdBorderType.wdBorderVertical].Color = Word.WdColor.wdColorGreen;

            table1.Borders[Microsoft.Office.Interop.Word.WdBorderType.wdBorderVertical].LineWidth = Word.WdLineWidth.wdLineWidth050pt;

 

            table1.Borders[Microsoft.Office.Interop.Word.WdBorderType.wdBorderLeft].Visible = true;

            table1.Borders[Microsoft.Office.Interop.Word.WdBorderType.wdBorderLeft].Color = Word.WdColor.wdColorGreen;

            table1.Borders[Microsoft.Office.Interop.Word.WdBorderType.wdBorderLeft].LineWidth = Word.WdLineWidth.wdLineWidth050pt;

            table1.Borders[Microsoft.Office.Interop.Word.WdBorderType.wdBorderLeft].LineStyle = Word.WdLineStyle.wdLineStyleDoubleWavy;

 

            table1.Borders[Microsoft.Office.Interop.Word.WdBorderType.wdBorderRight].Visible = true;

            table1.Borders[Microsoft.Office.Interop.Word.WdBorderType.wdBorderRight].Color = Word.WdColor.wdColorGreen;

            table1.Borders[Microsoft.Office.Interop.Word.WdBorderType.wdBorderRight].LineWidth = Word.WdLineWidth.wdLineWidth050pt;

            table1.Borders[Microsoft.Office.Interop.Word.WdBorderType.wdBorderRight].LineStyle = Word.WdLineStyle.wdLineStyleDoubleWavy;

 

            table1.Borders[Microsoft.Office.Interop.Word.WdBorderType.wdBorderBottom ].Visible = true;

            table1.Borders[Microsoft.Office.Interop.Word.WdBorderType.wdBorderBottom].Color = Word.WdColor.wdColorGreen;

            table1.Borders[Microsoft.Office.Interop.Word.WdBorderType.wdBorderBottom].LineWidth = Word.WdLineWidth.wdLineWidth050pt;

            table1.Borders[Microsoft.Office.Interop.Word.WdBorderType.wdBorderBottom].LineStyle = Word.WdLineStyle.wdLineStyleDouble;

 

            table1.Borders[Microsoft.Office.Interop.Word.WdBorderType.wdBorderTop ].Visible = true;

            table1.Borders[Microsoft.Office.Interop.Word.WdBorderType.wdBorderTop].Color = Word.WdColor.wdColorGreen;

            table1.Borders[Microsoft.Office.Interop.Word.WdBorderType.wdBorderTop].LineWidth = Word.WdLineWidth.wdLineWidth050pt;

            table1.Borders[Microsoft.Office.Interop.Word.WdBorderType.wdBorderTop].LineStyle = Word.WdLineStyle.wdLineStyleDouble;

 

            //合併單元格

            newdoc.Tables[1].Cell(4, 2).Merge(table1.Cell(4, 3));

 

            //刪除圖片

            this.delpictfile(headerfile);

            this.delpictfile(picname);

 

 

            //保存文檔

            object name = "c:\\yb3.doc";

            newdoc.SaveAs(ref name, 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);

            

            //關閉文檔

            object saveOption = Word.WdSaveOptions.wdDoNotSaveChanges;

            newdoc.Close(ref nothing , ref nothing, ref nothing);

            newapp.Application.Quit(ref saveOption, ref nothing, ref nothing);

            newdoc = null;

           newapp = null;

           ShellExecute(IntPtr.Zero, "open", "c:\\yb3.doc", "", "", 3);

        }

 

        private void outpicture(string filename,System.Drawing.Bitmap bmap)

        {

            bmap.Save(filename);

        }

 

        private void delpictfile(string filename)

        {

            System.IO.File.Delete(filename);

        }

      

    }

 

}
相關文章
相關標籤/搜索