コード例 #1
0
ファイル: RuleComparer.cs プロジェクト: qwdingyu/C-
        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);
            }
        }
コード例 #2
0
        //获取参数
        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);
                }
            }
        }
コード例 #3
0
 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;
 }
コード例 #4
0
ファイル: CCCFiller.cs プロジェクト: qwdingyu/C-
        /// <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);
        }
コード例 #5
0
        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);
        }
コード例 #6
0
ファイル: Default3CDataProvider.cs プロジェクト: qwdingyu/C-
        /// <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);
        }
コード例 #7
0
        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);
                }
            }
        }
コード例 #8
0
ファイル: SHFYDataValidator.cs プロジェクト: qwdingyu/C-
        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);
                        }
                    }
                }
            }
        }
コード例 #9
0
 /// <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>));
     }
 }
コード例 #10
0
        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);
                }
            }
        }
コード例 #11
0
        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);
        }
コード例 #12
0
        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);
        }
コード例 #13
0
ファイル: BHFiller.cs プロジェクト: qwdingyu/C-
        //得到参数
        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();
            }
        }
コード例 #14
0
ファイル: RuleComparer.cs プロジェクト: qwdingyu/C-
        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;
                                }
                            }
                        }
                    }
                }
            }
        }
コード例 #15
0
ファイル: Default3CDataProvider.cs プロジェクト: qwdingyu/C-
        /// <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;
            }
        }
コード例 #16
0
        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);
                }
            }
        }
コード例 #17
0
ファイル: CCCFillManager.cs プロジェクト: qwdingyu/C-
        /// <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);
        }
コード例 #18
0
ファイル: XNYFillManager.cs プロジェクト: qwdingyu/C-
        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);
        }
コード例 #19
0
ファイル: CCCFiller.cs プロジェクト: qwdingyu/C-
        /// <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);
        }
コード例 #20
0
        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);
            }
        }
コード例 #21
0
        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();
            }
        }
コード例 #22
0
ファイル: CCCDataProvider.cs プロジェクト: qwdingyu/C-
        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;
            }
        }