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 void ChildNotifyIsChecked(bool?oldValue, bool?newValue) { if (oldValue == false) { CheckedCount++; } else if (oldValue == null) { if (newValue == false) { CheckedCount--; } _nullCount--; } else { if (newValue == false) { CheckedCount--; } } if (newValue == null) { _nullCount++; } bool?value = _nullCount == 0 ? (_CheckedCount == 0 ? false : _CheckedCount == base.Children.Count ? true : (bool?)null) : null; if (_IsChecked != value) { RuleCompareNode node = base.Parent as RuleCompareNode; if (node != null) { node.ChildNotifyIsChecked(_IsChecked, value); } _IsChecked = value; OnPropertyChanged(IsCheckedChanged); } }
public RuleComparer(RuleCompareNode root, WebBrowserUtils.ExtendWebBrowser.WebBrowser2 webBrowser) { _root = root; _webBrowser = webBrowser; }
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; } } } } } } }
private void CompareWorker(object state) { try { TreeModel result = new TreeModel(); string type = _root.Header; RuleCompareNode root = new RuleCompareNode() { Header = _root.Header, IsExpanded = true }; result.AddChild(root); RuleCompareNode resultItem; string path = state as string; if (type == "国环") { _asyncHandler = new FillAsyncHandler(); List <KeyValuePair <string, string> > appendixes = FileHelper.GetAppendixes(type); foreach (RuleCompareNode item in _root.Children) { if (item.IsChecked == false) { continue; } // 排放标准 resultItem = new RuleCompareNode() { Header = item.Header }; root.AddChild(resultItem); foreach (var appendix in appendixes) { RuleCompareNode appendixNode = new RuleCompareNode() { Header = appendix.Key }; resultItem.AddChild(appendixNode); CompareInner(item, appendixNode, path, type, appendix); } } } else if (type == "北环") { _asyncHandler = new FillAsyncHandler(); foreach (RuleCompareNode item in _root.Children) { if (item.IsChecked == false) { continue; } // 排放标准 resultItem = new RuleCompareNode() { Header = item.Header }; root.AddChild(resultItem); CompareInner(item, resultItem, path, type, null); } } this.Result = result; this.fillManager.EndFill(); OnFinished(EventArgs.Empty); this.fillManager = null; } catch (Exception ex) { WebFillManager.ShowMessageBox(ex.Message, "错误", System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Error); } finally { if (this.fillManager != null) { this.fillManager.EndFill(); this.fillManager = null; } } }