예제 #1
0
        public void FailedSearch()
        {
            string[] values       = { "Hello", "world", "!", "Again" };
            int      startY       = 5;
            int      startYoffset = 5;

            ws.Cells[startY, 2]     = values[0];
            ws.Cells[startY, 3]     = values[1];
            ws.Cells[startY, 5]     = values[2];
            ws.Cells[startY + 1, 1] = values[3];

            Xml_Form form = new Xml_Form
            {
                Name   = "Test",
                Rules  = new List <Xml_Equal_Base>(),
                Fields = new Xml_Form_Fields
                {
                    StartY = new Xml_Start_Y
                    {
                        group = new Xml_Start_Y_Group
                        {
                            name     = "group2",
                            position = "after",
                            Y        = startYoffset
                        }
                    }
                }
            };
            Action testRules = () => new Work(ws, form, 1);

            ExceptionAssert.Throws <InvalidOperationException>(testRules);
        }
예제 #2
0
        public void GroupThrows()
        {
            Xml_Form form = new Xml_Form
            {
                Name  = "Test",
                Rules = new List <Xml_Equal_Base>
                {
                    new Xml_Equal_Group
                    {
                        Rules = new List <Xml_Equal>
                        {
                            new Xml_Equal {
                                Text = "Проверка", X = 0, Y = 0
                            },
                        }
                    }
                }
            };
            Action testRules = () => XmlTools.findCorrectForm(ws, new List <Xml_Form> {
                form
            });

            form.Rules[0].Y = null;
            form.Rules[0].X = 1;
            ExceptionAssert.Throws <ArgumentException>(testRules);
            form.Rules[0].Y = 1;
            form.Rules[0].X = null;
            ExceptionAssert.Throws <ArgumentException>(testRules);
            form.Rules[0].Y = 1;
            form.Rules[0].X = 1;
            ((Xml_Equal_Group)form.Rules[0]).Rules.Clear();
            ExceptionAssert.Throws <ArgumentException>(testRules);
        }
예제 #3
0
        public void RuleSecondForm()
        {
            int    Y    = 5;
            int    X    = 4;
            string name = "Форма 2.5";

            ws.Cells[Y, X] = name;
            Xml_Form form = new Xml_Form
            {
                Name  = "Test",
                Rules = new List <Xml_Equal_Base>
                {
                    new Xml_Equal {
                        Text = "Форма 1.2", X = X, Y = Y
                    },
                }
            };
            Xml_Form form2 = new Xml_Form
            {
                Name  = "Test 2",
                Rules = new List <Xml_Equal_Base>
                {
                    new Xml_Equal {
                        Text = "Форма 2.5", X = X, Y = Y
                    },
                }
            };
            var finded = XmlTools.findCorrectForm(ws, new List <Xml_Form> {
                form, form2
            });

            Assert.AreEqual(finded, form2);
        }
예제 #4
0
파일: Work.cs 프로젝트: qqmash/ExcelToDbf
        protected void InitVariables(Xml_Form lForm)
        {
            if (lForm.Fields.IF != null)
            {
                foreach (var xmlelem in lForm.Fields.IF)
                {
                    XElement xelem = XElement.Parse(xmlelem.OuterXml);
                    conditions.Add(ScanCondition(xelem));
                }
            }

            if (lForm.Fields.Static != null)
            {
                foreach (var xmlelem in lForm.Fields.Static)
                {
                    XElement xelem = XElement.Parse(xmlelem.OuterXml);
                    AddVar(staticVars, getVar(xelem, false));
                }
            }

            if (lForm.Fields.Dynamic != null)
            {
                foreach (var xmlelem in lForm.Fields.Dynamic)
                {
                    XElement xelem = XElement.Parse(xmlelem.OuterXml);
                    AddVar(dynamicVars, getVar(xelem, true));
                }
            }
        }
예제 #5
0
        public void TestExcelExample1()
        {
            string pathExcel = Path.Combine(Environment.CurrentDirectory, "Data\\Example1.xlsx");
            string pathTemp  = TestLibrary.getTempFilename(".dbf");

            Xml_Form form  = generateForm();
            Excel    excel = new Excel();
            DBF      dbf   = new DBF(pathTemp, form.DBF);

            try
            {
                excel.OpenWorksheet(pathExcel);

                Work            work      = new Work(excel.worksheet, form, 120);
                Logger.LogLevel old_level = Logger.Level;
                Logger.SetLevel(Logger.LogLevel.TRACER);
                work.IterateRecords(dbf.appendRecord);
                Logger.SetLevel(old_level);
            }
            finally
            {
                dbf.close();
                excel.close();
            }
        }
예제 #6
0
        protected int findStartY(Xml_Form form)
        {
            var target = form.Fields.StartY;

            if (target.IsSimple && target.SimpleValue.HasValue)
            {
                return(target.SimpleValue.Value);
            }

            var group = form.Rules.OfType <Xml_Equal_Group>().FirstOrDefault(x => x.Name == target.group.name);

            if (group == null)
            {
                throw new InvalidOperationException($"Не удалось найти группу с именем '{target.group.name}'");
            }

            var point = Program.XmlTools.findGroupPosition(worksheet, group);

            if (point == null)
            {
                throw new InvalidOperationException($"Не удалось найти координаты для группы '{group.Name}'!");
            }

            if (target.group.position != "after")
            {
                throw new ArgumentException($"Недопустимое значение 'position': {target.group.position}",
                                            nameof(target.group.position));
            }
            return(point.Value.Y + target.group.Y);
        }
예제 #7
0
파일: Work.cs 프로젝트: qqmash/ExcelToDbf
 public Work(Xml_Form form, int buffer)
 {
     InitVariables(form);
     startY      = form.Fields.StartY;
     endX        = form.Fields.EndX;
     validators  = form.Validate;
     this.buffer = buffer;
 }
예제 #8
0
        public Work(Worksheet worksheet, Xml_Form form, int buffer)
        {
            this.worksheet = worksheet;
            this.buffer    = buffer;

            InitVariables(form);
            startY     = findStartY(form);
            endX       = form.Fields.EndX;
            validators = form.Validate;
            jScript    = form.Fields.Script;
        }
예제 #9
0
        public void GroupSearch()
        {
            string[] values       = { "Hello", "world", "!", "Again" };
            int      startY       = 5;
            int      startYoffset = 5;

            ws.Cells[startY, 2]     = values[0];
            ws.Cells[startY, 3]     = values[1];
            ws.Cells[startY, 5]     = values[2];
            ws.Cells[startY + 1, 1] = values[3];

            Xml_Form form = new Xml_Form
            {
                Name   = "Test",
                Rules  = new List <Xml_Equal_Base>(),
                Fields = new Xml_Form_Fields()
                {
                    StartY = new Xml_Start_Y
                    {
                        group = new Xml_Start_Y_Group
                        {
                            name     = "group1",
                            position = "after",
                            Y        = startYoffset
                        }
                    }
                }
            };
            var rule = new Xml_Equal_Group
            {
                Name  = "group1",
                Rules = new List <Xml_Equal>
                {
                    new Xml_Equal {
                        Text = values[1], X = 1, Y = 0
                    },
                    new Xml_Equal {
                        Text = values[0], X = 0, Y = 0
                    },
                }
            };

            form.Rules.Add(rule);

            Work work = new Work(ws, form, 1);

            Assert.AreEqual(startY + startYoffset, work.StartY);
        }
예제 #10
0
        public void RuleSimple()
        {
            int Y = 3;
            int X = 1;

            string[] titles = { "Фамилия", "Имя", "Отчество" };
            for (int i = 0; i < titles.Length; i++)
            {
                ws.Cells[Y, X + i] = titles[i];
            }
            int    offsetY = 2;
            string value   = "Значение 1";

            ws.Cells[Y + offsetY, X] = value;

            Xml_Form form = new Xml_Form
            {
                Name  = "Test",
                Rules = new List <Xml_Equal_Base>
                {
                    new Xml_Equal_Group
                    {
                        Y     = Y,
                        X     = X,
                        Rules = new List <Xml_Equal>
                        {
                            new Xml_Equal {
                                Text = titles[0], X = 0, Y = 0
                            },
                            new Xml_Equal {
                                Text = titles[1], X = 1, Y = 0
                            },
                            new Xml_Equal {
                                Text = titles[2], X = 2, Y = 0
                            },
                            new Xml_Equal {
                                Text = value, X = 0, Y = offsetY
                            }
                        }
                    }
                }
            };
            var finded = XmlTools.findCorrectForm(ws, new List <Xml_Form> {
                form
            });

            Assert.AreEqual(form, finded);
        }
예제 #11
0
        public void GroupSearch()
        {
            string[] values = { "Hello", "world", "!", "Again" };
            ws.Cells[5, 2] = values[0];
            ws.Cells[5, 3] = values[1];
            ws.Cells[5, 5] = values[2];
            ws.Cells[6, 1] = values[3];

            Xml_Form form = new Xml_Form
            {
                Name  = "Test",
                Rules = new List <Xml_Equal_Base>()
            };
            var rule = new Xml_Equal_Group
            {
                Rules = new List <Xml_Equal>
                {
                    new Xml_Equal {
                        Text = values[1], X = 1, Y = 0
                    },
                    new Xml_Equal {
                        Text = values[0], X = 0, Y = 0
                    },
                }
            };

            form.Rules.Add(rule);
            var finded = XmlTools.findCorrectForm(ws, new List <Xml_Form> {
                form
            });

            Assert.AreEqual(form, finded);

            rule.Rules.Insert(0, new Xml_Equal {
                Text = values[3], X = -1, Y = 1
            });
            finded = XmlTools.findCorrectForm(ws, new List <Xml_Form> {
                form
            });
            Assert.AreEqual(form, finded);
        }
예제 #12
0
        public void RuleInvalid()
        {
            Xml_Form form = new Xml_Form
            {
                Name  = "Test",
                Rules = new List <Xml_Equal_Base>()
            };

            form.Rules.Clear();
            form.Rules.Add(new Xml_Equal {
                Text = "TEST", X = 2
            });
            Action testRules = () => XmlTools.findCorrectForm(ws, new List <Xml_Form> {
                form
            });

            ExceptionAssert.Throws <ArgumentException>(testRules);
            form.Rules.Clear();
            form.Rules.Add(new Xml_Equal {
                Text = "TEST", Y = 1
            });
            ExceptionAssert.Throws <ArgumentException>(testRules);
        }
예제 #13
0
        public void GroupFailedSearch()
        {
            string value = "Hello world!";

            ws.Cells[5, 2] = value;
            Xml_Form form = new Xml_Form
            {
                Name  = "Test",
                Rules = new List <Xml_Equal_Base>
                {
                    new Xml_Equal_Group
                    {
                        Rules = new List <Xml_Equal>
                        {
                            new Xml_Equal {
                                Text = "What is this?", X = 1, Y = 1
                            },
                        }
                    }
                }
            };
            var finded = XmlTools.findCorrectForm(ws, new List <Xml_Form> {
                form
            });

            Assert.IsNull(finded);
            ((Xml_Equal_Group)form.Rules[0]).Rules.Insert(0, new Xml_Equal
            {
                Text = value,
                X    = 0,
                Y    = 0
            });
            finded = XmlTools.findCorrectForm(ws, new List <Xml_Form> {
                form
            });
            Assert.IsNull(finded);
        }
예제 #14
0
        public void RuleNotValid()
        {
            int Y = 3;
            int X = 1;

            ws.Cells[Y, X] = "Документ";

            Xml_Form form = new Xml_Form
            {
                Name  = "Test",
                Rules = new List <Xml_Equal_Base>
                {
                    new Xml_Equal_Group
                    {
                        Y     = Y,
                        X     = X,
                        Rules = new List <Xml_Equal>
                        {
                            new Xml_Equal {
                                Text = "Документ", X = 0, Y = 0
                            },
                            new Xml_Equal {
                                Text = "Простой", X = 1, Y = 0
                            },
                            new Xml_Equal {
                                Text = "Сложный", X = 0, Y = 1
                            },
                        }
                    }
                }
            };
            var finded = XmlTools.findCorrectForm(ws, new List <Xml_Form> {
                form
            });

            Assert.IsNull(finded);
        }
예제 #15
0
        public void ValidateRegex()
        {
            int    Y    = 5;
            int    X    = 4;
            string name = "Форма 1.1";

            ws.Cells[Y, X] = name;

            Xml_Form form = new Xml_Form
            {
                Name  = "Test",
                Rules = new List <Xml_Equal_Base>
                {
                    new Xml_Equal {
                        Text = @"Форма \d.\d", X = X, Y = Y, validate = "regex"
                    }
                }
            };
            var finded = XmlTools.findCorrectForm(ws, new List <Xml_Form> {
                form
            });

            Assert.AreEqual(form, finded);
        }
예제 #16
0
        public void RuleSimple()
        {
            int    Y    = 5;
            int    X    = 4;
            string name = "Форма 1.1";

            ws.Cells[Y, X] = name;

            Xml_Form form = new Xml_Form
            {
                Name  = "Test",
                Rules = new List <Xml_Equal_Base>
                {
                    new Xml_Equal {
                        Text = name, X = X, Y = Y
                    }
                }
            };
            var finded = XmlTools.findCorrectForm(ws, new List <Xml_Form> {
                form
            });

            Assert.AreEqual(form, finded);
        }
예제 #17
0
        protected Xml_Form generateForm()
        {
            Xml_Form form = new Xml_Form
            {
                DBF = new List <Xml_DbfField>
                {
                    new Xml_DbfField
                    {
                        type   = "string",
                        name   = "FIO",
                        length = "30",
                        text   = "$FIO"
                    },
                    new Xml_DbfField
                    {
                        type   = "string",
                        name   = "KP",
                        length = "8",
                        text   = "$KP"
                    },
                    new Xml_DbfField
                    {
                        type   = "numeric",
                        name   = "SUMMA",
                        length = "8",
                        text   = "$SUMMA"
                    },
                    new Xml_DbfField
                    {
                        type   = "date",
                        name   = "DATA",
                        length = "8",
                        text   = "$DATA"
                    },
                    new Xml_DbfField
                    {
                        type   = "date",
                        name   = "NACHIS",
                        length = "8",
                        text   = "$NACHIS",
                    }
                },

                // TODO: Переписать на нормальные объекты
                Fields = new Xml_Form_Fields
                {
                    EndX   = 8,
                    StartY = new Xml_Start_Y()
                    {
                        SimpleValue = 8
                    },
                    Static = new[]
                    {
                        GetElement(@"<Static X=""2"" Y=""6"" name=""NACHIS"" type=""date"" regex_pattern=""на (\S+)"" language=""ru-RU"" format=""dd.MM.yyyy"" lastday=""true"" />")
                    },
                    IF = new[]
                    {
                        GetElement(@"<IF X=""2"" VALUE=""Итого:""><THEN><STOP_LOOP/><Dynamic X=""5"" name=""XLS_SUMMA"" type=""numeric"" /></THEN></IF>"),
                        GetElement(@"<IF X=""2"" VALUE=""Пропуск"">
                                        <THEN><SKIP_RECORD/></THEN>
                                        <ELSE><Dynamic X=""2"" name=""ID"" type=""string"" />
                                      </ELSE></IF>")
                    },
                    Dynamic = new[]
                    {
                        GetElement(@"<Dynamic X=""3"" name=""FIO"" type=""string"" />"),
                        GetElement(@"<Dynamic X=""4"" name=""KP"" type=""string"" />"),
                        GetElement(@"<Dynamic X=""5"" name=""TOTAL_SUMMA"" type=""numeric"" function=""SUM"" />"),
                        GetElement(@"<Dynamic X=""5"" name=""SUMMA"" type=""numeric"" />"),
                        GetElement(@"<Dynamic X=""6"" name=""DATA"" type=""date"" />"),
                    }
                },

                Validate = new List <Xml_Validator>
                {
                    new Xml_Validator
                    {
                        Math = new Xml_ValidatorMath
                        {
                            count     = 500,
                            precision = "0,5",
                            message   = "Погрешность {1} при допуске {0}"
                        },
                        Message = "{0} != {1} !",
                        var1    = "TOTAL_SUMMA",
                        var2    = "XLS_SUMMA"
                    }
                }
            };

            return(form);
        }