internal override void Dispose(bool disposing)
        {
            if (disposing)
            {
                // Free managed
                if (_headers != null)
                {
                    _headers.Dispose();
                    _headers = null;
                }

                if (_footers != null)
                {
                    _footers.Dispose();
                    _footers = null;
                }
            }

            base.Dispose(true);
        }
        private void btnExistingWord_Click(object sender, EventArgs e)
        {
            using (var word = new Word.Application())
            {
                word.Visible = true;

                Console.WriteLine("Version: " + word.Version.ToString());

                //word.Documents.Add().Dispose();

                using (var doc = (sender == btnNewWord) ?
                                 word.Documents.Add() :
                                 word.Documents.Open(Path.GetDirectoryName(Assembly.GetExecutingAssembly().GetModules()[0].FullyQualifiedName) + "\\Templates\\Open Tester.doc"))
                {
                    //MessageBox.Show(doc.Name);

                    //doc.SaveAs("c:\\test.doc");

                    doc.Activate();

                    Console.WriteLine(doc.Name);
                    Console.WriteLine(doc.FullName);
                    Console.WriteLine(doc.Path);

                    Console.WriteLine("Read only?: " + doc.ReadOnly.ToString());

                    //doc.Close(false);

                    //MessageBox.Show(doc.Sections.Count.ToString());
                    //int x = 0;
                    foreach (Word.Section section in doc.Sections)
                    {
                        //x++;
                        //MessageBox.Show("Index: " + section.Index);
                        //MessageBox.Show("Section: " + section.Index + "\n\n" + section.Range.Text);
                    }
                    //MessageBox.Show(x.ToString());

                    using (Word.Section sec1 = doc.Sections[1])
                    {
                        //MessageBox.Show("Section 1 index: " + sec1.Index.ToString());

                        using (Word.HeadersFooters headers = sec1.Headers)
                        {
                            //MessageBox.Show("Headers: " + headers.Count.ToString());
                            int x = 0;
                            foreach (Word.HeaderFooter header in headers)
                            {
                                x++;

                                //MessageBox.Show("Index: " + header.Index + (header.IsHeader ? " is header" : " is footer") + "\n\n" + header.Range.Text);

                                if (x == 1)
                                {
                                    header.Range.Text = "Some other header";
                                }
                            }
                            //MessageBox.Show(x.ToString());
                        }

                        using (Word.HeadersFooters footers = sec1.Footers)
                        {
                            //MessageBox.Show("Footers: " + footers.Count.ToString());
                            int x = 0;
                            foreach (Word.HeaderFooter footer in footers)
                            {
                                x++;
                                //MessageBox.Show("Index: " + footer.Index + (footer.IsHeader ? " is header" : " is footer") + "\n\n" + footer.Range.Text);
                            }
                            //MessageBox.Show(x.ToString());
                        }
                    }

                    using (var w = doc.ActiveWindow)
                        w.WindowState = STC.Automation.Office.Word.Enums.WindowState.Normal;

                    if (doc.Bookmarks.Exists("text"))
                    {
                        Console.WriteLine("Found 'text' bookmark");

                        using (var bookmark = doc.Bookmarks["text"])
                        {
                            bookmark.Select();
                        }
                    }

                    if (doc.Bookmarks.Exists("Red"))
                    {
                        Console.WriteLine("Found 'Red' bookmark");

                        doc.Bookmarks["Red"].Select();

                        using (var font = word.Selection.Font)
                        {
                            Console.WriteLine(font.Color.ToString());
                            font.Color = Color.Teal;
                        }
                    }

                    if (doc.Bookmarks.Exists("Bold"))
                    {
                        doc.Bookmarks["Bold"].Select();
                        using (var font = word.Selection.Font)
                        {
                            Console.WriteLine("Bold is bold: {0}", font.Bold);
                            font.Bold = null;
                        }
                    }

                    if (doc.Bookmarks.Exists("NotBold"))
                    {
                        doc.Bookmarks["NotBold"].Select();
                        using (var font = word.Selection.Font)
                        {
                            Console.WriteLine("NotBold is bold: {0}", font.Bold);
                            font.Bold = null;
                        }
                    }

                    if (doc.Bookmarks.Exists("PartlyBold"))
                    {
                        doc.Bookmarks["PartlyBold"].Select();
                        using (var font = word.Selection.Font)
                        {
                            Console.WriteLine("PartlyBold is bold: {0}", font.Bold);
                            font.Bold = null;
                        }
                    }

                    if (doc.Bookmarks.Exists("TwoColumn"))
                    {
                        doc.Bookmarks["TwoColumn"].Select();
                        using (var cols = word.Selection.Columns)
                            Console.WriteLine("TwoColumn column count: {0}", cols.Count);
                    }

                    if (doc.Bookmarks.Exists("ThreeColumn"))
                    {
                        doc.Bookmarks["ThreeColumn"].Select();
                        using (var cols = word.Selection.Columns)
                            Console.WriteLine("ThreeColumn column count: {0}", cols.Count);
                    }

                    doc.Select();
                    using (var find = word.Selection.Find)
                    {
                        find.ClearFormatting();
                        find.Text = "Some text";
                        find.Replacement.ClearFormatting();
                        find.Replacement.Text = "Other bologna";
                        find.Execute(STC.Automation.Office.Word.Enums.Replace.One);
                    }
                }


                /*foreach (Word.Document doc in word.Documents)
                 * {
                 *  MessageBox.Show(doc.Name);
                 *
                 *  doc.Dispose();
                 *
                 *  break;
                 * }*/

                //MessageBox.Show("Closed");

                //word.Quit();
            }
        }