Ejemplo n.º 1
0
        private void _get_row_data(Serchdata v_st, CellValue[] v_row_data, int v_optCode)
        {
            ExcelMapData           curmap  = v_st.curmap;
            ComplexExcelHeaderNode parrent = v_st.node;
            List <KeyValue <ComplexExcelHeaderNode> > keyValSet = v_st.node.getKeyValueSet();

            for (int i = 0; i < keyValSet.Count; i++)
            {
                Key the_key = keyValSet[i].key;
                ComplexExcelHeaderNode node = parrent.get_node(the_key);


                if (node.IsSkip)
                {
                    continue;
                }
                if (node.IsLeaf)
                {
                    ExcelHeaderDecorate ehd = m_header_dct[node.LeafDataIdx];
                    if (!ehd.is_need_opt(v_optCode))
                    {
                        continue;
                    }
                    CellValue celldata = v_row_data[node.LeafDataIdx];
                    if (!celldata._isMiss)
                    {
                        ExcelMapData leafData = new ExcelMapData();
                        leafData.initAsLeafeData(celldata);
                        leafData.Type = EExcelMapDataType.cellData;
                        curmap.addData(the_key, leafData);
                    }
                }
                else
                {
                    ExcelMapData map_next = new ExcelMapData();
                    map_next.initAsTableData();
                    map_next.Type = EExcelMapDataType.cellTable;
                    Serchdata sdnew = new Serchdata(node, map_next);
                    _get_row_data(sdnew, v_row_data, v_optCode);
                    if (!map_next.IsEmpty())
                    {
                        curmap.addData(the_key, map_next);
                    }
                }
            }
        }
Ejemplo n.º 2
0
        protected ComplexExcelHeaderNode _get_header_Decorate(string v_full_header, bool v_is_create = false)
        {
            string headerStr             = v_full_header + '$';
            int    state                 = 0;//0表示正常状态,1表示数组状态,2表示]后的状态
            ComplexExcelHeaderNode loc   = this;
            StringBuilder          cursb = new StringBuilder();

            for (int i = 0; i < headerStr.Length; i++)
            {
                char curcha = headerStr[i];
                switch (state)
                {
                case 0:
                    switch (curcha)
                    {
                    case '[':
                        loc            = loc.get_node(cursb.ToString(), v_is_create);
                        loc.debug_name = cursb.ToString();
                        cursb.Clear();
                        state = 1;
                        break;

                    case '.':
                        loc            = loc.get_node(cursb.ToString(), v_is_create);
                        loc.debug_name = cursb.ToString();
                        cursb.Clear();
                        break;

                    case '$':
                        loc            = loc.get_node(cursb.ToString(), v_is_create);
                        loc.debug_name = cursb.ToString();
                        cursb.Clear();
                        break;

                    default:
                        cursb.Append(curcha);
                        break;
                    }
                    break;

                case 1:
                    if (char.IsDigit(curcha))
                    {
                        cursb.Append(curcha);
                    }
                    else if (curcha == ']')
                    {
                        int index = Convert.ToInt32(cursb.ToString());
                        loc            = loc.get_node(index, v_is_create);
                        loc.debug_name = cursb.ToString();
                        cursb.Clear();
                        state = 2;
                    }
                    else
                    {
                        Debug.Exception("{0}中,在遍历到{1}位置时,发现{2}不是数字", v_full_header, i, curcha);
                        return(null);
                    }
                    break;

                case 2:
                    switch (curcha)
                    {
                    case '.':
                        state = 0;
                        break;

                    case '[':
                        state = 1;
                        break;

                    case '$':
                        break;

                    default:
                        Debug.Exception("表头{0}语法错误", v_full_header);
                        break;
                    }
                    break;
                }
            }
            return(loc);
        }