Exemplo n.º 1
0
        private void FormatHeaders(string DocToFormat)
        {
            var application = new Word.Application();

            Word.Document document = application.Documents.Open(DocToFormat);

            string imgHeader1 = @"C:\hmz\Stanlib_Logo_Board_Reports.png";
            string HeaderLine = @"C:\hmz\Stanlib_HeaderLine.png";

            foreach (Word.Section section in document.Sections)
            {
                section.PageSetup.DifferentFirstPageHeaderFooter = -1;
                Word.HeaderFooter header = section.Headers[Word.WdHeaderFooterIndex.wdHeaderFooterPrimary];
                lblProcessing.Text = "Processing Headers...";
                //wdHeaderFooterFirstPage would be for first page..

                header.Shapes.AddPicture(imgHeader1, 0, 1, -15, -15, 137, 51);
                header.Shapes.AddPicture(HeaderLine, 0, 1, -15, 50, 520, 1);
                //header.Shapes.AddLine(28, 90, 558, 90);
            }

            document.Save();
            document.Close();
            application.Quit();
        }
Exemplo n.º 2
0
        public static void setPageNum(Word.Application wordApp)
        {
            Word.Document myDoc      = ActiveDocumentManager.getDefaultAD();
            int           iPageCount = getTotalPage(myDoc);
            int           iSections  = ActiveDocumentManager.getDefaultAD().Range().Sections.Count;

            for (int i = 1; i <= iSections; i++)
            {
                Range             rg = ActiveDocumentManager.getDefaultAD().Range().Sections[i].Range;
                Word.HeaderFooter hf = rg.Sections[1].Footers[Word.WdHeaderFooterIndex.wdHeaderFooterPrimary];
                hf.Range.ParagraphFormat.Alignment = Microsoft.Office.Interop.Word.WdParagraphAlignment.wdAlignParagraphCenter;
                hf.Range.Text = "第   页";

                hf.PageNumbers.NumberStyle = Word.WdPageNumberStyle.wdPageNumberStyleArabic;
                hf.PageNumbers.RestartNumberingAtSection = false;
                //hf.PageNumbers.StartingNumber = 1;
                //hf.LinkToPrevious = true;
                //hf.PageNumbers.
                object alignment  = Word.WdPageNumberAlignment.wdAlignPageNumberCenter;
                object oFirstPage = true;
                rg.Sections[1].Footers[WdHeaderFooterIndex.wdHeaderFooterPrimary].PageNumbers.Add(ref alignment, ref oFirstPage);
            }

            //throw new Exception();
        }
Exemplo n.º 3
0
        public void ProcHeadersFooters(WORD.HeaderFooter header, WORD.HeaderFooter footer)
        {
            header.Range.LanguageID = LocalLang.wdID;
            footer.Range.LanguageID = LocalLang.wdID;

            var targetFontHeader = LocalLang.GetLocFont(header.Range.Font.Name);

            //_SetFontProperty(targetFontHeader, header.Range.Font.Name, header.Range.Font.NameAscii,
            //    header.Range.Font.NameOther);
            header.Range.Font.Name      = targetFontHeader;
            header.Range.Font.NameAscii = targetFontHeader;
            header.Range.Font.NameOther = targetFontHeader;

            var targetFontFooter = LocalLang.GetLocFont(footer.Range.Font.Name);

            //_SetFontProperty(targetFontFooter, footer.Range.Font.Name, footer.Range.Font.NameAscii,
            //    footer.Range.Font.NameOther);
            footer.Range.Font.Name      = targetFontFooter;
            footer.Range.Font.NameAscii = targetFontFooter;
            footer.Range.Font.NameOther = targetFontFooter;

            if (LocalLang.IsFarEast)
            {
                header.Range.LanguageIDFarEast = LocalLang.wdID;
                header.Range.Font.NameFarEast  = targetFontHeader;

                footer.Range.LanguageIDFarEast = LocalLang.wdID;
                footer.Range.Font.NameFarEast  = targetFontFooter;
            }

            if (LocalLang.IsRightToLeft)
            {
                header.Range.LanguageIDOther = LocalLang.wdID;
                header.Range.Font.NameBi     = targetFontHeader;

                footer.Range.LanguageIDOther = LocalLang.wdID;
                footer.Range.Font.NameBi     = targetFontFooter;
            }
        }
Exemplo n.º 4
0
        private void FormatFooters(string DocToFormat)
        {
            var application = new Word.Application();

            Word.Document document = application.Documents.Open(DocToFormat);


            string FooterLine = @"C:\hmz\Stanlib_FooterLine.png";

            try
            {
                foreach (Word.Section section in document.Sections)
                {
                    section.PageSetup.DifferentFirstPageHeaderFooter = -1;
                    Word.HeaderFooter footer = section.Footers[Word.WdHeaderFooterIndex.wdHeaderFooterPrimary];

                    lblProcessing.Text = "Processing Footers...";

                    footer.Shapes.AddPicture(FooterLine, 0, 1, -10, -20, 520, 1);

                    footer.PageNumbers.Add(Word.WdPageNumberAlignment.wdAlignPageNumberRight, false);
                    footer.PageNumbers.StartingNumber = 0;
                    footer.Range.InsertBefore("Page ");
                    footer.Range.Font.Size = 8;
                    footer.Range.Font.Name = "Arial";
                    footer.Range.Font.Bold = 1;
                }
                document.Save();
                document.Close();
                application.Quit();
            }
            catch (Exception el)
            {
                MessageBox.Show(el.Message.ToString());
                document.Close();
                application.Quit();
            }
            /// fix footers
        }
Exemplo n.º 5
0
        public void InsertShape(Word.Document doc)
        {
            try
            {
                Word.Section      sec = doc.Sections[1];
                Word.HeaderFooter foo = sec.Footers[Word.WdHeaderFooterIndex.wdHeaderFooterPrimary];

                Word.Range rng = foo.Range;

                float leftPos = doc.PageSetup.PageWidth - doc.PageSetup.RightMargin;
                float topPos  = doc.PageSetup.PageHeight - doc.PageSetup.BottomMargin;

                Word.Shape shp = doc.Shapes.AddTextbox(Microsoft.Office.Core.MsoTextOrientation.msoTextOrientationHorizontal,
                                                       leftPos, topPos, 50, 20, rng);

                shp.TextFrame.TextRange.Text = "Text";
                shp.RelativeVerticalPosition = Word.WdRelativeVerticalPosition.wdRelativeVerticalPositionBottomMarginArea;
            }
            catch (Exception)
            {
                throw;
            }
        }
Exemplo n.º 6
0
        public void GetNewReport(DataTable dt)
        {
            object oMissing = System.Reflection.Missing.Value;
            object unknow   = Type.Missing;
            object start    = 0;
            object end      = 0;

            Microsoft.Office.Interop.Word.Range tableLocation = ActiveDocumentManager.getDefaultAD().Range(ref start, ref end);
            // 添加页眉
            emrTaskPane.wordApp.ActiveWindow.View.Type     = Word.WdViewType.wdOutlineView;
            emrTaskPane.wordApp.ActiveWindow.View.SeekView = Word.WdSeekView.wdSeekPrimaryHeader;
            emrTaskPane.wordApp.ActiveWindow.ActivePane.Selection.InsertAfter("");
            emrTaskPane.wordApp.Selection.ParagraphFormat.Alignment   = Word.WdParagraphAlignment.wdAlignParagraphRight; //设置右对齐
            emrTaskPane.wordApp.ActiveWindow.View.SeekView            = Word.WdSeekView.wdSeekMainDocument;              //跳出页眉设置
            emrTaskPane.wordApp.Selection.ParagraphFormat.LineSpacing = 15f;                                             //设置文档的行间距

            //2012-07-29 LiuQi 删除页眉
            int c = ActiveDocumentManager.getDefaultAD().Paragraphs[1].Borders.Count;

            emrTaskPane.wordApp.ActiveWindow.View.SeekView = Microsoft.Office.Interop.Word.WdSeekView.wdSeekCurrentPageHeader;
            Microsoft.Office.Interop.Word.Application WordApp;
            Microsoft.Office.Interop.Word.Document    WordDoc;
            WordApp = new Microsoft.Office.Interop.Word.ApplicationClass();
            if (c != 0)
            {
                Word.HeaderFooter hf = ActiveDocumentManager.getDefaultAD().Sections[1].Headers[Word.WdHeaderFooterIndex.wdHeaderFooterPrimary];
                Word.Range        r  = hf.Range;
                //r.Start = r.End;
                r.Select();
                Word.Border border = r.Borders[Word.WdBorderType.wdBorderBottom];
                border.Visible = false;
            }
            //移动焦点并换行
            object count  = 14;
            object WdLine = Microsoft.Office.Interop.Word.WdUnits.wdLine;              //换一行;

            emrTaskPane.wordApp.Selection.MoveDown(ref WdLine, ref count, ref unknow); //移动焦点
            emrTaskPane.wordApp.Selection.MoveDown(ref WdLine, ref count, ref unknow); //移动焦点
            emrTaskPane.wordApp.Selection.TypeParagraph();                             //插入段落
            Word.Range range = ActiveDocumentManager.getDefaultAD().Paragraphs.Last.Range;
            range.Start = ActiveDocumentManager.getDefaultAD().Paragraphs.Last.Range.End;

            range.Select();
            //// range.Text = "病历质量月度评分表" + "(" + comboBox2.Text + "年" + comboBox1.Text + "月)";
            if (hz)
            {
                range.Text = "各科室现岗病历质检情况一览表";
            }
            else
            {
                range.Text = "现岗病历质量评分科室汇总表";
            }
            range.ParagraphFormat.Alignment = Microsoft.Office.Interop.Word.WdParagraphAlignment.wdAlignParagraphCenter;
            range.Font.Name = "黑体";
            range.Font.Size = 15.5f;
            range.Start     = range.End;
            range.Select();


            range.Text = dateTimePickerStart.Value.ToString() + "至" + dateTimePickerEnd.Value.ToString();
            range.ParagraphFormat.Alignment = Microsoft.Office.Interop.Word.WdParagraphAlignment.wdAlignParagraphCenter;
            range.Font.Name = "黑体";
            range.Font.Size = 10f;
            range.Start     = range.End;
            range.Select();

            ActiveDocumentManager.getDefaultAD().PageSetup.Orientation = Word.WdOrientation.wdOrientPortrait;
            ActiveDocumentManager.getDefaultAD().PageSetup.PageWidth = emrTaskPane.wordApp.CentimetersToPoints(29.7F);
            ActiveDocumentManager.getDefaultAD().PageSetup.PageHeight = emrTaskPane.wordApp.CentimetersToPoints(21F);
            int rows = 0;

            if (ks || qy)
            {
                rows = 9;
            }
            else
            {
                rows = 8;
            }
            Microsoft.Office.Interop.Word.Table newTable = ActiveDocumentManager.getDefaultAD().Tables.Add(emrTaskPane.wordApp.Selection.Range, dt.Rows.Count + 1, rows, ref unknow, ref unknow);
            //设置表格样式
            newTable.Range.Font.Size          = 11.0f;
            newTable.Borders.OutsideLineStyle = Word.WdLineStyle.wdLineStyleSingle;
            newTable.Borders.InsideLineStyle  = Word.WdLineStyle.wdLineStyleSingle;
            emrTaskPane.wordApp.Selection.ParagraphFormat.LineSpacing = 15f;//设置文档的行间距
            if (ks || qy)
            {
                newTable.Cell(1, 1).Range.Text = "科室";
                newTable.Cell(1, 1).Range.ParagraphFormat.Alignment = Microsoft.Office.Interop.Word.WdParagraphAlignment.wdAlignParagraphCenter;
                newTable.Cell(1, 2).Range.Text = "主治医师";
                newTable.Cell(1, 2).Range.ParagraphFormat.Alignment = Microsoft.Office.Interop.Word.WdParagraphAlignment.wdAlignParagraphCenter;

                newTable.Cell(1, 3).Range.Text = "病案号";
                newTable.Cell(1, 3).Range.ParagraphFormat.Alignment = Microsoft.Office.Interop.Word.WdParagraphAlignment.wdAlignParagraphCenter;
                newTable.Cell(1, 4).Range.Text = "住院日期";
                newTable.Cell(1, 4).Range.ParagraphFormat.Alignment = Microsoft.Office.Interop.Word.WdParagraphAlignment.wdAlignParagraphCenter;

                newTable.Cell(1, 5).Range.Text = "住院号";
                newTable.Cell(1, 5).Range.ParagraphFormat.Alignment = Microsoft.Office.Interop.Word.WdParagraphAlignment.wdAlignParagraphCenter;
                newTable.Cell(1, 6).Range.Text = "扣分项目";
                newTable.Cell(1, 6).Range.ParagraphFormat.Alignment = Microsoft.Office.Interop.Word.WdParagraphAlignment.wdAlignParagraphCenter;
                newTable.Cell(1, 7).Range.Text = "扣分原因";
                newTable.Cell(1, 7).Range.ParagraphFormat.Alignment = Microsoft.Office.Interop.Word.WdParagraphAlignment.wdAlignParagraphCenter;
                newTable.Cell(1, 8).Range.Text = "总得分";
                newTable.Cell(1, 8).Range.ParagraphFormat.Alignment = Microsoft.Office.Interop.Word.WdParagraphAlignment.wdAlignParagraphCenter;
                newTable.Cell(1, 9).Range.Text = "等级";
                newTable.Cell(1, 9).Range.ParagraphFormat.Alignment = Microsoft.Office.Interop.Word.WdParagraphAlignment.wdAlignParagraphCenter;

                newTable.Columns[1].Width = 60f;
                newTable.Columns[2].Width = 60f;
                newTable.Columns[3].Width = 70f;//能显示三个字
                newTable.Columns[4].Width = 65f;
                newTable.Columns[5].Width = 60f;
                newTable.Columns[6].Width = 70f;
                newTable.Columns[7].Width = 220f;
                newTable.Columns[8].Width = 50f;
                newTable.Columns[9].Width = 40f;

                //if (dt.Rows.Count > 0)
                //{

                //    try
                //    {
                //        for (int i = 0; i < dt.Rows.Count; i++)
                //        {

                //            newTable.Cell(i + 2, 4).Range.Text = dt.Rows[i]["zyrq"].ToString();
                //            newTable.Cell(i + 2, 4).Range.ParagraphFormat.Alignment = Microsoft.Office.Interop.Word.WdParagraphAlignment.wdAlignParagraphCenter;
                //            newTable.Cell(i + 2, 1).Range.Text = dt.Rows[i]["ksmc"].ToString();
                //            newTable.Cell(i + 2, 1).Range.ParagraphFormat.Alignment = Microsoft.Office.Interop.Word.WdParagraphAlignment.wdAlignParagraphCenter;
                //            newTable.Cell(i + 2, 2).Range.Text = dt.Rows[i]["ysm"].ToString();
                //            newTable.Cell(i + 2, 2).Range.ParagraphFormat.Alignment = Microsoft.Office.Interop.Word.WdParagraphAlignment.wdAlignParagraphCenter;
                //            newTable.Cell(i + 2, 3).Range.Text = dt.Rows[i]["bah"].ToString();
                //            newTable.Cell(i + 2, 3).Range.ParagraphFormat.Alignment = Microsoft.Office.Interop.Word.WdParagraphAlignment.wdAlignParagraphCenter;
                //            newTable.Cell(i + 2, 5).Range.Text = dt.Rows[i]["zyh"].ToString();
                //            newTable.Cell(i + 2, 5).Range.ParagraphFormat.Alignment = Microsoft.Office.Interop.Word.WdParagraphAlignment.wdAlignParagraphCenter;


                //            newTable.Cell(i + 2, 6).Range.Text = dt.Rows[i]["kfxm"].ToString();
                //            newTable.Cell(i + 2, 6).Range.ParagraphFormat.Alignment = Microsoft.Office.Interop.Word.WdParagraphAlignment.wdAlignParagraphLeft;
                //            newTable.Cell(i + 2, 7).Range.Text = dt.Rows[i]["kfyy"].ToString();
                //            newTable.Cell(i + 2, 7).Range.ParagraphFormat.Alignment = Microsoft.Office.Interop.Word.WdParagraphAlignment.wdAlignParagraphCenter;
                //            newTable.Cell(i + 2, 8).Range.Text = dt.Rows[i]["sdf"].ToString();
                //            newTable.Cell(i + 2, 8).Range.ParagraphFormat.Alignment = Microsoft.Office.Interop.Word.WdParagraphAlignment.wdAlignParagraphCenter;
                //            newTable.Cell(i + 2, 9).Range.Text = dt.Rows[i]["pj"].ToString();
                //            newTable.Cell(i + 2, 9).Range.ParagraphFormat.Alignment = Microsoft.Office.Interop.Word.WdParagraphAlignment.wdAlignParagraphCenter;

                //        }

                //        verticalCellMerge(newTable, 2, 1);
                //        verticalCellMerge(newTable, 2, 2);
                //        verticalCellMerge(newTable, 2, 3);
                //        verticalCellMerge(newTable, 2, 4);
                //        verticalCellMerge(newTable, 2, 8);
                //        verticalCellMerge(newTable, 2, 9);
                //        verticalCellMerge(newTable, 2, 5);
                //        // verticalCellMerge(newTable,2,5);
                //    }
                //    catch (Exception ex)
                //    {

                //        MessageBox.Show(ex.ToString());
                //    }
                //}
                if (dt.Rows.Count > 0)
                {
                    try
                    {
                        for (int i = 0; i < dt.Rows.Count; i++)
                        {
                            newTable.Cell(i + 2, 4).Range.Text = dt.Rows[i]["住院日期"].ToString();
                            newTable.Cell(i + 2, 4).Range.ParagraphFormat.Alignment = Microsoft.Office.Interop.Word.WdParagraphAlignment.wdAlignParagraphCenter;
                            newTable.Cell(i + 2, 1).Range.Text = dt.Rows[i]["科室"].ToString();
                            newTable.Cell(i + 2, 1).Range.ParagraphFormat.Alignment = Microsoft.Office.Interop.Word.WdParagraphAlignment.wdAlignParagraphCenter;
                            newTable.Cell(i + 2, 2).Range.Text = dt.Rows[i]["质检医师"].ToString();
                            newTable.Cell(i + 2, 2).Range.ParagraphFormat.Alignment = Microsoft.Office.Interop.Word.WdParagraphAlignment.wdAlignParagraphCenter;
                            newTable.Cell(i + 2, 3).Range.Text = dt.Rows[i]["病案号"].ToString();
                            newTable.Cell(i + 2, 3).Range.ParagraphFormat.Alignment = Microsoft.Office.Interop.Word.WdParagraphAlignment.wdAlignParagraphCenter;
                            newTable.Cell(i + 2, 5).Range.Text = dt.Rows[i]["住院号"].ToString();
                            newTable.Cell(i + 2, 5).Range.ParagraphFormat.Alignment = Microsoft.Office.Interop.Word.WdParagraphAlignment.wdAlignParagraphCenter;


                            newTable.Cell(i + 2, 6).Range.Text = dt.Rows[i]["扣分项目"].ToString();
                            newTable.Cell(i + 2, 6).Range.ParagraphFormat.Alignment = Microsoft.Office.Interop.Word.WdParagraphAlignment.wdAlignParagraphLeft;
                            newTable.Cell(i + 2, 7).Range.Text = dt.Rows[i]["扣分原因"].ToString();
                            newTable.Cell(i + 2, 7).Range.ParagraphFormat.Alignment = Microsoft.Office.Interop.Word.WdParagraphAlignment.wdAlignParagraphCenter;
                            newTable.Cell(i + 2, 8).Range.Text = dt.Rows[i]["总得分"].ToString();
                            newTable.Cell(i + 2, 8).Range.ParagraphFormat.Alignment = Microsoft.Office.Interop.Word.WdParagraphAlignment.wdAlignParagraphCenter;
                            newTable.Cell(i + 2, 9).Range.Text = dt.Rows[i]["评审结果"].ToString();
                            newTable.Cell(i + 2, 9).Range.ParagraphFormat.Alignment = Microsoft.Office.Interop.Word.WdParagraphAlignment.wdAlignParagraphCenter;
                        }

                        verticalCellMerge(newTable, 2, 1);
                        verticalCellMerge(newTable, 2, 2);
                        verticalCellMerge(newTable, 2, 3);
                        verticalCellMerge(newTable, 2, 4);
                        verticalCellMerge(newTable, 2, 8);
                        verticalCellMerge(newTable, 2, 9);
                        verticalCellMerge(newTable, 2, 5);
                        // verticalCellMerge(newTable,2,5);
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show(ex.ToString());
                    }
                }
            }
            else
            {
                newTable.Cell(1, 1).Range.Text = "科室";
                newTable.Cell(1, 1).Range.ParagraphFormat.Alignment = Microsoft.Office.Interop.Word.WdParagraphAlignment.wdAlignParagraphCenter;
                newTable.Cell(1, 2).Range.Text = "病历质检数";
                newTable.Cell(1, 2).Range.ParagraphFormat.Alignment = Microsoft.Office.Interop.Word.WdParagraphAlignment.wdAlignParagraphCenter;
                newTable.Cell(1, 3).Range.Text = "甲级";
                newTable.Cell(1, 3).Range.ParagraphFormat.Alignment = Microsoft.Office.Interop.Word.WdParagraphAlignment.wdAlignParagraphCenter;
                newTable.Cell(1, 4).Range.Text = "甲级病历率";
                newTable.Cell(1, 4).Range.ParagraphFormat.Alignment = Microsoft.Office.Interop.Word.WdParagraphAlignment.wdAlignParagraphCenter;
                newTable.Cell(1, 5).Range.Text = "乙级";
                newTable.Cell(1, 5).Range.ParagraphFormat.Alignment = Microsoft.Office.Interop.Word.WdParagraphAlignment.wdAlignParagraphCenter;
                newTable.Cell(1, 6).Range.Text = "乙级病历率";
                newTable.Cell(1, 6).Range.ParagraphFormat.Alignment = Microsoft.Office.Interop.Word.WdParagraphAlignment.wdAlignParagraphCenter;
                newTable.Cell(1, 7).Range.Text = "丙级";
                newTable.Cell(1, 7).Range.ParagraphFormat.Alignment = Microsoft.Office.Interop.Word.WdParagraphAlignment.wdAlignParagraphCenter;
                newTable.Cell(1, 8).Range.Text = "丙级病历率";
                newTable.Cell(1, 8).Range.ParagraphFormat.Alignment = Microsoft.Office.Interop.Word.WdParagraphAlignment.wdAlignParagraphCenter;

                newTable.Columns[1].Width = 70f;
                newTable.Columns[2].Width = 70f;
                newTable.Columns[3].Width = 70f;//能显示三个字
                newTable.Columns[4].Width = 70f;
                newTable.Columns[5].Width = 70f;
                newTable.Columns[6].Width = 70f;

                if (dt.Rows.Count > 0)
                {
                    int k = 2;
                    for (int i = 0; i < dt.Rows.Count; i++)
                    {
                        decimal bl    = Convert.ToDecimal(dt.Rows[i]["病历率"].ToString());
                        string  strbl = (Convert.ToDecimal(bl.ToString("0.00")) * 100).ToString() + "%";

                        if (i > 0)
                        {
                            if (dt.Rows[i]["科室"].ToString() == dt.Rows[i - 1]["科室"].ToString())
                            {
                                newTable.Cell(k, 1).Range.Text = dt.Rows[i]["科室"].ToString();
                                newTable.Cell(k, 1).Range.ParagraphFormat.Alignment = Microsoft.Office.Interop.Word.WdParagraphAlignment.wdAlignParagraphCenter;
                                newTable.Cell(k, 2).Range.Text = dt.Rows[i]["科室质检数"].ToString();
                                newTable.Cell(k, 2).Range.ParagraphFormat.Alignment = Microsoft.Office.Interop.Word.WdParagraphAlignment.wdAlignParagraphCenter;

                                if (dt.Rows[i]["评级"].ToString() == "甲")
                                {
                                    newTable.Cell(k, 3).Range.Text = dt.Rows[i]["病历数"].ToString();
                                    newTable.Cell(k, 3).Range.ParagraphFormat.Alignment = Microsoft.Office.Interop.Word.WdParagraphAlignment.wdAlignParagraphCenter;
                                    newTable.Cell(k, 4).Range.Text = strbl;
                                    newTable.Cell(k, 4).Range.ParagraphFormat.Alignment = Microsoft.Office.Interop.Word.WdParagraphAlignment.wdAlignParagraphCenter;
                                }
                                else if (dt.Rows[i]["评级"].ToString() == "乙")
                                {
                                    newTable.Cell(k, 5).Range.Text = dt.Rows[i]["病历数"].ToString();
                                    newTable.Cell(k, 5).Range.ParagraphFormat.Alignment = Microsoft.Office.Interop.Word.WdParagraphAlignment.wdAlignParagraphCenter;
                                    newTable.Cell(k, 6).Range.Text = strbl;
                                    newTable.Cell(k, 6).Range.ParagraphFormat.Alignment = Microsoft.Office.Interop.Word.WdParagraphAlignment.wdAlignParagraphCenter;
                                }
                                else if (dt.Rows[i]["评级"].ToString() == "丙")
                                {
                                    newTable.Cell(k, 7).Range.Text = dt.Rows[i]["病历数"].ToString();
                                    newTable.Cell(k, 7).Range.ParagraphFormat.Alignment = Microsoft.Office.Interop.Word.WdParagraphAlignment.wdAlignParagraphCenter;
                                    newTable.Cell(k, 8).Range.Text = strbl;
                                    newTable.Cell(k, 8).Range.ParagraphFormat.Alignment = Microsoft.Office.Interop.Word.WdParagraphAlignment.wdAlignParagraphCenter;
                                }
                            }
                            else
                            {
                                k++;
                                newTable.Cell(k, 1).Range.Text = dt.Rows[i]["科室"].ToString();
                                newTable.Cell(k, 1).Range.ParagraphFormat.Alignment = Microsoft.Office.Interop.Word.WdParagraphAlignment.wdAlignParagraphCenter;
                                newTable.Cell(k, 2).Range.Text = dt.Rows[i]["科室质检数"].ToString();;
                                newTable.Cell(k, 2).Range.ParagraphFormat.Alignment = Microsoft.Office.Interop.Word.WdParagraphAlignment.wdAlignParagraphCenter;

                                if (dt.Rows[i]["评级"].ToString() == "甲")
                                {
                                    newTable.Cell(k, 3).Range.Text = dt.Rows[i]["病历数"].ToString();
                                    newTable.Cell(k, 3).Range.ParagraphFormat.Alignment = Microsoft.Office.Interop.Word.WdParagraphAlignment.wdAlignParagraphCenter;
                                    newTable.Cell(k, 4).Range.Text = strbl;
                                    newTable.Cell(k, 4).Range.ParagraphFormat.Alignment = Microsoft.Office.Interop.Word.WdParagraphAlignment.wdAlignParagraphCenter;
                                }
                                else if (dt.Rows[i]["评级"].ToString() == "乙")
                                {
                                    newTable.Cell(k, 5).Range.Text = dt.Rows[i]["病历数"].ToString();
                                    newTable.Cell(k, 5).Range.ParagraphFormat.Alignment = Microsoft.Office.Interop.Word.WdParagraphAlignment.wdAlignParagraphCenter;
                                    newTable.Cell(k, 6).Range.Text = strbl;
                                    newTable.Cell(k, 6).Range.ParagraphFormat.Alignment = Microsoft.Office.Interop.Word.WdParagraphAlignment.wdAlignParagraphCenter;
                                }
                                else if (dt.Rows[i]["评级"].ToString() == "丙")
                                {
                                    newTable.Cell(k, 7).Range.Text = dt.Rows[i]["病历数"].ToString();
                                    newTable.Cell(k, 7).Range.ParagraphFormat.Alignment = Microsoft.Office.Interop.Word.WdParagraphAlignment.wdAlignParagraphCenter;
                                    newTable.Cell(k, 8).Range.Text = strbl;
                                    newTable.Cell(k, 8).Range.ParagraphFormat.Alignment = Microsoft.Office.Interop.Word.WdParagraphAlignment.wdAlignParagraphCenter;
                                }
                            }
                        }
                        else
                        {
                            newTable.Cell(i + 2, 1).Range.Text = dt.Rows[i]["科室"].ToString();
                            newTable.Cell(i + 2, 1).Range.ParagraphFormat.Alignment = Microsoft.Office.Interop.Word.WdParagraphAlignment.wdAlignParagraphCenter;
                            newTable.Cell(i + 2, 2).Range.Text = dt.Rows[i]["科室质检数"].ToString();
                            newTable.Cell(i + 2, 2).Range.ParagraphFormat.Alignment = Microsoft.Office.Interop.Word.WdParagraphAlignment.wdAlignParagraphCenter;

                            if (dt.Rows[i]["评级"].ToString() == "甲")
                            {
                                newTable.Cell(i + 2, 3).Range.Text = dt.Rows[i]["病历数"].ToString();
                                newTable.Cell(i + 2, 3).Range.ParagraphFormat.Alignment = Microsoft.Office.Interop.Word.WdParagraphAlignment.wdAlignParagraphCenter;
                                newTable.Cell(i + 2, 4).Range.Text = strbl;
                                newTable.Cell(i + 2, 4).Range.ParagraphFormat.Alignment = Microsoft.Office.Interop.Word.WdParagraphAlignment.wdAlignParagraphCenter;
                            }
                            else if (dt.Rows[i]["评级"].ToString() == "乙")
                            {
                                newTable.Cell(i + 2, 5).Range.Text = dt.Rows[i]["病历数"].ToString();
                                newTable.Cell(i + 2, 5).Range.ParagraphFormat.Alignment = Microsoft.Office.Interop.Word.WdParagraphAlignment.wdAlignParagraphCenter;
                                newTable.Cell(i + 2, 6).Range.Text = strbl;
                                newTable.Cell(i + 2, 6).Range.ParagraphFormat.Alignment = Microsoft.Office.Interop.Word.WdParagraphAlignment.wdAlignParagraphCenter;
                            }
                            else if (dt.Rows[i]["评级"].ToString() == "丙")
                            {
                                newTable.Cell(i + 2, 7).Range.Text = dt.Rows[i]["病历数"].ToString();
                                newTable.Cell(i + 2, 7).Range.ParagraphFormat.Alignment = Microsoft.Office.Interop.Word.WdParagraphAlignment.wdAlignParagraphCenter;
                                newTable.Cell(i + 2, 8).Range.Text = strbl;
                                newTable.Cell(i + 2, 8).Range.ParagraphFormat.Alignment = Microsoft.Office.Interop.Word.WdParagraphAlignment.wdAlignParagraphCenter;
                            }
                        }
                    }
                    //删除多余的行
                    for (int i = 2; i <= newTable.Rows.Count; i++)
                    {
                        if (newTable.Cell(i, 1).Range.Text == "\r\a")
                        {
                            newTable.Rows[i].Delete();
                            i = i - 2;
                        }
                    }
                }
            }
            object Line1 = Microsoft.Office.Interop.Word.WdUnits.wdLine;//换一行;

            //object WdLine = Microsoft.Office.Interop.Word.WdUnits.wdLine;//换一行;
            emrTaskPane.wordApp.Selection.MoveDown(ref Line1, ref count, ref unknow); //移动焦点
            emrTaskPane.wordApp.Selection.MoveDown(ref Line1, ref count, ref unknow); //移动焦点

            emrTaskPane.wordApp.Selection.TypeParagraph();                            //插入段落
            Word.Range range1 = ActiveDocumentManager.getDefaultAD().Paragraphs.Last.Range;
            range1.Start = ActiveDocumentManager.getDefaultAD().Paragraphs.Last.Range.End;
            int count2 = newTable.Rows.Count - 1;

            range1.Select();
            range1.Text = "记录数共计" + count2 + "条";

            range1.ParagraphFormat.Alignment = Microsoft.Office.Interop.Word.WdParagraphAlignment.wdAlignParagraphRight;
            range1.Font.Name = "黑体";
            range1.Font.Size = 10f;
            range1.Start     = range.End;
            //Globals.ThisAddIn.ShowNoteMenu();
            //OperationEnableForStat(true);
            Cursor.Current = Cursors.Default;
        }
Exemplo n.º 7
0
        /// <summary>
        /// Метод, который создает документ Word, в котором содержится информация о текущих пользователях.
        /// </summary>
        /// <param name="path">Абсолютный путь к создаваемому файлу.</param>
        /// <param name="wordDocumentName">Название создаваемого файла.</param>
        /// <param name="openFileAfterCreate">Необязательный параметр. Отвечает за открытие файла после его создания.</param>
        public async static void CreateWordUserList(String path, String wordDocumentName, Bool openFileAfterCreate = false)
        {
            String fullPath;

            if (!wordDocumentName.EndsWith(".docx"))
            {
                wordDocumentName += ".docx";
            }

            //Проверка на окончание пути.
            _ = path.EndsWith("\\") ? fullPath = path + wordDocumentName :
                                                 fullPath = path + "\\" + wordDocumentName;

            //Так как создание документа затрачивает много времени, этот алгоритм вынесен в отдельный поток.
            await Task.Run(() =>
            {
                //Создаем процесс Word.
                Word.Application appToDo = new Word.Application();

                //Создаем документ. Связываем его с созданным ранее процессом.
                appToDo.Documents.Add();
                Word.Document mainDocument = appToDo.Documents[1];

                //Производим запись в файл.
                for (int i = 0; i < ActualProfiles.Count; i++)
                {
                    /*
                     * <——————————————————————————————————————————————————————————————————————————————————————————————————>
                     * |                                        !Запись в Файл!                                           |
                     * |——————————————————————————————————————————————————————————————————————————————————————————————————|
                     * | В данном регионе кода происходит наполнение Word-файла. Разберем этот алгоритм по пунктам:       |
                     * |——————————————————————————————————————————————————————————————————————————————————————————————————|
                     * |                                    I. Создание Колонтитулов.                                     |
                     * |——————————————————————————————————————————————————————————————————————————————————————————————————|
                     * | 1. Создаем экземпляр интерфейса "HeaderFooter". Связываем его с текущей секцией документа.       |
                     * | 2. При инициализации указываем, что это Верхний Колонтитул.                                      |
                     * | 3. Настраиваем его свойства: шрифт, стиль, выравнивание. Задаем текст с именем пользователя.     |
                     * | 4. Аналогично создаем еще один экземпляр интерфейса, но теперь прописываем номер страницы.       |
                     * | 5. У второго колонтитула также изменяем стиль чисел, отвечающих за нумерацию страниц.            |
                     * |——————————————————————————————————————————————————————————————————————————————————————————————————|
                     * |                                     II. Создание Параграфов.                                     |
                     * |——————————————————————————————————————————————————————————————————————————————————————————————————|
                     * | 1. Создаем экземпляр класса Word.Paragraph, связываем его с документом и добавляем сам параграф. |
                     * | 2. Далее используя "Range" мы задаем текст и его свойства.                                       |
                     * | 3. Далее используем функцию ".InsertParagraphAfter()", чтобы завершить параграф.                 |
                     * | 4. Если следующий параграф не последний, то используем метод "InsertParagraphBefore()", чтобы -> |
                     * | -> красиво расположить текст, создав пробел между строками.                                      |
                     * |——————————————————————————————————————————————————————————————————————————————————————————————————|
                     * |                                      III. Завершение.                                            |
                     * |——————————————————————————————————————————————————————————————————————————————————————————————————|
                     * | 1. Выполняем проверку на длину файла, чтобы не создавать лишние страницы.                        |
                     * | 2. Если проверка пройдена, используем метод "Sections.Add()", чтобы создать новую страницу.      |
                     * <——————————————————————————————————————————————————————————————————————————————————————————————————>
                     */

                    #region Область Кода: Заполнение Файла.

                    //Добавляем и настраиваем Верхний Колонтитул с именем текущего пользователя.
                    Word.HeaderFooter currentHeader          = appToDo.ActiveDocument.Sections[i + 1].Headers[Word.WdHeaderFooterIndex.wdHeaderFooterPrimary];
                    currentHeader.Range.Font.Bold            = 0;
                    currentHeader.LinkToPrevious             = false;
                    currentHeader.Range.Font.Name            = "Georgia";
                    currentHeader.Range.Text                 = ActualProfiles[i].Name;
                    currentHeader.Range.Paragraphs.Alignment = Word.WdParagraphAlignment.wdAlignParagraphCenter;

                    //Добавляем и настраиваем Нижний Колонтитул с номером текущей страницы.
                    Word.HeaderFooter currentFooter          = appToDo.ActiveDocument.Sections[i + 1].Footers[Word.WdHeaderFooterIndex.wdHeaderFooterPrimary];
                    currentFooter.Range.Font.Bold            = 0;
                    currentFooter.LinkToPrevious             = false;
                    currentFooter.Range.Font.Name            = "Georgia";
                    currentFooter.Range.Text                 = (i + 1).ToString();
                    currentFooter.PageNumbers.NumberStyle    = Word.WdPageNumberStyle.wdPageNumberStyleHanjaRead;
                    currentFooter.Range.Paragraphs.Alignment = Word.WdParagraphAlignment.wdAlignParagraphCenter;

                    //Запись свойства: "Имя Пользователя.".
                    Word.Paragraph userName = mainDocument.Content.Paragraphs.Add();
                    userName.Range.InsertParagraphBefore();
                    userName.Range.Text      = "Имя Пользователя: " + ActualProfiles[i].Name + ';';
                    userName.Range.Font.Name = "Georgia";
                    userName.Range.Font.Bold = 0;
                    userName.Range.InsertParagraphAfter();

                    //Запись свойства: "Количество побед.".
                    Word.Paragraph userWins = mainDocument.Content.Paragraphs.Add();
                    userWins.Range.InsertParagraphBefore();
                    userWins.Range.Text      = "Количество побед: " + ActualProfiles[i].Wins + ';';
                    userWins.Range.Font.Name = "Georgia";
                    userName.Range.Font.Bold = 0;
                    userWins.Range.InsertParagraphAfter();

                    //Запись свойства: "Количество игр.".
                    Word.Paragraph userGames = mainDocument.Content.Paragraphs.Add();
                    userGames.Range.InsertParagraphBefore();
                    userGames.Range.Text      = "Количество игр: " + ActualProfiles[i].AllGames + ';';
                    userGames.Range.Font.Name = "Georgia";
                    userName.Range.Font.Bold  = 0;
                    userGames.Range.InsertParagraphAfter();

                    //Заголовок — "Количество побегов.".
                    Word.Paragraph userLeaves = mainDocument.Content.Paragraphs.Add();
                    userLeaves.Range.InsertParagraphBefore();
                    userLeaves.Range.Text      = "Количество побегов: " + ActualProfiles[i].Leaves + ';';
                    userLeaves.Range.Font.Name = "Georgia";
                    userName.Range.Font.Bold   = 0;
                    userLeaves.Range.InsertParagraphAfter();

                    //Заголовок — "Пол пользователя.".
                    Word.Paragraph userGender = mainDocument.Content.Paragraphs.Add();
                    userGender.Range.InsertParagraphBefore();
                    userGender.Range.Text      = "Пол пользователя: " + ActualProfiles[i].GetStringGender() + ';';
                    userGender.Range.Font.Name = "Georgia";
                    userName.Range.Font.Bold   = 0;
                    userGender.Range.InsertParagraphAfter();

                    //Заголовок — "Дата рождения.".
                    Word.Paragraph userBirthTime = mainDocument.Content.Paragraphs.Add();
                    userBirthTime.Range.InsertParagraphBefore();
                    userBirthTime.Range.Text      = "Дата рождения: " + ActualProfiles[i].BirthTime.ToString("dd.MM.yyyy!");
                    userBirthTime.Range.Font.Name = "Georgia";
                    userName.Range.Font.Bold      = 0;

                    //Проверка на длину файла. Создана для того, чтобы не создавать лишние страницы.
                    if ((i + 1) < ActualProfiles.Count)
                    {
                        appToDo.ActiveDocument.Sections.Add();
                    }

                    #endregion
                }

                //Защищаем документ от изменений:
                mainDocument.Protect(Word.WdProtectionType.wdAllowOnlyReading, true, "Checkers!");

                //Сохраняем созданный файл по указанному адресу.
                mainDocument.SaveAs(fullPath);

                //Описание завершения работы:
                if (!openFileAfterCreate)
                {
                    /*
                     * <——————————————————————————————————————————————————————————————————————————————————————————————————>
                     * |                                     !ОЧЕНЬ ВАЖНЫЙ МОМЕНТ!                                        |
                     * |——————————————————————————————————————————————————————————————————————————————————————————————————|
                     * | Здесь происходит завершение процесса "WORD.exe":                                                 |
                     * | 1. Сначала мы закрываем сам "Документ" (файл);                                                   |
                     * | 2. Затем, через метод Quit() мы завершаем работу процесса.                                       |
                     * |——————————————————————————————————————————————————————————————————————————————————————————————————|
                     * | Если работу процесса не завершить, он останется работать на фоне, даже после закрытия программы. |
                     * <——————————————————————————————————————————————————————————————————————————————————————————————————>
                     */

                    mainDocument.Close();
                    appToDo.Quit();
                }

                //Однако если пользователь решил развернуть программу, то завершать процесс принудительно не нужно.
                else
                {
                    appToDo.Visible = true;
                }
            });
        }