[轉貼] c# word 操作

2019082317:05
[出處] http://www.aspphp.online/bianchen/dnet/cxiapu/cxpjc/201701/132852.html
 
   public class WordOperate
     {
 
         #region 新建Word文檔
         /// <summary>
         /// 動態生成Word文檔並填充內容 
         /// </summary>
         /// <param name="dir">文檔目錄</param>
         /// <param name="fileName">文檔名</param>
         /// <returns>返回自定義信息</returns>
         public static bool CreateWordFile(string dir, string fileName)
         {
             try
             {
                 Object oMissing = System.Reflection.Missing.Value;
 
                 if (!Directory.Exists(dir))
                 {
                     //創建文件所在目錄
                     Directory.CreateDirectory(dir);
                 }
                 //創建Word文檔(Microsoft.Office.Interop.Word)
                 Microsoft.Office.Interop.Word._Application WordApp = new Application();
                 WordApp.Visible = true;
                 Microsoft.Office.Interop.Word._Document WordDoc = WordApp.Documents.Add(
                     ref oMissing, ref oMissing, ref oMissing, ref oMissing);
                                 
                 //保存
                 object filename = dir + fileName;
                 WordDoc.SaveAs(ref filename, ref oMissing, ref oMissing, ref oMissing, ref oMissing,
                     ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, 
                     ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing);
                 WordDoc.Close(ref oMissing, ref oMissing, ref oMissing);
                 WordApp.Quit(ref oMissing, ref oMissing, ref oMissing);
                 return true;
             }
             catch (Exception e)
             {
                 Console.WriteLine(e.Message);
                 Console.WriteLine(e.StackTrace);
                 return false;
             }
         }
 
         #endregion 新建Word文檔
 
         #region 給word文檔添加頁眉頁腳
         /// <summary>
         /// 給word文檔添加頁眉
         /// </summary>
         /// <param name="filePath">文件名</param>
         /// <returns></returns>
         public static bool AddPageHeaderFooter(string filePath)
         {
             try
             {
                 Object oMissing = System.Reflection.Missing.Value;
                 Microsoft.Office.Interop.Word._Application WordApp = new Application();
                 WordApp.Visible = true;
                 object filename = filePath;
                 Microsoft.Office.Interop.Word._Document WordDoc = WordApp.Documents.Open(ref filename, ref oMissing, 
                     ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, 
                     ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing);
 
                 ////添加頁眉方法一:
                 //WordApp.ActiveWindow.View.Type = WdViewType.wdOutlineView;
                 //WordApp.ActiveWindow.View.SeekView = WdSeekView.wdSeekPrimaryHeader;
                 //WordApp.ActiveWindow.ActivePane.Selection.InsertAfter( "**公司" );//頁眉內容
 
                 ////添加頁眉方法二:
                 if (WordApp.ActiveWindow.ActivePane.View.Type == WdViewType.wdNormalView ||
                     WordApp.ActiveWindow.ActivePane.View.Type == WdViewType.wdOutlineView)
                 {
                     WordApp.ActiveWindow.ActivePane.View.Type = WdViewType.wdPrintView;
                 }
                 WordApp.ActiveWindow.View.SeekView = WdSeekView.wdSeekCurrentPageHeader;
                 WordApp.Selection.HeaderFooter.LinkToPrevious = false;
                 WordApp.Selection.HeaderFooter.Range.ParagraphFormat.Alignment = WdParagraphAlignment.wdAlignParagraphCenter;
                 WordApp.Selection.HeaderFooter.Range.Text = "頁眉內容";
                 
                 WordApp.ActiveWindow.View.SeekView = WdSeekView.wdSeekCurrentPageFooter;
                 WordApp.Selection.HeaderFooter.LinkToPrevious = false;
                 WordApp.Selection.HeaderFooter.Range.ParagraphFormat.Alignment = WdParagraphAlignment.wdAlignParagraphCenter;
                 WordApp.ActiveWindow.ActivePane.Selection.InsertAfter("頁腳內容");
 
                 //跳出頁眉頁腳設置
                 WordApp.ActiveWindow.View.SeekView = WdSeekView.wdSeekMainDocument;
 
                 //保存
                 WordDoc.Save();
                 WordDoc.Close(ref oMissing, ref oMissing, ref oMissing);
                 WordApp.Quit(ref oMissing, ref oMissing, ref oMissing);
                 return true;
             }
             catch (Exception e)
             {
                 Console.WriteLine(e.Message);
                 Console.WriteLine(e.StackTrace);
                 return false;
             }
         }
         #endregion 給word文檔添加頁眉頁腳
 
         #region 設置文檔格式並添加文本內容
         /// <summary>
         /// 設置文檔格式並添加文本內容
         /// </summary>
         /// <param name="filePath">文件名</param>
         /// <returns></returns>
         public static bool AddContent(string filePath)
         {
             try
             {
                 Object oMissing = System.Reflection.Missing.Value;
                 Microsoft.Office.Interop.Word._Application WordApp = new Application();
                 WordApp.Visible = true;
                 object filename = filePath;
                 Microsoft.Office.Interop.Word._Document WordDoc = WordApp.Documents.Open(ref filename, ref oMissing,
                     ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing,
                     ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing);
 
                 //設置居左
                 WordApp.Selection.ParagraphFormat.Alignment = Microsoft.Office.Interop.Word.WdParagraphAlignment.wdAlignParagraphLeft;
 
                 //設置文檔的行間距
                 WordApp.Selection.ParagraphFormat.LineSpacing = 15f;
                 //插入段落
                 //WordApp.Selection.TypeParagraph();
                 Microsoft.Office.Interop.Word.Paragraph para;
                 para = WordDoc.Content.Paragraphs.Add(ref oMissing);
                 //正常格式
                 para.Range.Text = "This is paragraph 1";
                 //para.Range.Font.Bold = 2;
                 //para.Range.Font.Color = WdColor.wdColorRed;
                 //para.Range.Font.Italic = 2;
                 para.Range.InsertParagraphAfter();
 
                 para.Range.Text = "This is paragraph 2";
                 para.Range.InsertParagraphAfter();
 
                 //插入Hyperlink
                 Microsoft.Office.Interop.Word.Selection mySelection = WordApp.ActiveWindow.Selection;
                 mySelection.Start = 9999;
                 mySelection.End = 9999;
                 Microsoft.Office.Interop.Word.Range myRange = mySelection.Range;
                                 
                 Microsoft.Office.Interop.Word.Hyperlinks myLinks = WordDoc.Hyperlinks;
                 object linkAddr = @"http://www.cnblogs.com/lantionzy";
                 Microsoft.Office.Interop.Word.Hyperlink myLink = myLinks.Add(myRange, ref linkAddr, 
                     ref oMissing);
                 WordApp.ActiveWindow.Selection.InsertAfter("\n");
               
                 //落款
                 WordDoc.Paragraphs.Last.Range.Text = "文檔創建時間:" + DateTime.Now.ToString();
                 WordDoc.Paragraphs.Last.Alignment = Microsoft.Office.Interop.Word.WdParagraphAlignment.wdAlignParagraphRight;
 
                 //保存
                 WordDoc.Save();
                 WordDoc.Close(ref oMissing, ref oMissing, ref oMissing);
                 WordApp.Quit(ref oMissing, ref oMissing, ref oMissing);
                 return true;
             }
             catch (Exception e)
             {
                 Console.WriteLine(e.Message);
                 Console.WriteLine(e.StackTrace);
                 return false;
             }
         }
 
         #endregion 設置文檔格式並添加文本內容
 
         #region 文檔中添加圖片
         /// <summary>
         /// 文檔中添加圖片
         /// </summary>
         /// <param name="filePath">word文件名</param>
         /// <param name="picPath">picture文件名</param>
         /// <returns></returns>
         public static bool AddPicture(string filePath, string picPath)
         {
             try
             {
                 Object oMissing = System.Reflection.Missing.Value;
                 Microsoft.Office.Interop.Word._Application WordApp = new Application();
                 WordApp.Visible = true;
                 object filename = filePath;
                 Microsoft.Office.Interop.Word._Document WordDoc = WordApp.Documents.Open(ref filename, ref oMissing,
                     ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing,
                     ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing);
 
                 //移動光標文檔末尾
                 object count = WordDoc.Paragraphs.Count;
                 object WdLine = Microsoft.Office.Interop.Word.WdUnits.wdParagraph;
                 WordApp.Selection.MoveDown(ref WdLine, ref count, ref oMissing);//移動焦點
                 WordApp.Selection.TypeParagraph();//插入段落
 
                 object LinkToFile = false;
                 object SaveWithDocument = true;
                 object Anchor = WordDoc.Application.Selection.Range;
                 WordDoc.Application.ActiveDocument.InlineShapes.AddPicture(picPath, ref LinkToFile, ref SaveWithDocument, ref Anchor);
 
                 //保存
                 WordDoc.Save();
                 WordDoc.Close(ref oMissing, ref oMissing, ref oMissing);
                 WordApp.Quit(ref oMissing, ref oMissing, ref oMissing);
                 return true;
             }
             catch (Exception e)
             {
                 Console.WriteLine(e.Message);
                 Console.WriteLine(e.StackTrace);
                 return false;
             }
         }
         #endregion 文檔中添加圖片
 
         #region 表格處理(插入表格、設置格式、填充內容)
         /// <summary>
         /// 表格處理
         /// </summary>
         /// <param name="filePath">word文件名</param>
         /// <returns></returns>
         public static bool AddTable(string filePath)
         {
             try
             {
                 Object oMissing = System.Reflection.Missing.Value;
                 Microsoft.Office.Interop.Word._Application WordApp = new Application();
                 WordApp.Visible = true;
                 object filename = filePath;
                 Microsoft.Office.Interop.Word._Document WordDoc = WordApp.Documents.Open(ref filename, ref oMissing, ref oMissing, ref oMissing, ref oMissing,
                     ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing);
 
                 //插入表格
                 Microsoft.Office.Interop.Word.Table newTable = WordDoc.Tables.Add(WordApp.Selection.Range, 12, 3, ref oMissing, ref oMissing);
                 //設置表格
                 newTable.Borders.OutsideLineStyle = Microsoft.Office.Interop.Word.WdLineStyle.wdLineStyleThickThinLargeGap;
                 newTable.Borders.InsideLineStyle = Microsoft.Office.Interop.Word.WdLineStyle.wdLineStyleSingle;
                 newTable.Columns[1].Width = 100f;
                 newTable.Columns[2].Width = 220f;
                 newTable.Columns[3].Width = 105f;
                 
                 //填充表格內容
                 newTable.Cell(1, 1).Range.Text = "我的簡歷";
                 //設置單元格中字體為粗體
                 newTable.Cell(1, 1).Range.Bold = 2;
 
                 //合並單元格
                 newTable.Cell(1, 1).Merge(newTable.Cell(1, 3));
                 
                 //垂直居中
                 WordApp.Selection.Cells.VerticalAlignment = Microsoft.Office.Interop.Word.WdCellVerticalAlignment.wdCellAlignVerticalCenter;
                 //水平居中
                 WordApp.Selection.ParagraphFormat.Alignment = Microsoft.Office.Interop.Word.WdParagraphAlignment.wdAlignParagraphCenter;
 
                 //填充表格內容
                 newTable.Cell(2, 1).Range.Text = "座右銘:...";
                 //設置單元格內字體顏色
                 newTable.Cell(2, 1).Range.Font.Color = Microsoft.Office.Interop.Word.WdColor.wdColorDarkBlue;
                 //合並單元格
                 newTable.Cell(2, 1).Merge(newTable.Cell(2, 3));
                 WordApp.Selection.Cells.VerticalAlignment = Microsoft.Office.Interop.Word.WdCellVerticalAlignment.wdCellAlignVerticalCenter;
 
                 //填充表格內容
                 newTable.Cell(3, 1).Range.Text = "姓名:";
                 newTable.Cell(3, 2).Range.Text = "雷鑫";
                 //縱向合並單元格
                 newTable.Cell(3, 3).Select();
                 //選中一行
                 object moveUnit = Microsoft.Office.Interop.Word.WdUnits.wdLine;
                 object moveCount = 3;
                 object moveExtend = Microsoft.Office.Interop.Word.WdMovementType.wdExtend;
                 WordApp.Selection.MoveDown(ref moveUnit, ref moveCount, ref moveExtend);
                 WordApp.Selection.Cells.Merge();
 
                 //表格中插入圖片
                 string pictureFileName = System.IO.Directory.GetCurrentDirectory() + @"\picture.jpg";
                 object LinkToFile = false;
                 object SaveWithDocument = true;
                 object Anchor = WordDoc.Application.Selection.Range;
                 WordDoc.Application.ActiveDocument.InlineShapes.AddPicture(pictureFileName, ref LinkToFile, ref SaveWithDocument, ref Anchor);
                 //圖片寬度
                 WordDoc.Application.ActiveDocument.InlineShapes[1].Width = 100f;
                 //圖片高度
                 WordDoc.Application.ActiveDocument.InlineShapes[1].Height = 100f;
                 //將圖片設置為四周環繞型
                 Microsoft.Office.Interop.Word.Shape s = WordDoc.Application.ActiveDocument.InlineShapes[1].ConvertToShape();
                 s.WrapFormat.Type = Microsoft.Office.Interop.Word.WdWrapType.wdWrapSquare;
 
                 newTable.Cell(12, 1).Range.Text = "備注:";
                 newTable.Cell(12, 1).Merge(newTable.Cell(12, 3));
                 //在表格中增加行
                 WordDoc.Content.Tables[1].Rows.Add(ref oMissing);
 
                 //保存
                 WordDoc.Save();
                 WordDoc.Close(ref oMissing, ref oMissing, ref oMissing);
                 WordApp.Quit(ref oMissing, ref oMissing, ref oMissing);
                 return true;
             }
             catch (Exception e)
             {
                 Console.WriteLine(e.Message);
                 Console.WriteLine(e.StackTrace);
                 return false;
             }
         }
         #endregion #region 表格處理
 
         #region 把Word文檔轉化為Html文件
         /// <summary>
         /// 把Word文檔轉化為Html文件
         /// </summary>
         /// <param name="wordFileName">word文件名</param>
         /// <param name="htmlFileName">要保存的html文件名</param>
         /// <returns></returns>
         public static bool WordToHtml(string wordFileName, string htmlFileName)
         {
             try
             {
                 Object oMissing = System.Reflection.Missing.Value;
                 Microsoft.Office.Interop.Word._Application WordApp = new Application();
                 WordApp.Visible = true;
                 object filename = wordFileName;
                 Microsoft.Office.Interop.Word._Document WordDoc = WordApp.Documents.Open(ref filename, ref oMissing,
                     ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing,
                     ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing);
 
                // Type wordType = WordApp.GetType();
                 // 打開文件
                 Type docsType = WordApp.Documents.GetType();
                 // 轉換格式,另存為
                 Type docType = WordDoc.GetType();
                 object saveFileName = htmlFileName;
                 docType.InvokeMember("SaveAs", System.Reflection.BindingFlags.InvokeMethod, null, WordDoc, 
                     new object[] { saveFileName, Microsoft.Office.Interop.Word.WdSaveFormat.wdFormatHTML });
 
                 #region 其它格式:
                 ///wdFormatHTML
                 ///wdFormatDocument
                 ///wdFormatDOSText
                 ///wdFormatDOSTextLineBreaks
                 ///wdFormatEncodedText
                 ///wdFormatRTF
                 ///wdFormatTemplate
                 ///wdFormatText
                 ///wdFormatTextLineBreaks
                 ///wdFormatUnicodeText
                 // 退出 Word
                 //wordType.InvokeMember( "Quit", System.Reflection.BindingFlags.InvokeMethod,
                 //    null, WordApp, null );
                 #endregion
 
                 //保存
                 WordDoc.Save();
                 WordDoc.Close(ref oMissing, ref oMissing, ref oMissing);
                 WordApp.Quit(ref oMissing, ref oMissing, ref oMissing);
                 return true;
             }
             catch (Exception e)
             {
                 Console.WriteLine(e.Message);
                 Console.WriteLine(e.StackTrace);
                 return false;
             }
         }
         #endregion 把Word文檔轉化為Html文件
         
         #region word中添加新表
         /// <summary>
         /// word中添加新表
         /// </summary>
         public static void AddTable()
         {
             object oMissing = System.Reflection.Missing.Value;
             Microsoft.Office.Interop.Word._Application WordApp;
             Microsoft.Office.Interop.Word._Document WordDoc;
             WordApp = new Microsoft.Office.Interop.Word.Application();
             WordApp.Visible = true;
             WordDoc = WordApp.Documents.Add(ref oMissing, ref oMissing, ref oMissing, ref oMissing);
 
             object start = 0;
             object end = 0;
             Microsoft.Office.Interop.Word.Range tableLocation = WordDoc.Range(ref start, ref end);
             WordDoc.Tables.Add(tableLocation, 3, 4, ref oMissing, ref oMissing);//3行4列的表
         }
         #endregion word中添加新表
 
         #region 在表中插入新行
 
         /// <summary>
         /// 在表中插入新的1行
         /// </summary>
         public static void AddRow()
         {
             object oMissing = System.Reflection.Missing.Value;
             Microsoft.Office.Interop.Word._Application WordApp;
             Microsoft.Office.Interop.Word._Document WordDoc;
             WordApp = new Microsoft.Office.Interop.Word.Application();
             WordApp.Visible = true;
             WordDoc = WordApp.Documents.Add(ref oMissing, ref oMissing, ref oMissing, ref oMissing);
 
             object start = 0;
             object end = 0;
             Microsoft.Office.Interop.Word.Range tableLocation = WordDoc.Range(ref start, ref end);
             WordDoc.Tables.Add(tableLocation, 3, 4, ref oMissing, ref oMissing);
 
             Microsoft.Office.Interop.Word.Table newTable = WordDoc.Tables[1];
             object beforeRow = newTable.Rows[1];
             newTable.Rows.Add(ref beforeRow);
         }
         #endregion
 
         #region 合並單元格
         /// <summary>
         /// 合並單元格
         /// </summary>
         public static void CombinationCell()
         {
             object oMissing = System.Reflection.Missing.Value;
             Microsoft.Office.Interop.Word._Application WordApp;
             Microsoft.Office.Interop.Word._Document WordDoc;
             WordApp = new Microsoft.Office.Interop.Word.Application();
             WordApp.Visible = true;
             WordDoc = WordApp.Documents.Add(ref oMissing, ref oMissing, ref oMissing, ref oMissing);
 
             object start = 0;
             object end = 0;
             Microsoft.Office.Interop.Word.Range tableLocation = WordDoc.Range(ref start, ref end);
             WordDoc.Tables.Add(tableLocation, 3, 4, ref oMissing, ref oMissing);
 
             Microsoft.Office.Interop.Word.Table newTable = WordDoc.Tables[1];
             object beforeRow = newTable.Rows[1];
             newTable.Rows.Add(ref beforeRow);
 
             Microsoft.Office.Interop.Word.Cell cell = newTable.Cell(2, 1);//2行1列合並2行2列為一起
             cell.Merge(newTable.Cell(2, 2));
             //cell.Merge( newTable.Cell( 1, 3 ) );
         }
         #endregion 合並單元格
 
         #region 分離單元格
         /// <summary>
         /// 分離單元格
         /// </summary>
         public static void SeparateCell()
         {
             object oMissing = System.Reflection.Missing.Value;
             Microsoft.Office.Interop.Word._Application WordApp;
             Microsoft.Office.Interop.Word._Document WordDoc;
             WordApp = new Microsoft.Office.Interop.Word.Application();
             WordApp.Visible = true;
             WordDoc = WordApp.Documents.Add(ref oMissing, ref oMissing, ref oMissing, ref oMissing);
 
             object start = 0;
             object end = 0;
             Microsoft.Office.Interop.Word.Range tableLocation = WordDoc.Range(ref start, ref end);
             WordDoc.Tables.Add(tableLocation, 3, 4, ref oMissing, ref oMissing);
 
             Microsoft.Office.Interop.Word.Table newTable = WordDoc.Tables[1];
             object beforeRow = newTable.Rows[1];
             newTable.Rows.Add(ref beforeRow);
 
             Microsoft.Office.Interop.Word.Cell cell = newTable.Cell(1, 1);
             cell.Merge(newTable.Cell(1, 2));
 
             object Rownum = 2;
             object Columnnum = 2;
             cell.Split(ref Rownum, ref  Columnnum);
         }
         #endregion 分離單元格
 
         #region 通過段落控制插入
         /// <summary>
         /// 通過段落控制插入Insert a paragraph at the beginning of the document.
         /// </summary>
         public static void InsertParagraph()
         {
             object oMissing = System.Reflection.Missing.Value;
             //object oEndOfDoc = "\\endofdoc"; 
             //endofdoc is a predefined bookmark
 
             //Start Word and create a new document.
             Microsoft.Office.Interop.Word._Application WordApp;
             Microsoft.Office.Interop.Word._Document WordDoc;
             WordApp = new Microsoft.Office.Interop.Word.Application();
             WordApp.Visible = true;
 
             WordDoc = WordApp.Documents.Add(ref oMissing, ref oMissing, ref oMissing, ref oMissing);
 
             //Insert a paragraph at the beginning of the document.
             Microsoft.Office.Interop.Word.Paragraph oPara1;
             oPara1 = WordDoc.Content.Paragraphs.Add(ref oMissing);
             oPara1.Range.Text = "Heading 1";
             oPara1.Range.Font.Bold = 1;
             oPara1.Format.SpaceAfter = 24;    //24 pt spacing after paragraph.
             oPara1.Range.InsertParagraphAfter();
         }
         #endregion 通過段落控制插入
 
         #region word文檔設置及獲取光標位置
 
         /// <summary>
         /// word文檔設置及獲取光標位置
         /// </summary>
         public static void WordSet()
         {
             object oMissing = System.Reflection.Missing.Value;
             Microsoft.Office.Interop.Word._Application WordApp;
             WordApp = new Microsoft.Office.Interop.Word.Application();
 
             #region 文檔格式設置
             WordApp.ActiveDocument.PageSetup.LineNumbering.Active = 0;//行編號
             WordApp.ActiveDocument.PageSetup.Orientation = Microsoft.Office.Interop.Word.WdOrientation.wdOrientPortrait;//頁面方向
             WordApp.ActiveDocument.PageSetup.TopMargin = WordApp.CentimetersToPoints(float.Parse("2.54"));//上頁邊距
             WordApp.ActiveDocument.PageSetup.BottomMargin = WordApp.CentimetersToPoints(float.Parse("2.54"));//下頁邊距
             WordApp.ActiveDocument.PageSetup.LeftMargin = WordApp.CentimetersToPoints(float.Parse("3.17"));//左頁邊距
             WordApp.ActiveDocument.PageSetup.RightMargin = WordApp.CentimetersToPoints(float.Parse("3.17"));//右頁邊距
             WordApp.ActiveDocument.PageSetup.Gutter = WordApp.CentimetersToPoints(float.Parse("0"));//裝訂線位置
             WordApp.ActiveDocument.PageSetup.HeaderDistance = WordApp.CentimetersToPoints(float.Parse("1.5"));//頁眉
             WordApp.ActiveDocument.PageSetup.FooterDistance = WordApp.CentimetersToPoints(float.Parse("1.75"));//頁腳
             WordApp.ActiveDocument.PageSetup.PageWidth = WordApp.CentimetersToPoints(float.Parse("21"));//紙張寬度
             WordApp.ActiveDocument.PageSetup.PageHeight = WordApp.CentimetersToPoints(float.Parse("29.7"));//紙張高度
             WordApp.ActiveDocument.PageSetup.FirstPageTray = Microsoft.Office.Interop.Word.WdPaperTray.wdPrinterDefaultBin;//紙張來源
             WordApp.ActiveDocument.PageSetup.OtherPagesTray = Microsoft.Office.Interop.Word.WdPaperTray.wdPrinterDefaultBin;//紙張來源
             WordApp.ActiveDocument.PageSetup.SectionStart = Microsoft.Office.Interop.Word.WdSectionStart.wdSectionNewPage;//節的起始位置:新建頁
             WordApp.ActiveDocument.PageSetup.OddAndEvenPagesHeaderFooter = 0;//頁眉頁腳-奇偶頁不同
             WordApp.ActiveDocument.PageSetup.DifferentFirstPageHeaderFooter = 0;//頁眉頁腳-首頁不同
             WordApp.ActiveDocument.PageSetup.VerticalAlignment = Microsoft.Office.Interop.Word.WdVerticalAlignment.wdAlignVerticalTop;//頁面垂直對齊方式
             WordApp.ActiveDocument.PageSetup.SuppressEndnotes = 0;//不隱藏尾注
             WordApp.ActiveDocument.PageSetup.MirrorMargins = 0;//不設置首頁的內外邊距
             WordApp.ActiveDocument.PageSetup.TwoPagesOnOne = false;//不雙面打印
             WordApp.ActiveDocument.PageSetup.BookFoldPrinting = false;//不設置手動雙面正面打印
             WordApp.ActiveDocument.PageSetup.BookFoldRevPrinting = false;//不設置手動雙面背面打印
             WordApp.ActiveDocument.PageSetup.BookFoldPrintingSheets = 1;//打印默認份數
             WordApp.ActiveDocument.PageSetup.GutterPos = Microsoft.Office.Interop.Word.WdGutterStyle.wdGutterPosLeft;//裝訂線位於左側
             WordApp.ActiveDocument.PageSetup.LinesPage = 40;//默認頁行數量
             WordApp.ActiveDocument.PageSetup.LayoutMode = Microsoft.Office.Interop.Word.WdLayoutMode.wdLayoutModeLineGrid;//版式模式為「只指定行網格」
             #endregion 文檔格式設置
 
             #region 段落格式設定
             WordApp.Selection.ParagraphFormat.LeftIndent = WordApp.CentimetersToPoints(float.Parse("0"));//左縮進
             WordApp.Selection.ParagraphFormat.RightIndent = WordApp.CentimetersToPoints(float.Parse("0"));//右縮進
             WordApp.Selection.ParagraphFormat.SpaceBefore = float.Parse("0");//段前間距
             WordApp.Selection.ParagraphFormat.SpaceBeforeAuto = 0;//
             WordApp.Selection.ParagraphFormat.SpaceAfter = float.Parse("0");//段後間距
             WordApp.Selection.ParagraphFormat.SpaceAfterAuto = 0;//
             WordApp.Selection.ParagraphFormat.LineSpacingRule = Microsoft.Office.Interop.Word.WdLineSpacing.wdLineSpaceSingle;//單倍行距
             WordApp.Selection.ParagraphFormat.Alignment = Microsoft.Office.Interop.Word.WdParagraphAlignment.wdAlignParagraphJustify;//段落2端對齊
             WordApp.Selection.ParagraphFormat.WidowControl = 0;//孤行控制
             WordApp.Selection.ParagraphFormat.KeepWithNext = 0;//與下段同頁
             WordApp.Selection.ParagraphFormat.KeepTogether = 0;//段中不分頁
             WordApp.Selection.ParagraphFormat.PageBreakBefore = 0;//段前分頁
             WordApp.Selection.ParagraphFormat.NoLineNumber = 0;//取消行號
             WordApp.Selection.ParagraphFormat.Hyphenation = 1;//取消段字
             WordApp.Selection.ParagraphFormat.FirstLineIndent = WordApp.CentimetersToPoints(float.Parse("0"));//首行縮進
             WordApp.Selection.ParagraphFormat.OutlineLevel = Microsoft.Office.Interop.Word.WdOutlineLevel.wdOutlineLevelBodyText;
             WordApp.Selection.ParagraphFormat.CharacterUnitLeftIndent = float.Parse("0");
             WordApp.Selection.ParagraphFormat.CharacterUnitRightIndent = float.Parse("0");
             WordApp.Selection.ParagraphFormat.CharacterUnitFirstLineIndent = float.Parse("0");
             WordApp.Selection.ParagraphFormat.LineUnitBefore = float.Parse("0");
             WordApp.Selection.ParagraphFormat.LineUnitAfter = float.Parse("0");
             WordApp.Selection.ParagraphFormat.AutoAdjustRightIndent = 1;
             WordApp.Selection.ParagraphFormat.DisableLineHeightGrid = 0;
             WordApp.Selection.ParagraphFormat.FarEastLineBreakControl = 1;
             WordApp.Selection.ParagraphFormat.WordWrap = 1;
             WordApp.Selection.ParagraphFormat.HangingPunctuation = 1;
             WordApp.Selection.ParagraphFormat.HalfWidthPunctuationOnTopOfLine = 0;
             WordApp.Selection.ParagraphFormat.AddSpaceBetweenFarEastAndAlpha = 1;
             WordApp.Selection.ParagraphFormat.AddSpaceBetweenFarEastAndDigit = 1;
             WordApp.Selection.ParagraphFormat.BaseLineAlignment = Microsoft.Office.Interop.Word.WdBaselineAlignment.wdBaselineAlignAuto;
             #endregion 段落格式設定
 
             #region 字體格式設定
             WordApp.Selection.Font.NameFarEast = "華文中宋";
             WordApp.Selection.Font.NameAscii = "Times New Roman";
             WordApp.Selection.Font.NameOther = "Times New Roman";
             WordApp.Selection.Font.Name = "宋體";
             WordApp.Selection.Font.Size = float.Parse("14");
             WordApp.Selection.Font.Bold = 0;
             WordApp.Selection.Font.Italic = 0;
             WordApp.Selection.Font.Underline = Microsoft.Office.Interop.Word.WdUnderline.wdUnderlineNone;
             WordApp.Selection.Font.UnderlineColor = Microsoft.Office.Interop.Word.WdColor.wdColorAutomatic;
             WordApp.Selection.Font.StrikeThrough = 0;//刪除線
             WordApp.Selection.Font.DoubleStrikeThrough = 0;//雙刪除線
             WordApp.Selection.Font.Outline = 0;//空心
             WordApp.Selection.Font.Emboss = 0;//陽文
             WordApp.Selection.Font.Shadow = 0;//陰影
             WordApp.Selection.Font.Hidden = 0;//隱藏文字
             WordApp.Selection.Font.SmallCaps = 0;//小型大寫字母
             WordApp.Selection.Font.AllCaps = 0;//全部大寫字母
             WordApp.Selection.Font.Color = Microsoft.Office.Interop.Word.WdColor.wdColorAutomatic;
             WordApp.Selection.Font.Engrave = 0;//陰文
             WordApp.Selection.Font.Superscript = 0;//上標
             WordApp.Selection.Font.Subscript = 0;//下標
             WordApp.Selection.Font.Spacing = float.Parse("0");//字符間距
             WordApp.Selection.Font.Scaling = 100;//字符縮放
             WordApp.Selection.Font.Position = 0;//位置
             WordApp.Selection.Font.Kerning = float.Parse("1");//字體間距調整
             WordApp.Selection.Font.Animation = Microsoft.Office.Interop.Word.WdAnimation.wdAnimationNone;//文字效果
             WordApp.Selection.Font.DisableCharacterSpaceGrid = false;
             WordApp.Selection.Font.EmphasisMark = Microsoft.Office.Interop.Word.WdEmphasisMark.wdEmphasisMarkNone;
             #endregion 字體格式設定
 
             #region 獲取光標位置
             ////get_Information
             WordApp.Selection.get_Information(WdInformation.wdActiveEndPageNumber);
             //關於行號-頁號-列號-位置
             //information 屬性 
             //返回有關指定的所選內容或區域的信息。variant 類型,只讀。 
             //expression.information(type) 
             //expression 必需。該表達式返回一個 range 或 selection 對象。 
             //type long 類型,必需。需要返回的信息。可取下列 wdinformation 常量之一: 
             //wdactiveendadjustedpagenumber 返回頁碼,在該頁中包含指定的所選內容或區域的活動結尾。如果設置了一個起始頁碼,並對頁碼進行了手工調整,則返回調整過的頁碼。 
             //wdactiveendpagenumber 返回頁碼,在該頁中包含指定的所選內容或區域的活動結尾,頁碼從文檔的開頭開始計算而不考慮對頁碼的任何手工調整。 
             //wdactiveendsectionnumber 返回節號,在該節中包含了指定的所選內容或區域的活動結尾。 
             //wdatendofrowmarker 如果指定的所選內容或區域位於表格的行結尾標記處,則本參數返回 true。 
             //wdcapslock 如果大寫字母鎖定模式有效,則本參數返回 true。 
             //wdendofrangecolumnnumber 返回表格列號,在該表格列中包含了指定的所選內容或區域的活動結尾。 
             //wdendofrangerownumber 返回表格行號,在該表格行包含了指定的所選內容或區域的活動結尾。 
             //wdfirstcharactercolumnnumber 返回指定的所選內容或區域中第一個字符的位置。如果所選內容或區域是折疊的,則返回所選內容或區域右側緊接著的字符編號。 
             //wdfirstcharacterlinenumber 返回所選內容中第一個字符的行號。如果 pagination 屬性為 false,或 draft 屬性為 true,則返回 - 1。 
             //wdframeisselected 如果所選內容或區域是一個完整的圖文框文本框,則本參數返回 true。 
             //wdheaderfootertype 返回一個值,該值表明包含了指定的所選內容或區域的頁眉或頁腳的類型,如下表所示。 值 頁眉或頁腳的類型 
             //- 1 無 
             //0 偶數頁頁眉 
             //1 奇數頁頁眉 
             //2 偶數頁頁腳 
             //3 奇數頁頁腳 
             //4 第一個頁眉 
             //5 第一個頁腳 
             //wdhorizontalpositionrelativetopage 返回指定的所選內容或區域的水平位置。該位置是所選內容或區域的左邊與頁面的左邊之間的距離,以磅為單位。如果所選內容或區域不可見,則返回 - 1。 
             //wdhorizontalpositionrelativetotextboundary 返回指定的所選內容或區域相對於周圍最近的正文邊界的左邊的水平位置,以磅為單位。如果所選內容或區域沒有顯示在當前屏幕,則本參數返回 - 1。 
             //wdinclipboard 有關此常量的詳細內容,請參閱 microsoft office 98 macintosh 版的語言參考幫助。 
             //wdincommentpane 如果指定的所選內容或區域位於批注窗格,則返回 true。 
             //wdinendnote 如果指定的所選內容或區域位於頁面視圖的尾注區內,或者位於普通視圖的尾注窗格中,則本參數返回 true。 
             //wdinfootnote 如果指定的所選內容或區域位於頁面視圖的腳注區內,或者位於普通視圖的腳注窗格中,則本參數返回 true。 
             //wdinfootnoteendnotepane 如果指定的所選內容或區域位於頁面視圖的腳注或尾注區內,或者位於普通視圖的腳注或尾注窗格中,則本參數返回 true。詳細內容,請參閱前面的 wdinfootnote 和 wdinendnote 的說明。 
             //wdinheaderfooter 如果指定的所選內容或區域位於頁眉或頁腳窗格中,或者位於頁面視圖的頁眉或頁腳中,則本參數返回 true。 
             //wdinmasterdocument 如果指定的所選內容或區域位於主控文檔中,則本參數返回 true。 
             //wdinwordmail 返回一個值,該值表明了所選內容或區域的的位置,如下表所示。值 位置 
             //0 所選內容或區域不在一條電子郵件消息中。 
             //1 所選內容或區域位於正在發送的電子郵件中。 
             //2 所選內容或區域位於正在閱讀的電子郵件中。 
             //wdmaximumnumberofcolumns 返回所選內容或區域中任何行的最大表格列數。 
             //wdmaximumnumberofrows 返回指定的所選內容或區域中表格的最大行數。 
             //wdnumberofpagesindocument 返回與所選內容或區域相關聯的文檔的頁數。 
             //wdnumlock 如果 num lock 有效,則本參數返回 true。 
             //wdovertype 如果改寫模式有效,則本參數返回 true。可用 overtype 屬性改變改寫模式的狀態。 
             //wdreferenceoftype 返回一個值,該值表明所選內容相對於腳注、尾注或批注引用的位置,如下表所示。 值 描述 
             //— 1 所選內容或區域包含、但不只限定於腳注、尾注或批注引用中。 
             //0 所選內容或區域不在腳注、尾注或批注引用之前。 
             //1 所選內容或區域位於腳注引用之前。 
             //2 所選內容或區域位於尾注引用之前。 
             //3 所選內容或區域位於批注引用之前。 
             //wdrevisionmarking 如果修訂功能處於活動狀態,則本參數返回 true。 
             //wdselectionmode 返回一個值,該值表明當前的選定模式,如下表所示。 值 選定模式 
             //0 常規選定 
             //1 擴展選定 
             //2 列選定 
             //wdstartofrangecolumnnumber 返回所選內容或區域的起點所在的表格的列號。 
             //wdstartofrangerownumber 返回所選內容或區域的起點所在的表格的行號。 
             //wdverticalpositionrelativetopage 返回所選內容或區域的垂直位置,即所選內容的上邊與頁面的上邊之間的距離,以磅為單位。如果所選內容或區域沒有顯示在屏幕上,則本參數返回 - 1。 
             //wdverticalpositionrelativetotextboundary 返回所選內容或區域相對於周圍最近的正文邊界的上邊的垂直位置,以磅為單位。如果所選內容或區域沒有顯示在屏幕上,則本參數返回 - 1。 
             //wdwithintable 如果所選內容位於一個表格中,則本參數返回 true。 
             //wdzoompercentage 返回由 percentage 屬性設置的當前的放大百分比。
             #endregion 獲取光標位置
 
             #region 光標移動
             //移動光標
             //光標下移3行 上移3行
             object unit = Microsoft.Office.Interop.Word.WdUnits.wdLine;
             object count = 3;
             WordApp.Selection.MoveEnd(ref unit, ref count);
             WordApp.Selection.MoveUp(ref unit, ref count, ref oMissing);
 
             //Microsoft.Office.Interop.Word.WdUnits說明
             //wdCell                  A cell. 
             //wdCharacter             A character. 
             //wdCharacterFormatting   Character formatting. 
             //wdColumn                A column. 
             //wdItem                  The selected item. 
             //wdLine                  A line. //行
             //wdParagraph             A paragraph. 
             //wdParagraphFormatting   Paragraph formatting. 
             //wdRow                   A row. 
             //wdScreen                The screen dimensions. 
             //wdSection               A section. 
             //wdSentence              A sentence. 
             //wdStory                 A story. 
             //wdTable                 A table. 
             //wdWindow                A window. 
             //wdWord                  A word. 
 
             //錄制的vb宏
             //     ,移動光標至當前行首
             //    Selection.HomeKey unit:=wdLine
             //    '移動光標至當前行尾
             //    Selection.EndKey unit:=wdLine
             //    '選擇從光標至當前行首的內容
             //    Selection.HomeKey unit:=wdLine, Extend:=wdExtend
             //    '選擇從光標至當前行尾的內容
             //    Selection.EndKey unit:=wdLine, Extend:=wdExtend
             //    '選擇當前行
             //    Selection.HomeKey unit:=wdLine
             //    Selection.EndKey unit:=wdLine, Extend:=wdExtend
             //    '移動光標至文檔開始
             //    Selection.HomeKey unit:=wdStory
             //    '移動光標至文檔結尾
             //    Selection.EndKey unit:=wdStory
             //    '選擇從光標至文檔開始的內容
             //    Selection.HomeKey unit:=wdStory, Extend:=wdExtend
             //    '選擇從光標至文檔結尾的內容
             //    Selection.EndKey unit:=wdStory, Extend:=wdExtend
             //    '選擇文檔全部內容(從WholeStory可猜出Story應是當前文檔的意思)
             //    Selection.WholeStory
             //    '移動光標至當前段落的開始
             //    Selection.MoveUp unit:=wdParagraph
             //    '移動光標至當前段落的結尾
             //    Selection.MoveDown unit:=wdParagraph
             //    '選擇從光標至當前段落開始的內容
             //    Selection.MoveUp unit:=wdParagraph, Extend:=wdExtend
             //    '選擇從光標至當前段落結尾的內容
             //    Selection.MoveDown unit:=wdParagraph, Extend:=wdExtend
             //    '選擇光標所在段落的內容
             //    Selection.MoveUp unit:=wdParagraph
             //    Selection.MoveDown unit:=wdParagraph, Extend:=wdExtend
             //    '顯示選擇區的開始與結束的位置,注意:文檔第1個字符的位置是0
             //    MsgBox ("第" & Selection.Start & "個字符至第" & Selection.End & "個字符")
             //    '刪除當前行
             //    Selection.HomeKey unit:=wdLine
             //    Selection.EndKey unit:=wdLine, Extend:=wdExtend
             //    Selection.Delete
             //    '刪除當前段落
             //    Selection.MoveUp unit:=wdParagraph
             //    Selection.MoveDown unit:=wdParagraph, Extend:=wdExtend
             //    Selection.Delete
 
 
             //表格的光標移動
             //光標到當前光標所在表格的地單元格
             WordApp.Selection.Tables[1].Cell(1, 1).Select();
             //unit對象定義
             object unith = Microsoft.Office.Interop.Word.WdUnits.wdRow;//表格行方式
             object extend = Microsoft.Office.Interop.Word.WdMovementType.wdExtend;//extend對光標移動區域進行擴展選擇
             object unitu = Microsoft.Office.Interop.Word.WdUnits.wdLine;//文檔行方式,可以看成表格一行.不過和wdRow有區別
             object unitp = Microsoft.Office.Interop.Word.WdUnits.wdParagraph;//段落方式,對於表格可以選擇到表格行後的換車符,對於跨行合並的行選擇,我能找到的最簡單方式
             //object count = 1;//光標移動量
 
             #endregion 光標移動
         }
         #endregion word文檔設置及獲取光標位置
 
         #region 讀取Word表格中某個單元格的數據。其中的參數分別為文件名(包括路徑),行號,列號。
 
         /// <summary>
         /// 讀取Word表格中某個單元格的數據。其中的參數分別為文件名(包括路徑),行號,列號。
         /// </summary>
         /// <param name="fileName">word文檔</param>
         /// <param name="rowIndex">行</param>
         /// <param name="colIndex">列</param>
         /// <returns>返回數據</returns>
         public static string ReadWord_tableContentByCell(string fileName, int rowIndex, int colIndex)
         {
             Microsoft.Office.Interop.Word._Application cls = null;
             Microsoft.Office.Interop.Word._Document doc = null;
             Microsoft.Office.Interop.Word.Table table = null;
             object missing = System.Reflection.Missing.Value;
             object path = fileName;
             cls = new Application();
             try
             {
                 doc = cls.Documents.Open
                   (ref path, 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);
                 table = doc.Tables[1];
                 string text = table.Cell(rowIndex, colIndex).Range.Text.ToString();
                 text = text.Substring(0, text.Length - 2);  //去除尾部的mark
                 return text;
             }
             catch (Exception ex)
             {
                 return ex.Message;
             }
             finally
             {
                 if (doc != null)
                     doc.Close(ref missing, ref missing, ref missing);
                 cls.Quit(ref missing, ref missing, ref missing);
             }
         }
         #endregion 讀取Word表格中某個單元格的數據。
         
         #region 修改word表格中指定單元格的數據
         /// <summary>
         /// 修改word表格中指定單元格的數據
         /// </summary>
         /// <param name="fileName">word文檔包括路徑</param>
         /// <param name="rowIndex">行</param>
         /// <param name="colIndex">列</param>
         /// <param name="content"></param>
         /// <returns></returns>
         public static bool UpdateWordTableByCell(string fileName, int rowIndex, int colIndex, string content)
         {
             Microsoft.Office.Interop.Word._Application cls = null;
             Microsoft.Office.Interop.Word._Document doc = null;
             Microsoft.Office.Interop.Word.Table table = null;
             object missing = System.Reflection.Missing.Value;
             object path = fileName;
             cls = new Application();
             try
             {
                 doc = cls.Documents.Open
                     (ref path, 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);
 
                 table = doc.Tables[1];
                 //doc.Range( ref 0, ref 0 ).InsertParagraphAfter();//插入回車
                 table.Cell(rowIndex, colIndex).Range.InsertParagraphAfter();//.Text = content;
                 return true;
             }
             catch
             {
                 return false;
             }
             finally
             {
                 if (doc != null)
                 {
                     doc.Close(ref missing, ref missing, ref missing);
                     cls.Quit(ref missing, ref missing, ref missing);
                 }
             }
         }
         #endregion
 
         #region 關閉word進程
         /// <summary>
         /// 關閉word進程
         /// </summary>
         public static void KillWordProcess()
         {
             System.Diagnostics.Process[] myProcess;
             myProcess = System.Diagnostics.Process.GetProcesses();
             foreach (System.Diagnostics.Process process in myProcess)
             {
                 if (process.Id != 0)
                 {
                     string myS = "WINWORD.EXE" + process.ProcessName + "  ID:" + process.Id.ToString();
                     try
                     {
                         if (process.Modules != null)
                             if (process.Modules.Count > 0)
                             {
                                 System.Diagnostics.ProcessModule pm = process.Modules[0];
                                 myS += "\n Modules[0].FileName:" + pm.FileName;
                                 myS += "\n Modules[0].ModuleName:" + pm.ModuleName;
                                 myS += "\n Modules[0].FileVersionInfo:\n" + pm.FileVersionInfo.ToString();
                                 if (pm.ModuleName.ToLower() == "winword.exe")
                                     process.Kill();
                             }
                     }
                     catch
                     { }
                     finally
                     {
                     }
                 }
             }
         }
         #endregion 關閉word進程
 
         #region 判斷系統是否裝word
 
         /// <summary>
         /// 判斷系統是否裝word
         /// </summary>
         /// <returns></returns>
         public static bool IsWordInstalled()
         {
             RegistryKey machineKey = Registry.LocalMachine;
             if (IsWordInstalledByVersion("12.0", machineKey))
             {
                 return true;
             }
             if (IsWordInstalledByVersion("11.0", machineKey))
             {
                 return true;
             }
             return false;
         }
 
 
         /// <summary>
         /// 判斷系統是否裝某版本的word
         /// </summary>
         /// <param name="strVersion">版本號</param>
         /// <param name="machineKey"></param>
         /// <returns></returns>
         private static bool IsWordInstalledByVersion(string strVersion, RegistryKey machineKey)
         {
             try
             {
                 RegistryKey installKey = 
                     machineKey.OpenSubKey("Software").OpenSubKey("Microsoft").OpenSubKey(
                     "Office").OpenSubKey(strVersion).OpenSubKey("Word").OpenSubKey("InstallRoot");
                 if (installKey == null)
                 {
                     return false;
                 }
                 return true;
             }
             catch(Exception e)
             {
                 Console.WriteLine(e.Message);
                 Console.WriteLine(e.StackTrace);
                 return false;
             }
         }
         #endregion 判斷系統是否裝word
     }