private IEnumerable <RuleCompareNode> CompareFile(Office.Excel.ForwardExcelReader oldWorkbook, Office.Excel.ForwardExcelReader newWorkbook) { string[] sheets = oldWorkbook == null?new string[0] : oldWorkbook.GetSheetsName(); int index; for (index = 0; index < sheets.Length; index++) { RuleCompareNode node = new RuleCompareNode(); node.Header = sheets[index]; PageGroup group = new PageGroup(sheets[index], oldWorkbook, newWorkbook); group.Parent = node; node.Content = group; group.ReadRules(); group.Compare(); yield return(node); } sheets = newWorkbook.GetSheetsName(); for (; index < sheets.Length; index++) { RuleCompareNode node = new RuleCompareNode(); node.Header = sheets[index]; PageGroup group = new PageGroup(sheets[index], oldWorkbook, newWorkbook); group.Parent = node; node.Content = group; group.ReadRules(); group.Compare(); yield return(node); } }
//获取参数 private string GetParameterFile() { string formatStr = "{0}\\{1}"; string publicPage = string.Format(formatStr, base.RulePath, FileHelper.GetPublicPage(base.FillVersion, FillType)); if (_urlParameter.IsPublicUrl) { return(publicPage); } string fileName = FileHelper.GetFillRuleFile(base.FillVersion, FillType, null, null); string carTypePage = string.Format(formatStr, base.RulePath, fileName); using (Office.Excel.ForwardExcelReader reader = new Office.Excel.ForwardExcelReader(carTypePage)) { reader.Open(); if (reader.Contains(_urlParameter.LabelName)) { return(carTypePage); } else { return(publicPage); } } }
public PageGroup(string pageName, Office.Excel.ForwardExcelReader oldWorkbook, Office.Excel.ForwardExcelReader newWorkbook) { this.oldWorkbook = oldWorkbook; this.newWorkbook = newWorkbook; _oldPageitems = new List <RuleItem>(); _newPageItems = new List <RuleItem>(); _pageName = pageName; }
/// <summary> /// 从Excel文件中读取树节点的父子级关系。 /// </summary> /// <returns></returns> private TreeValue InitTreeNode() { TreeValue value = null, parent = null, root = null; Hashtable table = new Hashtable(); using (Office.Excel.ForwardExcelReader reader = new Office.Excel.ForwardExcelReader(@"..\..\..\演示数据\CCC\目录字典.xlsx")) { reader.Open(); Office.Excel.ForwardReadWorksheet sheet = reader.Activate(1) as Office.Excel.ForwardReadWorksheet; sheet.ReadFollowingRow(2); string id = null, name = null, parentId = null; object content = null; do { while (sheet.ReadNextCell(false)) { content = sheet.GetContent(); switch (sheet.CurrentCell.ColumnIndex) { case 1: id = content == null ? null : content.ToString(); break; case 2: name = content == null ? null : content.ToString(); break; case 3: parentId = content == null ? null : content.ToString(); break; } } if (id == null || name == null) { continue; } value = new TreeValue(name, parentId, null); table.Add(id, value); } while (sheet.ReadNextRow()); } foreach (DictionaryEntry entry in table) { value = entry.Value as TreeValue; if (value != null) { if (value.Parent == null) { root = value; } else { parent = table[value.Parent.Name] as TreeValue; parent.AddChild(value); } } } return(root); }
protected override Hashtable GetUris() { Hashtable uris = new Hashtable(); Hashtable columnHeader = new Hashtable(); string fileName = FileHelper.GetPublicPage(base.Version, base.FillType); using (Office.Excel.ForwardExcelReader pages = new Office.Excel.ForwardExcelReader(string.Format("{0}\\{1}", base.RuleFilePath, fileName))) { pages.Open(); Office.Excel.ForwardReadWorksheet sheet = pages.Activate("页面汇总") as Office.Excel.ForwardReadWorksheet; if (sheet != null) { object content = null, uri = null; if (sheet.ReadNextRow()) { while (sheet.ReadNextCell(false)) { columnHeader.Add(sheet.CurrentCell.ColumnIndex, sheet.GetContent()); } } UrlParameter urlParameter = null; while (sheet.ReadNextRow()) // 读取下一行。 { uri = null; content = null; urlParameter = new UrlParameter(); // 存储Url对应的页面标签及Excel文件名称。 while (sheet.ReadNextCell(false)) // 读取本行的下一个单元格数据。 { content = sheet.GetContent(); switch (columnHeader[sheet.CurrentCell.ColumnIndex] as string) { case "页面标签": urlParameter.LabelName = content == null ? "" : content.ToString(); break; case "所属Excel": urlParameter.IsPublicUrl = (content as string) == "公共页面"; break; case "URL": uri = content as string; break; } } if (uri != null && string.IsNullOrEmpty(uri.ToString()) == false) { Uri url = new Uri(uri.ToString()); if (uris.ContainsKey(url.AbsolutePath)) { continue; } uris.Add(url.AbsolutePath, urlParameter); } } } } return(uris); }
/// <summary> /// 从Excel文件中读取树节点的父子级关系。 /// </summary> /// <returns></returns> private TreeValue InitTreeNode() { TreeValue value = null, parent = null, root = null; string fileName = FileHelper.GetPublicPage(FillRuleVerson, FillType); string ruleFilePath = FileHelper.GetFillVersionByName(FillRuleVerson); Hashtable table = new Hashtable(); using (Office.Excel.ForwardExcelReader reader = new Office.Excel.ForwardExcelReader(string.Format(@"{0}\{1}", ruleFilePath, fileName))) { reader.Open(); Office.Excel.ForwardReadWorksheet sheet = reader.Activate(1) as Office.Excel.ForwardReadWorksheet; sheet.ReadFollowingRow(2); string name = null, parentName = null; object content = null; do { while (sheet.ReadNextCell(false)) { content = sheet.GetContent(); switch (sheet.CurrentCell.ColumnIndex) { case 1: name = content == null ? null : content.ToString(); break; case 2: parentName = content == null ? null : content.ToString(); break; } } if (name == null) { continue; } value = new TreeValue(name, parentName, null); table.Add(name, value); } while (sheet.ReadNextRow()); } foreach (DictionaryEntry entry in table) { value = entry.Value as TreeValue; if (value != null) { if (value.Parent == null) { root = value; } else { parent = table[value.Parent.Name] as TreeValue; parent.AddChild(value); } } } return(root); }
private void ReadConverterRule(string fileName) { _converter.Clear(); using (Office.Excel.ForwardExcelReader reader = new Office.Excel.ForwardExcelReader(fileName)) { Office.Excel.ForwardReadWorksheet sheet = reader.Activate(1) as Office.Excel.ForwardReadWorksheet; if (sheet == null) { return; } Hashtable columnHeader = new Hashtable(); while (sheet.ReadNextRow()) { columnHeader.Add(sheet.CurrentCell.ColumnIndex, sheet.GetContent()); } string str; object content; while (sheet.ReadNextRow()) { ConverterParameter para = new ConverterParameter(); while (sheet.ReadNextCell(false)) { content = sheet.GetContent(); str = content == null ? "" : content.ToString(); switch (columnHeader[sheet.CurrentCell.ColumnIndex] as string) { case "字符替换": para.ReplaceGroup = str; break; case "企业内部参数编号": para.EntName = str; break; case "原参数名称": para.OriginName = str; break; case "填报级数分割符": para.RegexParten = str; break; case "参数拆分正则": para.SplitParten = str; break; } } if (para.OriginName == null) { continue; } _converter.Add(para); } } }
public override void ReadValidateRule() { Hashtable columnHeader = new Hashtable(); Hashtable fillParameters = new Hashtable(); using (Office.Excel.ForwardExcelReader reader = new Office.Excel.ForwardExcelReader(base.ValidateFileName)) { reader.Open(); Office.Excel.ForwardReadWorksheet sheet = reader.Activate("填报规则") as Office.Excel.ForwardReadWorksheet; if (sheet != null) { object header = null; if (sheet.ReadNextRow() && sheet.CurrentRowIndex == 1) { while (sheet.ReadNextCell(false)) { header = sheet.GetContent(); columnHeader.Add(sheet.CurrentCell.ColumnIndex, header == null ? "" : header.ToString()); } } object content = null; string key = "", str = ""; while (sheet.ReadNextRow()) { ValidateExpression expr = new ValidateExpression(); while (sheet.ReadNextCell(false)) { content = sheet.GetContent(); str = content == null ? "" : content.ToString(); switch (columnHeader[sheet.CurrentCell.ColumnIndex] as string) { case "参数编号": key = str; break; case "校验规则": expr.Expression = str; break; case "是否必填": expr.IsRequired = (str == "是"); break; } } if (string.IsNullOrEmpty(key) == false) { rules.Add(key, expr); } } } } }
/// <summary> /// 北环得到数据 /// </summary> /// <returns></returns> protected override object GetData(object state) { if (state == null) { Hashtable _data = new Hashtable(); using (Office.Excel.ForwardExcelReader reader = new Office.Excel.ForwardExcelReader(base.DataProvider.DataSourceFile)) { reader.Open(); Office.Excel.ForwardReadWorksheet sheet = reader.Activate(1) as Office.Excel.ForwardReadWorksheet; if (sheet == null) { return(null); } object parameter, content; while (sheet.ReadNextRow()) { parameter = null; content = null; while (sheet.ReadNextCell(false)) { if (sheet.CurrentCell.ColumnIndex == 1) { parameter = sheet.GetContent(); } else if (sheet.CurrentCell.ColumnIndex == 2) { content = sheet.GetContent(); } } if (parameter == null) { continue; } _data.Add(parameter, content == null ? "" : content.ToString()); } } string carType = _data[carTypeName] as string; if (carType != null) { _data[carTypeName] = _carTypeList[carType]; _data.Add("CarType", carType); } return(_data); } else { object[] array = state as object[]; return(ExcelFileHelper.ReadTableData(this, array.Length <= 0 ? null : array[0] as string, array[1] as List <int>)); } }
private void ReadConverterRule(string fileName, string sheetName) { _converter.Clear(); using (Office.Excel.ForwardExcelReader reader = new Office.Excel.ForwardExcelReader(fileName)) { reader.Open(); Office.Excel.ForwardReadWorksheet sheet = reader.Activate(sheetName) as Office.Excel.ForwardReadWorksheet; if (sheet == null) { return; } Hashtable columnHeader = new Hashtable(); if (sheet.ReadNextRow()) { while (sheet.ReadNextCell(false)) { columnHeader.Add(sheet.CurrentCell.ColumnIndex, sheet.GetContent()); } } string str; object content; while (sheet.ReadNextRow()) { ConverterParameter para = new ConverterParameter(); while (sheet.ReadNextCell(false)) { content = sheet.GetContent(); str = content == null ? "" : content.ToString(); switch (columnHeader[sheet.CurrentCell.ColumnIndex] as string) { case "字符替换": para.ValueReplaceGroup = str; break; case "参数编号": para.OriginName = str; break; } } if (string.IsNullOrEmpty(para.OriginName)) { continue; } _converter.Add(para.OriginName, para); } } }
private bool FillSpecialPage(string pageNo, string suffix) { using (Office.Excel.ForwardExcelReader reader = new Office.Excel.ForwardExcelReader(this.dataFile)) { reader.Open(); Office.Excel.ForwardReadWorksheet sheet = reader.Activate(pageNo) as Office.Excel.ForwardReadWorksheet; if (sheet == null) { return(true); } SpecialPage.NormalAddPage addPage = null; switch (pageNo) // 填报特殊页面 { case "9.10.2.3.1": case "9.10.2.3.2": SpecialPage.Page9_10_2_3 page = new SpecialPage.Page9_10_2_3(this._handle, this, sheet); return(page.FillPage()); case "4.6": case "12.7.1": case "3.9.8.1.1": addPage = new SpecialPage.NormalAddPage(_handle, this, sheet); addPage.InitHandle(); return(addPage.FillPage()); case "9.12.1": addPage = new SpecialPage.Page9_12_1(_handle, this, sheet); addPage.InitHandle(); return(addPage.FillPage()); case "9.12.2": addPage = new SpecialPage.Page9_12_2(_handle, this, sheet); addPage.InitHandle(); return(addPage.FillPage()); case "9.13.3": addPage = new SpecialPage.Page9_13_3(_handle, this, sheet); addPage.InitHandle(); return(addPage.FillPage()); } } return(false); }
protected override object GetData(object state) { Hashtable _data = new Hashtable(); using (Office.Excel.ForwardExcelReader reader = new Office.Excel.ForwardExcelReader(base.DataProvider.DataSourceFile)) { reader.Open(); Office.Excel.ForwardReadWorksheet sheet = reader.Activate(1) as Office.Excel.ForwardReadWorksheet; if (sheet == null) { return(null); } object parameter, content; while (sheet.ReadNextRow()) { parameter = null; content = null; while (sheet.ReadNextCell(false)) { if (sheet.CurrentCell.ColumnIndex == 1) { parameter = sheet.GetContent(); } else if (sheet.CurrentCell.ColumnIndex == 2) { content = sheet.GetContent(); } } if (parameter == null) { continue; } _data.Add(parameter, content == null ? "" : content.ToString()); } } return(_data); }
//得到参数 protected void GetParameters() { Hashtable uniqueTable = new Hashtable(); _parameters.Clear(); string note = ""; Hashtable group = null; Hashtable columnHeader = new Hashtable(); using (Office.Excel.ForwardExcelReader reader = new Office.Excel.ForwardExcelReader(GetParameterFile())) { reader.Open(); string sheetName = string.Format("{0}({1})", _urlParameter.LabelName, this.Standard); // 同类车型中不同排放标准的填报规则可能不同。 sheetName = reader.Contains(sheetName) ? sheetName : _urlParameter.LabelName; Office.Excel.ForwardReadWorksheet sheet = reader.Activate(sheetName) as Office.Excel.ForwardReadWorksheet; if (sheet == null) { return; } object content = null; if (sheet.ReadNextRow()) { while (sheet.ReadNextCell(false)) { content = sheet.GetContent(); columnHeader.Add(sheet.CurrentCell.ColumnIndex, content == null ? "" : content.ToString()); } } FillParameter dElement; FillParameterKey key; while (sheet.ReadNextRow()) { dElement = new FillParameter(); while (sheet.ReadNextCell(false)) { content = sheet.GetContent(); string value = content == null ? "" : content.ToString(); switch (columnHeader[sheet.CurrentCell.ColumnIndex] as string) { case "元素id": dElement.Id = value; break; case "元素name": dElement.Name = value; break; case "元素value": dElement.Value = value; break; case "类别": dElement.Type = value == null ? "" : value.ToUpper(); break; case "onclick": dElement.OnClick = value; break; case "参数名称": dElement.ParameterName = value; break; case "备注": note = value; break; case "可新增": dElement.CanAdd = value == "是"; break; case "查找": dElement.SearchString = value; break; case "frameId": dElement.FrameId = value; break; case "是否必填": dElement.IsRequired = value == "是"; break; case "数据表": dElement.TableName = value; break; case "查找代码": dElement.FindCode = value; break; } } if (string.IsNullOrEmpty(dElement.Type)) { continue; } if (dElement.Type == Matcher.TYPE_RADIO || dElement.Type == Matcher.TYPE_CHECKBOX) { // 若当前参数为radio或checkbox则将其后面出现的所有此类元素作为同一参数 if (uniqueTable.ContainsKey(dElement.ParameterName) == false) { group = new Hashtable(); key = new FillParameterKey(dElement.ParameterName, dElement.Type, dElement.CanAdd, dElement.IsRequired, dElement.SearchString); _parameters.Add(new KeyValuePair <FillParameterKey, object>(key, group)); uniqueTable.Add(dElement.ParameterName, group); } group.Add(dElement.Value, dElement); } else { group = null; key = new FillParameterKey(dElement.ParameterName, dElement.Type, dElement.CanAdd, dElement.IsRequired, dElement.SearchString); key.TableName = dElement.TableName; _parameters.Add(new KeyValuePair <FillParameterKey, object>(key, dElement)); } } uniqueTable.Clear(); } }
private void CompareInner(RuleCompareNode standard, RuleCompareNode parent, string path, string type, KeyValuePair <string, string>?appendix) { string uri = fillManager.StartPageUri; string appendixKey = appendix == null ? "" : appendix.Value.Key; foreach (RuleCompareNode child in standard.Children) { if (child.IsChecked != true) { continue; } this.UpdateDetectRule(type, standard.Content as string, child.Header); fillManager.Browser.Navigate(uri); RuleCompareNode resultChildItem = new RuleCompareNode() { Header = child.Header }; parent.AddChild(resultChildItem); // 车辆类型 _webBrowser.Invoke((Action)(() => { fillManager.BeginFill(); })); fillManager.Standard = standard.Content as string; fillManager.CarType = child.Header; fillManager.Data["选择底盘类型"] = appendix == null ? "" : appendix.Value.Value; string fileName = GetCompareRuleFileName(type, fillManager.Standard, fillManager.CarType, appendixKey); fileName = string.Format("{0}\\{1}", path, fileName); FileInfo info = new FileInfo(fileName); if (info.Directory.Exists == false) { info.Directory.Create(); } _asyncHandler.Reset(); _asyncHandler.Wait(); string detectedFileName = ""; GHComparerFillManager gh = fillManager as GHComparerFillManager; BHComparerFillManager bh = null; if (gh != null) { detectedFileName = gh.DetectedFileName; } else { bh = fillManager as BHComparerFillManager; } if (bh != null) { detectedFileName = bh.DetectedFileName; } if (bh == null && gh == null) { return; } else if (bh != null) { bh.Reset(); } else { gh.Reset(); } if (File.Exists(fileName)) { File.Delete(fileName); } File.Move(detectedFileName, fileName); string oldFile = GetServerFile(fillManager.Standard, fillManager.CarType, type, appendixKey); string newFile = fileName; if (File.Exists(oldFile) == false) { using (Office.Excel.ForwardExcelReader newWorkbook = new Office.Excel.ForwardExcelReader(newFile)) { newWorkbook.Open(); foreach (var node in CompareFile(null, newWorkbook)) { resultChildItem.AddChild(node); if (node.HasChange) { resultChildItem.HasChange = node.HasChange; } } } } else { using (Office.Excel.ForwardExcelReader newWorkbook = new Office.Excel.ForwardExcelReader(newFile)) { using (Office.Excel.ForwardExcelReader oldWorkbook = new Office.Excel.ForwardExcelReader(oldFile)) { oldWorkbook.Open(); newWorkbook.Open(); foreach (var node in CompareFile(oldWorkbook, newWorkbook)) { resultChildItem.AddChild(node); if (node.HasChange) { resultChildItem.HasChange = node.HasChange; } } } } } } }
/// <summary> /// 从指定文件中读取需填报的参数值。 /// </summary> /// <param name="fileName"></param> /// <returns></returns> private TreeValue ReadData(string fileName, Hashtable data, Hashtable fillParameters) { try { TreeValue root = InitTreeNode(); Hashtable treeDir = GetTreeDir(root); Hashtable current = null; TreeValue lastTreeNode = root; Hashtable columnHeader = new Hashtable(); using (Office.Excel.ForwardExcelReader reader = new Office.Excel.ForwardExcelReader(fileName)) { reader.Open(); Office.Excel.ForwardReadWorksheet sheet = reader.Activate(1) as Office.Excel.ForwardReadWorksheet; if (sheet != null) { object header = null; if (sheet.ReadNextRow() && sheet.CurrentRowIndex == 1) { while (sheet.ReadNextCell(false)) { header = sheet.GetContent(); columnHeader.Add(sheet.CurrentCell.ColumnIndex, header == null ? "" : header.ToString()); } } FillValue3C fillValue = null; object content = null; string str = null; bool nextRow = false; while (sheet.ReadNextRow()) { fillValue = new FillValue3C(); while (sheet.ReadNextCell(false)) { content = sheet.GetContent(); str = content == null ? "" : content.ToString(); switch (columnHeader[sheet.CurrentCell.ColumnIndex] as string) { case "序号": fillValue.Key = str; break; case "参数项的值": fillValue.SetValue(string.Format("{0}{1}", string.IsNullOrEmpty(fillValue.Value) ? "" : string.Format("{0}\t", fillValue.Value), str)); break; case "参数项名称": Match match = paraNameMatcher.Match(str); if (match.Success && match.Groups["name"].Success) { str = match.Groups["name"].Value.Trim(); } else { str = str.Trim(); } if (treeDir.ContainsKey(str)) { TreeValue parent = lastTreeNode; TreeValue child = null; while (parent != null) { child = parent.FindChild(str, null); if (child == null) { parent = parent.Parent; } else { break; } } if (child == null) { child = treeDir[str] as TreeValue; parent = child.Parent; } System.Diagnostics.Trace.Assert(child != null && parent != null); match = suffixMatcher.Match(fillValue.Key); if (match.Success) { string suffix = match.Groups["suffix"].Value; TreeValue temp = new TreeValue(child.Name, suffix); temp.CopyFrom(child); parent.AddChild(temp); child = temp; } current = child.Values; lastTreeNode = child; nextRow = true; // 当前行为目录行,忽略其它内容 } break; case "附件": fillValue.PublicAttachFile = str; break; } if (nextRow) { break; } } if (string.IsNullOrEmpty(fillValue.Key) == false) { if (nextRow) { nextRow = false; continue; } AddFillValue(fillValue, lastTreeNode, current == null ? data : current); //if (current == null) // 若当前值为树节点下的值则将其添加到当前树节点的Values中, // _data.Add(fillValue.Key, fillValue); // 否则(如证书名称、厂商关系)添加到管理器的数据中。 //else // current.Add(fillValue.Key, fillValue); } } } } return(root); } catch (Exception ex) { System.Windows.Forms.MessageBox.Show(ex.StackTrace + ex.Message); throw; } }
private void ReadConverterRule(string fileName, string sheetName) { _converter.Clear(); using (Office.Excel.ForwardExcelReader reader = new Office.Excel.ForwardExcelReader(fileName)) { reader.Open(); Office.Excel.ForwardReadWorksheet sheet = reader.Activate(sheetName) as Office.Excel.ForwardReadWorksheet; if (sheet == null) { return; } Hashtable columnHeader = new Hashtable(); if (sheet.ReadNextRow()) { while (sheet.ReadNextCell(false)) { columnHeader.Add(sheet.CurrentCell.ColumnIndex, sheet.GetContent()); } } string str; object content; while (sheet.ReadNextRow()) { ConverterParameter para = new ConverterParameter(); while (sheet.ReadNextCell(false)) { content = sheet.GetContent(); str = content == null ? "" : content.ToString(); switch (columnHeader[sheet.CurrentCell.ColumnIndex] as string) { case "字符替换": para.ValueReplaceGroup = str; break; case "企业内部参数编号": para.EntName = str; break; case "原参数名称": para.OriginName = str; break; case "填报级数分割符": para.SplitParten = str; break; case "参数拆分正则": para.RegexParten = str; break; case "是否为表格": para.IsSheetRelation = str == "是"; break; case "参数合并": para.MergePara = str; break; case "参数合并时使用的分割符号": para.MergeSpliter = str; break; case "默认值": para.DefaultValue = str; break; case "是否使用原始内容": para.UseOriginString = str == "是"; break; case "计算表达式": para.CalcExpression = str; break; case "是否必填": para.IsRequired = str == "是"; break; case "元素类型": para.ElementType = str; break; } } if (string.IsNullOrEmpty(para.OriginName)) { continue; } _converter.Add(para); } } }
/// <summary> /// 读取填报规则。 /// </summary> /// <param name="fileName"></param> /// <returns></returns> private Hashtable ReadFillParameter(string fileName) { Hashtable columnHeader = new Hashtable(); Hashtable fillParameters = new Hashtable(); using (Office.Excel.ForwardExcelReader reader = new Office.Excel.ForwardExcelReader(fileName)) { reader.Open(); Office.Excel.ForwardReadWorksheet sheet = reader.Activate("填报规则") as Office.Excel.ForwardReadWorksheet; if (sheet != null) { object header = null; if (sheet.ReadNextRow() && sheet.CurrentRowIndex == 1) { while (sheet.ReadNextCell(false)) { header = sheet.GetContent(); columnHeader.Add(sheet.CurrentCell.ColumnIndex, header == null ? "" : header.ToString()); } } FillParameter3C fillParameter = null; object content = null; string str = null; while (sheet.ReadNextRow()) { fillParameter = new FillParameter3C(); while (sheet.ReadNextCell(false)) { content = sheet.GetContent(); str = content == null ? "" : content.ToString(); switch (columnHeader[sheet.CurrentCell.ColumnIndex] as string) { case "参数编号": fillParameter.Key = str; break; case "类型": fillParameter.Type = str; break; case "编辑窗口类型": fillParameter.EditType = str; break; case "下拉框选择方式": fillParameter.IsComboBoxPreciseMatch = str == "包含"; break; case "参数分割符": fillParameter.SetSeparator(str); break; } } if (string.IsNullOrEmpty(fillParameter.Key) == false) { fillParameters.Add(fillParameter.Key, fillParameter); } } } } return(fillParameters); }
protected override Hashtable GetUris() { Hashtable uris = new Hashtable(); //读取新能源下面的公共页面(路径) string fileName = FileHelper.GetPublicPage(base.Version, base.FillType); using (Office.Excel.ForwardExcelReader pages = new Office.Excel.ForwardExcelReader(string.Format("{0}\\{1}", base.RuleFilePath, fileName))) { pages.Open(); Office.Excel.ForwardReadWorksheet sheet = pages.Activate("页面汇总") as Office.Excel.ForwardReadWorksheet; if (sheet != null) { XNYUrlParameter urlParameter = null; Uri url = null; Hashtable columnHeader = GetColumnHeader(sheet); while (sheet.ReadNextRow()) // 读取下一行。 { urlParameter = new XNYUrlParameter(); while (sheet.ReadNextCell(false)) // 读取本行的下一个单元格数据。 { switch (columnHeader[sheet.CurrentCell.ColumnIndex] as string) { case "URL": url = new Uri(sheet.GetContent() as string); break; case "页面标签": urlParameter.LabelName = sheet.GetContent() as string; break; case "所属Excel": urlParameter.IsPublicUrl = ((sheet.GetContent() as string) == "公共页面"); break; case "表数据": urlParameter.IsTableData = ((sheet.GetContent() as string) == "是"); break; } } if (url != null && string.IsNullOrEmpty(url.ToString()) == false) { if (uris.ContainsKey(url.AbsolutePath)) { continue; } uris.Add(url.AbsolutePath, urlParameter); } } } sheet = pages.Activate(carTypeName) as Office.Excel.ForwardReadWorksheet; if (sheet != null) { _carTypeList = ReadCarTypeList(sheet); } else { throw new ArgumentException(string.Format("填报规则中没有名为“{0}”的工作表。", carTypeName)); } } return(uris); }
/// <summary> /// 从指定文件中读取需填报的参数值。 /// </summary> /// <param name="fileName"></param> /// <returns></returns> private TreeValue ReadData(string fileName) { TreeValue root = InitTreeNode(); Hashtable treeDir = GetTreeDir(root); Hashtable current = null; TreeValue lastTreeNode = root; Hashtable columnHeader = new Hashtable(); using (Office.Excel.ForwardExcelReader reader = new Office.Excel.ForwardExcelReader(fileName)) { reader.Open(); Office.Excel.ForwardReadWorksheet sheet = reader.Activate(1) as Office.Excel.ForwardReadWorksheet; if (sheet != null) { object header = null; if (sheet.ReadNextRow() && sheet.CurrentRowIndex == 1) { while (sheet.ReadNextCell(false)) { header = sheet.GetContent(); columnHeader.Add(sheet.CurrentCell.ColumnIndex, header == null ? "" : header.ToString()); } } FillValue3C fillValue = null; object content = null; string str = null; bool nextRow = false; while (sheet.ReadNextRow()) { fillValue = new FillValue3C(); while (sheet.ReadNextCell(false)) { content = sheet.GetContent(); str = content == null ? "" : content.ToString(); switch (columnHeader[sheet.CurrentCell.ColumnIndex] as string) { case "序号": fillValue.Key = str; break; case "参数项的值": fillValue.SetValue(str); break; case "参数项名称": str = str.Trim(); if (treeDir.ContainsKey(str)) { TreeValue parent = lastTreeNode; TreeValue child = null; while (parent != null) { child = parent.FindChild(str, null); if (child == null) { parent = parent.Parent; } else { break; } } if (child == null) { child = treeDir[str] as TreeValue; parent = child.Parent; } System.Diagnostics.Trace.Assert(child != null && parent != null); Match match = Main_3C.suffixMatcher.Match(fillValue.Key); if (match.Success) { string suffix = match.Groups["suffix"].Value; TreeValue temp = new TreeValue(child.Name, suffix); temp.CopyFrom(child); parent.AddChild(temp); child = temp; } current = child.Values; lastTreeNode = child; nextRow = true; // 当前行为目录行,忽略其它内容 } break; case "附件": fillValue.AttachFile = str; break; } if (nextRow) { break; } } if (string.IsNullOrEmpty(fillValue.Key) == false) { if (nextRow) { nextRow = false; continue; } if (current == null) { _data.Add(fillValue.Key, fillValue); } else { current.Add(fillValue.Key, fillValue); } } } } } return(root); }
private DataTable GetTableData(string sheetName) { bool isColumnHeader = false; object content = null; Hashtable columnHeader = new Hashtable(); DataTable table = null; DataRow row = null; using (Office.Excel.ForwardExcelReader reader = new Office.Excel.ForwardExcelReader(this.DataFile)) { reader.Open(); // 表格数据的工作表标签使用"前缀_序号"格式命名。 sheetName = string.Format("{0}_{1}", sheetName, base.FillIndexes.Count == 0 ? 1 : base.FillIndexes[0].CurrentIndex + 1); Office.Excel.ForwardReadWorksheet sheet = reader.Activate(sheetName) as Office.Excel.ForwardReadWorksheet; if (sheet != null) { while (sheet.ReadNextRow()) { while (sheet.ReadNextCell(false)) { content = sheet.GetContent(); string str = content == null ? "" : content.ToString(); if (isColumnHeader == false && table == null) { table = new System.Data.DataTable(); isColumnHeader = true; row = null; } int columnIndex = sheet.CurrentCell.ColumnIndex; if (isColumnHeader) { if (string.IsNullOrEmpty(str)) { continue; } columnHeader.Add(columnIndex, str); try { if (string.IsNullOrEmpty(str) == false) { table.Columns.Add(str); } } catch (System.Data.DuplicateNameException) { throw new ArgumentException(string.Format("在Excel文件:{0}的{1}工作表中,{2}行的值有重复!", sheet.Owner.FileName, sheet.Name, sheet.CurrentRowIndex)); } } else { string columnName = columnHeader[columnIndex] as string; if (table.Columns.Contains(columnName)) { row[columnName] = str; } } } if (row != null) { table.Rows.Add(row); } row = table.NewRow(); isColumnHeader = false; } } return(table); } }
private void GetParameters() { Hashtable uniqueTable = new Hashtable(); _parameters.Clear(); string note = ""; Hashtable group = null; Hashtable columnHeader = new Hashtable(); using (Office.Excel.ForwardExcelReader reader = new Office.Excel.ForwardExcelReader(GetParameterFile())) { reader.Open(); Office.Excel.ForwardReadWorksheet sheet = reader.Activate(_urlParameter.LabelName) as Office.Excel.ForwardReadWorksheet; if (sheet == null) { return; } object content = null; if (sheet.ReadNextRow()) { while (sheet.ReadNextCell(false)) { content = sheet.GetContent(); columnHeader.Add(sheet.CurrentCell.ColumnIndex, content == null ? "" : content.ToString()); } } FillParameter dElement; FillParameterKey key; while (sheet.ReadNextRow()) { dElement = new FillParameter(); while (sheet.ReadNextCell(false)) { content = sheet.GetContent(); string value = content == null ? "" : content.ToString(); switch (columnHeader[sheet.CurrentCell.ColumnIndex] as string) { case "元素id": dElement.Id = value; break; case "元素name": dElement.Name = value; break; case "元素value": dElement.Value = value; break; case "元素href": dElement.href = value; break; case "类别": dElement.Type = value == null ? "" : value.ToUpper(); break; case "onclick": dElement.OnClick = value; break; case "参数名称": dElement.ParameterName = value; break; case "备注": note = value; break; case "可新增": dElement.CanAdd = value == "是"; break; case "查找": dElement.SearchString = value; break; case "frameId": dElement.FrameId = value; break; case "数据所在工作表": dElement.TableName = value; break; case "拆分规则": dElement.SplitExpr = value; break; case "可删除": dElement.CanDelete = value == "是"; break; case "模糊匹配": dElement.CanContain = value == "是"; break; case "是否必填": dElement.IsRequired = value == "是"; break; } } if (string.IsNullOrEmpty(dElement.Type)) { continue; } if (dElement.Type == Matcher.TYPE_RADIO || dElement.Type == Matcher.TYPE_CHECKBOX) { // 若当前参数为radio或checkbox则将其后面出现的所有此类元素作为同一参数 if (string.IsNullOrEmpty(dElement.ParameterName) == false && uniqueTable.ContainsKey(dElement.ParameterName) == false) { group = new Hashtable(); key = new FillParameterKey(dElement.ParameterName, dElement.Type, dElement.CanAdd, dElement.IsRequired, dElement.CanDelete, dElement.CanContain, dElement.SearchString); _parameters.Add(new KeyValuePair <FillParameterKey, object>(key, group)); uniqueTable.Add(dElement.ParameterName, group); } //只保存第一个radio或者checkbox参数,在group里面保存全部的信息 group.Add(dElement.Value, dElement); } else { group = null; key = new FillParameterKey(dElement.ParameterName, dElement.Type, dElement.CanAdd, dElement.CanDelete, dElement.IsRequired, dElement.CanContain, dElement.SearchString); key.TableName = dElement.TableName; _parameters.Add(new KeyValuePair <FillParameterKey, object>(key, dElement)); } } uniqueTable.Clear(); } }
private void CollectInfo(string fileName, Hashtable specialParameters, ref int needAddedColumn, ref int lastValueColumnIndex) { try { int valueColumnCount = 0; Hashtable columnHeader = new Hashtable(); using (Office.Excel.ForwardExcelReader reader = new Office.Excel.ForwardExcelReader(fileName)) { reader.Open(); Office.Excel.ForwardReadWorksheet sheet = reader.Activate(1) as Office.Excel.ForwardReadWorksheet; string str = null, key = ""; if (sheet != null) { object header = null; if (sheet.ReadNextRow() && sheet.CurrentRowIndex == 1) { while (sheet.ReadNextCell(false)) { header = sheet.GetContent(); str = header == null ? "" : header.ToString(); if (str == "参数项的值") { lastValueColumnIndex = sheet.CurrentCell.ColumnIndex - 1; valueColumnCount++; } columnHeader.Add(sheet.CurrentCell.ColumnIndex, str); } } object content = null; string allValues = ""; while (sheet.ReadNextRow()) { key = ""; allValues = ""; while (sheet.ReadNextCell(false)) { content = sheet.GetContent(); str = content == null ? "" : content.ToString(); switch (columnHeader[sheet.CurrentCell.ColumnIndex] as string) { case "序号": key = str; break; case "参数项的值": if (string.IsNullOrEmpty(str) == false) { allValues = string.Format("{0}{1}", string.IsNullOrEmpty(allValues) ? "" : string.Format("{0},", allValues), str); } break; } } if (key != null && specialParameters.ContainsKey(key)) { string[] buffer = null; if (allValues.IndexOf(',') >= 0) { buffer = allValues.Split(','); } else if (allValues.IndexOf(',') >= 0) { buffer = allValues.Split(','); } else if (allValues.IndexOf(';') >= 0) { buffer = allValues.Split(';'); } else { continue; } // 保存需要新增的最大列数 int len = buffer.Length - valueColumnCount; needAddedColumn = Math.Max(len, needAddedColumn); } } } } } catch (Exception ex) { System.Windows.Forms.MessageBox.Show(ex.StackTrace + ex.Message); throw; } }