/*------------------------------------------------------------------------------------------- * 集中处理PPT事件、参数面板状态 * 创建:杨斌 2011-11-16 * 修改:杨斌 2012-03-13 * ----------------------------------------------------------------------------------------*/ using System; using System.Collections.Generic; using System.Linq; using System.Text; using PowerPoint = Microsoft.Office.Interop.PowerPoint; using System.Windows.Forms; using Microsoft.Office.Interop.PowerPoint; using System.Collections.Specialized; using GeneralLib; using System.Drawing; using System.IO; using System.Data; using System.Diagnostics; namespace SunVoteARSPPT { /// /// 调试用 /// /// public delegate void DebugEvent(string info); /// /// 插入幻灯片初始化信息 /// public class InsertSlideInfo { /// /// 幻灯片操作模式:0=已选定(类型下拉列表动作为修改),1=新建,2=选择改变 /// public static int SlideMode = 0; /// /// 插入的新幻灯片位置:0=非插入,-1=未选中插入,>0指定位置插入 /// public static int AddSlideIndex = 0; public static ResponseType ResponseType = ResponseType.Slide; public static int OptionCount = 0; public static int OptionLimit = 0; public static string[] OptionText = null; /// /// 插入反馈类型的标题 /// public static string TitleText = "Title";//杨斌 2012-05-29 } public class ChartPositon { public float Top = 100; public float Left = 200; public float Height = 400; public float Width = 400; } /// /// 数据标签类型 /// public enum DataLabelType { /// /// 计时器 /// TIMER, /// /// 应到人数 /// DUENO, /// /// 参与人数 /// PARTICIPATE, /// /// 反馈人数 /// VOTENO, /// /// 反馈人数-百分比 /// VOTENOP, /// /// 反馈人数-数值+百分比 /// VOTENOPV, /// /// 未按人数 /// VOTEMiss, /// /// 未按人数-百分比 /// VOTEMissP, /// /// 未按人数-数值+百分比 /// VOTEMissPV, /// /// 正确答案 /// ANSWER, /// /// 答对人数 /// CRRECTNO, /// /// 答对人数-百分比 /// CRRECTNOP, /// /// 答对人数-数值+百分比 /// CRRECTNOPV, /// /// 评分总分 /// SUMSCORE, /// /// 评分平均分 /// AVGSCORE, /// /// 平均值 杨斌 2014-04-14 /// VOTEMEAN, /// /// 中间值,杨斌 2016-03-29 /// VoteMedian, /// /// 评议平均分,杨斌 2019-06-27 /// GradeAvg, /// /// 投票范围,杨斌 2016-03-29 /// VoteRange, /// /// 表决通过结果:杨斌 2018-07-25 /// VotePassResult, /// /// 参与人数(不含权重) /// PARTICIPATE_Men, /// /// 反馈人数(不含权重) /// VOTENO_Men, /// /// 反馈人数-百分比(不含权重) /// VOTENOP_Men, /// /// 反馈人数-数值+百分比(不含权重) /// VOTENOPV_Men, /// /// 实到人数。杨斌 2018-12-20 /// SIGNED, /// /// 未到人数。杨斌 2019-01-14 /// NOTSIGNED, /// /// 已到未按人数。杨斌 2019-01-14 /// VotingMissSigned, } /// /// 编辑幻灯片类 /// public class PPTEdit { /// /// PowerPoint.Application对象 /// public PowerPoint.Application PPT { get; private set; } /// /// 当前选中编辑的幻灯片 /// public Slide SlideEdit { get; private set; } /// /// 当前选中编辑的形状 /// public Shape ShapeEdit { get; private set; } /// /// 参数面板 /// public APanel Panel { get; set; } /// /// 数据库是否需要保存 /// private bool IsNeedSave = true; public ManageChart SlideChart = null; /// /// 图标控件 /// private System.Windows.Forms.DataVisualization.Charting.Chart chart = new System.Windows.Forms.DataVisualization.Charting.Chart(); public TagSet TagSet = new TagSet(); //2012-06-08 选项个数是否改变 public bool CountChange = false; /// /// 2012-06-14 赵丽 是否修改为3D /// public bool Change3D = false; /// /// 是否更改类型 2012-06-14 赵丽 /// public bool ChangeType = false; public ResponseType ResponseTypeSlideEdit { get { if (SlideEdit == null) { return ResponseType.None; } else { TagSet.Tags = SlideEdit.Tags; return ResponseTypeName.GetEnum((TagSet.GetValue(TagKey.ResponseType).Value)); } } } public PPTEdit(PowerPoint.Application oApp) { this.PPT = oApp; SlideChart = new ManageChart(); SlideChart.MsChart = chart; PPT.AfterNewPresentation += new EApplication_AfterNewPresentationEventHandler(PPT_AfterNewPresentation); PPT.AfterPresentationOpen += new EApplication_AfterPresentationOpenEventHandler(PPT_AfterPresentationOpen); PPT.WindowActivate += new EApplication_WindowActivateEventHandler(PPT_WindowActivate); PPT.SlideSelectionChanged += new Microsoft.Office.Interop.PowerPoint.EApplication_SlideSelectionChangedEventHandler(PPT_SlideSelectionChanged); PPT.WindowSelectionChange += new Microsoft.Office.Interop.PowerPoint.EApplication_WindowSelectionChangeEventHandler(PPT_WindowSelectionChange); PPT.PresentationClose += new EApplication_PresentationCloseEventHandler(PPT_PresentationClose); PPT.PresentationSave += new EApplication_PresentationSaveEventHandler(PPT_PresentationSave); } void PPT_PresentationSave(Presentation Pres) { if (DicNPres.ContainsKey(Pres)) DicNPres.Remove(Pres); UpdatePresPathToDB(Pres);//杨斌 2014-08-15 } /// /// 数据库中保存文档路径,必须先打开数据库。 /// 杨斌 2014-08-15 /// /// public static void UpdatePresPathToDB(Presentation Pres) { try//杨斌 2014-08-15 { if (GlobalInfo.DBOperation.DBConnection == null) return; if (GlobalInfo.DBOperation.DBConnection.State != ConnectionState.Open) return; //杨斌 2015-10-08 string path = Globals.SunVoteARSAddIn.Application.ActivePresentation.FullName;//杨斌 2016-07-29 string sql = @"Update ST_Meet Set ST_Meet.M_Memo=""" + path + @""""; int n = GlobalInfo.DBOperation.ExecuteNonQuery(sql); } catch (System.Exception ex) { SystemLog.WriterLog(ex, false); } } /// /// 更新旧数据库名称。杨斌 2016-07-28 /// 可暂不实现,用户手动更改 /// /// private void UpdateOldDBName(Presentation Pres) { } /// /// 检查文档关联数据库是否冲突。若冲突则重新关联。 /// 杨斌 2014-08-15 /// /// /// private bool CheckPresDB(Presentation Pres) { bool res = false; try { if (File.Exists(Pres.FullName)) { TagSet presTagSet = new TagSet(); presTagSet.Tags = Pres.Tags; //07-11 string dbName = presTagSet.GetValue(TagKey.PPT_DBName).Value.ToString(); string dbPath = GlobalInfo.DB_PATH + dbName; string newDBName = ""; string newDBPath = ""; if (File.Exists(dbPath)) { string sql = "Select M_Memo From ST_Meet"; GlobalInfo.DBOperation.OpenDataSet(sql); if (GlobalInfo.DBOperation.DataSet.Tables.Count > 0) { System.Data.DataTable tb = GlobalInfo.DBOperation.DataSet.Tables[0]; if (tb.Rows.Count > 0) { System.Data.DataRow row = tb.Rows[0]; string pptPath = row["M_Memo"].ToString(); if (pptPath != Pres.FullName) { //杨斌 2016-07-29 //newDBName = System.Guid.NewGuid() + ".mdb"; newDBName = GlobalInfo.GetNewDBName(Pres); newDBPath = GlobalInfo.DB_PATH + newDBName; System.IO.File.Copy(dbPath, newDBPath, true); presTagSet.SetValue(TagKey.PPT_DBName, newDBName); } } } GlobalInfo.DBOperation.CloseDataSet(); if (newDBName.Length > 0) { GlobalInfo.DBName = newDBName; OpenPresDB(Pres); UpdatePresPathToDB(Pres); } } } } catch (System.Exception ex) { SystemLog.WriterLog(ex); } return res; } void PPT_PresentationClose(Presentation Pres) { TagSet presTagSet = new TagSet(); presTagSet.Tags = Pres.Tags; SendEmail(Pres); } public Dictionary DicNPres = new Dictionary(); void PPT_AfterNewPresentation(Presentation Pres) { if (!DicNPres.ContainsKey(Pres)) DicNPres.Add(Pres, ""); UpdatePresPathToDB(Pres);//杨斌 2015-09-01 } void PPT_AfterPresentationOpen(Presentation Pres) { //2012-08-01 日本需求 int personNum = 30; if (GlobalInfo.OEMLogo == OEMLogos.oem3eAnalyzer) personNum = 100; TagSet presTagSet = new TagSet(); presTagSet.Tags = Pres.Tags; //07-11 GlobalInfo.DBName = presTagSet.GetValue(TagKey.PPT_DBName).Value.ToString(); int iNum = presTagSet.GetValue(TagKey.Response_PersonNum).ToInt; string sRange = presTagSet.GetValue(TagKey.Response_KeyRange).Value; GlobalInfo.hardwareManage.PersonNum = (iNum == 0) ? personNum : iNum; GlobalInfo.hardwareManage.RangeOfKey = sRange; OpenPresDB(Pres); CheckPresDB(Pres);//杨斌 2014-08-15 AddEditPanel(Pres); RefreshParament(); } /// /// 刷新参数 /// private void RefreshParament() { //杨斌 2015-03-27 //Globals.Ribbons.rbSunVoteARS.VoteListEnabled = GlobalInfo.response.EnableList; Globals.Ribbons.rbSunVoteARS.VoteListEnabled = new RosterList().RosterEnabled; ; } /// /// 打开文档对应的数据库 /// 修改:杨斌 2012-03-22 改为public /// public void OpenPresDB(Presentation Pres) { TagSet presTagSet = new TagSet(); presTagSet.Tags = Pres.Tags; //-7-11 //GlobalInfo.DBName = presTagSet.GetValue(TagKey.PPT_DBName).Value.ToString(); if (!System.IO.File.Exists(GlobalInfo.DB_PATH + GlobalInfo.DBName)) { //用木村的软件创建的ppt数据库需要转换,否则报错。杨斌 2015-01-04 if (GlobalInfo.DBName.IndexOf(":") >= 0) GlobalInfo.DBName = ""; //杨斌 2016-07-29 GlobalInfo.CopySystemDB(Pres); presTagSet.SetValue(TagKey.PPT_DBName, GlobalInfo.DBName); try//OutLook打开报错,只读。杨斌 2014-12-05 { if (Pres.Path != null) Pres.Save(); } catch { } } //杨斌 2018-06-28 GlobalInfo.DBOperation.InitConnStrAccess(GlobalInfo.DB_PATH + GlobalInfo.DBName, ""); GlobalInfo.DBOperation.OpenConn(); GlobalInfo.UpdateDB();//杨斌 2015-01-05 } void PPT_WindowActivate(Presentation Pres, DocumentWindow Wn) { try { int personNum = 30; string keyRange = ""; if (GlobalInfo.OEMLogo == OEMLogos.oem3eAnalyzer) { personNum = 100; keyRange = "1-100"; } TagSet presTagSet = new TagSet(); presTagSet.Tags = Pres.Tags; AddEditPanel(Pres);//杨斌 2014-04-14 string nowDB = presTagSet.GetValue(TagKey.PPT_DBName).Value.ToString(); if (nowDB == "") { //2013-2-1 赵丽 修改数据库关联出错的问题 GlobalInfo.DBName = ""; GlobalInfo.CopySystemDB(Pres); presTagSet.SetValue(TagKey.PPT_DBName, GlobalInfo.DBName); try { if (Pres.Path != "") Pres.Save(); //2013-3-7 日本的OutLook中打开报错,打开时PPT不允许保存 } catch { } //初始化会议人数和键盘范围 //杨斌 2015-09-18 GlobalInfo.hardwareManage.PersonNum = presTagSet.LoadValue(TagKey.Response_PersonNum, FrmKeypadCountSet.PersonNum).ToInt; GlobalInfo.hardwareManage.RangeOfKey = presTagSet.LoadValue(TagKey.Response_KeyRange, FrmKeypadCountSet.RangeOfKey).Value; Globals.SunVoteARSAddIn.PPTEdit.SlideChart.SeriesColors = GlobalInfo.ChartColors; //AddEditPanel(Pres);//杨斌 2014-04-14 放到数据库代码前 RefreshParament(); } else { int iNum = presTagSet.GetValue(TagKey.Response_PersonNum).ToInt; string sRange = presTagSet.GetValue(TagKey.Response_KeyRange).Value; GlobalInfo.hardwareManage.PersonNum = (iNum == 0) ? 100 : iNum; GlobalInfo.hardwareManage.RangeOfKey = sRange; //当关联数据库更改时,重新更新 修改标志 赵丽 2012-03-08 if ((nowDB != GlobalInfo.DBName) && (nowDB != "")) { GlobalInfo.DBName = presTagSet.GetValue(TagKey.PPT_DBName).Value.ToString(); OpenPresDB(Pres); CheckPresDB(Pres);//杨斌 2014-08-15 RefreshParament(); } //AddEditPanel(Pres);//杨斌 2014-04-14 放到数据库代码前 } if (!File.Exists(Pres.FullName)) { string newDB = presTagSet.GetValue(TagKey.PPT_DBName).Value; if (DicNPres.ContainsKey(Pres)) DicNPres[Pres] = newDB; else DicNPres.Add(Pres, newDB); } RosterList.RosterLoad = new RosterList(); RosterList.RosterLoad.LoadRoster(); } catch (Exception ex) { SystemLog.WriterLog(ex); } } /// /// 幻灯片文档对应的参数面板集合 /// 创建:杨斌 2011-10-10 /// private OrderedDictionary DicPresPanel = new OrderedDictionary(); /// /// 添加设置面板 /// 创建:杨斌 2011-10-10 /// 修改:杨斌 2011-12-16 解决PowerPoint2010多面板问题 /// private void AddEditPanel(Presentation Pres) { try { TimerCount TimerCount = new TimerCount(); TimerCount.StartCount(); double ver = 0; //杨斌 2015-09-17 string sVer = ConvertOper.DoNumberString(PPT.Version); double.TryParse(sVer, out ver); if (ver >= 14) { if (DicPresPanel.Contains(Pres)) { SetActiveEditPanel(Pres); return; } else { Dictionary dicPres = new Dictionary(); for (int i = 1; i <= PPT.Presentations.Count; i++) { Presentation tempPres = PPT.Presentations[i]; dicPres.Add(tempPres, tempPres); } Presentation[] keys = new Presentation[DicPresPanel.Keys.Count]; DicPresPanel.Keys.CopyTo(keys, 0); for (int i = keys.Length - 1; i >= 0; i--) { Presentation pre = keys[i]; if (!dicPres.ContainsKey(pre)) { Microsoft.Office.Tools.CustomTaskPane tempParamPanel = (Microsoft.Office.Tools.CustomTaskPane)(DicPresPanel[pre]); Globals.SunVoteARSAddIn.CustomTaskPanes.Remove(tempParamPanel); DicPresPanel.Remove(pre); } } } } else { if (Globals.SunVoteARSAddIn.CustomTaskPanes.Count >= 1) { SetActiveEditPanel(Pres); return; } } APanel newPanel = new APanel(); //string title = GlobalInfo.LPT.ReadString("UcParamPanel", "UcParamPanel", "设置面板"); string title = GlobalInfo.GetAppTitle();//杨斌 2012-11-13 Microsoft.Office.Tools.CustomTaskPane ParamPanel = Globals.SunVoteARSAddIn.CustomTaskPanes.Add(newPanel, title); //newPanel.lblSpeed.Text = TimerCount.GetCountMS().ToString(); //杨斌 2011-09-16 if (Pres != null) { if (DicPresPanel.Contains(Pres)) DicPresPanel.Remove(Pres); DicPresPanel.Add(Pres, ParamPanel); SetActiveEditPanel(Pres); } //给面板添加事件 ParamPanel.VisibleChanged += new EventHandler(ParamPanel_VisibleChanged); ParamPanel.Visible = Globals.Ribbons.rbSunVoteARS.ShowPanelChecked; ParamPanel.Width = newPanel.EditPanelWidth;//杨斌 2011-09-13 ParamPanel.DockPositionRestrict = Microsoft.Office.Core.MsoCTPDockPositionRestrict.msoCTPDockPositionRestrictNoChange; } catch (Exception ex) { SystemLog.WriterLog(ex); } } /// /// 设置当前文档的编辑面板 /// 创建:杨斌 2011-10-10 /// private void SetActiveEditPanel(Presentation Pres) { double ver = 0; //杨斌 2015-09-17 string sVer = ConvertOper.DoNumberString(PPT.Version); double.TryParse(sVer, out ver); if (ver >= 14) { if (DicPresPanel.Contains(Pres)) { Microsoft.Office.Tools.CustomTaskPane ParamPanel = (Microsoft.Office.Tools.CustomTaskPane)DicPresPanel[Pres]; this.Panel = (APanel)ParamPanel.Control; } else { this.Panel = null; } } else { if (Globals.SunVoteARSAddIn.CustomTaskPanes.Count > 0) { Microsoft.Office.Tools.CustomTaskPane ParamPanel = Globals.SunVoteARSAddIn.CustomTaskPanes[0]; this.Panel = (APanel)ParamPanel.Control; } else { this.Panel = null; } } } /// /// 显示或隐藏设置面板 /// 创建:杨斌 2011-09-09 /// public void ShowEditPanel() { try//杨斌 2017-03-06 { bool isShow = Globals.Ribbons.rbSunVoteARS.ShowPanelChecked; for (int i = 0; i < Globals.SunVoteARSAddIn.CustomTaskPanes.Count; i++) { try { if (Globals.SunVoteARSAddIn.CustomTaskPanes[i].Visible != isShow) Globals.SunVoteARSAddIn.CustomTaskPanes[i].Visible = isShow; } catch { //不处理异常 } } } catch { } } void ParamPanel_VisibleChanged(object sender, EventArgs e) { Globals.Ribbons.rbSunVoteARS.ShowPanelChecked = ((Microsoft.Office.Tools.CustomTaskPane)sender).Visible; Globals.Ribbons.rbSunVoteARS.ShowPanelClick(); } /// /// 编辑准备好 /// 杨斌 2014-02-19 /// public bool EditSelOK = false; private void TryReloadChart(Slide sld) { if (sld == null) return; if (!Globals.SunVoteARSAddIn.PPTEdit.Panel.ucChartPara.Visible) return; ResponseType responseType = PPTOper.GetSlideType(sld); bool showRank = false; switch (responseType) { case ResponseType.ScoreRankChart: case ResponseType.ScoreRankGroupChart: case ResponseType.ScoreRankGroupMVP: showRank = true; break; } bool find = false; foreach (Shape s in sld.Shapes) { if (s.Name == "pic") { find = true; break; } } //杨斌 2018-06-25 //if (!find) if (find && showRank)//杨斌 2019-09-03 Globals.SunVoteARSAddIn.PPTEdit.InitChart(true, Globals.SunVoteARSAddIn.PPTEdit.SlideEdit, true, beKeepPos: true); } internal void TryReloadChartAll() { foreach (Slide sld in Globals.SunVoteARSAddIn.PPTEdit.PPT.ActivePresentation.Slides) { TryReloadChart(sld); } } //修改:杨斌 2012-03-13 void PPT_SlideSelectionChanged(Microsoft.Office.Interop.PowerPoint.SlideRange SldRange) { try { //设置当前编辑的幻灯片对象 if (SldRange.Count > 0) { this.SlideEdit = SldRange[1]; } else { this.SlideEdit = null; } ////设置面板屏蔽状态 //Globals.Ribbons.rbSunVoteARS.EnabledEditTools(SlideEdit != null); //插入幻灯片初始化 if ((InsertSlideInfo.AddSlideIndex != 0) && (SlideEdit != null))//插入的幻灯片 { InsertSlideInfo.AddSlideIndex = 0; InitSlideEdit(SlideEdit); } //当前幻灯片,刷新图表,标签 ResponseType responseType = Globals.SunVoteARSAddIn.PPTEdit.ResponseTypeSlideEdit; //数据分析幻灯片判断。杨斌 2013-04-19 Globals.Ribbons.rbSunVoteARS.btnAnalyzeSlide.Enabled = ((responseType == ResponseType.Slide) || (responseType == ResponseType.None)); //设置面板屏蔽状态 Globals.Ribbons.rbSunVoteARS.EnabledEditTools(SlideEdit != null); EnabledInsertObjectMenus();//杨斌 2012-03-13 if (!Globals.SunVoteARSAddIn.PPTShow.IsShowSlide && SlideEdit != null) { GlobalInfo.response.CurrentSlide = SlideEdit; GlobalInfo.response.TagSet.Tags = SlideEdit.Tags; GlobalInfo.response.LoadTopicResult(SlideEdit.SlideID.ToString(), responseType); } //幻灯片已经有反馈数据 bool enabled = true; if (SlideEdit != null) enabled = GlobalInfo.response.ResponseDataList.Count <= 0; else enabled = false; FrmVoteBar.PanelEnabled = enabled; //更新幻灯片面板和对象显示 LockOptionTextChange = true;//锁定选项文本只读 杨斌 2012-03-09 Panel.ShowData(SlideEdit);//刷新面板参数 LockOptionTextChange = false;//杨斌 2012-03-09 if (InsertSlideInfo.SlideMode == 0) InsertSlideInfo.SlideMode = 2; InsertSlideInfo.SlideMode = 0;//处理完恢复为已选定 TryReloadChart(SlideEdit);//杨斌 2016-06-30 } catch (Exception ex) { SystemLog.WriterLog(ex); } this.Panel.SetPannelControlLocation();//在滚动条设置前,重新布局,杨斌 2012-02-24 //this.Panel.AutoScroll = true;//杨斌 2012-06-05 屏蔽 EditSelOK = true; } /// /// 是否锁定选项文本,防止因触发选项个数控件改变的事件再次该乱选项文本,如用户正在编辑时,杨斌 2012-03-09 /// public bool LockOptionTextChange = false; private Microsoft.Office.Interop.PowerPoint.Selection SelOld = null; private string SelIDOld = ""; public string GetSelectionID(Microsoft.Office.Interop.PowerPoint.Selection Sel) { string res = ""; switch (Sel.Type) { case PpSelectionType.ppSelectionShapes: case PpSelectionType.ppSelectionText: if (Sel.ShapeRange.Count > 0) { Slide sldSel = (Slide)(Sel.ShapeRange[1].Parent); Presentation preSel = (Presentation)(sldSel.Parent); res = preSel.FullName + "_SlideIndex=" + sldSel.SlideIndex + "_ShapeId=" + Sel.ShapeRange.Id + "_ShapeName=" + Sel.ShapeRange.Name; } break; default: break; } return res; } //杨斌 2012-03-14 void PPT_WindowSelectionChange(Microsoft.Office.Interop.PowerPoint.Selection Sel) { try { //Shape改变处理前,应先做判断选中的类型,杨斌 2012-03-02 bool selChange = false; string SelID = GetSelectionID(Sel); if (SelOld != null) { switch (Sel.Type)//杨斌 2013-09-17 { case PpSelectionType.ppSelectionShapes: if (SelID != SelIDOld) selChange = true; break; case PpSelectionType.ppSelectionText: if (SelID != SelIDOld) { selChange = true; } else { Shape sha = Sel.ShapeRange[1]; string txt = sha.TextFrame.TextRange.Text; } break; default: selChange = true; SelOld = null; break; } if (selChange) { //处理形状选择改变 //Globals.Ribbons.rbSunVoteARS.grpPPTEdit.Label = new Random().Next() + SelID; selChange = false; } } switch (Sel.Type) { case PpSelectionType.ppSelectionShapes: SelIDOld = GetSelectionID(Sel); SelOld = Sel; break; case PpSelectionType.ppSelectionText: SelIDOld = GetSelectionID(Sel); SelOld = Sel; if (Sel.ShapeRange.Count > 0) { PPTOper.SaveShapeTimer(Sel.ShapeRange[1]); } break; default: break; } EnabledInsertObjectMenus();//杨斌 2012-03-13 if (Sel.Type == PpSelectionType.ppSelectionNone) return;//杨斌 2012-03-23 if (Sel.Type == PpSelectionType.ppSelectionSlides) return; //Shape改变处理 if (Sel.ShapeRange.Count > 0) { this.ShapeEdit = Sel.ShapeRange[1]; if (SlideEdit.Shapes.HasTitle == Microsoft.Office.Core.MsoTriState.msoTrue) { if (SlideEdit.Shapes.Title.Id == ShapeEdit.Id) { if ((Sel.Type == PpSelectionType.ppSelectionText) && (ShapeEdit.HasTextFrame == Microsoft.Office.Core.MsoTriState.msoTrue)) { TagSet tagSet = new TagSet(ShapeEdit.Tags); string textShow = ShapeEdit.TextFrame.TextRange.Text; string textAuto = tagSet.GetValue(TagKey.SlideTitle_AutoSetText).Value; if (textShow != textAuto)//用户更改了 tagSet.SetValue(TagKey.SlideTitle_AutoSet, 0); } } else { TagSet tagSet = new TagSet(SlideEdit.Tags); bool bSetOptoinCount = true; TagKey tagKey = TagKey.UnknownKey; switch (ResponseTypeSlideEdit) { case ResponseType.Group: tagKey = TagKey.Group_OptionCount; break; case ResponseType.Choice: tagKey = TagKey.Choice_OptionCount; break; case ResponseType.Order: tagKey = TagKey.Order_OptionCount; break; case ResponseType.Vote://杨斌 2012-03-14 tagKey = TagKey.Vote_OptionCount; break; case ResponseType.Grade://杨斌 2012-03-14 tagKey = TagKey.Grade_OptionCount; break; default: bSetOptoinCount = false; break; } if (bSetOptoinCount) { if (tagSet.GetValue(TagKey.Slide_OptionText_ShapeID).ToInt == ShapeEdit.Id) { string[] optionText = PPTOper.GetShapeOptionText(ShapeEdit); int optionCount = optionText.Length; //杨斌 2018-10-16 if ((ResponseTypeSlideEdit == ResponseType.Choice) || (ResponseTypeSlideEdit == ResponseType.Group))//超过10个选项添加分组的类型。杨斌 2018-05-17 { if (optionCount > GlobalInfo.MaxOptionCountAdv) optionCount = GlobalInfo.MaxOptionCountAdv; } else { if (optionCount > GlobalInfo.MaxOptionCount) optionCount = GlobalInfo.MaxOptionCount; } //杨斌 2012-03-05 判断选项文本选项个数是否改变,改变才更新面板参数 int optionCountOld = tagSet.GetValue(tagKey).ToInt; if (optionCount != optionCountOld) { TagSet.SetValue(TagKey.Slide_OptionText, PPTOper.FormatShapeOptionText(optionText)); //optionCount = ShapeEdit.TextFrame.TextRange.Paragraphs(-1, -1).Count; if (optionCount > 0) TagSet.SetValue(tagKey, optionCount); LockOptionTextChange = true; IPanelChange panel = (IPanelChange)(Panel.PanelShow); panel.ChangeData(tagKey, optionCount); LockOptionTextChange = false; } } } } } switch (ResponseTypeSlideEdit)//排行类型不将选项置顶,客户需要做动画遮挡排名。杨斌 2019-01-02 { case ResponseType.ScoreRankChart: case ResponseType.ScoreRankGroupChart: case ResponseType.ScoreRankGroupMVP: break; default: CheckOptionChartZOrder(SlideEdit, ShapeEdit);//杨斌 2014-12-08 break; } } else { this.ShapeEdit = null; } } catch (Exception ex) { SystemLog.WriterLog(ex, false); } } /// /// 插入幻灯片 /// /// /// public void AddSlide(Slide slideCurrent) { if (PPT.ActivePresentation == null) return; Slide sldAdd = null; InsertSlideInfo.AddSlideIndex = 0; //插入一个幻灯片 if (slideCurrent == null) { if (PPT.ActivePresentation.Slides.Count > 0) InsertSlideInfo.AddSlideIndex = -1; else InsertSlideInfo.AddSlideIndex = 1; } else { InsertSlideInfo.AddSlideIndex = slideCurrent.SlideIndex + 1; } InsertSlideInfo.SlideMode = 1; if (InsertSlideInfo.AddSlideIndex > 0) { sldAdd = PPT.ActivePresentation.Slides.Add(InsertSlideInfo.AddSlideIndex, PpSlideLayout.ppLayoutTitleOnly); //是否存在ID一致的幻灯片 string topicID = sldAdd.SlideID.ToString(); //已存在该ID string sSql = "select * from ST_Response where T_ID='" + topicID + "'"; if (GlobalInfo.DBOperation.RecordIsExist(sSql)) { ResponseDB.UpdateTopicID(topicID); } //图标操作 sldAdd.Select();//选中插入的幻灯片 } else if (InsertSlideInfo.AddSlideIndex == -1) { SendKeys.Send("{ENTER}"); } } /// /// 加载图表记忆参数 /// 创建:杨斌 2012-06-12 /// 修改:杨斌 2012-06-28 /// public void InitChartLoad(Slide slide) { try { INIControl iniCtrl = INIControl.GetInstances(GlobalInfo.SYSTEM_CONFIG_PATH); if (iniCtrl == null) return; TagSet TagSet = new TagSet(slide.Tags); ResponseType type = ResponseTypeName.GetEnum((TagSet.GetValue(TagKey.ResponseType).Value)); string section = "ChartSet"; string chartType = ""; if (type == ResponseType.SignIn) chartType = "ctPie"; else if (type == ResponseType.CompVote)//杨斌 2017-06-13 chartType = "ctBarBox"; else chartType = iniCtrl.ReadString(section, "ChartType", "ctBar"); string chartDataFormat = iniCtrl.ReadString(section, "ChartDataFormat", "ltNumberValue"); string chartShow = iniCtrl.ReadString(section, "ChartShow", "csStop"); //2014-3-17 增加图表标签小数位数设置 int NumerDec = iniCtrl.ReadInt(section, "ChartNumberDec", 0); int PercentDec = iniCtrl.ReadInt(section, "ChartPercentDec", 1); //杨斌 2013-03-08 string dataPersent = ""; if (GlobalInfo.OEMLogo == OEMLogos.oem3eAnalyzer) dataPersent = "crResponse"; else dataPersent = iniCtrl.ReadString(section, "ChartRate", "crParticipant"); bool show3D = iniCtrl.ReadBool(section, "ChartIs3D", false); TagSet.SetValue(TagKey.ChartPara_Type, chartType); TagSet.SetValue(TagKey.ChartPara_DataFormat, chartDataFormat); TagSet.SetValue(TagKey.ChartPara_ShowTime, chartShow); //2014-3-17 增加图表标签小数位数设置 TagSet.SetValue(TagKey.ChartPara_NumberDec, NumerDec); TagSet.SetValue(TagKey.ChartPara_PercentDec, PercentDec); switch (type) { case ResponseType.Number://因为数值和排序没有图表,无法设置比率,因此暂只按参与人数 case ResponseType.Order: case ResponseType.Text://杨斌 2015-01-16 TagSet.SetValue(TagKey.ChartPara_DataPercentBase, "crParticipant"); break; default: TagSet.SetValue(TagKey.ChartPara_DataPercentBase, dataPersent); break; } TagSet.SetValue(TagKey.ChartPara_Show3D, show3D ? 1 : 0); //图表颜色字体等不继承上次的。杨斌 2012-10-08 //for (int i = 0; i < 10; i++) //{ // string rgb = iniCtrl.ReadString(section, "ChartColor" + (i + 1).ToString(), ""); // string[] aryRgb = rgb.Split(new char[] { ',' }); // if (aryRgb.Length >= 3) // { // Color chartColor = Color.FromArgb(ConvertOper.Convert(aryRgb[0]).ToInt, // ConvertOper.Convert(aryRgb[1]).ToInt, // ConvertOper.Convert(aryRgb[2]).ToInt); // TagSet.SetValue(TagKey.ChartColor_, i, chartColor.ToArgb()); // } // else // { // TagSet.SetValue(TagKey.ChartColor_, i, SlideChart.SeriesColors[i].ToArgb()); // } //} } catch (Exception ex) { SystemLog.WriterLog(ex); } } /// /// 保存图表记忆参数 /// 创建:杨斌 2012-06-12 /// 修改:杨斌 2012-06-28 /// private void InitChartSave(Slide slide) { try { INIControl iniCtrl = INIControl.GetInstances(GlobalInfo.SYSTEM_CONFIG_PATH); if (iniCtrl == null) return; TagSet TagSet = new TagSet(slide.Tags); ResponseType type = ResponseTypeName.GetEnum((TagSet.GetValue(TagKey.ResponseType).Value)); //修改标志 赵丽 2012-08-02 签到默认饼图 string chartType = ""; if (type == ResponseType.SignIn) chartType = "ctPie"; else chartType = TagSet.GetValue(TagKey.ChartPara_Type).Value; string chartDataFormat = TagSet.GetValue(TagKey.ChartPara_DataFormat).Value; string chartShow = TagSet.GetValue(TagKey.ChartPara_ShowTime).Value; string dataPersent = TagSet.GetValue(TagKey.ChartPara_DataPercentBase).Value; bool show3D = TagSet.GetValue(TagKey.ChartPara_Show3D).ToBoolean; string section = "ChartSet"; if (type != ResponseType.SignIn) iniCtrl.WriteValue(section, "ChartType", chartType); iniCtrl.WriteValue(section, "ChartDataFormat", chartDataFormat); iniCtrl.WriteValue(section, "ChartShow", chartShow); switch (type) { case ResponseType.Number://因为数值和排序没有图表,无法设置比率,因此暂只按参与人数 case ResponseType.Order: break; default: iniCtrl.WriteValue(section, "ChartRate", dataPersent); break; } iniCtrl.WriteValue(section, "ChartIs3D", show3D); for (int i = 0; i < 10; i++) { Color chartColor = FrmChartSet.GetTagSetColor(TagSet, i); iniCtrl.WriteValue(section, "ChartColor" + (i + 1).ToString(), chartColor.R + "," + chartColor.G + "," + chartColor.B); } } catch (Exception ex) { SystemLog.WriterLog(ex); } } /// /// 初始化图表参数/刷新图表 /// 创建或刷新 /// 图片所在幻灯片 /// 创建 赵丽 /// 修改:杨斌 2016-01-07 /// public void InitChart(bool IsInitChart, Slide slide, bool isReload = false, bool beAddObject = false/*杨斌 2016-11-12*/, bool autoFit = false, bool beKeepPos = false) { if (FrmSystemSet.IsChangingLanguage)//杨斌 2018-07-10 return; //return; Stopwatch t = Stopwatch.StartNew(); string ss = ""; try { if (slide == null) { return; } TagSet.Tags = slide.Tags; //杨斌 2015-04-22 ResponseType responseType = EnumName.GetEnum(TagSet.LoadValue(TagKey.ResponseType, ResponseType.Slide).Value); //杨斌 2018-01-26 Slide sldData = slide; TagSet tagSetData = new TagSet(sldData.Tags); //ResponseType responseTypeData = responseType; //杨斌 2018-01-26 try { if (((GlobalInfo.OEMLogo == OEMLogos.oemPowerVote) || (GlobalInfo.OEMLogo == OEMLogos.oemAngage) //杨斌 2018-03-22 || (GlobalInfo.OEMLogo == OEMLogos.SunVote))//杨斌 2018-03-27 && ((responseType == ResponseType.None) || (responseType == ResponseType.Slide))) { int relateSlideID = TagSet.GetValue(TagKey.ChartRelationSlideID).ToInt; if (relateSlideID > 0) { Presentation pres = slide.Parent as Presentation; Slide sldFind = pres.Slides.FindBySlideID(relateSlideID); if (sldFind != null) { sldData = sldFind; tagSetData = new TagSet(sldData.Tags); responseType = PPTOper.GetSlideType(sldData); GlobalInfo.response.LoadTopicResult(relateSlideID + "", responseType); } } } } catch { } //图表颜色字体等不继承上次的。杨斌 2012-10-08 if (InsertSlideInfo.SlideMode == 1) { SlideChart = new ManageChart(); SlideChart.MsChart = chart; } //杨斌 2015-04-22 bool beSetCorrectWrong = false; string answer = ""; if (GlobalInfo.sysConfig.UseItemColorCW) { answer = GetSlideCorrectAnswer(sldData, responseType); if (Globals.SunVoteARSAddIn.PPTShow.FrmVoteBar != null) { if (Globals.SunVoteARSAddIn.PPTShow.FrmVoteBar.tsbCorrectAnswer.Checked) beSetCorrectWrong = (answer.Length > 0); } } if (beSetCorrectWrong) { string answer2 = answer + ","; for (int i = 0; i < 10; i++) { string sNo = (i + 1) + ","; if (answer2.IndexOf(sNo) >= 0) SlideChart.SeriesColorsInit[i] = GlobalInfo.sysConfig.ItemColorCW[0]; else SlideChart.SeriesColorsInit[i] = GlobalInfo.sysConfig.ItemColorCW[1]; } } else { for (int i = 0; i < 10; i++) { //杨斌 2012-06-29 SlideChart.SeriesColorsInit[i] = FrmChartSet.GetTagSetColor(TagSet, i); } } try { SlideChart.UseSystemFont = false;//杨斌 2015-05-29 System.Drawing.Font fontObj = SlideChart.ItemLabelFont; string fontName = TagSet.LoadValue(TagKey.ChartPara_ItemLabelFontName, fontObj.Name).Value; float fontSize = TagSet.LoadValue(TagKey.ChartPara_ItemLabelFontSize, fontObj.Size).ToFloat; bool fontBold = TagSet.LoadValue(TagKey.ChartPara_ItemLabelFontBold, fontObj.Bold).ToBoolean; bool fontItalic = TagSet.LoadValue(TagKey.ChartPara_ItemLabelFontItalic, fontObj.Italic).ToBoolean; FontStyle fontStyle = FontStyle.Regular; if (fontBold) fontStyle = fontStyle | FontStyle.Bold; if (fontItalic) fontStyle = fontStyle | FontStyle.Italic; SlideChart.ItemLabelFont = new System.Drawing.Font(fontName, fontSize, fontStyle); SlideChart.ItemLabelColor = Color.FromArgb(TagSet.LoadValue(TagKey.ChartPara_ItemLabelFontColor, SlideChart.ItemLabelColor.ToArgb()).ToInt); fontObj = SlideChart.DataLabelFont; fontName = TagSet.LoadValue(TagKey.ChartPara_DataLabelFontName, fontObj.Name).Value; fontSize = TagSet.LoadValue(TagKey.ChartPara_DataLabelFontSize, fontObj.Size).ToFloat; fontBold = TagSet.LoadValue(TagKey.ChartPara_DataLabelFontBold, fontObj.Bold).ToBoolean; fontItalic = TagSet.LoadValue(TagKey.ChartPara_DataLabelFontItalic, fontObj.Italic).ToBoolean; fontStyle = FontStyle.Regular; if (fontBold) fontStyle = fontStyle | FontStyle.Bold; if (fontItalic) fontStyle = fontStyle | FontStyle.Italic; SlideChart.DataLabelFont = new System.Drawing.Font(fontName, fontSize, fontStyle); SlideChart.DataLabelColor = Color.FromArgb(TagSet.LoadValue(TagKey.ChartPara_DataLabelFontColor, SlideChart.DataLabelColor.ToArgb()).ToInt); } catch (Exception ex) { SystemLog.WriterLog(ex); } //不是新建幻灯片,且为浏览状态 if ((InsertSlideInfo.SlideMode != 1) && (TagSet.ReadOnlyPPT)) { return; } if (responseType == ResponseType.Slide) { return; } //if (responseType == ResponseType.None) { return; }//杨斌 2018-01-26 //获取反馈数据 string chartType = TagSet.GetValue(TagKey.ChartPara_Type).Value; string chartDataFormat = TagSet.GetValue(TagKey.ChartPara_DataFormat).Value; bool show3D = TagSet.GetValue(TagKey.ChartPara_Show3D).ToBoolean; int showItemText = TagSet.GetValue(TagKey.ChartShowItemText).ToInt;//杨斌 2015-01-08 //杨斌 2019-04-04 SlideChart.TextChartTypeByLine = (TagSet.GetValue(TagKey.ChartPara_TextChartTypeByLine).ToInt == 1); SlideChart.ChartTypeTextSpaceOrLine = TagSet.GetValue(TagKey.ChartPara_TextChartSpaceOrLine).ToInt; string dataPersent = TagSet.GetValue(TagKey.ChartPara_DataPercentBase).Value; int optionCount = 0; string[] xValues = null; string[] xValues2 = null;//杨斌 2017-03-21 double[] yValues = null; double[] yValues2 = null; double[] yValuesNew = null;//杨斌 2019-11-26 List lstYValue = new List();//杨斌 2017-03-21 //分组对比图表实现 string compGroupSldID = ""; string compGroupGroupID = ""; bool compGroupInvert = false; Shape shape = PPTOper.GetOptionTextLinkShape(sldData); //客户定制需求 2012-04-16 //if (GlobalInfo.response.BusinessStatus == ResponseStatus.bsStart) // SlideChart.MaxValue = GlobalInfo.response.GetParticipateNum(); //标签显示类型(选择) SlideChart.LabelType = EnumName.GetEnum(chartDataFormat); //2014-03-17 增加数据标签的小数位数 SlideChart.PercentDec = Convert.ToInt32(TagSet.GetValue(TagKey.ChartPara_PercentDec).Value); SlideChart.NumberDec = Convert.ToInt32(TagSet.GetValue(TagKey.ChartPara_NumberDec).Value); //图表类型(必须) SlideChart.ChartType = EnumName.GetEnum(chartType); //杨斌 2014-06-06 if (chartType == "") { if (responseType == ResponseType.SignIn) { if (GlobalInfo.OEMLogo == OEMLogos.SunVote) chartType = "ctText";//签到默认为文本。杨斌 2015-01-15 } else if (responseType == ResponseType.CompVote)//杨斌 2017-06-13 { chartType = "ctBarBox"; } else//杨斌 2018-03-26 { INIControl iniCtrl = INIControl.GetInstances(GlobalInfo.SYSTEM_CONFIG_PATH); if (iniCtrl != null) { chartType = iniCtrl.ReadString("ChartSet", "ChartType", "ctBar"); } else { chartType = "ctBarBox"; } } SlideChart.ChartType = EnumName.GetEnum(chartType);//杨斌 2018-03-26 TagSet.SetValue(TagKey.ChartPara_Type, SlideChart.ChartType.ToString()); } SlideChart.AxisXEnabled = true; //杨斌 2014-04-23 if (((SlideChart.ChartType == ChartTypes.ctBar) || (SlideChart.ChartType == ChartTypes.ctBarBox)) && (responseType != ResponseType.SignIn))// 修改标志 2012-05-2 赵丽 签到水平标签显示X轴 { if ((!isReload) && (Globals.SunVoteARSAddIn.PPTShow.SlideShow != null) && (Globals.SunVoteARSAddIn.PPTShow.IsChartShowWindow(Globals.SunVoteARSAddIn.PPTShow.SlideShow))) SlideChart.AxisXEnabled = true; else SlideChart.AxisXEnabled = (showItemText == 1);//杨斌 2015-01-08 } else { SlideChart.AxisXEnabled = true; } //杨斌 2012-11-08 switch (GlobalInfo.OEMLogo) { case OEMLogos.oem3eAnalyzer: if (responseType == ResponseType.Vote) SlideChart.AxisXEnabled = true; break; default: break; } List lstSlideCompId = new List();//杨斌 2014-12-10 SlideChart.Is3D = show3D; SlideChart.LegendEnable = false; if (SlideChart.ChartType == ChartTypes.ctPie) { SlideChart.LegendEnable = true;//饼图显示图例 SlideChart.LegentDocking = LegentDockings.ldRight; } switch (responseType) { case ResponseType.SignIn: optionCount = 2; break; case ResponseType.Group: optionCount = tagSetData.GetValue(TagKey.Group_OptionCount).ToInt; break; case ResponseType.Choice: optionCount = tagSetData.GetValue(TagKey.Choice_OptionCount).ToInt; break; case ResponseType.Judge://杨斌 2012-03-14 optionCount = 2; break; case ResponseType.Vote://杨斌 2012-03-14 optionCount = tagSetData.GetValue(TagKey.Vote_OptionCount).ToInt; break; case ResponseType.Grade://杨斌 2012-03-14 optionCount = tagSetData.GetValue(TagKey.Grade_OptionCount).ToInt; break; case ResponseType.Order://杨斌 2014-04-21 int scoreMode = tagSetData.GetValue(TagKey.Order_ScoreMode).ToInt; if (scoreMode == 1) optionCount = tagSetData.GetValue(TagKey.Order_OptionCount).ToInt; else { foreach (Shape s in slide.Shapes) { if (s.Name == "pic") s.Delete(); } return; } break; case ResponseType.ScoreRankChart: case ResponseType.ScoreRankGroupChart: optionCount = tagSetData.GetValue(TagKey.RankChartRankCount).ToInt; break; case ResponseType.SlideCompChart://杨斌 2014-12-09 //PanelSlideCompChart pnlComp = (PanelSlideCompChart)(Panel.PanelShow); //if (pnlComp.cboSlide1.SelectedIndex >= 0) // lstComp.Add(pnlComp.cboSlide1.Text); //if (pnlComp.cboSlide2.SelectedIndex >= 0) //{ // lstComp.Add(pnlComp.cboSlide2.Text); // if (lstComp[1] == lstComp[0]) // lstComp[1] += " "; //} lstSlideCompId = PanelSlideCompChart.GetSlideCompIds(slide); List lstComp = new List(); foreach (int nId in lstSlideCompId) { Slide sldTmp = null; try { sldTmp = (this.SlideEdit.Parent as Presentation).Slides.FindBySlideID(nId); lstComp.Add(sldTmp.SlideIndex + ". " + PPTOper.GetSlideTitle(sldTmp)); } catch { } } if (lstComp.Count == 2) { if (lstComp[1] == lstComp[0]) lstComp[1] += " "; } SlideChart.LegentText = lstComp.ToArray(); SlideChart.LegendEnable = true;//饼图显示图例 SlideChart.LegentDocking = LegentDockings.ldTop; break; case ResponseType.SlideCompGroup://杨斌 2017-01-19 //分组对比图表实现 compGroupSldID = TagSet.GetValue(TagKey.SlideCompGroupSlideID).Value; compGroupGroupID = TagSet.GetValue(TagKey.SlideCompGroupGroupID).Value; if ((compGroupGroupID.Length > 0) && (compGroupGroupID.Length > 0)) { compGroupInvert = TagSet.GetValue(TagKey.SlideCompInvert).ToInt == 0; string[] aryTopicID = { compGroupSldID, compGroupGroupID }; if (!string.IsNullOrEmpty(compGroupSldID) && !string.IsNullOrEmpty(compGroupGroupID))//杨斌 2017-06-13 FrmAnalyzeSlideGroup.GetChartGroupCompData(aryTopicID, compGroupInvert, out xValues, out xValues2, out lstYValue); bool initValue = false; if (xValues == null) { xValues = new string[] { "1", "2", "3", "4" }; try { Presentation pres = SlideEdit.Parent as Presentation; Slide sld = pres.Slides.FindBySlideID(ConvertOper.Convert(compGroupGroupID.Replace("'", "")).ToInt); xValues = PPTOper.GetOptionTextBySlide(sld); initValue = true; } catch { } } if (xValues2 == null) { xValues2 = new string[] { "A", "B", "C", "D" }; try { Presentation pres = SlideEdit.Parent as Presentation; Slide sld = pres.Slides.FindBySlideID(ConvertOper.Convert(compGroupSldID.Replace("'", "")).ToInt); xValues2 = PPTOper.GetOptionTextBySlide(sld); initValue = true; } catch { } } if (initValue) { if (lstYValue == null) lstYValue = new List(); if (lstYValue.Count < 1) { for (int i = 0; i < xValues.Length; i++) lstYValue.Add(null); } for (int i = 0; i < lstYValue.Count; i++) { lstYValue[i] = new double[xValues2.Length]; } } } break; case ResponseType.CompVote://杨斌 2017-06-13 //杨斌 2018-10-30 string idYes = "0"; string idNo = "0"; string idAbs = "0"; PPTOper.GetCompVoteSlideIDs(TagSet, out idYes, out idNo, out idAbs);//杨斌 2018-10-30 List lstVoteRes = PPTOper.GetCompVoteRes(sldData); optionCount = 3; //杨斌 2018-08-01 //xValues = new string[] { "Pour", "Contre", "Abstention" };// PPTOper.GetOptionText(ResponseType.Vote, 3); string sYes = GlobalInfo.SysLanguage.LPT.ReadString("PanelSlideCompVote", "VoteYes", "For"); string sNo = GlobalInfo.SysLanguage.LPT.ReadString("PanelSlideCompVote", "VoteNo", "Against"); string sAbs = GlobalInfo.SysLanguage.LPT.ReadString("PanelSlideCompVote", "VoteAbs", "Abstain"); if (idAbs != "0")//杨斌 2018-10-30 xValues = new string[] { sYes, sNo, sAbs }; else xValues = new string[] { sYes, sNo }; lstYValue = new List(); if (idAbs != "0")//杨斌 2018-10-30 lstYValue.Add(new double[] { lstVoteRes[3], lstVoteRes[4], lstVoteRes[5] }); else lstYValue.Add(new double[] { lstVoteRes[3], lstVoteRes[4] }); SlideChart.LabelDenominator = lstVoteRes[2]; break; default://监视数据 return;//杨斌 2018-01-26 } //杨斌 2014-12-10 bool isABCD = (tagSetData.GetValue(TagKey.KeypadPara_OptionMode).ToInt == 1);//杨斌 2012-06-25 Dictionary> dicPar = new Dictionary>(); Dictionary> dicResOpt = new Dictionary>(); if (responseType == ResponseType.SlideCompChart)//杨斌 2014-12-10 { string sIds = ""; foreach (int nId in lstSlideCompId) { if (sIds.Length > 0) sIds += ","; sIds += "'" + nId + "'"; } if (sIds.Length > 0) { dicPar = ReportEx.GetTopicParA(sIds); dicResOpt = ReportEx.GetTopticResultOptionA(sIds); } optionCount = 0; foreach (var v in dicPar) { Dictionary pa = v.Value; if (pa.ContainsKey("OptionCount")) { int cnt = ConvertOper.Convert(pa["OptionCount"]).ToInt; if (cnt > optionCount) optionCount = cnt; } } string[] aryCompSlideOpt = null; if (optionCount < 1) { if (lstSlideCompId.Count > 0) { Slide sldComp = null; try { sldComp = (this.SlideEdit.Parent as Presentation).Slides.FindBySlideID(lstSlideCompId[0]); } catch { } if (sldComp != null) { aryCompSlideOpt = PPTOper.GetOptionTextBySlide(sldComp); if (aryCompSlideOpt != null) optionCount = aryCompSlideOpt.Length; } } } if (optionCount < 1) optionCount = 4; if (optionCount > 0) { xValues = new string[optionCount]; yValues = new double[optionCount]; yValues2 = new double[optionCount]; yValuesNew = new double[optionCount];//杨斌 2019-11-26 for (int i = 1; i <= optionCount; i++) { int n = i - 1; if (isABCD) xValues[n] = PPTOper.FormatNumABC(i, false); else xValues[n] = i.ToString(); if (lstSlideCompId.Count > 0) { if (dicPar.Count > 0) { string sId = lstSlideCompId[0].ToString(); string sKey = "OptionText_" + i; if (dicPar.ContainsKey(sId)) { if (dicPar[sId].ContainsKey(sKey)) { xValues[n] += ". " + dicPar[sId][sKey]; } } } else { if ((aryCompSlideOpt != null) && (n < aryCompSlideOpt.Length)) xValues[n] += ". " + aryCompSlideOpt[n]; } } } } } else if (responseType == ResponseType.SlideCompGroup)//杨斌 2017-01-19 { //分组对比图表实现 } else if (responseType == ResponseType.CompVote)//杨斌 2017-06-13 { } else { xValues = new string[optionCount]; yValues = new double[optionCount]; yValuesNew = new double[optionCount];//杨斌 2019-11-26 } //是否已经反馈过。杨斌 2014-12-11 bool isVoted = false; if (responseType == ResponseType.SlideCompChart) { foreach (int id in lstSlideCompId) { Slide sldFd = null; try { sldFd = (this.SlideEdit.Parent as Presentation).Slides.FindBySlideID(id); } catch { } if (sldFd != null) { TagSet tagS = new TagSet(sldFd.Tags); if ((tagS.GetValue(TagKey.Slide_IsResponsed).ToInt == 1)) { isVoted = true; break; } } } } else if (responseType == ResponseType.SlideCompGroup)//杨斌 2017-01-19 { //分组对比图表实现 isVoted = ((compGroupSldID.Length > 0) && (compGroupGroupID.Length > 0) && (xValues != null) && (xValues2 != null)); } else if ((responseType == ResponseType.ScoreRankChart)//杨斌 2015-03-18 || (responseType == ResponseType.ScoreRankGroupChart)) { isVoted = true; } else if (responseType == ResponseType.CompVote)//杨斌 2017-06-13 { isVoted = true; } else { isVoted = (tagSetData.GetValue(TagKey.Slide_IsResponsed).ToInt == 1); } string[] aryItemText = PPTOper.GetOptionTextBySlide(sldData);//杨斌 2015-01-08 if (aryItemText == null)//没找到选项文本 { aryItemText = PPTOper.GetOptionText(responseType, optionCount); } //杨斌 2015-03-31 if (Globals.SunVoteARSAddIn.PPTShow.IsShowSlide) isVoted = true; ////杨斌 2015-04-09 //if (responseType == ResponseType.SignIn) //{ // dataPersent = "crParticipant"; //} int chartValueIsVotedCount = TagSet.GetValue(TagKey.ChartPara_ChartValueIsVotedCount).ToInt;//杨斌 2019-11-26 if (isVoted) { //杨斌 2013-02-21 double maxCount = 0; string percentMode = TagSet.GetValue(TagKey.ChartPara_DataPercentBase).Value; switch (percentMode) { case "crParticipant": //2014-03-17 增加权重 maxCount = GlobalInfo.response.GetParticipantNum(responseType, sldData); break; case "crResponse": //maxCount = GlobalInfo.response.ResponseDataList.Count; break; } //杨斌 2015-06-18 if ((responseType == ResponseType.Vote) && (dataPersent == "crVoteYesNo")) { SlideChart.LabelDenominatorOptionLimit = 2; SlideChart.LabelDenominator = 0;//GlobalInfo.response.GetResponseNum(); } else if (responseType == ResponseType.CompVote)//杨斌 2017-06-13 { } else { SlideChart.LabelDenominatorOptionLimit = 0; if (dataPersent == "crParticipant") { SlideChart.LabelDenominator = GlobalInfo.response.GetParticipantNum(responseType, sldData); } if (dataPersent == "crResponse") { SlideChart.LabelDenominator = GlobalInfo.response.GetResponseNum(); } //杨斌 2016-01-12 if (dataPersent == "crChoiceCount") { SlideChart.LabelDenominator = 0; } } //反馈人数 if (responseType != ResponseType.SignIn) { if ((responseType == ResponseType.Order) && (optionCount > 0))//排序 { GlobalInfo.response.GetOrderResult(sldData); double yValueCount = 0;//杨斌 2014-09-01 //杨斌 2014-04-24 if (GlobalInfo.response.BusinessStatus == ResponseStatus.bsStart) { for (int i = 0; i < GlobalInfo.response.ListOrderScore.Count; i++) { OrderItem odItem = GlobalInfo.response.ListOrderScore[i]; int n = odItem.No - 1; if (isABCD) xValues[n] = PPTOper.FormatNumABC(odItem.No, false); else xValues[n] = odItem.No.ToString(); if (showItemText == 1)//杨斌 2019-09-18 { if (i <= aryItemText.Length) { if (chartType == "ctText") xValues[n] = " " + aryItemText[n]; else xValues[n] = aryItemText[n]; } } yValues[n] = odItem.Score; yValueCount += odItem.Score;//杨斌 2014-09-01 } } else { for (int i = 0; i < GlobalInfo.response.ListOrderScore.Count; i++) { OrderItem odItem = GlobalInfo.response.ListOrderScore[i]; int n = odItem.No - 1; if (isABCD) xValues[i] = PPTOper.FormatNumABC(odItem.No, false); else xValues[i] = odItem.No.ToString(); if (showItemText == 1)//杨斌 2019-09-18 { if (i <= aryItemText.Length) { if (chartType == "ctText") xValues[i] = " " + aryItemText[n]; else xValues[i] = aryItemText[n]; } } yValues[i] = odItem.Score; yValueCount += odItem.Score;//杨斌 2014-09-01 } } SlideChart.LabelDenominator = yValueCount;//杨斌 2014-09-01 } else { if ((responseType == ResponseType.ScoreRankChart) || (responseType == ResponseType.ScoreRankGroupChart))//杨斌 2014-08-07 { double[] aryData = GetRankChartData(slide); if ((aryData != null) && (aryData.Length > 0)) { optionCount = aryData.Length; xValues = new string[optionCount]; yValues = new double[optionCount]; for (int i = 0; i < yValues.Length; i++) { xValues[i] = (i + 1).ToString(); yValues[i] = aryData[i]; } } SlideChart.LabelType = LabelTypes.ltNumberValue;//杨斌 2015-03-06 } else if (responseType == ResponseType.SlideCompChart)//杨斌 2014-12-09 { if (lstSlideCompId.Count >= 1) { int id = lstSlideCompId[0]; if (dicResOpt.ContainsKey(id.ToString())) { Dictionary dicCnt = dicResOpt[id.ToString()]; for (int i = 1; i <= optionCount; i++) { if (dicCnt.ContainsKey(i.ToString())) yValues[i - 1] = dicCnt[i.ToString()]; } } } if (lstSlideCompId.Count >= 2) { int id = lstSlideCompId[1]; if (dicResOpt.ContainsKey(id.ToString())) { Dictionary dicCnt = dicResOpt[id.ToString()]; for (int i = 1; i <= optionCount; i++) { if (dicCnt.ContainsKey(i.ToString())) yValues2[i - 1] = dicCnt[i.ToString()]; } } } } else if (responseType == ResponseType.SlideCompGroup)//杨斌 2017-01-19 { //分组对比图表实现 } else if (responseType == ResponseType.CompVote)//杨斌 2017-06-13 { } else { for (int i = 0; i < yValues.Length; i++) { if (isABCD)//1234ABCD 杨斌 2012-06-25 xValues[i] = PPTOper.FormatNumABC(i + 1, false); else xValues[i] = (i + 1).ToString(); if (showItemText == 1)//杨斌 2015-01-08 { if (i <= aryItemText.Length)//错误:aryItemText==null?杨斌 2016-06-20 { if (chartType == "ctText") xValues[i] = " " + aryItemText[i];//杨斌 2015-04-20 else xValues[i] = aryItemText[i]; } } else { if (chartType == "ctText") xValues[i] = " ";//杨斌 2015-04-20 } if (percentMode == "crChoiceCount")//杨斌 2016-01-12 { if (GlobalInfo.response.ResponseOptionListCount.Keys.Contains(i.ToString())) //有反馈数据 yValues[i] = GlobalInfo.response.ResponseOptionListCount[i.ToString()]; else //无反馈数据 yValues[i] = 0; } else {//监视数据 if (chartValueIsVotedCount == 1)//杨斌 2019-11-26 { if (GlobalInfo.response.ResponseOptionListNoRate.Keys.Contains(i.ToString())) //有反馈数据 yValuesNew[i] = GlobalInfo.response.ResponseOptionListNoRate[i.ToString()]; else //无反馈数据 yValuesNew[i] = 0; } if (GlobalInfo.response.ResponseOptionList.Keys.Contains(i.ToString())) //有反馈数据 yValues[i] = GlobalInfo.response.ResponseOptionList[i.ToString()]; else //无反馈数据 yValues[i] = 0; } //yValues[i] = 1; }//选项对应的投票数量 } } //日本的版本表决图表固定文字。杨斌 2012-11-08 if (responseType == ResponseType.Vote) { switch (GlobalInfo.OEMLogo) { case OEMLogos.oem3eAnalyzer: string[] aryItem = PPTOper.GetOptionText(ResponseType.Vote, 3); for (int i = 0; i < xValues.Length; i++) { xValues[i] = aryItem[i]; } break; default: break; } } } else//签到类型-已反馈 { xValues[0] = GlobalInfo.SysLanguage.LPT.ReadString("PPTOper", "SignIn", "已签到"); xValues[1] = GlobalInfo.SysLanguage.LPT.ReadString("PPTOper", "UnSignIn", "未签到"); //杨斌 2012-10-09 string textSignInOK = tagSetData.LoadValue(TagKey.SingIn_TextOK, "").Value; string textSignInNot = tagSetData.LoadValue(TagKey.SingIn_TextNot, "").Value; if (textSignInOK.Length > 0) xValues[0] = textSignInOK; if (textSignInNot.Length > 0) xValues[1] = textSignInNot; int responseCount = GlobalInfo.response.ResponseDataList.Count; /* 杨斌 2017-03-22 int singInOKCount = 0;//签到成功的数量,不包含签到重复的。杨斌 2017-03-02 if (Globals.SunVoteARSAddIn.frmVoteBar != null) { FrmVoteDetail frmDetail = Globals.SunVoteARSAddIn.frmVoteBar.frmVoteDetail; if (frmDetail != null) singInOKCount = frmDetail.SignInOkCount; } double unSignInCount = 0; //参与人数 if (GlobalInfo.response.GetParticipantNum(responseType, sldData) == 0) unSignInCount = GlobalInfo.hardwareManage.PersonNum; else unSignInCount = GlobalInfo.response.GetParticipantNum(responseType, sldData) - singInOKCount;//杨斌 2017-03-02 yValues[0] = responseCount; yValues[1] = unSignInCount; */ //杨斌 2015-04-10 //int signInMode = tagSetData.GetValue(TagKey.SignIn_Mode).ToInt; //if ((signInMode == 1) && GlobalInfo.response.EnableList) // SlideChart.LabelDenominator = GlobalInfo.response.RousterCount; //else SlideChart.LabelDenominator = GlobalInfo.response.GetParticipantNum(responseType, sldData); //杨斌 2017-03-22 int signInMode = tagSetData.GetValue(TagKey.SignIn_Mode).ToInt; //if ((signInMode == 1) && GlobalInfo.response.EnableList) if (GlobalInfo.response.EnableList) { int singInOKCount = 0; if (signInMode > 0)//杨斌 2017-03-30 { if (Globals.SunVoteARSAddIn.PPTShow.FrmVoteBar != null) { FrmVoteDetail frmDetail = Globals.SunVoteARSAddIn.PPTShow.FrmVoteBar.frmVoteDetail; if (frmDetail != null) singInOKCount = frmDetail.GetMapStateCount(frmDetail.BrushVoted); } else { for (int i = 0; i < RosterList.RosterLoad.Rows.Count; i++) { if (!string.IsNullOrEmpty(RosterList.RosterLoad.Rows[i].Cells[0])) singInOKCount++; } } } else { singInOKCount = responseCount;//杨斌 2017-03-30 } yValues[0] = singInOKCount; yValues[1] = SlideChart.LabelDenominator - responseCount; } else { yValues[0] = responseCount; yValues[1] = SlideChart.LabelDenominator - responseCount; } /* 杨斌 2017-03-22 //杨斌 2013-01-29 if (Globals.SunVoteARSAddIn.frmVoteBar != null) { FrmVoteDetail frmDetail = Globals.SunVoteARSAddIn.frmVoteBar.frmVoteDetail; if (frmDetail != null) { if (frmDetail.IsCodeSignIn()) { yValues[0] = frmDetail.SignInOkCount; yValues[1] = frmDetail.VoterCount - frmDetail.SignInOkCount; maxCount = frmDetail.SignInOkCount;//杨斌 2013-02-21 } } } */ } //杨斌 2015-03-27 屏蔽。上面已经计算正确。 ////杨斌 2015-03-18 //SlideChart.LabelDenominator = GlobalInfo.response.GetParticipantNum(responseType, sldData); SlideChart.MaxDataValue = maxCount;//杨斌 2013-02-21 } else//未反馈过 { //杨斌 2015-06-18 if ((responseType == ResponseType.Vote) && (dataPersent == "crVoteYesNo")) { SlideChart.LabelDenominatorOptionLimit = 2; SlideChart.LabelDenominator = 0;//GlobalInfo.response.GetResponseNum(); } else { SlideChart.LabelDenominatorOptionLimit = 0; SlideChart.LabelDenominator = xValues.Length; } if (responseType != ResponseType.SignIn) { if ((responseType == ResponseType.ScoreRankChart) || (responseType == ResponseType.ScoreRankGroupChart))//杨斌 2014-08-07 { double[] aryData = GetRankChartData(slide); if ((aryData != null) && (aryData.Length > 0)) { optionCount = aryData.Length; xValues = new string[optionCount]; yValues = new double[optionCount]; for (int i = 0; i < yValues.Length; i++) { xValues[i] = (i + 1).ToString(); yValues[i] = aryData[i]; } } SlideChart.LabelType = LabelTypes.ltNumberValue;//杨斌 2015-03-06 } else if (responseType == ResponseType.SlideCompChart)//杨斌 2014-12-10 { for (int i = 0; i < yValues.Length; i++) { yValues[i] = 1; yValues2[i] = 1; } } else if (responseType == ResponseType.SlideCompGroup)//杨斌 2017-01-19 { //分组对比图表实现 } else { for (int i = 0; i < yValues.Length; i++) { if (isABCD)//1234ABCD 杨斌 2012-06-25 xValues[i] = PPTOper.FormatNumABC(i + 1, false); else xValues[i] = (i + 1).ToString(); if (showItemText == 1)//杨斌 2015-01-08 { if (i <= aryItemText.Length) { if (chartType == "ctText") xValues[i] = aryItemText[i] + " "; else xValues[i] = aryItemText[i]; } } else { if (chartType == "ctText") xValues[i] = " ";//杨斌 2015-04-20 } yValues[i] = 1; yValues[i] = 1; } } //日本的版本表决图表固定文字。杨斌 2012-11-08 if (responseType == ResponseType.Vote) { switch (GlobalInfo.OEMLogo) { case OEMLogos.oem3eAnalyzer: string[] aryItem = PPTOper.GetOptionText(ResponseType.Vote, 3); for (int i = 0; i < xValues.Length; i++) { xValues[i] = aryItem[i]; } break; default: break; } } } else//签到类型-未反馈 { xValues[0] = GlobalInfo.SysLanguage.LPT.ReadString("PPTOper", "SignIn", "已签到"); xValues[1] = GlobalInfo.SysLanguage.LPT.ReadString("PPTOper", "UnSignIn", "未签到"); //杨斌 2012-10-09 string textSignInOK = tagSetData.LoadValue(TagKey.SingIn_TextOK, "").Value; string textSignInNot = tagSetData.LoadValue(TagKey.SingIn_TextNot, "").Value; if (textSignInOK.Length > 0) xValues[0] = textSignInOK; if (textSignInNot.Length > 0) xValues[1] = textSignInNot; yValues[0] = 1; yValues[1] = 1; } SlideChart.MaxDataValue = 0;//杨斌 2013-02-21 } //调整图片的高度和位置 ChartPositon cp = new ChartPositon(); //if (responseType == ResponseType.SlideCompChart)//杨斌 2014-12-11 //{ // cp.Top = TagSet.LoadValue(TagKey.Picture_Top_Bar, slide.Master.Height * 0.2).ToFloat; // cp.Left = TagSet.LoadValue(TagKey.Picture_Left_Bar, slide.Master.Width * 0.15).ToFloat; // cp.Height = TagSet.LoadValue(TagKey.Picture_Height_Bar, slide.Master.Height * 0.7).ToFloat; // cp.Width = TagSet.LoadValue(TagKey.Picture_Width_Bar, slide.Master.Height * 0.7).ToFloat; //} if (responseType == ResponseType.CompVote)//杨斌 2017-06-13 { cp.Left = TagSet.LoadValue(TagKey.Picture_Left_Bar, slide.Master.Width * 0.1f).ToFloat; cp.Top = TagSet.LoadValue(TagKey.Picture_Top_Bar, slide.Master.Height * 0.3f).ToFloat; cp.Width = TagSet.LoadValue(TagKey.Picture_Width_Bar, slide.Master.Width * 0.45f).ToFloat; cp.Height = TagSet.LoadValue(TagKey.Picture_Height_Bar, slide.Master.Height * 0.5f).ToFloat; } //杨斌 2012-08-27 switch (SlideChart.ChartType) { case ChartTypes.ctBar: case ChartTypes.ctBarBox: case ChartTypes.ctText://杨斌 2015-04-20 cp.Top = TagSet.GetValue(TagKey.Picture_Top_Bar).ToFloat; cp.Left = TagSet.GetValue(TagKey.Picture_Left_Bar).ToFloat; cp.Height = TagSet.GetValue(TagKey.Picture_Height_Bar).ToFloat; cp.Width = TagSet.GetValue(TagKey.Picture_Width_Bar).ToFloat; //修复图表位置大小存储的值巨大(不明原因)导致卡死问题。2018-09-11 if (cp.Top > slide.Master.Height * 2) { cp.Top = 0; TagSet.SetValue(TagKey.Picture_Top_Bar, cp.Top); } if (cp.Height > slide.Master.Height * 2) { cp.Height = 400; TagSet.SetValue(TagKey.Picture_Height_Bar, cp.Height); } if (cp.Left > slide.Master.Width * 2) { cp.Left = 0; TagSet.SetValue(TagKey.Picture_Left_Bar, cp.Left); } if (cp.Width > slide.Master.Width * 2) { cp.Width = 400; TagSet.SetValue(TagKey.Picture_Width_Bar, cp.Width); } break; case ChartTypes.ctColumn: case ChartTypes.ctColumnBox: cp.Top = TagSet.GetValue(TagKey.Picture_Top_Column).ToFloat; cp.Left = TagSet.GetValue(TagKey.Picture_Left_Column).ToFloat; cp.Height = TagSet.GetValue(TagKey.Picture_Height_Column).ToFloat; cp.Width = TagSet.GetValue(TagKey.Picture_Width_Column).ToFloat; //修复图表位置大小存储的值巨大(不明原因)导致卡死问题。2018-09-11 if (cp.Top > slide.Master.Height * 2) { cp.Top = 0; TagSet.SetValue(TagKey.Picture_Top_Column, cp.Top); } if (cp.Height > slide.Master.Height * 2) { cp.Height = 400; TagSet.SetValue(TagKey.Picture_Height_Column, cp.Height); } if (cp.Left > slide.Master.Width * 2) { cp.Left = 0; TagSet.SetValue(TagKey.Picture_Left_Column, cp.Left); } if (cp.Width > slide.Master.Width * 2) { cp.Width = 400; TagSet.SetValue(TagKey.Picture_Width_Column, cp.Width); } break; case ChartTypes.ctPie: cp.Top = TagSet.GetValue(TagKey.Picture_Top_Pie).ToFloat; cp.Left = TagSet.GetValue(TagKey.Picture_Left_Pie).ToFloat; cp.Height = TagSet.GetValue(TagKey.Picture_Height_Pie).ToFloat; cp.Width = TagSet.GetValue(TagKey.Picture_Width_Pie).ToFloat; //修复图表位置大小存储的值巨大(不明原因)导致卡死问题。2018-09-11 if (cp.Top > slide.Master.Height * 2) { cp.Top = 0; TagSet.SetValue(TagKey.Picture_Top_Pie, cp.Top); } if (cp.Height > slide.Master.Height * 2) { cp.Height = 400; TagSet.SetValue(TagKey.Picture_Height_Pie, cp.Height); } if (cp.Left > slide.Master.Width * 2) { cp.Left = 0; TagSet.SetValue(TagKey.Picture_Left_Pie, cp.Left); } if (cp.Width > slide.Master.Width * 2) { cp.Width = 400; TagSet.SetValue(TagKey.Picture_Width_Pie, cp.Width); } break; } if (IsInitChart) { //杨斌 2012-03-14 if ((shape != null) && ((responseType == ResponseType.Choice) || (responseType == ResponseType.Group) || (responseType == ResponseType.Judge) || (responseType == ResponseType.Vote) || (responseType == ResponseType.Order)//杨斌 2014-04-22 || (responseType == ResponseType.Grade) || (responseType == ResponseType.ScoreRankChart)//杨斌 2014-09-04 || (responseType == ResponseType.ScoreRankGroupChart) || (responseType == ResponseType.SlideCompChart)//杨斌 2014-12-10 || (responseType == ResponseType.SlideCompGroup)//杨斌 2017-01-19 || (responseType == ResponseType.OperatorSlide)//杨斌 2015-07-23 || (responseType == ResponseType.CompVote)//杨斌 2017-06-11 )) //&& (SlideChart.ChartType == ChartTypes.ctBar)) { if ((responseType == ResponseType.ScoreRankChart) || (responseType == ResponseType.ScoreRankGroupChart)) autoFit = true;//杨斌 2018-04-03 if (autoFit || ((cp.Width == 0) || (cp.Height == 0)))//杨斌 2018-03-05 cp = ChartPosition(shape, optionCount, autoFit); } else { //2012-09-24 if (ChangeType) { if (responseType == ResponseType.SignIn) { cp.Left = 120; cp.Top = 100; cp.Height = 350; cp.Width = 550; } else//杨斌 2014-06-06 { //if ((cp.Width == 0) || (cp.Height == 0)) //{ // cp.Left = 150; // cp.Top = 120; // cp.Height = 350; // cp.Width = 450; //} } ChangeType = false; } //杨斌 2018-03-23 switch (responseType) { case ResponseType.SlideCompChart: case ResponseType.SlideCompGroup: if ((autoFit || ((cp.Width == 0) || (cp.Height == 0))) && (shape != null))//杨斌 2018-03-23。shape==null时会出错 cp = ChartPosition(shape, optionCount, autoFit); break; default: if (autoFit || ((cp.Width == 0) || (cp.Height == 0))) cp = ChartPosition(shape, optionCount, autoFit); break; } //杨斌 2014-06-09 if (InsertSlideInfo.SlideMode == 0) { if (responseType != ResponseType.SignIn) { if ((cp.Width == 0) || (cp.Height == 0)) { cp.Left = 150; cp.Top = 120; cp.Height = 350; cp.Width = 450; } } } //记录图表的位置 bool r = TagSet.ReadOnlyPPT; TagSet.ReadOnlyPPT = false; //防止图片的大小为0 //修改标志 2012-06-06 赵丽 //TagSet.SetValue(TagKey.Picture_Height, (cp.Height <= 0) ? 400 : cp.Height); //修改标志 2012-05-2 赵丽 屏蔽left和Top值 //TagSet.SetValue(TagKey.Picture_Left, (cp.Left <= 0) ? 200 : cp.Left); //修改标志 2012-06-06 赵丽 //TagSet.SetValue(TagKey.Picture_Width, (cp.Width <= 0) ? 400 : cp.Width); //TagSet.SetValue(TagKey.Picture_Top, (cp.Top <= 0) ? 100 : cp.Top); TagSet.ReadOnlyPPT = r; } } else { //2012-07-31 赵丽 图表位置更改 switch (SlideChart.ChartType) { case ChartTypes.ctBar: case ChartTypes.ctBarBox: case ChartTypes.ctText://杨斌 2015-04-20 cp.Top = TagSet.GetValue(TagKey.Picture_Top_Bar).ToFloat; cp.Left = TagSet.GetValue(TagKey.Picture_Left_Bar).ToFloat; cp.Height = TagSet.GetValue(TagKey.Picture_Height_Bar).ToFloat; cp.Width = TagSet.GetValue(TagKey.Picture_Width_Bar).ToFloat; break; case ChartTypes.ctColumn: case ChartTypes.ctColumnBox: cp.Top = TagSet.GetValue(TagKey.Picture_Top_Column).ToFloat; cp.Left = TagSet.GetValue(TagKey.Picture_Left_Column).ToFloat; cp.Height = TagSet.GetValue(TagKey.Picture_Height_Column).ToFloat; cp.Width = TagSet.GetValue(TagKey.Picture_Width_Column).ToFloat; break; case ChartTypes.ctPie: cp.Top = TagSet.GetValue(TagKey.Picture_Top_Pie).ToFloat; cp.Left = TagSet.GetValue(TagKey.Picture_Left_Pie).ToFloat; cp.Height = TagSet.GetValue(TagKey.Picture_Height_Pie).ToFloat; cp.Width = TagSet.GetValue(TagKey.Picture_Width_Pie).ToFloat; break; } } //杨斌 2014-12-12 if (responseType == ResponseType.SlideCompChart) { SlideChart.AxisXEnabled = true; } if (responseType == ResponseType.SlideCompGroup)//杨斌 2017-01-19 { SlideChart.AxisXEnabled = true; } if (responseType == ResponseType.CompVote)//杨斌 2017-06-11 { SlideChart.AxisXEnabled = true; } if (responseType == ResponseType.SlideCompChart)//杨斌 2017-08-23 { } else { SlideChart.LegentText = xValues;//图例 } List listRData = new List(); listRData.Add(yValues); if (responseType == ResponseType.SlideCompChart)//杨斌 2014-12-10 listRData.Add(yValues2); //y轴赋值(必须) SlideChart.XValue = xValues;//选项标签 SlideChart.YValues = listRData;//反馈数据赋值 if (chartValueIsVotedCount == 1)//杨斌 2019-11-26 { List listRDataNew = new List(); listRDataNew.Add(yValuesNew); SlideChart.YValuesNew = listRDataNew;//反馈数据赋值。2019-11-26 } else { SlideChart.YValuesNew = null; } SlideChart.UseStacked = false; SlideChart.ChartTitle = ""; if (responseType == ResponseType.SlideCompGroup)//杨斌 2017-03-21 { //分组对比图表实现 SlideChart.LegentText = xValues;//图例 SlideChart.LegendEnable = true; SlideChart.LegentDocking = LegentDockings.ldRight; SlideChart.XValue = xValues2;//选项标签 SlideChart.YValues = lstYValue;//反馈数据赋值 //杨斌 2018-07-02 int compGroupChartType = tagSetData.GetValue(TagKey.SlideCompGroupChartType).ToInt; SlideChart.UseStacked = (compGroupChartType <= 1); SlideChart.UseStacked100 = (compGroupChartType == 1); //杨斌 2018-06-27 日本的去掉对比分析的标题,用户可以自己加 SlideChart.ChartTitle = "";//TagSet.GetValue(TagKey.SlideCompGroupSlideTitle).Value; } if (responseType == ResponseType.CompVote)//杨斌 2017-06-11 { SlideChart.LegendEnable = false; SlideChart.XValue = xValues;//选项标签 SlideChart.YValues = lstYValue;//反馈数据赋值 } if ((GlobalInfo.OEMLogo == OEMLogos.oemiPericles) && (GlobalInfo.OEMLogo2 == OEMLogos2.oemHideData))//杨斌 2020-03-06 { foreach(var v in SlideChart.YValues) { for(int i=0;i 0) && (douPointWidth <= 1)) SlideChart.PointWidth = douPointWidth;// double.Parse(cmBPointWidth.Text); else SlideChart.PointWidth = 0;//杨斌 2014-05-14 //杨斌 2012-11-08 switch (GlobalInfo.OEMLogo) { case OEMLogos.oem3eAnalyzer: if (responseType == ResponseType.Vote)//杨斌 2013-03-11 { cp.Top = (cp.Top == 0) ? 100 : cp.Top; //cp.Left = (cp.Left == 0) ? 100 : cp.Left; cp.Width = (cp.Width == 0) ? 400 : cp.Width; float defLeft = (Globals.SunVoteARSAddIn.Application.ActivePresentation.SlideMaster.Width - cp.Width) / 2; cp.Left = (cp.Left == 0) ? defLeft : cp.Left; } break; default: break; } //特定类型的大小默认值 if (responseType == ResponseType.SlideCompChart)//杨斌 2014-12-11 { cp.Top = (cp.Top == 0) ? slide.Master.Height * 0.15f : cp.Top; cp.Left = (cp.Left == 0) ? slide.Master.Width * 0.1f : cp.Left; cp.Height = (cp.Height == 0) ? slide.Master.Height * 0.8f : cp.Height; //杨斌 2015-02-10 //cp.Width = (cp.Width == 0) ? slide.Master.Width * 0.8f : cp.Width; cp.Width = (cp.Width == 0) ? (slide.Master.Width - cp.Left * 2) : cp.Width; } else if (responseType == ResponseType.SlideCompGroup)//杨斌 2017-01-19 { //分组对比图表实现 cp.Top = (cp.Top == 0) ? slide.Master.Height * 0.15f : cp.Top; cp.Left = (cp.Left == 0) ? slide.Master.Width * 0.1f : cp.Left; cp.Height = (cp.Height == 0) ? slide.Master.Height * 0.8f : cp.Height; //杨斌 2015-02-10 //cp.Width = (cp.Width == 0) ? slide.Master.Width * 0.8f : cp.Width; cp.Width = (cp.Width == 0) ? (slide.Master.Width - cp.Left * 2) : cp.Width; } else if (responseType == ResponseType.CompVote)//杨斌 2017-06-11 { cp.Left = (cp.Left == 0) ? slide.Master.Width * 0.1f : cp.Left; cp.Top = (cp.Top == 0) ? slide.Master.Height * 0.3f : cp.Top; cp.Width = (cp.Width == 0) ? (slide.Master.Width * 0.45f) : cp.Width; cp.Height = (cp.Height == 0) ? slide.Master.Height * 0.5f : cp.Height; } else { if (responseType == ResponseType.SignIn) { cp.Top = (cp.Top == 0) ? 100 : cp.Top; cp.Left = (cp.Left == 0) ? 100 : cp.Left; } cp.Height = (cp.Height == 0) ? 400 : cp.Height; cp.Width = (cp.Width == 0) ? 400 : cp.Width; } //签到固定饼图去掉。杨斌 2014-06-04 //if (responseType == ResponseType.SignIn) //{ // cp.Left = 120; // cp.Top = 100; // cp.Height = 350; // cp.Width = 550; // SlideChart.ChartType = ChartTypes.ctPie; // SlideChart.LegendEnable = true;//饼图显示图例 // SlideChart.LegentDocking = LegentDockings.ldRight; //} //杨斌 2015-01-14 string textSign = "textSign"; if ((chartType == "ctText") && (responseType == ResponseType.SignIn)) { Shape shaTextSignIn = null; foreach (Shape s in slide.Shapes) { if (s.Name == textSign) shaTextSignIn = s; if (s.Name == "pic") s.Delete(); } double signInCount = yValues[0]; string sCount = ""; if (signInCount > 0) { if (isVoted) sCount = signInCount.ToString(); else sCount = "100"; } else { if (isVoted) sCount = " "; else sCount = "100"; } if (shaTextSignIn == null) { ChartPositon cpa = new ChartPositon(); cpa.Width = slide.Master.Width * 0.7f; cpa.Height = slide.Master.Height / 4; cpa.Left = (slide.Master.Width - cpa.Width) / 2; cpa.Top = (slide.Master.Height - cpa.Height) / 2; shaTextSignIn = PPTOper.AddShapeText(slide, cpa, sCount, 200); shaTextSignIn.Top = (slide.Master.Height - shaTextSignIn.Height) / 2; shaTextSignIn.Name = textSign; } else shaTextSignIn.TextFrame.TextRange.Text = sCount; } else { foreach (Shape s in slide.Shapes) { if (s.Name == textSign) s.Delete(); //if (s.Name == "pic")//杨斌 2018-04-02 // s.Delete(); } ss += t.ElapsedMilliseconds + " "; t.Restart(); //杨斌 2018-05-09 string sUnit = "";//屏蔽下面代码,特殊定制用。杨斌 2018-07-27 //if ((responseType == ResponseType.Vote) && (GlobalInfo.OEMLogo == OEMLogos.oemPowerVote) // && (GlobalInfo.OEMLogo2 == OEMLogos2.SunVote)) //{ // sUnit = " MC"; //} var ct = chartType +" " + IsInitChart; DrawChart(IsInitChart, cp, slide, sUnit, beKeepPos); ss += t.ElapsedMilliseconds + " "; t.Restart(); FrmVoteBar.ShowDebug(ss); } } catch { } PPTOper.ShowTableVoteCount(slide, beAddObject, SlideChart.LabelType, SlideChart.PercentDec);//杨斌 2016-11-12 //2012-09-27 赵丽 图表不继承参数 if (GlobalInfo.OEMLogo == OEMLogos.oem3eAnalyzer) { if (IsInitChart) InitChartSave(slide);//杨斌 2012-06-13 } } public List GetRankGroupMVPData(Slide sld) { List res = new List(); TagSet tagSet = new TagSet(sld.Tags); ResponseType type = EnumName.GetEnum(tagSet.LoadValue(TagKey.ResponseType, ResponseType.Slide).Value); if (type == ResponseType.ScoreRankGroupMVP) { string showName = tagSet.GetValue(TagKey.RankChartColShow).Value; int count = tagSet.GetValue(TagKey.RankChartRankCount).ToInt; int rankMode = tagSet.GetValue(TagKey.RankChartRankMode).ToInt; FrmRankGroup frmRankGroup = new FrmRankGroup(rankMode, showName, count, true, sld); frmRankGroup.Show(); res = frmRankGroup.GetRankGroupMVData(); //frmRankGroup.Close(); } return res; } /// /// 获取排行榜图表数据 /// 杨斌 2014-08-07 /// /// /// private double[] GetRankChartData(Slide sld) { string[] aryOpt = null; double[] aryScore = null; try { TagSet tagSet = new TagSet(sld.Tags); ResponseType type = EnumName.GetEnum(tagSet.LoadValue(TagKey.ResponseType, ResponseType.Slide).Value); string showName = tagSet.GetValue(TagKey.RankChartColShow).Value; int count = tagSet.GetValue(TagKey.RankChartRankCount).ToInt; int rankMode = tagSet.GetValue(TagKey.RankChartRankMode).ToInt; List lstData = new List(); switch (type) { case ResponseType.ScoreRankChart: FrmRankVoter frmRankVoter = new FrmRankVoter(rankMode, showName, count, sld); frmRankVoter.Show(); lstData = frmRankVoter.GetRankChartData(true); frmRankVoter.Close(); break; case ResponseType.ScoreRankGroupChart: FrmRankGroup frmRankGroup = new FrmRankGroup(rankMode, showName, count, sld); frmRankGroup.Show(); lstData = frmRankGroup.GetRankChartData(); frmRankGroup.Close(); break; default: break; } if (lstData.Count < 1) { if (Globals.SunVoteARSAddIn.PPTShow.IsShowSlide) { for (int i = 0; i < count; i++) { lstData.Add(new RankChartData() { name = (i + 1).ToString(), score = 0 }); } } else { for (int i = 0; i < count; i++) { //lstData.Add(new RankChartData() { name = "Rank" + (i + 1), score = 1 }); lstData.Add(new RankChartData() { name = "" + (i + 1), score = 1 }); } } } count = lstData.Count; aryOpt = new string[count]; aryScore = new double[count]; for (int i = 0; i < count; i++) { aryOpt[i] = lstData[i].name; aryScore[i] = lstData[i].score; } string optionText = PPTOper.FormatShapeOptionText(aryOpt); //插入选项文本 Shape sha = PPTOper.GetOptionTextLinkShape(sld); if (sha == null) PPTOper.AddShapeOptionText(sld, optionText, false); else PPTOper.SetShapeOptionText(sha, optionText, false); } catch (Exception ex) { SystemLog.WriterLog(ex); } return aryScore; } /// /// 调整图标位置 /// 创建 赵丽 /// /// /// /// private ChartPositon ChartPosition(Shape shape, int optionCount, bool autoFit = false) { Slide sld = shape.Parent as Slide;//杨斌 2015-02-10 //修改标志 2012-05-02 赵丽 修改选项图表对齐(图表变化暂未发现规律,取经验值) bool show3D = TagSet.GetValue(TagKey.ChartPara_Show3D).ToBoolean; SlideChart.Width = Convert.ToInt32(shape.Width); //图表宽度 ChartPositon cp = new ChartPositon(); float shapeHeight = shape.Height; //杨斌 2014-06-05 float boundHeight = shape.Height; if (autoFit)//杨斌 2017-11-10 { if ((shape.HasTextFrame == Microsoft.Office.Core.MsoTriState.msoTrue) && (shape.TextFrame.TextRange.Text.Length > 0))//杨斌 2016-12-09 boundHeight = shape.TextFrame.TextRange.Paragraphs(-1, -1).BoundHeight;//杨斌 2012-03-05 } if (autoFit && ((SlideChart.ChartType == ChartTypes.ctBar) || (SlideChart.ChartType == ChartTypes.ctBarBox)))//杨斌 2014-04-22 { //2012-07-30 重新定位图片的位置和大小 TagSet.SetValue(TagKey.Picture_Height_Bar, 0); //TagSet.SetValue(TagKey.Picture_Top_Bar, 0); if (show3D) { //if (shapeHeight < boundHeight) if (optionCount > 6) { //cp.Height = Convert.ToInt32(shapeHeight) + 35 + (10 - optionCount) * 14; if (optionCount == 7) cp.Height = 470; if (optionCount == 8) cp.Height = 480; if (optionCount == 9) cp.Height = 460; if (optionCount == 10) cp.Height = 450; cp.Top = shape.Top - 15; } else { cp.Height = Convert.ToInt32(boundHeight) + 105; cp.Top = shape.Top - 15; } cp.Left = shape.Left - 20; } else { //if (shapeHeight < boundHeight) if (optionCount > 6) { //cp.Height = Convert.ToInt32(shapeHeight) + 35 + (10 - optionCount) * 14; if (optionCount == 7) cp.Height = 450; if (optionCount == 8) cp.Height = 460; if (optionCount == 9) cp.Height = 435; if (optionCount == 10) cp.Height = 430; cp.Top = shape.Top - 5; } else { cp.Height = Convert.ToInt32(boundHeight) + 80; cp.Top = shape.Top - 3; } cp.Left = shape.Left - 10; } cp.Width = 650;//杨斌 2013-02-22 原来是400 } //记录图表的位置 bool r = TagSet.ReadOnlyPPT; TagSet.ReadOnlyPPT = false; //防止图片的大小为0 //修改标志 赵丽 2012-05-2 修改图表类型不更改图表的位置 float fLeft = 0; float fTop = 0; float fHeight = 0; float fWidth = 0; //2012-07-30 不同类型的图表位置不一样,饼图和柱状图放在中间位置 switch (SlideChart.ChartType) { case ChartTypes.ctBar: case ChartTypes.ctBarBox: case ChartTypes.ctText://杨斌 2015-04-20 fLeft = TagSet.GetValue(TagKey.Picture_Left_Bar).ToFloat; fTop = TagSet.GetValue(TagKey.Picture_Top_Bar).ToFloat; //修改标志 赵丽 2012-06-06 存储图表的大小 fHeight = TagSet.GetValue(TagKey.Picture_Height_Bar).ToFloat; fWidth = TagSet.GetValue(TagKey.Picture_Width_Bar).ToFloat; break; case ChartTypes.ctColumn: case ChartTypes.ctColumnBox: fLeft = TagSet.GetValue(TagKey.Picture_Left_Column).ToFloat; fTop = TagSet.GetValue(TagKey.Picture_Top_Column).ToFloat; //修改标志 赵丽 2012-06-06 存储图表的大小 fHeight = TagSet.GetValue(TagKey.Picture_Height_Column).ToFloat; fWidth = TagSet.GetValue(TagKey.Picture_Width_Column).ToFloat; break; case ChartTypes.ctPie: fLeft = TagSet.GetValue(TagKey.Picture_Left_Pie).ToFloat; fTop = TagSet.GetValue(TagKey.Picture_Top_Pie).ToFloat; //修改标志 赵丽 2012-06-06 存储图表的大小 fHeight = TagSet.GetValue(TagKey.Picture_Height_Pie).ToFloat; fWidth = TagSet.GetValue(TagKey.Picture_Width_Pie).ToFloat; break; } //2012-09-24 赵丽 更改幻灯片类型,重新定位图表位置和大小 if (ChangeType) { switch (SlideChart.ChartType) { case ChartTypes.ctBar: case ChartTypes.ctBarBox: case ChartTypes.ctText://杨斌 2015-04-20 fLeft = 0; fTop = 0; fHeight = 0; fWidth = 0; break; case ChartTypes.ctColumn: case ChartTypes.ctColumnBox: case ChartTypes.ctPie: fLeft = 200; fTop = 100; fHeight = 400; fWidth = 400; break; } if (ResponseTypeSlideEdit == ResponseType.SignIn) { fLeft = 120; fTop = 100; fHeight = 350; fWidth = 500; } ChangeType = false; } switch (SlideChart.ChartType) { case ChartTypes.ctBar: case ChartTypes.ctBarBox: case ChartTypes.ctText://杨斌 2015-04-20 cp.Left = (fLeft <= 0) ? cp.Left : fLeft; cp.Top = (fTop <= 0) ? cp.Top : fTop; //2012-06-08 仅选项个数改变的时候才需要更新高度 if (!CountChange) cp.Height = (fHeight <= 0) ? cp.Height : fHeight; cp.Width = (fWidth <= 0) ? cp.Width : fWidth; TagSet.SetValue(TagKey.Picture_Height_Bar, (cp.Height <= 0) ? 400 : cp.Height); TagSet.SetValue(TagKey.Picture_Left_Bar, (cp.Left <= 0) ? 200 : cp.Left); TagSet.SetValue(TagKey.Picture_Width_Bar, (cp.Width <= 0) ? 400 : cp.Width); TagSet.SetValue(TagKey.Picture_Top_Bar, (cp.Top <= 0) ? 100 : cp.Top); break; case ChartTypes.ctColumn: case ChartTypes.ctColumnBox: cp.Height = fHeight; cp.Width = fWidth; cp.Top = fTop; cp.Left = fLeft; TagSet.SetValue(TagKey.Picture_Height_Column, (cp.Height <= 0) ? 400 : cp.Height); TagSet.SetValue(TagKey.Picture_Left_Column, fLeft); TagSet.SetValue(TagKey.Picture_Width_Column, (cp.Width <= 0) ? 400 : cp.Width); TagSet.SetValue(TagKey.Picture_Top_Column, fTop); break; case ChartTypes.ctPie: cp.Height = fHeight; cp.Width = fWidth; cp.Top = fTop; cp.Left = fLeft; TagSet.SetValue(TagKey.Picture_Height_Pie, (cp.Height <= 0) ? 400 : cp.Height); TagSet.SetValue(TagKey.Picture_Left_Pie, fLeft); TagSet.SetValue(TagKey.Picture_Width_Pie, (cp.Width <= 0) ? 400 : cp.Width); TagSet.SetValue(TagKey.Picture_Top_Pie, fTop); //原来是400,日语签到图表显示不全,杨斌 2012-08-27 if (InsertSlideInfo.ResponseType == ResponseType.SignIn) { TagSet.SetValue(TagKey.Picture_Height_Pie, (cp.Height <= 0) ? 350 : cp.Height); //TagSet.SetValue(TagKey.Picture_Left_Pie, fLeft); TagSet.SetValue(TagKey.Picture_Width_Pie, (cp.Width <= 0) ? 550 : cp.Width); //TagSet.SetValue(TagKey.Picture_Top_Pie, fTop); } break; } TagSet.ReadOnlyPPT = r; CountChange = false; return cp; } /// /// 画图表 /// 创建 赵丽 /// /// /// /// public void DrawChart(bool IsInitChart, ChartPositon cp, Slide slide, string sUnit = "", bool beKeepPos = false) { string picName, fileName; TagSet tagSet = new TagSet(slide.Tags);//杨斌 2014-08-07 //删除前保存图表位置。杨斌 2013-03-13 if (!IsInitChart) { foreach (Shape s in slide.Shapes) { if (s.Name == "pic") { cp.Left = s.Left; cp.Top = s.Top; cp.Width = s.Width; cp.Height = s.Height; } } } string chaShow = tagSet.GetValue(TagKey.ChartPara_ShowTime).Value; //杨斌 2016-06-17 bool isShowChartForm = false; bool isShowSlide = false; if (Globals.SunVoteARSAddIn.PPTShow.SlideShow != null) { if (Globals.SunVoteARSAddIn.PPTShow.IsChartShowWindow(Globals.SunVoteARSAddIn.PPTShow.SlideShow)) { isShowSlide = Globals.SunVoteARSAddIn.PPTShow.IsShowSlide; } } if (isShowSlide && (Globals.SunVoteARSAddIn.PPTShow.FrmChart != null) && (!Globals.SunVoteARSAddIn.PPTShow.FrmChart.IsDisposed)) { SlideChart.Height = Globals.SunVoteARSAddIn.PPTShow.FrmChart.Width; SlideChart.Width = Globals.SunVoteARSAddIn.PPTShow.FrmChart.Height; SlideChart.UpdateChart(Globals.SunVoteARSAddIn.PPTShow.FrmChart.MSChart, numUnit: sUnit); if (GlobalInfo.response.ShowPicture && (Globals.SunVoteARSAddIn.PPTShow.FrmChart != null) && (!Globals.SunVoteARSAddIn.PPTShow.FrmChart.Visible)) Globals.SunVoteARSAddIn.PPTShow.FrmChart.ShowCenter(); isShowChartForm = true; } else { //更新图表 //删除幻灯片中的图表 SlideChart.Height = Convert.ToInt32(cp.Height == 0 ? 400 : cp.Height); SlideChart.Width = Convert.ToInt32(cp.Width == 0 ? 400 : cp.Width); SlideChart.UpdateChart(numUnit: sUnit); } picName = System.Guid.NewGuid() + ".jpg"; //图片临时文件存放路径 fileName = GlobalInfo.PICTURETEMP_PATH + picName; TagSet.SetValue(TagKey.ChartPara_PictureName, picName); SlideChart.SaveAsPicture(GlobalInfo.PICTURETEMP_PATH, picName); Microsoft.Office.Core.MsoTriState msoTS = Microsoft.Office.Core.MsoTriState.msoFalse; ChartViewType chartViewType = EnumName.GetEnum(TagSet.GetValue(TagKey.ChartPara_ShowTime).Value); if (!IsInitChart) { switch (chartViewType) { case ChartViewType.csStop: if (GlobalInfo.response.BusinessStatus == ResponseStatus.bsStop) msoTS = Microsoft.Office.Core.MsoTriState.msoTrue; break; case ChartViewType.csStart: if (GlobalInfo.response.BusinessStatus == ResponseStatus.bsStart) msoTS = Microsoft.Office.Core.MsoTriState.msoTrue; break; default: msoTS = Microsoft.Office.Core.MsoTriState.msoFalse; break; } //2013-3-14 赵丽 if (Globals.SunVoteARSAddIn.PPTShow.ResponseType == ResponseType.SignIn) msoTS = Microsoft.Office.Core.MsoTriState.msoTrue; if (GlobalInfo.response.ShowPicture) msoTS = Microsoft.Office.Core.MsoTriState.msoTrue; else msoTS = Microsoft.Office.Core.MsoTriState.msoFalse; } else { msoTS = Microsoft.Office.Core.MsoTriState.msoTrue; } //杨斌 2014-08-07 ResponseType nowType = EnumName.GetEnum(tagSet.GetValue(TagKey.ResponseType).Value); switch (nowType) { case ResponseType.ScoreRankChart: case ResponseType.ScoreRankGroupChart: case ResponseType.SlideCompChart://杨斌 2014-12-10 case ResponseType.SlideCompGroup://杨斌 2017-01-19 case ResponseType.CompVote://杨斌 2017-06-11 msoTS = Microsoft.Office.Core.MsoTriState.msoTrue; break; case ResponseType.None: case ResponseType.Slide: if ((GlobalInfo.OEMLogo == OEMLogos.oemPowerVote) || (GlobalInfo.OEMLogo == OEMLogos.oemAngage)//杨斌 2018-03-22 || (GlobalInfo.OEMLogo == OEMLogos.SunVote))//杨斌 2018-03-27 msoTS = Microsoft.Office.Core.MsoTriState.msoTrue; break; } //如果图表不显示,则不要插入。杨斌 2013-03-14 Shape sha = null; //删除图表,放到添加图表之前,否则屏幕会闪 杨斌 2013-03-12 //杨斌 2020-08-27。柱状图固定位置大小 string chartType = TagSet.GetValue(TagKey.ChartPara_Type).Value; switch (chartType) { case "ctColumn": case "ctColumnBox": beKeepPos = true; break; } foreach (Shape s in slide.Shapes) { if (s.Name == "pic") { if (beKeepPos)//杨斌 2018-05-22 { cp.Left = s.Left; cp.Top = s.Top; cp.Width = s.Width; cp.Height = s.Height; } s.Delete(); } } if (chaShow == "csHide") return; //if (1 == 2) { if (!isShowChartForm)//杨斌 2016-06-17 sha = slide.Shapes.AddPicture(fileName, Microsoft.Office.Core.MsoTriState.msoTrue, Microsoft.Office.Core.MsoTriState.msoTrue, cp.Left, cp.Top, cp.Width, cp.Height); sha.Name = "pic";//杨斌 2019-02-22 //插入后居然大小比指定的小。杨斌 2019-07-26。然而加了这些修复代码后,演讲者模式图表更慢了:( if (sha.Left != cp.Left) sha.Left = cp.Left; if (sha.Top != cp.Top) sha.Top = cp.Top; if (sha.Width != cp.Width) sha.Width = cp.Width; if (sha.Height != cp.Height) sha.Height = cp.Height; //杨斌 2019-06-12。 if (Globals.SunVoteARSAddIn.PPTShow.IsShowSlide) { if (sha.Visible != msoTS)//杨斌 2019-03-01 sha.Visible = msoTS; } } if (msoTS != Microsoft.Office.Core.MsoTriState.msoTrue) msoTS = Microsoft.Office.Core.MsoTriState.msoTrue; //删除文件 SlideChart.DeletePicture(fileName); } /// /// 检查图表和选项文本是否在最顶端。 /// 杨斌 2014-12-08 /// public static void CheckOptionChartZOrder(Slide sld, Shape addShape) { List lstSha = new List(); foreach (Shape s in sld.Shapes) { if (s.Name == "pic") { lstSha.Add(s); } } Shape sha = PPTOper.GetOptionTextLinkShape(sld); if (sha != null) lstSha.Add(sha); //杨斌 2015-01-22 foreach (Shape s in sld.Shapes) { if (s.Name == "CorrectShape") { lstSha.Add(s); } } bool reSet = false; foreach (Shape s in lstSha) { if (addShape.ZOrderPosition > s.ZOrderPosition) { reSet = true; break; } } if (!reSet) return; foreach (Shape s in lstSha) { s.ZOrder(Microsoft.Office.Core.MsoZOrderCmd.msoBringToFront); } } /// /// 初始化插入幻灯片选项、类型 /// 修改:杨斌 2012-05-29 /// /// /// /// public void InitInsertSlideInfo(ResponseType responseType, int optionCount, int limitCout) { InsertSlideInfo.ResponseType = responseType; switch (responseType) { case ResponseType.SignIn: InsertSlideInfo.OptionCount = optionCount; InsertSlideInfo.OptionText = new string[InsertSlideInfo.OptionCount]; InsertSlideInfo.OptionText[0] = GlobalInfo.SysLanguage.LPT.ReadString("PPTOper", "SignIn", "已签到"); InsertSlideInfo.OptionText[1] = GlobalInfo.SysLanguage.LPT.ReadString("PPTOper", "UnSignIn", "未签到"); break; case ResponseType.Choice: InsertSlideInfo.OptionCount = optionCount; InsertSlideInfo.OptionLimit = limitCout; InsertSlideInfo.OptionText = PPTOper.GetOptionText(responseType, InsertSlideInfo.OptionCount); break; case ResponseType.Group: //InsertSlideInfo.OptionCount = 2; InsertSlideInfo.OptionCount = optionCount; InsertSlideInfo.OptionText = PPTOper.GetOptionText(responseType, InsertSlideInfo.OptionCount); break; case ResponseType.Judge: InsertSlideInfo.OptionCount = 2; InsertSlideInfo.OptionText = new string[InsertSlideInfo.OptionCount]; //这里选项内容为默认值,具体由菜单模板指定 InsertSlideInfo.OptionText[0] = "Yes"; InsertSlideInfo.OptionText[1] = "No"; break; case ResponseType.Vote: InsertSlideInfo.OptionCount = 3; InsertSlideInfo.OptionText = PPTOper.GetOptionText(responseType, InsertSlideInfo.OptionCount); break; case ResponseType.Grade: InsertSlideInfo.OptionCount = optionCount; InsertSlideInfo.OptionText = PPTOper.GetOptionText(responseType, InsertSlideInfo.OptionCount); break; case ResponseType.Order: InsertSlideInfo.OptionCount = optionCount; InsertSlideInfo.OptionLimit = limitCout; InsertSlideInfo.OptionText = PPTOper.GetOptionText(responseType, InsertSlideInfo.OptionCount); break; case ResponseType.Poll: break; case ResponseType.Score: break; case ResponseType.Number: break; case ResponseType.Text: break; case ResponseType.OperatorSlide://杨斌 2015-07-22 break; default: break; } } /// /// 是否启用插入对象子菜单,已存在或不支持的反馈类型则不能插入 /// 创建:杨斌 /// private void EnabledInsertObjectMenus() { try { //杨斌 2019-07-23 Globals.Ribbons.rbSunVoteARS.btnVoteCount.Visible = false; Globals.Ribbons.rbSunVoteARS.btnGradeAvg.Visible = false; Globals.Ribbons.rbSunVoteARS.btnVotePassResult.Visible = false; if (this.SlideEdit == null) { Globals.Ribbons.rbSunVoteARS.menuInsertObject.Enabled = false; return; } //插入对象总菜单 switch (this.ResponseTypeSlideEdit) { case ResponseType.Slide: case ResponseType.None: //if (GlobalInfo.OEMLogo == OEMLogos.oemPowerVote)//杨斌 2018-01-23 // Globals.Ribbons.rbSunVoteARS.menuInsertObject.Enabled = true; //else Globals.Ribbons.rbSunVoteARS.menuInsertObject.Enabled = false; return; default: Globals.Ribbons.rbSunVoteARS.menuInsertObject.Enabled = true; break; } //图表 switch (this.ResponseTypeSlideEdit) { case ResponseType.SignIn: case ResponseType.Group: case ResponseType.Choice: case ResponseType.Judge: case ResponseType.Vote: case ResponseType.Grade: Globals.Ribbons.rbSunVoteARS.menuChart.Enabled = true; break; default: Globals.Ribbons.rbSunVoteARS.menuChart.Enabled = false; break; } //计时器 Globals.Ribbons.rbSunVoteARS.btnTime.Enabled = true;// !PPTOper.HasDataTab(0, this.SlideEdit); //应到人数 //switch (this.ResponseTypeSlideEdit) //{ // case ResponseType.SignIn: // Globals.Ribbons.rbSunVoteARS.btnDueCount.Enabled = true;// !PPTOper.HasDataTab(1, this.SlideEdit); // break; // default: // Globals.Ribbons.rbSunVoteARS.btnDueCount.Enabled = false; // break; //} Globals.Ribbons.rbSunVoteARS.btnDueCount.Enabled = true; //2013-3-13 隐藏不需要的按钮 if (GlobalInfo.OEMLogo == OEMLogos.oem3eAnalyzer) Globals.Ribbons.rbSunVoteARS.btnDueCount.Visible = false; else Globals.Ribbons.rbSunVoteARS.btnDueCount.Visible = true; //参与人数 switch (this.ResponseTypeSlideEdit) { case ResponseType.SignIn: Globals.Ribbons.rbSunVoteARS.btnVoterCount.Enabled = false; Globals.Ribbons.rbSunVoteARS.btnVoterCount.Visible = false; break; default: Globals.Ribbons.rbSunVoteARS.btnVoterCount.Enabled = true;// !PPTOper.HasDataTab(11, this.SlideEdit); Globals.Ribbons.rbSunVoteARS.btnVoterCount.Visible = true; break; } //反馈人数 Globals.Ribbons.rbSunVoteARS.btnTime.Enabled = true;// !PPTOper.HasDataTab(2, this.SlideEdit); //正确答案、答对人数 switch (this.ResponseTypeSlideEdit) { case ResponseType.Choice: case ResponseType.Judge: case ResponseType.Order: case ResponseType.Number: Globals.Ribbons.rbSunVoteARS.btnCorrectAnswer.Enabled = true; Globals.Ribbons.rbSunVoteARS.menuRigntCount.Enabled = true; //Globals.Ribbons.rbSunVoteARS.btnCorrectAnswer.Visible = true; Globals.Ribbons.rbSunVoteARS.menuCorrectAnswer.Visible = true;//杨斌 2015-01-22 Globals.Ribbons.rbSunVoteARS.menuRigntCount.Visible = true; break; default: Globals.Ribbons.rbSunVoteARS.btnCorrectAnswer.Enabled = false; Globals.Ribbons.rbSunVoteARS.menuRigntCount.Enabled = false; //Globals.Ribbons.rbSunVoteARS.btnCorrectAnswer.Visible = false; Globals.Ribbons.rbSunVoteARS.menuCorrectAnswer.Visible = false;//杨斌 2015-01-22 Globals.Ribbons.rbSunVoteARS.menuRigntCount.Visible = false; break; } //评委分数、评分总分、评分平均分 switch (this.ResponseTypeSlideEdit) { case ResponseType.Score: Globals.Ribbons.rbSunVoteARS.btnScoreJudge.Enabled = true; Globals.Ribbons.rbSunVoteARS.btnScoreAvg.Enabled = true; Globals.Ribbons.rbSunVoteARS.btnScoreSum.Enabled = true; //if (GlobalInfo.OEMLogo == OEMLogos.oem3eAnalyzer) // Globals.Ribbons.rbSunVoteARS.btnScoreJudge.Visible = true; //else // Globals.Ribbons.rbSunVoteARS.btnScoreJudge.Visible = true; Globals.Ribbons.rbSunVoteARS.btnScoreJudge.Visible = false;//杨斌 2013-03-14 Globals.Ribbons.rbSunVoteARS.btnScoreAvg.Visible = true; Globals.Ribbons.rbSunVoteARS.btnScoreSum.Visible = true; Globals.Ribbons.rbSunVoteARS.btnMedian.Visible = true;//杨斌 2020-05-20 Globals.Ribbons.rbSunVoteARS.btnRange.Visible = true;//杨斌 2020-05-20 break; default: Globals.Ribbons.rbSunVoteARS.btnScoreJudge.Enabled = false; Globals.Ribbons.rbSunVoteARS.btnScoreAvg.Enabled = false; Globals.Ribbons.rbSunVoteARS.btnScoreSum.Enabled = false; Globals.Ribbons.rbSunVoteARS.btnScoreJudge.Visible = false; Globals.Ribbons.rbSunVoteARS.btnScoreAvg.Visible = false; Globals.Ribbons.rbSunVoteARS.btnScoreSum.Visible = false; //switch (GlobalInfo.OEMLogo)//杨斌 2020-05-20。2020-08-17 屏蔽Angage的判断,王源提出跟标准版保持一致 //{ // case OEMLogos.oemPowerVote: // case OEMLogos.oemAngage: // Globals.Ribbons.rbSunVoteARS.btnMedian.Visible = true; // Globals.Ribbons.rbSunVoteARS.btnRange.Visible = true; // break; // default: Globals.Ribbons.rbSunVoteARS.btnMedian.Visible = false; Globals.Ribbons.rbSunVoteARS.btnRange.Visible = false; //break; //} break; } //2012-10-17 增加选举排行 switch (this.ResponseTypeSlideEdit) { case ResponseType.Poll: Globals.Ribbons.rbSunVoteARS.btnPollRank.Enabled = true; //Globals.Ribbons.rbSunVoteARS.btnPollRank.Visible = true; break; default: Globals.Ribbons.rbSunVoteARS.btnPollRank.Enabled = false; //Globals.Ribbons.rbSunVoteARS.btnPollRank.Visible = false; break; } //Globals.Ribbons.rbSunVoteARS.btnTime.Visible = true; ////Globals.Ribbons.rbSunVoteARS.btnDueCount.Visible = true; ////Globals.Ribbons.rbSunVoteARS.btnVoterCount.Visible = true; //Globals.Ribbons.rbSunVoteARS.menuVotedCount.Visible = true; //Globals.Ribbons.rbSunVoteARS.menuNoVoteCount.Visible = true; ////Globals.Ribbons.rbSunVoteARS.btnMean.Visible = true; ////Globals.Ribbons.rbSunVoteARS.btnVoteCount.Visible = true; ////Globals.Ribbons.rbSunVoteARS.menuCorrectAnswer.Visible = true; ////Globals.Ribbons.rbSunVoteARS.menuRigntCount.Visible = true; //2013-3-11 赵丽 插入图表不显示 switch (this.ResponseTypeSlideEdit) { case ResponseType.Choice: case ResponseType.Grade: case ResponseType.Group: case ResponseType.Judge: case ResponseType.SignIn: case ResponseType.Vote: Globals.Ribbons.rbSunVoteARS.menuChart.Enabled = true; Globals.Ribbons.rbSunVoteARS.menuChart.Visible = true; break; default: //if (GlobalInfo.OEMLogo == OEMLogos.oemPowerVote)//杨斌 2018-01-23 //{ // Globals.Ribbons.rbSunVoteARS.menuChart.Enabled = true; // Globals.Ribbons.rbSunVoteARS.menuChart.Visible = true; // //Globals.Ribbons.rbSunVoteARS.btnTime.Visible = false; // //Globals.Ribbons.rbSunVoteARS.btnDueCount.Visible = false; // //Globals.Ribbons.rbSunVoteARS.btnVoterCount.Visible = false; // //Globals.Ribbons.rbSunVoteARS.menuVotedCount.Visible = false; // //Globals.Ribbons.rbSunVoteARS.menuNoVoteCount.Visible = false; // //Globals.Ribbons.rbSunVoteARS.btnMean.Visible = false; // //Globals.Ribbons.rbSunVoteARS.btnVoteCount.Visible = false; // //Globals.Ribbons.rbSunVoteARS.menuCorrectAnswer.Visible = false; // //Globals.Ribbons.rbSunVoteARS.menuRigntCount.Visible = false; //} //else //{ Globals.Ribbons.rbSunVoteARS.menuChart.Enabled = false; Globals.Ribbons.rbSunVoteARS.menuChart.Visible = false; //} break; } //平均值,不计算权重的人数和选项人数。2014-04-15 杨斌 switch (this.ResponseTypeSlideEdit) { case ResponseType.Choice: case ResponseType.Grade: case ResponseType.Judge: case ResponseType.Order: case ResponseType.Vote: Globals.Ribbons.rbSunVoteARS.btnMean.Enabled = true; Globals.Ribbons.rbSunVoteARS.btnMean.Visible = true; if ((GlobalInfo.OEMLogo == OEMLogos.oemPowerVote) || (GlobalInfo.OEMLogo == OEMLogos.oemAngage))//杨斌 2018-03-22 Globals.Ribbons.rbSunVoteARS.btnVoteCount.Visible = true;//杨斌 2016-11-11 else Globals.Ribbons.rbSunVoteARS.btnVoteCount.Visible = false; break; default: Globals.Ribbons.rbSunVoteARS.btnMean.Enabled = false; Globals.Ribbons.rbSunVoteARS.btnMean.Visible = false; Globals.Ribbons.rbSunVoteARS.btnVoteCount.Visible = false;//杨斌 2016-11-11 break; } Globals.Ribbons.rbSunVoteARS.btnGradeAvg.Visible = (this.ResponseTypeSlideEdit == ResponseType.Grade);//杨斌 2019-06-27 //杨斌 2018-07-27 if (ResponseTypeSlideEdit == ResponseType.Vote) { Globals.Ribbons.rbSunVoteARS.btnVotePassResult.Visible = (GlobalInfo.OEMLogo == OEMLogos.oemPowerVote) || (GlobalInfo.OEMLogo == OEMLogos.oemAngage) || (GlobalInfo.OEMLogo == OEMLogos.SunVote);//杨斌 2020-05-11 } else { Globals.Ribbons.rbSunVoteARS.btnVotePassResult.Visible = false; } } catch (Exception ex) { SystemLog.WriterLog(ex); } } /// /// 初始化幻灯片信息 /// 修改:杨斌 2012-03-14 /// 修改:杨斌 2012-06-13 /// /// public void InitSlideEdit(Slide slide) { //if ((InsertSlideInfo.AddSlideIndex != 0) && (slide != null))//插入的幻灯片 //{ //InsertSlideInfo.AddSlideIndex = 0; //设置类型 TagSet.Tags = slide.Tags; TagSet.ReadOnlyPPT = false; TagSet.SetValue(TagKey.ResponseType, ResponseTypeName.GetName(InsertSlideInfo.ResponseType)); TagSet.SetValue(TagKey.Slide_IsResponsed, 0); TagSet.SetValue(TagKey.Responsed, 0); TagSet.SetValue(TagKey.Picture_Left_Bar, 0); TagSet.SetValue(TagKey.Picture_Top_Bar, 0); //修改标志 赵丽 2012-06-06 存储图表的大小 TagSet.SetValue(TagKey.Picture_Height_Bar, 0); TagSet.SetValue(TagKey.Picture_Width_Bar, 0); TagSet.SetValue(TagKey.Picture_Left_Column, 200); TagSet.SetValue(TagKey.Picture_Top_Column, 100); //修改标志 赵丽 2012-06-06 存储图表的大小 TagSet.SetValue(TagKey.Picture_Height_Column, 400); TagSet.SetValue(TagKey.Picture_Width_Column, 400); //杨斌 2015-02-10 if (InsertSlideInfo.ResponseType == ResponseType.SlideCompChart) { int left = 80; TagSet.SetValue(TagKey.Picture_Left_Column, left); TagSet.SetValue(TagKey.Picture_Width_Column, slide.Master.Width - left * 2); } if (InsertSlideInfo.ResponseType == ResponseType.SlideCompGroup)//杨斌 2017-01-19 { //分组对比图表实现分组对比图表位置顺便修复上面对比图表位置超出幻灯片下边 int left = 80; TagSet.SetValue(TagKey.Picture_Left_Column, left); TagSet.SetValue(TagKey.Picture_Width_Column, slide.Master.Width - left * 2); } if (InsertSlideInfo.ResponseType == ResponseType.CompVote)//杨斌 2017-06-11 { int left = 80; TagSet.SetValue(TagKey.Picture_Left_Column, left); TagSet.SetValue(TagKey.Picture_Width_Column, slide.Master.Width - left * 2); } TagSet.SetValue(TagKey.Picture_Left_Pie, 200); TagSet.SetValue(TagKey.Picture_Top_Pie, 100); //修改标志 赵丽 2012-06-06 存储图表的大小 TagSet.SetValue(TagKey.Picture_Height_Pie, 400); TagSet.SetValue(TagKey.Picture_Width_Pie, 400); //原来是400,日语签到图表显示不全,杨斌 2012-08-27 if (InsertSlideInfo.ResponseType == ResponseType.SignIn) { TagSet.SetValue(TagKey.Picture_Left_Pie, 120); TagSet.SetValue(TagKey.Picture_Top_Pie, 100); TagSet.SetValue(TagKey.Picture_Height_Pie, 350); TagSet.SetValue(TagKey.Picture_Width_Pie, 550); } if (InsertSlideInfo.ResponseType == ResponseType.Vote)//杨斌 2013-03-11 { float defLeft = (Globals.SunVoteARSAddIn.Application.ActivePresentation.SlideMaster.Width - 400) / 2; TagSet.SetValue(TagKey.Picture_Left_Column, defLeft); } //2012-11-09 插入图表 显示 TagSet.SetValue(TagKey.IsExistChart, true); InitChartLoad(slide);//不加载上一次的 //设置选项个数 //杨斌 2015-01-07。下面标签统统不默认插入的类型:1,2,11,2 switch (InsertSlideInfo.ResponseType) { case ResponseType.SignIn: //if (GlobalInfo.OEMLogo != OEMLogos.SunVote)//杨斌 2015-01-26 { PPTOper.MenuInsertDataTab(1, slide); PPTOper.MenuInsertDataTab(2, slide); } if (GlobalInfo.OEMLogo == OEMLogos.SunVote)//杨斌 2015-01-26 TagSet.SetValue(TagKey.ChartPara_Type, "ctText");//杨斌 2015-01-15 break; case ResponseType.Group: TagSet.SetValue(TagKey.Group_OptionCount, InsertSlideInfo.OptionCount); //定时器标签 //2012-08-01 日本定制 默认插入定时器 15秒 if (GlobalInfo.OEMLogo == OEMLogos.oem3eAnalyzer) PPTOper.MenuInsertDataTab(0, slide); //if (GlobalInfo.OEMLogo != OEMLogos.SunVote)//杨斌 2015-01-26 //{ // PPTOper.MenuInsertDataTab(11, slide); // PPTOper.MenuInsertDataTab(2, slide); //} //2012-11-21 数据字体根据选项个数变化 赵丽 PPTOper.SetFontSize(InsertSlideInfo.OptionCount, TagSet); break; case ResponseType.Choice: if (GlobalInfo.OEMLogo == OEMLogos.oem3eAnalyzer) PPTOper.MenuInsertDataTab(0, slide); //if (GlobalInfo.OEMLogo != OEMLogos.SunVote)//杨斌 2015-01-26 //{ // PPTOper.MenuInsertDataTab(11, slide); // PPTOper.MenuInsertDataTab(2, slide); //} TagSet.SetValue(TagKey.Choice_OptionCount, InsertSlideInfo.OptionCount); TagSet.SetValue(TagKey.Choice_OptionLimit, InsertSlideInfo.OptionLimit); //2012-11-21 数据字体根据选项个数变化 赵丽 PPTOper.SetFontSize(InsertSlideInfo.OptionCount, TagSet); break; case ResponseType.Order: if (GlobalInfo.OEMLogo == OEMLogos.oem3eAnalyzer) PPTOper.MenuInsertDataTab(0, slide); //if (GlobalInfo.OEMLogo != OEMLogos.SunVote)//杨斌 2015-01-26 //{ // PPTOper.MenuInsertDataTab(11, slide); // PPTOper.MenuInsertDataTab(2, slide); //} TagSet.SetValue(TagKey.Order_OptionCount, InsertSlideInfo.OptionCount); TagSet.SetValue(TagKey.Order_OptionLimit, InsertSlideInfo.OptionLimit); string answer = ""; //2012-12-25 排序题默认正确答案加分隔符 赵丽 for (int i = 1; i <= InsertSlideInfo.OptionCount; i++) { if (i > 1) answer += "," + i.ToString(); else answer += i.ToString(); } TagSet.SetValue(TagKey.Order_CorrectAnswer, answer); break; case ResponseType.Number: case ResponseType.Text://杨斌 2015-01-12 if (GlobalInfo.OEMLogo == OEMLogos.oem3eAnalyzer) PPTOper.MenuInsertDataTab(0, slide); //if (GlobalInfo.OEMLogo != OEMLogos.SunVote)//杨斌 2015-01-26 //{ // PPTOper.MenuInsertDataTab(11, slide); // PPTOper.MenuInsertDataTab(2, slide); //} PPTOper.InsertTableNumberRank(slide);//杨斌 2014-10-22 break; case ResponseType.Poll://杨斌 2014-10-22 //if (GlobalInfo.OEMLogo != OEMLogos.SunVote)//杨斌 2015-01-26 //{ // PPTOper.MenuInsertDataTab(2, slide); // PPTOper.MenuInsertDataTab(11, slide); //} PPTOper.InsertTablePollRank(slide); break; case ResponseType.Score: if (GlobalInfo.OEMLogo == OEMLogos.oem3eAnalyzer) PPTOper.MenuInsertDataTab(0, slide); //if (GlobalInfo.OEMLogo != OEMLogos.SunVote)//杨斌 2015-01-26 //{ // PPTOper.MenuInsertDataTab(11, slide); // PPTOper.MenuInsertDataTab(2, slide); //} PPTOper.MenuInsertDataTab(5, slide); PPTOper.MenuInsertDataTab(6, slide); ////杨斌 2020-05-08。默认不插入。2020-05-20 //PPTOper.MenuInsertDataTab(19, slide); //PPTOper.MenuInsertDataTab(20, slide); TagSet.SetValue(TagKey.Score_ShowTotal, 1); TagSet.SetValue(TagKey.Score_ShowAvg, 1); ////杨斌 2015-07-30 //PPTOper.MenuInsertDataTab(16, slide); //PPTOper.MenuInsertDataTab(17, slide); TagSet.SetValue(TagKey.Score_ShowAvgGroup, 0); TagSet.SetValue(TagKey.Score_ShowAvgTableGroup, 0); break; case ResponseType.Judge: if (GlobalInfo.OEMLogo == OEMLogos.oem3eAnalyzer) PPTOper.MenuInsertDataTab(0, slide); //if (GlobalInfo.OEMLogo != OEMLogos.SunVote)//杨斌 2015-01-26 //{ // PPTOper.MenuInsertDataTab(11, slide); // PPTOper.MenuInsertDataTab(2, slide); //} break; case ResponseType.Vote: if (GlobalInfo.OEMLogo == OEMLogos.oem3eAnalyzer) PPTOper.MenuInsertDataTab(0, slide); //if (GlobalInfo.OEMLogo != OEMLogos.SunVote)//杨斌 2015-01-26 //{ // PPTOper.MenuInsertDataTab(11, slide); // PPTOper.MenuInsertDataTab(2, slide); //} TagSet.SetValue(TagKey.Vote_OptionCount, InsertSlideInfo.OptionCount); break; case ResponseType.Grade: if (GlobalInfo.OEMLogo == OEMLogos.oem3eAnalyzer) PPTOper.MenuInsertDataTab(0, slide); PPTOper.MenuInsertDataTab(12, slide);//杨斌 2014-11-04 //if (GlobalInfo.OEMLogo != OEMLogos.SunVote)//杨斌 2015-01-26 //{ // PPTOper.MenuInsertDataTab(11, slide); // PPTOper.MenuInsertDataTab(2, slide); //} TagSet.SetValue(TagKey.Grade_OptionCount, InsertSlideInfo.OptionCount); //2012-11-21 数据字体根据选项个数变化 赵丽 PPTOper.SetFontSize(InsertSlideInfo.OptionCount, TagSet); break; case ResponseType.ScoreRankChart: case ResponseType.ScoreRankGroupChart: break; case ResponseType.ScoreRankGroupMVP://杨斌 2015-06-09 PPTOper.ShowTableMVP(slide, true); break; case ResponseType.SlideCompChart://杨斌 2014-12-10 //杨斌 2014-12-15 TagSet.SetValue(TagKey.ChartPara_ItemLabelFontSize, "11"); TagSet.SetValue(TagKey.ChartPointWidth, "0.7"); break; case ResponseType.SlideCompGroup://杨斌 2017-01-19 //杨斌 2014-12-15 TagSet.SetValue(TagKey.ChartPara_ItemLabelFontSize, "11"); TagSet.SetValue(TagKey.ChartPointWidth, "0.7"); break; case ResponseType.OperatorSlide://杨斌 2015-07-22 break; case ResponseType.CompVote://杨斌 2017-06-07 //TagSet.SetValue(TagKey.ChartPara_ItemLabelFontSize, "11"); //TagSet.SetValue(TagKey.ChartPointWidth, "0.7"); PPTOper.ShowTableCompVote(slide, true); break; default: //if (GlobalInfo.OEMLogo != OEMLogos.SunVote)//杨斌 2015-01-26 //{ // PPTOper.MenuInsertDataTab(11, slide); // PPTOper.MenuInsertDataTab(2, slide); //} break; } //杨斌 2015-06-15 switch (InsertSlideInfo.ResponseType) { case ResponseType.Group: case ResponseType.Choice: case ResponseType.Order: case ResponseType.Number: case ResponseType.Text: case ResponseType.Poll: case ResponseType.Score: case ResponseType.Judge: case ResponseType.Vote: case ResponseType.Grade: if (GlobalInfo.sysConfig.InsertVoterCount) PPTOper.MenuInsertDataTab(11, slide); if (GlobalInfo.sysConfig.InsertVotedCount) PPTOper.MenuInsertDataTab(2, slide);//2,7,8 if (GlobalInfo.sysConfig.InsertNoVoteCount) PPTOper.MenuInsertDataTab(13, slide);//13,14,15 break; } //选项文本 string optionText = PPTOper.FormatShapeOptionText(InsertSlideInfo.OptionText); TagSet.SetValue(TagKey.Slide_OptionText, optionText); } /// /// 面板选项个数改变时,修改选项文本 /// 创建:赵丽 /// 修改:杨斌 2012-03-13 /// /// public void ModifyOptionText(int iCount) { ////删掉的选项文本,不自动追加回来。杨斌 2013-03-07 //Shape shaOption = PPTOper.GetOptionTextLinkShape(this.SlideEdit); //if (shaOption == null) return; string optionText = ""; string[] aryNow = null; TagSet.Tags = SlideEdit.Tags; switch (ResponseTypeSlideEdit) { case ResponseType.Group: case ResponseType.Choice: case ResponseType.Order: case ResponseType.Judge: case ResponseType.Vote: case ResponseType.Grade: //选项文本默认值 //读取选项文本 //选项文本默认值 //杨斌 2018-10-16 int maxItem = GlobalInfo.MaxOptionCount; if ((ResponseTypeSlideEdit == ResponseType.Choice) || (ResponseTypeSlideEdit == ResponseType.Group))//超过10个选项添加分组的类型。杨斌 2018-05-17 maxItem = GlobalInfo.MaxOptionCountAdv; string[] ary = PPTOper.GetOptionText(ResponseTypeSlideEdit, iCount, maxItem); optionText = TagSet.LoadValue(TagKey.Slide_OptionText, optionText).Value; ////打开的幻灯片换行符"\n" //if (optionText.IndexOf("\r\n") == -1) // aryNow = optionText.Split(new string[] { "\n" }, StringSplitOptions.RemoveEmptyEntries); //else // aryNow = optionText.Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries); //杨斌 2012-03-05 格式化\r\n optionText = optionText.Replace("\r\n", "\r"); optionText = optionText.Replace("\n", "\r"); aryNow = optionText.Split(new string[] { "\r" }, StringSplitOptions.RemoveEmptyEntries); //保留原来的选项内容。杨斌 2013-09-18 string[] aryOld = PPTOper.GetOptionTextBySlide(this.SlideEdit); if (aryOld != null)//杨斌 2014-06-03 { for (int i = 0; i < aryOld.Length; i++) { TagSet.SetValue(TagKey.Slide_OptionTextOld, i + 1, aryOld[i]); } } for (int i = 0; i < ary.Length; i++) { ary[i] = TagSet.LoadValue(TagKey.Slide_OptionTextOld, i + 1, ary[i]).Value; } optionText = string.Join("\r\n", ary); //插入选项文本 bool bABCD = (TagSet.GetValue(TagKey.KeypadPara_OptionMode).ToInt == 1);//杨斌 2012-06-25 if (PPTOper.GetOptionTextLinkShape(SlideEdit) == null) PPTOper.AddShapeOptionText(SlideEdit, optionText, bABCD); break; default: break; } TagSet.SetValue(TagKey.Slide_OptionText, optionText); Shape shape = PPTOper.GetOptionTextLinkShape(SlideEdit); if (shape != null) { //判断文本是否需要改变,以免使ppt文件没修改也提示要保存 杨斌 2012-03-02 if (shape.HasTextFrame == Microsoft.Office.Core.MsoTriState.msoTrue)//杨斌 2014-06-03 { if (shape.TextFrame.TextRange.Text != optionText) shape.TextFrame.TextRange.Text = optionText; } } } /// /// 插入幻灯片,从菜单调用 /// /// /// public void AddSlide() { AddSlide(SlideEdit); } /// /// 获取反馈幻灯片的正确答案 /// 创建:杨斌 2012-03-15 /// /// /// /// public string GetSlideCorrectAnswer(Slide slide, ResponseType type) { string res = ""; if (slide == null) return res; TagSet tagSet = new TagSet(slide.Tags); int scoreMode = 0; try { switch (type) { case ResponseType.Choice: scoreMode = tagSet.GetValue(TagKey.Choice_ScoreMode).ToInt; if ((scoreMode == 0) || (scoreMode == 2))//杨斌 2018-05-08。必须是按正确答案计分才有正确答案,杨斌 2012-03-23 res = tagSet.GetValue(TagKey.Choice_CorrectAnswer).Value; if (scoreMode == 1)//杨斌 2012-10-22 { res = tagSet.GetValue(TagKey.Choice_CorrectAnswer2).Value; //多个选项用","分隔开。杨斌 2019-01-09 List lst = new List(); foreach (var v in res) { lst.Add(v + ""); } res = string.Join(",", lst); } break; case ResponseType.Judge: scoreMode = tagSet.GetValue(TagKey.Judge_ScoreMode).ToInt; if (scoreMode == 0)//必须是按正确答案计分才有正确答案,杨斌 2012-03-23 res = tagSet.GetValue(TagKey.Judge_CorrectAnswer).Value; if (scoreMode == 1)//杨斌 2012-10-22 res = tagSet.GetValue(TagKey.Judge_CorrectAnswer2).Value; break; case ResponseType.Order: res = tagSet.GetValue(TagKey.Order_CorrectAnswer).Value; break; case ResponseType.Number: case ResponseType.Text: res = tagSet.GetValue(TagKey.Number_CorrectAnswer).Value; break; } } catch (Exception ex) { SystemLog.WriterLog(ex, false); } return res; } /// /// 获取错误答案扣分。杨斌 2015-05-07 /// /// /// /// public string GetSlideWrongScore(Slide slide, ResponseType type) { string res = ""; string asw = ""; if (slide == null) return res; TagSet tagSet = new TagSet(slide.Tags); int scoreMode = 0; try { switch (type) { case ResponseType.Choice: scoreMode = tagSet.GetValue(TagKey.Choice_ScoreMode).ToInt; if ((scoreMode == 0) || (scoreMode == 2))//杨斌 2018-05-08。必须是按正确答案计分才有正确答案 { asw = tagSet.GetValue(TagKey.Choice_CorrectAnswer).Value; if (asw.Length > 0) res = tagSet.GetValue(TagKey.Choice_ScoreWrong).Value; } break; case ResponseType.Judge: scoreMode = tagSet.GetValue(TagKey.Judge_ScoreMode).ToInt; if (scoreMode == 0)//必须是按正确答案计分才有正确答案 { asw = tagSet.GetValue(TagKey.Judge_CorrectAnswer).Value; if (asw.Length > 0) res = tagSet.GetValue(TagKey.Judge_ScoreWrong).Value; } break; case ResponseType.Order: asw = tagSet.GetValue(TagKey.Order_CorrectAnswer).Value; if (asw.Length > 0) res = tagSet.GetValue(TagKey.Order_ScoreWrong).Value; break; case ResponseType.Number: case ResponseType.Text: asw = tagSet.GetValue(TagKey.Number_CorrectAnswer).Value; if (asw.Length > 0) res = tagSet.GetValue(TagKey.Number_ScoreWrong).Value; break; } } catch (Exception ex) { SystemLog.WriterLog(ex, false); } return res; } /// /// 获取正确答案得分 /// 杨斌 2015-09-06 /// /// /// /// public string GetSlideRightScore(Slide slide, ResponseType type) { string res = ""; string asw = ""; if (slide == null) return res; TagSet tagSet = new TagSet(slide.Tags); int scoreMode = 0; try { switch (type) { case ResponseType.Choice: scoreMode = tagSet.GetValue(TagKey.Choice_ScoreMode).ToInt; if ((scoreMode == 0) || (scoreMode == 2))//杨斌 2018-05-08。必须是按正确答案计分才有正确答案 { asw = tagSet.GetValue(TagKey.Choice_CorrectAnswer).Value; if (asw.Length > 0) res = tagSet.GetValue(TagKey.Choice_ScoreRight).Value; } break; case ResponseType.Judge: scoreMode = tagSet.GetValue(TagKey.Judge_ScoreMode).ToInt; if (scoreMode == 0)//必须是按正确答案计分才有正确答案 { asw = tagSet.GetValue(TagKey.Judge_CorrectAnswer).Value; if (asw.Length > 0) res = tagSet.GetValue(TagKey.Judge_ScoreRight).Value; } break; case ResponseType.Order: asw = tagSet.GetValue(TagKey.Order_CorrectAnswer).Value; if (asw.Length > 0) res = tagSet.GetValue(TagKey.Order_ScoreRight).Value; break; case ResponseType.Number: case ResponseType.Text: asw = tagSet.GetValue(TagKey.Number_CorrectAnswer).Value; if (asw.Length > 0) res = tagSet.GetValue(TagKey.Number_ScoreRight).Value; break; } } catch (Exception ex) { SystemLog.WriterLog(ex, false); } return res; } /// /// 默认百分比小数位数 /// 创建:杨斌 2012-06-11 /// public static int DefPercentDecCount = 1; /// /// 编辑时刷新数据标签 /// 创建:杨斌 2012-03-15 /// 修改:杨斌 2012-06-01 /// 修改:杨斌 2012-06-11 搜索:DefPercentDecCount /// /// public void RefreshLabelEdit(DataLabelType labelType) { Slide slide = this.SlideEdit; if (slide == null) return; try { string shapeName = EnumName.GetName(labelType); TagSet tagSet = null; try { tagSet = new TagSet(slide.Tags); } catch (Exception ee) { SystemLog.WriterLog(ee, false); } if (tagSet == null) return; int dueNum = tagSet.GetValue(TagKey.Slide_Dueno).ToInt;//应到人数 double voterNum = tagSet.GetValue(TagKey.Slide_ParticipantNum).ToInt;//参与人数 double submitNum = tagSet.GetValue(TagKey.Slide_SubmitNum).ToInt;//反馈人数 int submitNumNoRate = (int)submitNum;//反馈人数无权重。杨斌 2019-01-14 int correctNum = tagSet.GetValue(TagKey.Slide_CorrectNum).ToInt;//答对人数 string meanNum = tagSet.GetValue(TagKey.Slide_VoteMean).Value;//平均值。杨斌 2014-04-15 int signedNum = -1;//杨斌 2018-12-25 //不带权重。杨斌 2018-07-30 double ParticipateNum_Men = tagSet.GetValue(TagKey.Slide_ParticipantNum_Men).ToInt;//参与人数 double votedOk_Men = tagSet.GetValue(TagKey.Slide_SubmitNum_Men).ToInt;//反馈人数 //杨斌 2015-03-27 string colName = tagSet.GetValue(TagKey.ResponsePara_VoteRateField).Value; bool isRate = (colName.Length > 0); if (isRate) { voterNum = GlobalInfo.response.GetParticipantNum(Globals.SunVoteARSAddIn.PPTEdit.ResponseTypeSlideEdit, slide); submitNum = GlobalInfo.response.GetResponseNum(); } //else//杨斌 2015-06-03 //{ // GlobalInfo.response.InitRosterVoteRate(Globals.SunVoteARSAddIn.PPTEdit.SlideEdit); //} string sPercent = "";//百分比 //百分比分母,如图表、正确率 string percentMode = tagSet.GetValue(TagKey.ChartPara_DataPercentBase).Value; double percentCountCorrect = voterNum;//默认"crParticipant" switch (percentMode) { case "crResponse": percentCountCorrect = submitNum; //杨斌 2015-03-27 //percentCountCorrect = tagSet.GetValue(TagKey.Slide_SubmitNum).ToInt; //percentCountCorrect = GlobalInfo.response.ResponseDataList.Count; break; case "crParticipant": break; } //杨斌 2015-06-03 if (isRate) percentCountCorrect = GlobalInfo.response.GetParticipantNumNoRate(Globals.SunVoteARSAddIn.PPTEdit.ResponseTypeSlideEdit, slide); else percentCountCorrect = voterNum; double notVoted = voterNum - submitNum;//未按人数/票数。杨斌 2015-04-20 foreach (Shape shape in slide.Shapes) { if (shape.Name == shapeName) { switch (shape.Name) { case "DUENO"://应到人数 PPTOper.ShowLabelData(shape, dueNum.ToString()); break; case "SIGNED"://实到人数。杨斌 2018-12-20 if (signedNum == -1) signedNum = ReportEx.GetSignedNum(slide);//实到人数=上一个签到的人数。杨斌 2018-12-24 PPTOper.ShowLabelData(shape, signedNum.ToString()); break; case "NOTSIGNED"://未到人数。杨斌 2019-01-14 if (signedNum == -1) signedNum = ReportEx.GetSignedNum(slide);//实到人数=上一个签到的人数。 int notSignedNum = dueNum - signedNum;//未到人数 PPTOper.ShowLabelData(shape, notSignedNum.ToString()); break; case "VotingMissSigned"://已到未按人数。杨斌 2019-01-14 //if (signedNum == -1) // signedNum = ReportEx.GetSignedNum(slide);//实到人数=上一个签到的人数。 //int notVotedSigned = signedNum - submitNumNoRate; var lstIDSin = ReportEx.GetSignedIDs(slide); var lstIDRes = ReportEx.GetResponseIDs(slide); int notVotedSigned = 0; foreach (var v in lstIDSin) { if (!lstIDRes.Contains(v)) notVotedSigned++; } PPTOper.ShowLabelData(shape, notVotedSigned.ToString()); break; case "PARTICIPATE"://参与人数 PPTOper.ShowLabelData(shape, voterNum.ToString()); break; case "VOTENO"://反馈人数 PPTOper.ShowLabelData(shape, submitNum.ToString()); break; case "VOTENOP"://反馈人数-百分比 sPercent = ConvertOper.GetPercent(submitNum, voterNum, DefPercentDecCount); PPTOper.ShowLabelData(shape, sPercent); break; case "VOTENOPV"://反馈人数-数值+百分比 sPercent = ConvertOper.GetPercent(submitNum, voterNum, DefPercentDecCount); PPTOper.ShowLabelData(shape, submitNum.ToString() + " (" + sPercent + ")"); break; //杨斌 2015-04-20 case "VOTEMiss"://未按人数 PPTOper.ShowLabelData(shape, notVoted.ToString()); break; case "VOTEMissP"://未按人数-百分比 sPercent = ConvertOper.GetPercent(notVoted, voterNum, DefPercentDecCount); PPTOper.ShowLabelData(shape, sPercent); break; case "VOTEMissPV"://未按人数-数值+百分比 sPercent = ConvertOper.GetPercent(notVoted, voterNum, DefPercentDecCount); PPTOper.ShowLabelData(shape, notVoted.ToString() + " (" + sPercent + ")"); break; case "VOTEMEAN"://反馈平均值 if ((GlobalInfo.OEMLogo == OEMLogos.oemiPericles) && (GlobalInfo.OEMLogo2 == OEMLogos2.oemHideData))//杨斌 2020-03-06 { meanNum = "--"; } PPTOper.ShowLabelData(shape, meanNum); break; case "GradeAvg"://评议平均分。2019-06-27 string sGradeAvg = tagSet.GetValue(TagKey.Slide_GradeAvg).Value; sGradeAvg = ConvertOper.Convert(sGradeAvg).ToDouble.ToString(); PPTOper.ShowLabelData(shape, sGradeAvg); break; case "ANSWER"://正确答案 string correctAsw = GetSlideCorrectAnswer(slide, Globals.SunVoteARSAddIn.PPTEdit.ResponseTypeSlideEdit); //杨斌 2012-07-02 bool bABCD = (tagSet.GetValue(TagKey.KeypadPara_OptionMode).ToInt == 1); if (bABCD) correctAsw = PPTOper.FormatNumABC(correctAsw); PPTOper.ShowLabelData(shape, correctAsw); break; case "CRRECTNO"://答对人数 PPTOper.ShowLabelData(shape, correctNum.ToString()); break; case "CRRECTNOP"://答对人数-百分比 sPercent = ConvertOper.GetPercent(correctNum, percentCountCorrect, DefPercentDecCount); PPTOper.ShowLabelData(shape, sPercent); break; case "CRRECTNOPV"://答对人数-数值+百分比 sPercent = ConvertOper.GetPercent(correctNum, percentCountCorrect, DefPercentDecCount); PPTOper.ShowLabelData(shape, correctNum.ToString() + " (" + sPercent + ")"); break; case "SUMSCORE"://评分总分 string scoreSUM = tagSet.GetValue(TagKey.Slide_ScoreSUM).Value; PPTOper.ShowLabelData(shape, scoreSUM); break; case "AVGSCORE"://评分平均分 string scoreAVG = tagSet.GetValue(TagKey.Slide_ScoreAVG).Value; PPTOper.ShowLabelData(shape, scoreAVG); break; case "AVGScoreGroup"://评委分组平均分。杨斌 2015-07-28 string scoreAvgG = tagSet.GetValue(TagKey.Slide_ScoreAVGGroup).Value; PPTOper.ShowLabelData(shape, scoreAvgG); break; case "AVGScoreTableGroup"://评委分组平均分表格。杨斌 2015-07-28 string scoreAvgGT = tagSet.GetValue(TagKey.Slide_ScoreAVGGroupTable).Value; //PPTOper.ShowLabelData(shape, scoreAvgGT); break; case "VoteMedian"://平均值。杨斌 2016-03-29 string voteMedian = tagSet.GetValue(TagKey.Slide_VoteMedian).Value; if ((GlobalInfo.OEMLogo == OEMLogos.oemiPericles) && (GlobalInfo.OEMLogo2 == OEMLogos2.oemHideData))//杨斌 2020-03-06 { voteMedian = "--"; } PPTOper.ShowLabelData(shape, voteMedian); break; case "VoteRange"://投票范围。杨斌 2016-03-29 string voteRange = tagSet.GetValue(TagKey.Slide_VoteRange).Value; PPTOper.ShowLabelData(shape, voteRange); break; case "VotePassResult"://表决通过结果。杨斌 2018-07-25 string pass = GlobalInfo.SysLanguage.LPT.ReadString("PanelVote", "VotePass", "Pass"); string noPass = GlobalInfo.SysLanguage.LPT.ReadString("PanelVote", "VoteNotPass", "Not Pass"); bool isPass = IsVotePass(slide); string passResult = isPass ? pass : noPass; PPTOper.ShowLabelData(shape, passResult); break; case "PARTICIPATE_Men"://参与人数-不带权重。杨斌 2018-07-30 PPTOper.ShowLabelData(shape, ParticipateNum_Men.ToString()); break; case "VOTENO_Men"://反馈人数-不带权重。杨斌 2018-07-30 PPTOper.ShowLabelData(shape, votedOk_Men.ToString()); break; case "VOTENOP_Men"://反馈人数-百分比-不带权重。杨斌 2018-07-30 sPercent = ConvertOper.GetPercent(votedOk_Men, ParticipateNum_Men, PPTEdit.DefPercentDecCount); PPTOper.ShowLabelData(shape, sPercent); break; case "VOTENOPV_Men"://反馈人数-数值+百分比-不带权重。杨斌 2018-07-30 sPercent = ConvertOper.GetPercent(votedOk_Men, ParticipateNum_Men, PPTEdit.DefPercentDecCount); PPTOper.ShowLabelData(shape, votedOk_Men.ToString() + " (" + sPercent + ")"); break; default: break; } } } if (labelType == DataLabelType.ANSWER) { PPTOper.SetCorrectShape(slide, false, Globals.Ribbons.rbSunVoteARS.btnCorrectShape.Image);//杨斌 2015-01-23 } } catch (Exception ex) { SystemLog.WriterLog(ex); } } /// /// 获取分数或小数的精确值 /// public static double GetNumByFraction(string fraction) { double res = -1; var ary = fraction.Split('/'); if (ary.Length == 2) { double d1 = 0; double d2 = 0; double.TryParse(ary[0], out d1); double.TryParse(ary[1], out d2); if (d2 != 0) res = d1 / d2; } else { double.TryParse(fraction, out res); } return res; } /// /// 计算表决是否通过。杨斌 2018-07-26 /// public static bool IsVotePass(Slide sld) { bool res = false; try { TagSet tagSet = new TagSet(sld.Tags); double voteYesCount = tagSet.GetValue(TagKey.VoteYesCount).ToDouble;//赞成人数 double voteNoCount = tagSet.GetValue(TagKey.VoteNoCount).ToDouble;//反对人数。杨斌 2019-05-22 double voterNum = tagSet.GetValue(TagKey.Slide_ParticipantNum).ToDouble;//参与人数 double submitNum = tagSet.GetValue(TagKey.Slide_SubmitNum).ToDouble;//反馈人数 res = IsVotePass(sld, voteYesCount, voterNum, submitNum, voteNoCount);//杨斌 2019-05-22 } catch (Exception ex) { SystemLog.WriterLog(ex); } return res; } /// /// 计算表决是否通过。杨斌 2018-10-31 /// public static bool IsVotePass(Slide sld, double voteYesCount, double voterNum, double submitNum, double voteNoCount) { bool res = false; try { TagSet tagSet = new TagSet(sld.Tags); //一下是不带权重算法 //double voterNum = GlobalInfo.response.GetParticipateNum();//参与人数 //double voteYesCount = 0;//赞成人数 //double submitNum = 0;//反馈人数 //foreach (var v in GlobalInfo.response.ResponseOptionListNoRate) //{ // submitNum += v.Value; // if (v.Key == "0") // voteYesCount = v.Value; //} //double voteYesCount = tagSet.GetValue(TagKey.VoteYesCount).ToDouble;//赞成人数 //double voterNum = tagSet.GetValue(TagKey.Slide_ParticipantNum).ToDouble;//参与人数 //double submitNum = tagSet.GetValue(TagKey.Slide_SubmitNum).ToDouble;//反馈人数 int passMode = tagSet.GetValue(TagKey.Vote_PassMode).ToInt;//0为>=,1为> int passBy = tagSet.GetValue(TagKey.Vote_PassBy).ToInt;//0=按比率,1=按绝对值 string passByRateVal = tagSet.GetValue(TagKey.Vote_PassByRateValue).Value;//0.5或1/2 int passByCountVal = tagSet.GetValue(TagKey.Vote_PassByCountValue).ToInt;//通过需要的票数 int passRateMode = tagSet.GetValue(TagKey.Vote_PassRateMode).ToInt;//0=按参与人数,1=按反馈人数,2按Yes+No。杨斌 2019-05-22 if (passBy == 1)//按绝对值 { if (passMode == 1) res = (voteYesCount > passByCountVal); else res = (voteYesCount >= passByCountVal); } else//按比率 { double per = GetNumByFraction(passByRateVal); if (per >= 0) { //按Yes+No。杨斌 2019-05-22 double perNum = 0; if (passRateMode == 2)//按Yes+No perNum = voteYesCount + voteNoCount; else if (passRateMode == 1)//按反馈人数 perNum = submitNum; else//按参与人数 perNum = voterNum; if (perNum > 0) { if (passMode == 1) res = ((voteYesCount / perNum) > per); else res = ((voteYesCount / perNum) >= per); } } } } catch (Exception ex) { SystemLog.WriterLog(ex); } return res; } /// /// 调试用 /// public event DebugEvent DebugEventHandle; public void SendEmail(Presentation Pres) { if (GlobalInfo.OEMLogo != OEMLogos.oemOptionMaker) return; if (string.IsNullOrEmpty(GlobalInfo.sysConfig.EmailSet.MailFromAddress)) return; //if (string.IsNullOrEmpty(GlobalInfo.sysConfig.EmailSet.MailServer)) return;//用Outlook不用检测。杨斌 2015-02-14 if (GlobalInfo.sysConfig.EmailSet.MailToAddressList.Count < 1) return; if (GlobalInfo.sysConfig.ReportEmailList.Count < 1) return; int recordCount = 0; string sql = "SELECT Count(ST_Response.R_ID) AS RecordCount FROM ST_Response;"; DataSet ds = GlobalInfo.DBOperation.GetDataSet(sql); if (ds.Tables.Count > 0) recordCount = ConvertOper.Convert(ds.Tables[0].Rows[0][0].ToString()).ToInt; ds.Dispose(); if (recordCount < 1) return; //ToDo:替换下面对话框为自定义窗体,增加操作员姓名,OptionMaker需求。杨斌 2015-07-07 if (MessageBox.Show(GlobalInfo.SysLanguage.LPT.ReadString("FrmSystemSet", "SendMsgAsk", "是否发送报表邮件?"), GlobalInfo.SysLanguage.LPT.ReadString("FrmSystemSet", "SendMsgAskTitle", "报表邮件"), MessageBoxButtons.YesNo) != DialogResult.Yes) return; string presFileName = ""; GlobalInfo.sysConfig.EmailSet.Subject = "Response Report " + DateTime.Now.ToString(); if (Pres != null) { presFileName = Path.GetFileName(Pres.FullName); GlobalInfo.sysConfig.EmailSet.Subject = Path.GetFileName(Pres.FullName) + " Report " + DateTime.Now.ToString(); presFileName = "(" + presFileName + ")"; } GlobalInfo.sysConfig.EmailSet.Body = ""; //杨斌 2015-02-15 INIControl.GetInstances(GlobalInfo.SYSTEM_CONFIG_PATH).WriteValue("ReportEmail", "MailSubject", GlobalInfo.sysConfig.EmailSet.Subject); FrmProgress frmPro = new FrmProgress(); frmPro.Show(); frmPro.proBar.Maximum = GlobalInfo.sysConfig.ReportEmailList.Count + 1;//生成报表数+发送步骤。 frmPro.proBar.Value = 0; string dir = GlobalInfo.APP_DIR + @"\Resources\ReportTemp\"; if (!Directory.Exists(dir)) Directory.CreateDirectory(dir); //添加报表附件 GlobalInfo.sysConfig.EmailSet.AttachmentsFileList.Clear(); ResponseDB.UpdateSlideIndexToDB(); string path = ""; string sAttachment = "";//杨斌 2015-02-15 foreach (var v in GlobalInfo.sysConfig.ReportEmailList) { path = ""; if (v == "ReportByQuestion") { path = dir + Globals.Ribbons.rbSunVoteARS.btnReportQuestion.Label + presFileName + ".xlsx"; ReportEx.ExportReportQuestion(path); } if (v == "ReportByVoter") { path = dir + Globals.Ribbons.rbSunVoteARS.btnReportVoter.Label + presFileName + ".xlsx"; ReportEx.ExportReportVoter(path); } if (v == "ReportByScore") { path = dir + Globals.Ribbons.rbSunVoteARS.btnReportScore.Label + presFileName + ".xlsx"; ReportEx.ExportReportScore(GlobalInfo.response.ShowNameCol, path); } if (File.Exists(path))//杨斌 2015-02-15 { if (sAttachment.Length > 0) sAttachment += ";"; sAttachment += path; GlobalInfo.sysConfig.EmailSet.AttachmentsFileList.Add(path); } frmPro.proBar.Value++; } //杨斌 2015-02-15 INIControl.GetInstances(GlobalInfo.SYSTEM_CONFIG_PATH).WriteValue("ReportEmail", "Attachment", sAttachment); string res = GlobalInfo.sysConfig.EmailSet.SendExe(); if (res.Length > 0) { MessageBox.Show(GlobalInfo.SysLanguage.LPT.ReadString("FrmSystemSet", "SendMsgFail", "发送失败!错误信息:") + "\r\n\r\n" + res); } else { frmPro.proBar.Value++; frmPro.lblMsg.Text = GlobalInfo.SysLanguage.LPT.ReadString("FrmSystemSet", "SendMsgSuccess", "发送成功!"); //MessageBox.Show(GlobalInfo.SysLanguage.LPT.ReadString("FrmSystemSet", "SendMsgSuccess", "发送成功!")); } frmPro.Close(); } } /// /// 排行数据 /// 杨斌 2014-08-07 /// public class RankChartData { public int rank = 0; public string name = ""; public double score = 0; } /// /// 分组MVP排行数据 /// 杨斌 2015-06-15 /// public class RankGroupMVPData { public int rank = 0; public string group = ""; public string name = ""; public double score = 0; public double speed = 0;//杨斌 2015-08-10 } /// /// 评分竞价排名 /// public class RankScorePrice { public int rank = 0; public int keyID = 0; public string keySN = ""; public string name = ""; public double price = 0; public DateTime time = DateTime.Now; } }