private void comboBox1_SelectedIndexChanged(object sender, EventArgs e) { CEntityName item = comboBox1.SelectedItem as CEntityName; if (item != null) { DrawEntityData drawEntityData = App.Instance.Sqlite.SelectDrawEntityData(item.EntityName, null, null); this.dataGridView1.DataSource = drawEntityData.Data; this.dataGridView2.DataSource = null; App.Instance.SelectedNoInfoEntity = item.EntityName; } }
public void readExcelData(string fileName, SheetInfo sheetInfo, string parts2) { ExcelHelper eHelper = new ExcelHelper(); eHelper.Open(fileName); int sheetNum = eHelper.GetSheetCount(); if (sheetNum == 0) { throw new Exception("Excel表格为空"); } //实体名 sheetInfo.EntityNames = new List <string>(); switch (parts2) { //属性数据 case "I": { //属性名,即表头 sheetInfo.KeyNames = new List <string>(); sheetInfo.InfoRows = new List <InfoEntityData>(); int col = eHelper.GetUsedColumnCount(0); eHelper.SetActiveSheet(0); //读取表头,即KeyNames for (int c = 1; c < col; c++) { string value = eHelper.GetCellValue(0, c); if (!string.IsNullOrWhiteSpace(value)) { sheetInfo.KeyNames.Add(value); } } //读取表格数据 for (int i = 0; i < sheetNum; i++) { eHelper.SetActiveSheet(i); //当前sheet的行数 int row = eHelper.GetUsedRowCount(i); //读取EntityNames,跳过第一行 for (int r = 1; r < row; r++) { string value = eHelper.GetCellValue(r, 0); if (!string.IsNullOrWhiteSpace(value)) { sheetInfo.EntityNames.Add(value); InfoEntityData infoEntityData = new InfoEntityData(); infoEntityData.EntityName = value; infoEntityData.Data = new Dictionary <string, string>(); //读取属性值 for (int c = 1; c < col; c++) { string key2 = eHelper.GetCellValue(r, c); if (!string.IsNullOrWhiteSpace(key2)) { string key1 = eHelper.GetCellValue(0, c); if (string.IsNullOrWhiteSpace(key1)) { throw new Exception("属性值对应表头为空"); } if (!key1.Equals(sheetInfo.KeyNames[c - 1])) { throw new Exception("前后表头不一致"); } infoEntityData.Data.Add(key1, key2); } } sheetInfo.InfoRows.Add(infoEntityData); } } } break; } //一般的测量数据 case "C": { sheetInfo.DrawRows = new List <DrawEntityData>(); sheetInfo.EntityNames = new List <string>(); for (int i = 0; i < sheetNum; i++) { eHelper.SetActiveSheet(i); int row = eHelper.GetUsedRowCount(i); int col = eHelper.GetUsedColumnCount(i); //读取实体列表 for (int r = 1; r < row; r++) { string entityName = eHelper.GetCellValue(r, 0); if (!string.IsNullOrWhiteSpace(entityName)) { sheetInfo.EntityNames.Add(entityName); DrawEntityData drawEntityData = new DrawEntityData(); drawEntityData.EntityName = entityName; drawEntityData.Data = new List <DrawData>(); //读取数据和对应的日期,数据为空,则不读取日期 //后续会统一excel表格中的日期格式 for (int c = 1; c < col; c++) { string value = eHelper.GetCellValue(r, c); if (!string.IsNullOrWhiteSpace(value)) { float dValue = 0; try { dValue = float.Parse(value); } catch (Exception) { continue; } dValue = (float)Math.Round(dValue, 5, MidpointRounding.AwayFromZero); double date = Convert.ToDouble(eHelper.GetCellValue(0, c)); DateTime dateTime; try { dateTime = DateTime.FromOADate(date); } catch (Exception) { throw; } DrawData drawData = new DrawData(); drawData.Date = dateTime; drawData.MaxValue = drawData.MidValue = drawData.MinValue = dValue; drawData.Detail = dValue.ToString(); drawEntityData.Data.Add(drawData); } } sheetInfo.DrawRows.Add(drawEntityData); } } } break; } case "CX": { sheetInfo.DrawRows = new List <DrawEntityData>(); sheetInfo.EntityNames = new List <string>(); StringBuilder text = new StringBuilder(); for (int i = 0; i < sheetNum; i++) { eHelper.SetActiveSheet(i); string entityName = eHelper.GetCellValue(0, 0); if (string.IsNullOrWhiteSpace(entityName)) { throw new Exception("数据异常"); } sheetInfo.EntityNames.Add(entityName); DrawEntityData drawEntityData = new DrawEntityData(); drawEntityData.EntityName = entityName; drawEntityData.Data = new List <DrawData>(); int row = eHelper.GetUsedRowCount(i); int col = eHelper.GetUsedColumnCount(i); for (int c = 1; c < col; c++) { text.Clear(); string _min = eHelper.GetCellValue(1, c); //如果第一个测量值为空,跳过该列 if (string.IsNullOrWhiteSpace(_min)) { continue; } float min = 0; try { min = float.Parse(_min); } catch (Exception) { continue; } min = (float)Math.Round(min, 5, MidpointRounding.AwayFromZero); float mid = min; float max = min; int minCount = 0; int maxCount = 0; for (int r = 1; r < row; r++) { string value = eHelper.GetCellValue(r, c); if (!string.IsNullOrWhiteSpace(value)) { float dValue = 0; try { dValue = float.Parse(value); } catch (Exception) { continue; } dValue = (float)Math.Round(dValue, 5, MidpointRounding.AwayFromZero); text.Append(eHelper.GetCellValue(r, 0) + ":" + dValue + ";"); //计算最小值 if (min > dValue) { min = dValue; } //计算最大值 if (max < dValue) { max = dValue; } //计算中位数 if (mid < dValue) { maxCount++; } else { minCount++; } if (minCount < maxCount) { mid = mid > dValue ? mid : dValue; minCount++; maxCount--; } else { mid = mid < dValue ? mid : dValue; minCount--; maxCount++; } } } text.Remove(text.Length - 1, 1); //生成每行数据 DrawData drawData = new DrawData(); double date = Convert.ToDouble(eHelper.GetCellValue(0, c)); drawData.Date = DateTime.FromOADate(date); drawData.MaxValue = max; drawData.MidValue = mid; drawData.MinValue = min; drawData.Detail = text.ToString(); drawEntityData.Data.Add(drawData); } //添加一张sheet的数据 sheetInfo.DrawRows.Add(drawEntityData); } break; } } }
/// <summary> /// Idling event handler. /// </summary> /// <remarks> /// We keep the handler very simple. First check /// if we still have the form. If not, unsubscribe /// from Idling, for we no longer need it and it /// makes Revit speedier. If the form is around, /// check if it has a request ready and process /// it accordingly. /// </remarks> public void IdlingHandler( object sender, IdlingEventArgs args) { UIApplication uiapp = sender as UIApplication; UIDocument uidoc = uiapp.ActiveUIDocument; // UI document is null if the project is closed. if (null != uidoc) { //存放实体 string entity = string.Empty; bool isSurvey = false; // ElementInfoPanel #if (Since2016) Element selectElement = uidoc.Document.GetElement(uidoc.Selection.GetElementIds().FirstOrDefault()); #else Element selectElement = uidoc.Selection.Elements.Cast <Element>().FirstOrDefault <Element>(); #endif if (selectElement != null) { entity = Utils.GetParameterValueAsString(selectElement, Res.String_ParameterName); if (!string.IsNullOrEmpty(entity)) { isSurvey = Res.String_ParameterSurveyType.Equals(selectElement.Name); if (m_selectedElementId != selectElement.Id.IntegerValue) { m_selectedElementId = selectElement.Id.IntegerValue; // isSurvey = true; if (!isSurvey) {//不是测量数据 //sqlite InfoEntityData infoEntityData = Sqlite.SelectInfoData(entity); ElementInfoPanel.GetInstance().Update(infoEntityData); } else {//测量数据绘制折线图 DrawEntityData drawEntityData = App.Instance.Sqlite.SelectDrawEntityData(entity, null, null); NewImageForm.Instance().EntityData = drawEntityData; ExcelTable excel = App.Instance.Sqlite.SelectADrawType(entity); NewImageForm.Instance().Text = excel == null ? "测点" + entity + "的测量数据" : excel.CurrentFile + ": 测点" + entity + "的测量数据"; NewImageForm.Instance().Show(); } } } } else { if (m_selectedElementId != -1) {//清空数据 m_selectedElementId = -1; ElementInfoPanel.GetInstance().Update(null); if (NewImageForm.Instance().Visible) { NewImageForm.Instance().EntityData = new DrawEntityData(); } } } } }