private void OpenExcel(string filePath)
        {
            Errors error = excel.OpenExcel(filePath);

            if (error != 0)
            {
                DisplayError(error);
                return;
            }
            dataPreviewGroup.Text = excel.FileName + (ClassModel.IsValidName(excel.FileName) ? "" : " (不合法)");
            classModel            = new ClassModel(nameSpace, excel.FileName, excel);
            if (classModel.IsVaild)
            {
                tableFields.Rows.Clear();
                for (int i = 0; i < classModel.Fields.Count; i++)
                {
                    ClassModel.Field f   = classModel.Fields[i];
                    DataRow          row = tableFields.NewRow();
                    row["field"]   = f.name;
                    row["type"]    = f.primType;
                    row["comment"] = f.comment;
                    tableFields.Rows.Add(row);
                }
            }
        }
        void OnGenJson()
        {
            int           col = model.Fields.Count;
            string        range;
            StringBuilder fstr = new StringBuilder();
            int           row  = 4;
            int           len  = 0;

            if (asArray)
            {
                fstr.Append("[");
            }
            while (true)
            {
                range = excel.GetCell(row, 2);
                if (string.IsNullOrEmpty(range))
                {
                    break;
                }
                Action refresh = () =>
                {
                    genProgress.Value = Math.Min(totalNum, row) * 100 / totalNum;
                };
                Invoke(refresh);
                if (asArray && len > 0)
                {
                    fstr.Append(",");
                }
                fstr.Append("{");
                ClassModel.Field f = model.Fields[0];
                fstr.Append("\"").Append(f.name).Append("\":");
                fstr.Append(f.GetJsonValue(range));
                if (f.name == "id" && !ids.Add(range))
                {
                    currentId = range;
                    Action box = () =>
                    {
                        MessageBox.Show("重复的id " + currentId, "错误");
                        t.Abort();
                        Close();
                        Dispose();
                    };
                    Invoke(box);
                    return;
                }
                for (int i = 1; i < col; i++)
                {
                    fstr.Append(",");
                    f     = model.Fields[i];
                    range = excel.GetCell(row, i + 2);
                    fstr.Append("\"").Append(f.name).Append("\":");
                    fstr.Append(f.GetJsonValue(range));
                }
                fstr.Append("}");
                if (!asArray)
                {
                    fstr.Append("\n");
                }
                row++;
                len++;
            }
            if (asArray)
            {
                fstr.Append("]");
            }
            File.WriteAllText(Path.Combine(output, model.ClassName + ".txt"), fstr.ToString());
            Action act = () =>
            {
                Close();
                Dispose();
                DialogResult = DialogResult.OK;
            };

            Invoke(act);
        }