示例#1
0
        public CSharpExporter(List <ExcelParser.TableInfo> tableInfos, string excelName, HashSet <string> exportTags)
        {
            //-- 创建代码字符串
            StringBuilder sb = new StringBuilder();

            sb.AppendLine("//");
            sb.AppendLine("// Auto Generated Code By excel2json");
            sb.AppendLine("// https://neil3d.gitee.io/coding/excel2json.html");
            sb.AppendLine();
            sb.AppendFormat("// Generate From {0}", excelName);
            sb.AppendLine();
            sb.AppendLine();

            foreach (var tableInfo in tableInfos)
            {
                var className = NameFormater.FormatCamelName(excelName, false);
                if (tableInfo.parseMode == ExcelParser.TableType.Config)
                {
                    className = className.Replace("Cfg", "AttrCfg");
                }

                sb.AppendFormat("public class {0}", className);
                sb.AppendLine();
                sb.Append("{");
                sb.AppendLine();
                for (int i = 0; i < tableInfo.numFields; i++)
                {
                    var fieldInfo = tableInfo.fieldInfos[i];
                    if (exportTags.Contains(fieldInfo.tag))
                    {
                        var comment = NameFormater.FormatComment(fieldInfo.comment);
                        sb.AppendFormat("    public {0} {1}; // {2}", fieldInfo.type, fieldInfo.name, comment);
                        sb.AppendLine();
                    }
                }
                sb.Append('}');
                sb.AppendLine();
                sb.AppendLine();
            }

            sb.AppendLine("// End of Auto Generated Code");

            _code = sb.ToString();
        }
示例#2
0
        private static void ParseColumnMajorTable(TableInfo tableInfo, DataTable sheet)
        {
            int descIndex = tableInfo.startRow + 1;
            int typeIndex = tableInfo.startRow + 2;
            int nameIndex = tableInfo.startRow + 3;

            tableInfo.numRows   = tableInfo.endRow - tableInfo.startRow - 4;
            tableInfo.numFields = 0;
            if (tableInfo.numRows < 0)
            {
                tableInfo.numRows = 0;
                return;
            }

            for (int columnIndex = 0; columnIndex < sheet.Columns.Count; ++columnIndex)
            {
                var type = sheet.Rows[typeIndex][columnIndex].ToString();

                string name;
                string tag;
                NameFormater.GetNameAndTag(out name, out tag, sheet.Rows[nameIndex][columnIndex].ToString());

                name = NameFormater.FormatCamelName(name, true);
                if (name == "" || type == "")
                {
                    break;
                }

                FieldInfo field = new FieldInfo();
                field.comment = sheet.Rows[descIndex][columnIndex].ToString();
                field.name    = name;
                field.type    = type;
                field.tag     = tag;

                for (int i = tableInfo.startRow + 4; i < tableInfo.endRow; ++i)
                {
                    field.datas.Add(ConvertData(field.type, sheet.Rows[i][columnIndex].ToString()));
                }

                tableInfo.fieldInfos.Add(field);
            }

            tableInfo.numFields = tableInfo.fieldInfos.Count;
        }
示例#3
0
        private static void ParseRowMajorTable(TableInfo tableInfo, DataTable sheet)
        {
            for (int i = tableInfo.startRow + 1; i < tableInfo.endRow; ++i)
            {
                FieldInfo field = new FieldInfo();
                field.comment = sheet.Rows[i][0].ToString();
                field.type    = sheet.Rows[i][1].ToString();

                string name;
                string tag;
                NameFormater.GetNameAndTag(out name, out tag, sheet.Rows[i][2].ToString());
                field.name = NameFormater.FormatCamelName(name, true);
                field.tag  = tag;

                field.datas.Add(ConvertData(field.type, sheet.Rows[i][3].ToString()));

                tableInfo.fieldInfos.Add(field);
            }

            tableInfo.numRows   = 1;
            tableInfo.numFields = tableInfo.fieldInfos.Count;
        }
示例#4
0
        public string ConvertSheet(List <ExcelParser.TableInfo> tableInfos, string excelName, HashSet <string> exportTags)
        {
            ExcelParser.TableInfo attrs = null;
            ExcelParser.TableInfo table = null;
            foreach (var tableInfo in tableInfos)
            {
                if (tableInfo.parseMode == ExcelParser.TableType.Config)
                {
                    attrs = tableInfo;
                }
                if (tableInfo.parseMode == ExcelParser.TableType.Table)
                {
                    table = tableInfo;
                }
            }

            XmlDocument doc       = new XmlDocument();
            var         xmlExData = doc.CreateElement("ExData");

            doc.AppendChild(xmlExData);

            XmlElement xmlTable = null;

            if (table != null || attrs != null)
            {
                xmlTable      = doc.CreateElement("Table");
                m_strFileName = NameFormater.FormatCamelName(excelName, false);
                xmlTable.SetAttribute("Name", m_strFileName);
                xmlExData.AppendChild(xmlTable);
            }

            if (table != null)
            {
                var xmlColumnList = doc.CreateElement("ColumnList");
                xmlTable.AppendChild(xmlColumnList);

                foreach (var fieldInfo in table.fieldInfos)
                {
                    if (exportTags.Contains(fieldInfo.tag))
                    {
                        var xmlColumn = doc.CreateElement("Column");

                        string finalName     = fieldInfo.name;
                        string finalDataType = fieldInfo.type;
                        if (_typeMap.TryGetValue(fieldInfo.type, out var mappingInfo))
                        {
                            finalName     = mappingInfo.prefix + fieldInfo.name;
                            finalDataType = mappingInfo.dataTypeIndex;
                        }

                        xmlColumn.SetAttribute("Name", finalName);
                        xmlColumn.SetAttribute("DataType", finalDataType);
                        xmlColumnList.AppendChild(xmlColumn);
                    }
                }
            }

            if (attrs != null)
            {
                foreach (var fieldInfo in attrs.fieldInfos)
                {
                    if (exportTags.Contains(fieldInfo.tag))
                    {
                        var xmlAttribute = doc.CreateElement("Attribute");
                        xmlTable.AppendChild(xmlAttribute);

                        string finalName     = fieldInfo.name;
                        string finalDataType = fieldInfo.type;
                        if (_typeMap.TryGetValue(fieldInfo.type, out var mappingInfo))
                        {
                            finalName     = mappingInfo.prefix + fieldInfo.name;
                            finalDataType = mappingInfo.dataTypeIndex;
                        }

                        xmlAttribute.SetAttribute("Name", finalName);
                        xmlAttribute.SetAttribute("DataType", finalDataType);
                        xmlAttribute.SetAttribute("Value", fieldInfo.datas[0].ToString());
                    }
                }
            }

            if (table != null)
            {
                for (int i = 0; i < table.numRows; ++i)
                {
                    var xmlRecord = doc.CreateElement("Record");
                    for (int j = 0; j < table.numFields; ++j)
                    {
                        var fieldInfo = table.fieldInfos[j];
                        if (exportTags.Contains(fieldInfo.tag))
                        {
                            string finalName = fieldInfo.name;
                            Func <object, string> convertor = ConvertDefault;

                            if (_typeMap.TryGetValue(fieldInfo.type, out var mappingInfo))
                            {
                                finalName = mappingInfo.prefix + fieldInfo.name;
                                convertor = mappingInfo.convertor;
                            }

                            xmlRecord.SetAttribute(finalName, convertor(fieldInfo.datas[i]));
                        }
                    }

                    xmlTable.AppendChild(xmlRecord);
                }
            }

            var stringBuilder = new StringBuilder();
            var settings      = new XmlWriterSettings();

            settings.OmitXmlDeclaration = true;
            settings.Encoding           = Encoding.UTF8;
            settings.Indent             = true;

            using (var xmlWriter = XmlWriter.Create(stringBuilder, settings))
            {
                doc.Save(xmlWriter);
            }

            return(stringBuilder.ToString());
        }
示例#5
0
        /// <summary>
        /// 根据命令行参数,执行Excel数据导出工作
        /// </summary>
        /// <param name="options">命令行参数</param>
        private static void Run(Options options)
        {
            //-- Excel File
            string excelPath     = options.excelPath;
            string excelName     = Path.GetFileNameWithoutExtension(options.excelPath);
            var    excelFileInfo = new FileInfo(excelPath);

            if (!excelFileInfo.Exists)
            {
                throw new Exception("Excel文件不存在");
            }

            HashSet <string> exportTags = new HashSet <string>();

            exportTags.Add("");
            if (options.exportTags != null)
            {
                var tags = options.exportTags.Split(',');
                foreach (var tag in tags)
                {
                    exportTags.Add(tag);
                }
            }

            //-- Encoding
            Encoding cd = new UTF8Encoding(false);

            //-- Load Excel
            ExcelLoader excel = new ExcelLoader(excelPath);
            List <ExcelParser.TableInfo> tableInfos = null;

            //-- export json
            if (!string.IsNullOrEmpty(options.jsonDir))
            {
                var finalPath = Path.Combine(options.jsonDir, NameFormater.FormatFileName(excelName) + ".json");
                var fileInfo  = new FileInfo(finalPath);
                if (!fileInfo.Exists || fileInfo.LastWriteTimeUtc.Ticks < excelFileInfo.LastWriteTimeUtc.Ticks)
                {
                    if (tableInfos == null)
                    {
                        tableInfos = ExcelParser.ReadSheetData(excel.Sheets[0]);
                    }

                    JsonExporter jsonExporter = new JsonExporter(tableInfos, excelName, exportTags);
                    jsonExporter.SaveToFile(finalPath, cd);
                }
            }

            //-- export xml
            if (!string.IsNullOrEmpty(options.xmlDir))
            {
                var finalPath = Path.Combine(options.xmlDir, NameFormater.FormatCamelName(excelName, false) + ".xml");
                var fileInfo  = new FileInfo(finalPath);
                if (!fileInfo.Exists || fileInfo.LastWriteTimeUtc.Ticks < excelFileInfo.LastWriteTimeUtc.Ticks)
                {
                    if (tableInfos == null)
                    {
                        tableInfos = ExcelParser.ReadSheetData(excel.Sheets[0]);
                    }

                    XmlExporter xmlExporter = new XmlExporter(tableInfos, excelName, exportTags);
                    xmlExporter.SaveToFile(finalPath, cd);
                }
            }

            //-- export c#
            if (!string.IsNullOrEmpty(options.csharpDir))
            {
                var finalPath = Path.Combine(options.csharpDir, NameFormater.FormatCamelName(excelName, false) + ".cs");
                var fileInfo  = new FileInfo(finalPath);
                if (!fileInfo.Exists || fileInfo.LastWriteTimeUtc.Ticks < excelFileInfo.LastWriteTimeUtc.Ticks)
                {
                    if (tableInfos == null)
                    {
                        tableInfos = ExcelParser.ReadSheetData(excel.Sheets[0]);
                    }

                    CSharpExporter csharpExporter = new CSharpExporter(tableInfos, excelName, exportTags);
                    csharpExporter.SaveToFile(finalPath, cd);
                }
            }
        }