using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace Tps_LQ_Transmitter.Common { /// /// 串口控制4个对应项 /// public class ComMatchParameter { /// /// 序号 /// public string SN { get; set; } /// /// 串口号 /// public string ComPort { get; set; } /// /// 第3个字节 /// public string ThirdByte { get; set; } /// /// 第4个字节 /// public string FourthByte { get; set; } /// /// 频点 /// public string freqpoint { get; set; } } public class MatchComPara { public Dictionary ComParameters; public MatchComPara() { ComParameters = new Dictionary(); } public string GetComPort(string name) { if (string.IsNullOrEmpty(name)) return null; if (this.ComParameters.ContainsKey(name) == false) return null; string val1 = this.ComParameters[name].ComPort.Trim(); return val1; } public string GetThirdByte(string name) { string val1 = this.ComParameters[name].ThirdByte.Trim(); return val1; } public string GetFourthByte(string name) { string val2 = this.ComParameters[name].FourthByte.Trim(); return val2; } public string Getfreqpoint(string name) { string val2 = this.ComParameters[name].freqpoint.Trim(); return val2; } } public class SerialConfig { #region 串口配置表 /// /// 获取串口配置表 /// /// public MatchComPara LoadComWorkBook() { MatchComPara pars = new MatchComPara(); string FileName = Path.Combine(Bundle.bundle.BundleDir, "config\\串口控制.xlsx"); if (!File.Exists(FileName)) { ShowMessage( "找不到串口控制.xlsx"); return null; } Spire.Xls.Workbook workbook = new Spire.Xls.Workbook(); workbook.LoadFromFile(FileName); //获取第一个工作表sheet1 Spire.Xls.Worksheet sheet = workbook.Worksheets[0]; int num = 0; int blankRows = 0; while (num++ < 200) { //索引从1开始 string col1 = sheet.Range[num, 1].Value2 != null ? sheet.Range[num, 1].Value2.ToString() : ""; col1 = col1.Trim(); if (string.IsNullOrEmpty(col1)) { blankRows++; if (blankRows > 5) { //连续5个空行以上则退出 break; } } else { blankRows = 0; } if (col1.Equals("序号")) { List ComTable = ReadParameters(sheet, num); foreach (var item in ComTable) { if (pars.ComParameters.ContainsKey(item.SN)) { ShowMessage( string.Format("串口控制:{0} 存在同名参数:{1},无法重复添加参数", sheet.Name, item.SN)); continue; } pars.ComParameters.Add(item.SN, item); } } } return pars; } protected void ShowMessage(string msg) { MessageBox.Show(msg); } List ReadParameters(Spire.Xls.Worksheet sheet, int rowIndex) { List ModulationTable = new List(); string col1 = sheet.Range[rowIndex, 1].Value2 != null ? sheet.Range[rowIndex, 1].Value2.ToString() : ""; string col2 = sheet.Range[rowIndex, 2].Value2 != null ? sheet.Range[rowIndex, 2].Value2.ToString() : ""; string col3 = sheet.Range[rowIndex, 3].Value2 != null ? sheet.Range[rowIndex, 3].Value2.ToString() : ""; string col4 = sheet.Range[rowIndex, 4].Value2 != null ? sheet.Range[rowIndex, 4].Value2.ToString() : ""; string col5 = sheet.Range[rowIndex, 5].Value2 != null ? sheet.Range[rowIndex, 5].Value2.ToString() : ""; if (!(col1 == "序号" && col2 == "串口号" && col3 == "第3个字节" && col4 == "第4个字节" && col5 == "频点(MHz)")) { ShowMessage( "'串口控制'行首标题位置和格式不正确"); return ModulationTable; } int num = rowIndex; //默认最多30行 while (num++ < rowIndex + 100) { col1 = sheet.Range[num, 1].Value2 != null ? sheet.Range[num, 1].Value2.ToString() : ""; col2 = sheet.Range[num, 2].Value2 != null ? sheet.Range[num, 2].Value2.ToString() : ""; col3 = sheet.Range[num, 3].Value2 != null ? sheet.Range[num, 3].Value2.ToString() : ""; col4 = sheet.Range[num, 4].Value2 != null ? sheet.Range[num, 4].Value2.ToString() : ""; col5 = sheet.Range[num, 5].Value2 != null ? sheet.Range[num, 5].Value2.ToString() : ""; if (string.IsNullOrEmpty(col1)) { break; } ComMatchParameter ObjModulation = new ComMatchParameter(); ObjModulation.SN = col1; ObjModulation.ComPort = col2; ObjModulation.ThirdByte = col3; ObjModulation.FourthByte = col4; ObjModulation.freqpoint = col5; ModulationTable.Add(ObjModulation); } return ModulationTable; } #endregion } }