예제 #1
0
        public void XlsxTypeCTest()
        {
            string   xlsxFile       = Path.Combine(TestUtil.GetTestDataPath(), "c_sample.xlsx");
            IAdapter adapter        = AsposeExcelAdapter.CreateAdapter(xlsxFile);
            var      columnOrdering = TableHeaderRecognizer.ExamineTableBeginning(adapter);

            SmartParser.Lib.Parser parser      = new SmartParser.Lib.Parser(adapter);
            Declaration            declaration = parser.Parse(columnOrdering, false, null);
            string comments = "";
            string output   = DeclarationSerializer.Serialize(declaration, ref comments);
        }
예제 #2
0
        static Declaration BuildDeclarations(IAdapter adapter, string inputFile)
        {
            Declaration declaration;
            string      inputFileName = Path.GetFileName(inputFile);

            SmartParser.Lib.Parser parser = new SmartParser.Lib.Parser(adapter, !SkipRelativeOrphan);

            if (adapter.CurrentScheme == default)
            {
                SmartParser.Lib.TableHeader?columnOrdering = null;
                try
                {
                    columnOrdering   = TableHeaderRecognizer.ExamineTableBeginning(adapter);
                    LastGoodOrdering = columnOrdering;
                }
                catch (Exception ex)
                {
                    Logger.Info(ex.Message);
                    if (LastGoodOrdering != null)
                    {
                        Logger.Info("use the last known table header scheme");
                        columnOrdering = LastGoodOrdering;
                        columnOrdering.FirstDataRow = 0;
                    }
                    else
                    {
                        throw ex;
                    }
                }

                // Try to extract declaration year from file name if we weren't able to get it from document title
                if (!columnOrdering.Year.HasValue)
                {
                    columnOrdering.Year = TextHelpers.ExtractYear(inputFileName);
                }

                Logger.Info("Column ordering: ");
                foreach (var ordering in columnOrdering.ColumnOrder)
                {
                    Logger.Info(ordering.ToString());
                }

                Logger.Info(String.Format("OwnershipTypeInSeparateField: {0}",
                                          columnOrdering.OwnershipTypeInSeparateField));

                if (ColumnsOnly)
                {
                    return(null);
                }

                if (ColumnToDump != DeclarationField.None)
                {
                    DumpColumn(adapter, columnOrdering, ColumnToDump);
                    return(null);
                }

                if (columnOrdering.Title != null)
                {
                    Logger.Info("Declaration Title: {0} ", columnOrdering.Title);
                }

                if (columnOrdering.Year != null)
                {
                    Logger.Info("Declaration Year: {0} ", columnOrdering.Year.Value);
                }

                if (columnOrdering.MinistryName != null)
                {
                    Logger.Info("Declaration Ministry: {0} ", columnOrdering.MinistryName);
                }


                if (!columnOrdering.HasNameColumn())
                {
                    // TODO сначала поискать первый section_row и проверить, именно там может быть ФИО
                    // https://declarator.org/admin/declarations/jsonfile/186842/change/
                    throw new SmartParserException("Insufficient fields: No any of Declarant Name fields found.");
                }

                if (!(columnOrdering.ContainsField(DeclarationField.DeclarantIncome) ||
                      columnOrdering.ContainsField(DeclarationField.DeclarantIncomeInThousands) ||
                      columnOrdering.ContainsField(DeclarationField.DeclaredYearlyIncome) ||
                      columnOrdering.ContainsField(DeclarationField.DeclaredYearlyIncomeThousands)))
                {
                    if (!SmartParser.Lib.TableHeader.SearchForFioColumnOnly)
                    {
                        throw new SmartParserException("Insufficient fields: No any of Declarant Income fields found.");
                    }
                }

                declaration = parser.Parse(columnOrdering, BuildTrigrams, UserDocumentFileId);
                SaveRandomPortionToToloka(adapter, columnOrdering, declaration, inputFile);
            }
            else
            {
                declaration = adapter.CurrentScheme.Parse(parser, UserDocumentFileId);
            }
            return(declaration);
        }