Ejemplo n.º 1
0
        private void ExportToWord(Application WdApp, Drawings_For_Output selectedDrawings)
        {
            Word.Range rg = WdDoc.Range(Start: 0);
            //在写入标题部分内容时所占的进度
            int intProgressForStartPart = 10;
            //一共要导出的元素个数
            int intElementsCount = selectedDrawings.Count();
            //每一个导出的元素所占的进度
            float sngUnit = (float)((double)(100 - intProgressForStartPart) / intElementsCount);
            //实时的进度值
            int intProgress = intProgressForStartPart;

            try
            {
                //写入标题项
                Export_OverView(ref rg);
            }
            catch (Exception)
            {
                MessageBox.Show("写入概述部分出错,但可以继续工作。", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }
            finally
            {
                APPLICATION_MAINFORM.MainForm.ShowProgressBar_Continue(intProgressForStartPart);
            }

            // ------------- 取消绘图窗口的禁用 ------------------
            //一定要在将绘图窗口中的图形导出到Word之前取消窗口的禁用,
            //否则的话,当调用这些窗口的Application属性时,就会出现报错:应用程序正在使用中。
            foreach (IntPtr H in WindowHandles)
            {
                APIWindows.EnableWindow(H, true);
            }

            //输出每一个选定的图形
            // ------------- 开挖平面图 ------------------
            try
            {
                ClsDrawing_PlanView D = selectedDrawings.PlanView;
                if (D != null)
                {
                    Page page = D.Page;
                    //
                    NewLine(rg, ParagraphStyle.Title_2);
                    rg.InsertAfter("开挖平面图:");
                    //
                    Export_VisioPlanview(page, ref rg);
                    //
                    intProgress += (int)sngUnit;
                    APPLICATION_MAINFORM.MainForm.ShowProgressBar_Continue(intProgress);
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(
                    "导出Visio开挖平面图出错,但可以继续工作。" + "\r\n" + ex.Message + "\r\n" + "报错位置:" + ex.TargetSite.Name, "Warning",
                    MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }
            // ------------- 剖面标高图 -------------------------
            try
            {
                ClsDrawing_ExcavationElevation D = selectedDrawings.SectionalView;
                if (D != null)
                {
                    //
                    NewLine(rg, ParagraphStyle.Title_2);
                    rg.InsertAfter("开挖剖面图:");
                    //
                    Export_ExcelChart(D.Chart, ref rg);
                    //
                    intProgress += (int)sngUnit;
                    APPLICATION_MAINFORM.MainForm.ShowProgressBar_Continue(intProgress);
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(
                    "导出Excel开挖剖面图出错,但可以继续工作。" + "\r\n" + ex.Message + "\r\n" + "报错位置:" + ex.TargetSite.Name, "Warning",
                    MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }
            // ---------------------- 监测曲线图 --------------------
            Chart cht = default(Chart);

            foreach (ClsDrawing_Mnt_Base Drawing in selectedDrawings.MntDrawings)
            {
                try
                {
                    switch (Drawing.Type)
                    {
                    // ------------- 测斜曲线图 ---------------------------------------------------
                    case DrawingType.Monitor_Incline_Dynamic:
                        ClsDrawing_Mnt_Incline D_1 = (ClsDrawing_Mnt_Incline)Drawing;
                        cht = D_1.Chart;
                        //
                        NewLine(rg, ParagraphStyle.Title_2);
                        rg.InsertAfter(D_1.Chart_App_Title);
                        //
                        Export_ExcelChart(cht, ref rg);
                        break;

                    // ------------- 动态监测曲线图 ---------------------------------------------
                    case DrawingType.Monitor_Dynamic:
                        ClsDrawing_Mnt_OtherDynamics D_2 = (ClsDrawing_Mnt_OtherDynamics)Drawing;
                        cht = D_2.Chart;

                        //
                        NewLine(rg, ParagraphStyle.Title_2);
                        rg.InsertAfter(D_2.Chart_App_Title);

                        Export_ExcelChart(cht, ref rg);
                        break;

                    // ------------- 静态监测曲线图 ---------------------------------------------
                    case DrawingType.Monitor_Static:
                        ClsDrawing_Mnt_Static D_3 = (ClsDrawing_Mnt_Static)Drawing;
                        cht = D_3.Chart;
                        //
                        NewLine(rg, ParagraphStyle.Title_2);
                        rg.InsertAfter(D_3.Chart_App_Title);

                        Export_ExcelChart(cht, ref rg);
                        break;

                    // ------------- 静态监测曲线图 ---------------------------------------------
                    case DrawingType.Monitor_Incline_MaxMinDepth:
                        ClsDrawing_Mnt_MaxMinDepth D = (ClsDrawing_Mnt_MaxMinDepth)Drawing;
                        cht = D.Chart;
                        //
                        NewLine(rg, ParagraphStyle.Title_2);
                        rg.InsertAfter(D.Chart_App_Title);

                        Export_ExcelChart(cht, ref rg);
                        break;

                    default:
                        break;
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show("导出监测曲线图\"" + Drawing.Chart_App_Title.ToString() + "\"出错,但可以继续工作。" +
                                    "\r\n" + ex.Message + "\r\n" + "报错位置:" +
                                    ex.TargetSite.Name, "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                }
                finally
                {
                    intProgress += (int)sngUnit;
                    APPLICATION_MAINFORM.MainForm.ShowProgressBar_Continue(intProgress);
                }
            }
        }
Ejemplo n.º 2
0
        /// <summary>
        /// 1、开始绘图
        /// </summary>
        /// <param name="CreateNewExcelApp">是否要新开一个Excel程序</param>
        /// <param name="DrawDynamicDrawing">是否是要绘制动态曲线图</param>
        /// <param name="SelectedTags">选择的测点</param>
        /// <param name="RowNum_SelectedTags">选择的测点在Excel数据工作表中所在的行号</param>
        /// <remarks></remarks>
        private void Generate(bool CreateNewExcelApp, bool DrawDynamicDrawing,
                              string[] SelectedTags, int[] RowNum_SelectedTags)
        {
            // ----------arrDateRange----------------------- 获取此工作表中的整个施工日期的数组(0-Based,数据类型为Date)
            DateTime[] arrDateRange        = GetDate();
            double[]   arrDateRange_Double = new double[arrDateRange.Count() - 1 + 1];
            for (int i = 0; i <= arrDateRange.Count() - 1; i++)
            {
                arrDateRange_Double[i] = arrDateRange[i].ToOADate();
            }
            //-----------AllSelectedMonitorData------------ 获取所有"选择的"监测点位的监测数据的大数组。其中不包含选择的测点编号信息与施工日期的信息
            //此数组的第一个元素的下标值为0
            object[,] AllSelectedMonitorData = null;
            AllSelectedMonitorData           = GetAllSelectedMonitorData(this.F_shtMonitorData, RowNum_SelectedTags);

            //----------------- 设置监测曲线的时间跨度
            Array.Sort(arrDateRange);
            DateSpan Date_Span = new DateSpan();

            Date_Span.StartedDate  = arrDateRange[0];
            Date_Span.FinishedDate = arrDateRange[arrDateRange.Length - 1];

            //----------------------------打开用来绘图的Excel程序,并将此界面加入主程序的监测曲线集合
            Cls_ExcelForMonitorDrawing clsExcelForMonitorDrawing = null;

            //   --------------- 获取用来绘图的Excel程序,并将此界面加入主程序的监测曲线集合 -------------------
            F_AppDrawing = GetApplication(NewExcelApp: CreateNewExcelApp, ExcelForMntDrawing: clsExcelForMonitorDrawing, MntDrawingExcelApps:
                                          GlobalApplication.Application.MntDrawing_ExcelApps);
            F_AppDrawing.ScreenUpdating = false;
            //打开工作簿以画图
            if (F_AppDrawing.Workbooks.Count == 0)
            {
                F_wkbkDrawing = F_AppDrawing.Workbooks.Add();
            }
            else
            {
                F_wkbkDrawing = F_AppDrawing.Workbooks[1]; //总是定义为第一个,因为就只开了一个
            }
            //新开一个工作表以画图
            F_shtDrawing = F_wkbkDrawing.Worksheets.Add();
            F_shtDrawing.Activate();


            //-------  根据是要绘制动态的曲线图还是静态的曲线图,来执行不同的操作  ---------------------
            if (DrawDynamicDrawing)
            {
                //-------------绘制动态的曲线图--------------
                F_dicDate_ChosenDatum = GetdicDate_Datum_ForDynamic(arrDateRange, AllSelectedMonitorData);
                //开始画图
                F_Chart = DrawDynamicChart(F_dicDate_ChosenDatum, SelectedTags, AllSelectedMonitorData);
                //设置图表的Tag属性
                MonitorInfo Tags = GetChartTags(F_shtMonitorData);
                //-------------------------------------------------------------------------
                ClsDrawing_Mnt_OtherDynamics DynamicSheet = new ClsDrawing_Mnt_OtherDynamics(F_shtMonitorData, F_Chart,
                                                                                             clsExcelForMonitorDrawing, Date_Span,
                                                                                             DrawingType.Monitor_Dynamic, true, F_textbox_Info, Tags, this.F_MonitorType,
                                                                                             F_dicDate_ChosenDatum, this.F_TheFirstseriesTag);

                //-------------------------------------------------------------------------
            }
            else
            {
                //-------绘制静态的曲线图--------
                //开始画图
                Dictionary <Excel.Series, object[]> dicSeriesData = new Dictionary <Excel.Series, object[]>();
                F_Chart = DrawStaticChart(SelectedTags, arrDateRange_Double, AllSelectedMonitorData, dicSeriesData);
                //设置图表的Tag属性
                MonitorInfo Tags = GetChartTags(F_shtMonitorData);
                if (this.F_WorkingStage != null)
                {
                    DrawWorkingStage(this.F_Chart, this.F_WorkingStage);
                }
                //-------------------------------------------------------------------------
                ClsDrawing_Mnt_Static staticSheet = new ClsDrawing_Mnt_Static(F_shtMonitorData, F_Chart,
                                                                              clsExcelForMonitorDrawing,
                                                                              DrawingType.Monitor_Static, false, F_textbox_Info, Tags, this.F_MonitorType,
                                                                              dicSeriesData, arrDateRange_Double);

                //-------------------------------------------------------------------------
            }

            //---------------------- 界面显示与美化
            ExcelAppBeauty(F_shtDrawing.Application, CreateNewExcelApp);
        }