internal WordArea(WordDocument WordDocument)
 {
     this.Objects=new ArrayList();
     this.WordDocument=WordDocument;
 }
        private void btnReportResearch_Click(object sender, EventArgs e)
        {
            WordDocument doc = new WordDocument(WordDocumentFormat.A4);
            Font normal = new Font("Arial", 10, FontStyle.Regular);
            Font bold = new Font("Arial", 10, FontStyle.Bold);
            Font header = new Font("Arial", 16, FontStyle.Bold);
            Font subHeader = new Font("Arial", 16, FontStyle.Italic);
            Font subSubHeader = new Font("Arial", 12, FontStyle.Italic);

            doc.SetFont(header);
            doc.WriteLine("Протокол исследований объекта '" + currentResearch.Name + "'");
            doc.WriteLine();
            doc.SetFont(normal);

            const int PICTURE_WIDTH_IN_INCH = 8;

            int picture_number = 1;
            if (pbTopView.ImageLocation != null)
            {
                int DPI = pbTopView.Image.Width / PICTURE_WIDTH_IN_INCH;
                doc.PutImage(pbTopView.ImageLocation, DPI);
                doc.WriteLine();
                doc.SetTextAlign(WordTextAlign.Center);
                doc.WriteLine("Рисуное " + picture_number++ + ". Схема размещения контрольных точек. Вид сверху");
                doc.SetTextAlign(WordTextAlign.Left);
            }

            if (pbSideView.ImageLocation != null)
            {
                int DPI = pbSideView.Image.Width / PICTURE_WIDTH_IN_INCH;
                doc.PutImage(pbSideView.ImageLocation, DPI);
                doc.WriteLine();
                doc.SetTextAlign(WordTextAlign.Center);
                doc.WriteLine("Рисуное " + picture_number + ". Схема размещения контрольных точек. Вид сбоку");
                doc.SetTextAlign(WordTextAlign.Left);
            }

            doc.SetFont(normal);
            if (currentResearch.CheckPoints.Count > 0)
            {
                doc.SetFont(subHeader);
                doc.WriteLine("Контрольные точки: Акустика");
                doc.SetFont(normal);
            }

            foreach(CheckPoint cp in currentResearch.CheckPoints)
            {
                if (cp.GetType() == Type.GetType("Diplom.Data.CPVibro"))
                {
                    continue;
                }
                doc.SetFont(subSubHeader);
                doc.WriteLine("Контрольная точка '" + cp.Name + "'");
                doc.SetFont(normal);
                WordTable table = doc.NewTable(normal, Color.Black, 7, cp.Results.Ratio.Length + 1, 1);
                table.SetColumnsWidth(new int[8] { 5, 1, 1, 1, 1, 1, 1, 1 });
                table.CellRange(0, 0, 1, 0).MergeCells();
                NewCell(table, 0, 0, "Слагаемое", bold);
                table.CellRange(0, 1, 0, 7).MergeCells();
                NewCell(table, 0, 1, "Среднегеометрическая частота октавной полосы, Гц", bold);
                NewCell(table, 1, 1, "125", bold);
                NewCell(table, 1, 2, "250", bold);
                NewCell(table, 1, 3, "500", bold);
                NewCell(table, 1, 4, "1000", bold);
                NewCell(table, 1, 5, "2000", bold);
                NewCell(table, 1, 6, "4000", bold);
                NewCell(table, 1, 7, "8000", bold);

                int noiseLevelRow = 4;
                int ratioIndex = 5;
                int wIndex = 6;

                NewCell(table, 2, 0, "Уровеь сигнала, дБ", bold);
                NewCell(table, 3, 0, "Уровеь сигнала в КТ, дБ", bold);
                NewCell(table, 4, 0, "Уровеь шума, дБ", bold);
                NewCell(table, ratioIndex, 0, "Отношение сигнал/шум, дБ", bold);

                for (int i = 1; i <= cp.Results.Ratio.Length; i++)
                {
                    NewCell(table, 2, i, cp.Results.SignalLevel[i - 1].ToString());
                    NewCell(table, 3, i, cp.Results.SoundproofLefel[i - 1].ToString());
                    NewCell(table, noiseLevelRow, i, cp.Results.NoiseLevel[i - 1].ToString());
                    NewCell(table, ratioIndex, i, cp.Results.Ratio[i - 1].ToString());
                }
                table.SaveToDocument(10000, 0);

                NewCell(table, wIndex, 0, "Словесная разборчиваость речи, %", bold);
                table.CellRange(wIndex, 1, wIndex, 7).MergeCells();
                NewCell(table, wIndex, 1, cp.Results.W.ToString());
                doc.WriteLine();
            }

            if (currentResearch.CheckPoints.Count > 0)
            {
                doc.SetFont(subHeader);
                doc.WriteLine("Контрольные точки: Виброакустика");
                doc.SetFont(normal);
            }

            foreach (CheckPoint cp in currentResearch.CheckPoints)
            {
                if (cp.GetType() != Type.GetType("Diplom.Data.CPVibro"))
                {
                    continue;
                }

                doc.SetFont(subSubHeader);
                doc.WriteLine("Контрольная точка '" + cp.Name + "'");
                doc.SetFont(normal);
                WordTable table = doc.NewTable(normal, Color.Black, 6, 6, 1);
                table.SetColumnsWidth(new int[6] { 5, 1, 1, 1, 1, 1});
                table.CellRange(0, 0, 1, 0).MergeCells();
                NewCell(table, 0, 0, "Слагаемое", bold);
                table.CellRange(0, 1, 0, 5).MergeCells();
                NewCell(table, 0, 1, "Среднегеометрическая частота октавной полосы, Гц", bold);
                NewCell(table, 1, 1, "250", bold);
                NewCell(table, 1, 2, "500", bold);
                NewCell(table, 1, 3, "1000", bold);
                NewCell(table, 1, 4, "2000", bold);
                NewCell(table, 1, 5, "4000", bold);

                int ratioIndex = 4;
                int wIndex = 5;

                NewCell(table, 2, 0, "Уровеь сигнала, дБ", bold);
                NewCell(table, 3, 0, "Уровеь сигнала в КТ, дБ", bold);
                NewCell(table, ratioIndex, 0, "Отношение сигнал/шум, дБ", bold);

                for (int i = 1; i <= 6; i++)
                {
                    NewCell(table, 2, i, cp.Results.SignalLevel[i].ToString());
                    NewCell(table, 3, i, cp.Results.SoundproofLefel[i].ToString());
                    NewCell(table, ratioIndex, i, cp.Results.Ratio[i].ToString());
                }
                table.SaveToDocument(10000, 0);

                NewCell(table, wIndex, 0, "Словесная разборчиваость речи, %", bold);
                table.CellRange(wIndex, 1, wIndex, 5).MergeCells();
                NewCell(table, wIndex, 1, cp.Results.W.ToString());
                doc.WriteLine();
            }

            SaveFileDialog sf = new SaveFileDialog();
            sf.DefaultExt = "doc";
            sf.Filter = "Документ Word |*.doc";
            if (sf.ShowDialog() == DialogResult.OK)
            {
                doc.SaveToFile(sf.FileName);
                MessageBox.Show("Отчет сформирован");
            }
        }