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); } } }
/// <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); }