public static IList <T> _GetCells <T, RT>(
            IVisio.Shape shape,
            VAQUERY.CellQuery query,
            RowToObject <T, RT> row_to_object)
        {
            CellGroupMultiRow.check_query(query);

            var data_for_shape = query.GetCellData <RT>(shape);
            var sec            = data_for_shape.Sections[0];
            var sec_objects    = CellGroupMultiRow.SectionToObjectList(sec, row_to_object);

            return(sec_objects);
        }
        public static IList <List <T> > _GetCells <T, RT>(
            IVisio.Page page,
            IList <int> shapeids,
            VAQUERY.CellQuery query,
            RowToObject <T, RT> row_to_object)
        {
            CellGroupMultiRow.check_query(query);

            var list            = new List <List <T> >(shapeids.Count);
            var surface         = new ShapeSheetSurface(page);
            var data_for_shapes = query.GetCellData <RT>(surface, shapeids);

            foreach (var data_for_shape in data_for_shapes)
            {
                var sec         = data_for_shape.Sections[0];
                var sec_objects = CellGroupMultiRow.SectionToObjectList(sec, row_to_object);
                list.Add(sec_objects);
            }

            return(list);
        }