Exemple #1
0
        // 컬럼의 그룹을 생성: recursively call
        private static int BuildColumnGroups(GridGroup group, Worksheet sheet, int row, int lastRow, int startCol, int lastCol, List <GridDataColumn> columns)
        {
            int totwidth = 0;

            for (var i = startCol; i <= lastCol; i++)
            {
                Range cell       = GetRange(sheet, row, i);
                int   mergeCount = cell.MergeArea.Cells.Count;
                if (mergeCount == 1)
                { // single column group
                    var col = columns[i - START_COL];
                    group.columns.Add(col);
                    totwidth += col.width;
                }
                else
                {
                    GridGroup child = new GridGroup();
                    child.setHeader(cell.Value);
                    child.width = BuildColumnGroups(child, sheet, row + 1, lastRow, i, i + mergeCount, columns);
                    totwidth   += group.width;
                    group.columns.Add(child);
                    i += mergeCount - 1;
                }
            }
            return(totwidth);
        }
Exemple #2
0
        public static string GenerateCode(Worksheet sheet, out string fieldText, out string columnText)
        {
            int   srow = -1;
            int   nameRow = -1, typeRow = -1, alignRow = -1, editableRow = -1, numberRow = -1, dateRow = -1, valuesRow = -1, labelsRow = -1, sizeRow = -1;
            Range allRange = sheet.UsedRange;

            for (int r = 1; r <= allRange.Rows.Count; r++)
            {
                var head = allRange.Item[r, 1].Value;
                if (head != null && srow == -1)
                {
                    srow = r;
                }
                if (head == HEAD_NAME)
                {
                    nameRow = r;
                }
                else if (head == HEAD_TYPE)
                {
                    typeRow = r;
                }
                else if (head == HEAD_ALIGN)
                {
                    alignRow = r;
                }
                else if (head == HEAD_EDIT)
                {
                    editableRow = r;
                }
                else if (head == HEAD_NUMB)
                {
                    numberRow = r;
                }
                else if (head == HEAD_DATE)
                {
                    dateRow = r;
                }
                else if (head == HEAD_VALS)
                {
                    valuesRow = r;
                }
                else if (head == HEAD_LBLS)
                {
                    labelsRow = r;
                }
                else if (head == HEAD_SIZE)
                {
                    sizeRow = r;
                }
            }
            fieldText  = "";
            columnText = "";
            if (nameRow < 1)
            {
                Utils.ShowMessage(HEAD_NAME + "행을 찾지 못했습니다.");
                return(null);
            }
            if (typeRow < 1)
            {
                Utils.ShowMessage(HEAD_TYPE + "행을 찾지 못했습니다.");
                return(null);
            }
            if (sizeRow < 1)
            {
                Utils.ShowMessage(HEAD_SIZE + "행을 찾지 못했습니다.");
                return(null);
            }

            List <GridField>      fields  = new List <GridField>();
            List <GridDataColumn> columns = new List <GridDataColumn>();

            for (int c = 2; c <= allRange.Columns.Count; c++)
            {
                Range  nameCell = allRange.Item[nameRow, c];
                string fname    = nameCell.Value;
                double w        = nameCell.Width / 72 * 96;
                if (!String.IsNullOrEmpty(fname))
                {
                    GridField      field  = new GridField();
                    GridDataColumn column = new GridDataColumn();
                    field.fieldName = column.fieldName = column.name = fname;
                    Range sizeCell = allRange.Item[sizeRow, c];
                    column.width = sizeCell.Value == null?Utils.WidthToPixel(sizeCell.Width) : (int)sizeCell.Value;

                    column.setHeader(allRange.Item[srow - 1, c].Value);

                    string typeText  = allRange.Item[typeRow, c].Value;
                    int    typeIndex = Array.IndexOf(TYPE_LABELS, typeText);
                    if (typeIndex == -1)
                    {
                        Utils.ShowMessage("존재하지 않은 형태(" + typeText + ") 입니다.");
                        return(null);
                    }
                    string ftype = TYPE_VALUES[typeIndex];
                    column.setEditor(ftype);

                    if (ftype == "number" || ftype == "datetime")
                    {
                        field.dataType = ftype;
                    }
                    string alignText  = allRange[alignRow, c].Value;
                    int    alignIndex = Array.IndexOf(ALIGN_VALUES, alignText);
                    string align      = ALIGN_VALUES[alignIndex > -1 ? alignIndex : 0];
                    if (align != "near")
                    {
                        column.setStyles(align);
                    }

                    if (allRange[editableRow, c].Value == EDIT_LABELS[1])
                    {
                        column.editable = false;
                    }

                    if (ftype == "date")
                    {
                        string fmt         = allRange[dateRow, c].Value;
                        int    formatIndex = Array.IndexOf(DFMT_LABELS, fmt);
                        string dateformat  = formatIndex == -1 ? String.IsNullOrEmpty(fmt) ? "yyyy/MM/dd" : fmt : DFMT_VALUES[formatIndex];
                        field.datetimeFormat         = dateformat;
                        column.editor.datetimeFormat = dateformat;
                    }

                    if (ftype == "number")
                    {
                        var fmt          = allRange[numberRow, c].Value;
                        var formatIndex  = Array.IndexOf(NFMT_LABELS, fmt);
                        var numberformat = formatIndex == -1 ? fmt || null : NFMT_VALUES[formatIndex];
                        column.setStyles(null, numberformat);
                        column.editor.editFormat    = numberformat;
                        column.editor.textAlignment = "far";
                    }

                    if (ftype == "multicheck" || ftype == "dropdown")
                    {
                        column.lookupDisplay      = true;
                        column.editor.showButtons = true;
                        string valText = allRange[valuesRow, c].Value;
                        string lblText = allRange[labelsRow, c].Value;
                        column.values = valText;
                        if (!String.IsNullOrEmpty(lblText))
                        {
                            column.labels = lblText;
                        }
                        if (ftype == "multicheck")
                        {
                            column.valueSeperator = ",";
                        }
                    }

                    fields.Add(field);
                    columns.Add(column);
                }
            }
            JsonSerializerSettings settings = new JsonSerializerSettings();

            settings.NullValueHandling = NullValueHandling.Ignore;
            fieldText = JsonConvert.SerializeObject(fields, Formatting.Indented, settings);
            if (srow > 1)
            {
                GridGroup groups = new GridGroup();
                BuildColumnGroups(groups, sheet, 1, srow, 2, columns.Count + 1, columns);
                columnText = JsonConvert.SerializeObject(groups.columns, Formatting.Indented, settings);
                //return { fields: fields, columns: groups};
            }
            else
            {
                columnText = JsonConvert.SerializeObject(columns, Formatting.Indented, settings);
                //return { fields: fields, columns: columns};
            }
            string code = "var divId = \"realgrid\";\r\n" +
                          "dataProvider = new RealGridJS.LocalDataProvider();\r\n" +
                          "var fields = " + fieldText + ";\r\n" +
                          "dataProvider.setFields(fields);\r\n" +
                          "\r\n" +
                          "gridView = new RealGridJS.GridView(divId);\r\n" +
                          "var columns = " + columnText + ";\r\n" +
                          "gridView.setDataSource(dataProvider);\r\n" +
                          "gridView.setColumns(columns);";

            return(code);
        }