diff --git a/CSDefineGenerator.cs b/CSDefineGenerator.cs index 3dfce14..cf290a9 100644 --- a/CSDefineGenerator.cs +++ b/CSDefineGenerator.cs @@ -27,7 +27,7 @@ public string code { } } - public CSDefineGenerator(string excelName, ExcelLoader excel) + public CSDefineGenerator(string excelName, ExcelLoader excel, string excludePrefix) { //-- 创建代码字符串 StringBuilder sb = new StringBuilder(); @@ -44,7 +44,7 @@ public CSDefineGenerator(string excelName, ExcelLoader excel) for (int i = 0; i < excel.Sheets.Count; i++) { DataTable sheet = excel.Sheets[i]; - sb.Append(_exportSheet(sheet)); + sb.Append(_exportSheet(sheet, excludePrefix)); } sb.AppendLine(); @@ -53,11 +53,15 @@ public CSDefineGenerator(string excelName, ExcelLoader excel) mCode = sb.ToString(); } - private string _exportSheet(DataTable sheet) + private string _exportSheet(DataTable sheet, string excludePrefix) { if (sheet.Columns.Count < 0 || sheet.Rows.Count < 2) return ""; + string sheetName = sheet.TableName; + if (excludePrefix.Length > 0 && sheetName.StartsWith(excludePrefix)) + return ""; + // get field list List fieldList = new List(); DataRow typeRow = sheet.Rows[0]; @@ -65,6 +69,11 @@ private string _exportSheet(DataTable sheet) foreach (DataColumn column in sheet.Columns) { + // 过滤掉包含指定前缀的列 + string columnName = column.ToString(); + if (excludePrefix.Length > 0 && columnName.StartsWith(excludePrefix)) + continue; + FieldDef field; field.name = column.ToString(); field.type = typeRow[column].ToString(); diff --git a/Docs/ExampleData.xlsx b/Docs/ExampleData.xlsx index 256066e..5433379 100644 Binary files a/Docs/ExampleData.xlsx and b/Docs/ExampleData.xlsx differ diff --git a/GUI/DataManager.cs b/GUI/DataManager.cs index 6cb50a1..4b7b91b 100644 --- a/GUI/DataManager.cs +++ b/GUI/DataManager.cs @@ -93,10 +93,10 @@ public void loadExcel(Program.Options options) ExcelLoader excel = new ExcelLoader(excelPath, header); //-- C# 结构体定义 - mCSharp = new CSDefineGenerator(excelPath, excel); + mCSharp = new CSDefineGenerator(excelPath, excel, options.ExcludePrefix); //-- 导出JSON - mJson = new JsonExporter(excel, options.Lowcase, options.ExportArray, options.DateFormat, options.ForceSheetName, header); + mJson = new JsonExporter(excel, options.Lowcase, options.ExportArray, options.DateFormat, options.ForceSheetName, header, options.ExcludePrefix); } } } diff --git a/GUI/MainForm.Designer.cs b/GUI/MainForm.Designer.cs index edb94c8..683f87a 100644 --- a/GUI/MainForm.Designer.cs +++ b/GUI/MainForm.Designer.cs @@ -29,6 +29,7 @@ private void InitializeComponent() { System.Windows.Forms.Label label3; System.Windows.Forms.Label label5; System.Windows.Forms.Label label6; + System.Windows.Forms.Label label7; System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(MainForm)); this.statusStrip = new System.Windows.Forms.StatusStrip(); this.statusLabel = new System.Windows.Forms.ToolStripStatusLabel(); @@ -59,12 +60,14 @@ private void InitializeComponent() { this.tabPageJSON = new System.Windows.Forms.TabPage(); this.tabCSharp = new System.Windows.Forms.TabPage(); this.backgroundWorker = new System.ComponentModel.BackgroundWorker(); + this.textBoxExculdePrefix = new System.Windows.Forms.TextBox(); label2 = new System.Windows.Forms.Label(); label1 = new System.Windows.Forms.Label(); label4 = new System.Windows.Forms.Label(); label3 = new System.Windows.Forms.Label(); label5 = new System.Windows.Forms.Label(); label6 = new System.Windows.Forms.Label(); + label7 = new System.Windows.Forms.Label(); this.statusStrip.SuspendLayout(); this.toolStrip.SuspendLayout(); ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit(); @@ -328,6 +331,8 @@ private void InitializeComponent() { // groupBox1 // this.groupBox1.AutoSize = true; + this.groupBox1.Controls.Add(this.textBoxExculdePrefix); + this.groupBox1.Controls.Add(label7); this.groupBox1.Controls.Add(label6); this.groupBox1.Controls.Add(this.comboBoxSheetName); this.groupBox1.Controls.Add(label5); @@ -345,7 +350,7 @@ private void InitializeComponent() { this.groupBox1.Location = new System.Drawing.Point(8, 236); this.groupBox1.Margin = new System.Windows.Forms.Padding(8); this.groupBox1.Name = "groupBox1"; - this.groupBox1.Size = new System.Drawing.Size(245, 238); + this.groupBox1.Size = new System.Drawing.Size(245, 248); this.groupBox1.TabIndex = 3; this.groupBox1.TabStop = false; this.groupBox1.Text = "Options"; @@ -379,7 +384,7 @@ private void InitializeComponent() { // // btnReimport // - this.btnReimport.Location = new System.Drawing.Point(68, 195); + this.btnReimport.Location = new System.Drawing.Point(68, 205); this.btnReimport.Name = "btnReimport"; this.btnReimport.Size = new System.Drawing.Size(75, 23); this.btnReimport.TabIndex = 7; @@ -478,6 +483,22 @@ private void InitializeComponent() { this.backgroundWorker.DoWork += new System.ComponentModel.DoWorkEventHandler(this.backgroundWorker_DoWork); this.backgroundWorker.RunWorkerCompleted += new System.ComponentModel.RunWorkerCompletedEventHandler(this.backgroundWorker_RunWorkerCompleted); // + // label7 + // + label7.Location = new System.Drawing.Point(6, 179); + label7.Name = "label7"; + label7.Size = new System.Drawing.Size(77, 12); + label7.TabIndex = 13; + label7.Text = "Exculde Prefix:"; + label7.TextAlign = System.Drawing.ContentAlignment.MiddleRight; + // + // textBoxExculdePrefix + // + this.textBoxExculdePrefix.Location = new System.Drawing.Point(89, 177); + this.textBoxExculdePrefix.Name = "textBoxExculdePrefix"; + this.textBoxExculdePrefix.Size = new System.Drawing.Size(150, 21); + this.textBoxExculdePrefix.TabIndex = 14; + // // MainForm // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); @@ -542,5 +563,6 @@ private void InitializeComponent() { private System.Windows.Forms.TabPage tabCSharp; private System.Windows.Forms.ToolStripButton btnCopyCSharp; private System.Windows.Forms.ToolStripButton btnSaveCSharp; + private System.Windows.Forms.TextBox textBoxExculdePrefix; } } \ No newline at end of file diff --git a/GUI/MainForm.cs b/GUI/MainForm.cs index b90ba1a..1adc083 100644 --- a/GUI/MainForm.cs +++ b/GUI/MainForm.cs @@ -143,6 +143,7 @@ private void loadExcelAsync(string path) options.HeaderRows = int.Parse(this.comboBoxHeader.Text); options.DateFormat = this.comboBoxDateFormat.Text; options.ForceSheetName = this.comboBoxSheetName.SelectedIndex == 0; + options.ExcludePrefix = this.textBoxExculdePrefix.Text; //-- start import this.backgroundWorker.RunWorkerAsync(options); diff --git a/GUI/MainForm.resx b/GUI/MainForm.resx index 170cc6c..2db9a0b 100644 --- a/GUI/MainForm.resx +++ b/GUI/MainForm.resx @@ -141,6 +141,9 @@ 17, 17 + + False + 241, 17 diff --git a/JsonExporter.cs b/JsonExporter.cs index 35cdd15..9fb4ec3 100644 --- a/JsonExporter.cs +++ b/JsonExporter.cs @@ -25,13 +25,18 @@ public string context { /// 构造函数:完成内部数据创建 /// /// ExcelLoader Object - public JsonExporter(ExcelLoader excel, bool lowcase, bool exportArray, string dateFormat, bool forceSheetName, int headerRows) + public JsonExporter(ExcelLoader excel, bool lowcase, bool exportArray, string dateFormat, bool forceSheetName, int headerRows, string excludePrefix) { mHeaderRows = headerRows-1; List validSheets = new List(); for (int i = 0; i < excel.Sheets.Count; i++) { DataTable sheet = excel.Sheets[i]; + + // 过滤掉包含特定前缀的表单 + string sheetName = sheet.TableName; + if (excludePrefix.Length>0 && sheetName.StartsWith(excludePrefix)) + continue; if (sheet.Columns.Count > 0 && sheet.Rows.Count > 0) validSheets.Add(sheet); @@ -47,7 +52,7 @@ public JsonExporter(ExcelLoader excel, bool lowcase, bool exportArray, string da { // single sheet //-- convert to object - object sheetValue = convertSheet(validSheets[0], exportArray, lowcase); + object sheetValue = convertSheet(validSheets[0], exportArray, lowcase, excludePrefix); //-- convert to json string mContext = JsonConvert.SerializeObject(sheetValue, jsonSettings); @@ -58,7 +63,7 @@ public JsonExporter(ExcelLoader excel, bool lowcase, bool exportArray, string da Dictionary data = new Dictionary(); foreach (var sheet in validSheets) { - object sheetValue = convertSheet(sheet, exportArray, lowcase); + object sheetValue = convertSheet(sheet, exportArray, lowcase, excludePrefix); data.Add(sheet.TableName, sheetValue); } @@ -67,15 +72,15 @@ public JsonExporter(ExcelLoader excel, bool lowcase, bool exportArray, string da } } - private object convertSheet(DataTable sheet, bool exportArray, bool lowcase) + private object convertSheet(DataTable sheet, bool exportArray, bool lowcase, string excludePrefix) { if (exportArray) - return convertSheetToArray(sheet, lowcase); + return convertSheetToArray(sheet, lowcase, excludePrefix); else - return convertSheetToDict(sheet, lowcase); + return convertSheetToDict(sheet, lowcase, excludePrefix); } - private object convertSheetToArray(DataTable sheet, bool lowcase) + private object convertSheetToArray(DataTable sheet, bool lowcase, string excludePrefix) { List values = new List(); @@ -85,7 +90,7 @@ private object convertSheetToArray(DataTable sheet, bool lowcase) DataRow row = sheet.Rows[i]; values.Add( - convertRowToDict(sheet, row, lowcase, firstDataRow) + convertRowToDict(sheet, row, lowcase, firstDataRow, excludePrefix) ); } @@ -95,7 +100,7 @@ private object convertSheetToArray(DataTable sheet, bool lowcase) /// /// 以第一列为ID,转换成ID->Object的字典对象 /// - private object convertSheetToDict(DataTable sheet, bool lowcase) + private object convertSheetToDict(DataTable sheet, bool lowcase, string excludePrefix) { Dictionary importData = new Dictionary(); @@ -108,7 +113,7 @@ private object convertSheetToDict(DataTable sheet, bool lowcase) if (ID.Length <= 0) ID = string.Format("row_{0}", i); - var rowObject = convertRowToDict(sheet, row, lowcase, firstDataRow); + var rowObject = convertRowToDict(sheet, row, lowcase, firstDataRow, excludePrefix); // 多余的字段 // rowObject[ID] = ID; importData[ID] = rowObject; @@ -120,12 +125,17 @@ private object convertSheetToDict(DataTable sheet, bool lowcase) /// /// 把一行数据转换成一个对象,每一列是一个属性 /// - private Dictionary convertRowToDict(DataTable sheet, DataRow row, bool lowcase, int firstDataRow) + private Dictionary convertRowToDict(DataTable sheet, DataRow row, bool lowcase, int firstDataRow, string excludePrefix) { var rowData = new Dictionary(); int col = 0; foreach (DataColumn column in sheet.Columns) { + // 过滤掉包含指定前缀的列 + string columnName = column.ToString(); + if (excludePrefix.Length > 0 && columnName.StartsWith(excludePrefix)) + continue; + object value = row[column]; if (value.GetType() == typeof(System.DBNull)) diff --git a/Program.Options.cs b/Program.Options.cs index 3cc4c44..2615a2a 100644 --- a/Program.Options.cs +++ b/Program.Options.cs @@ -73,6 +73,12 @@ public bool ForceSheetName { get; set; } + + [Option('x', "exclude_prefix", Required = false, DefaultValue = "", HelpText = "exclude sheet or column start with specified prefix.")] + public string ExcludePrefix { + get; + set; + } } } } diff --git a/Program.cs b/Program.cs index 29b7803..86159a9 100644 --- a/Program.cs +++ b/Program.cs @@ -106,13 +106,13 @@ private static void Run(Options options) ExcelLoader excel = new ExcelLoader(excelPath, header); //-- export - JsonExporter exporter = new JsonExporter(excel, options.Lowcase, options.ExportArray, dateFormat, options.ForceSheetName, header); + JsonExporter exporter = new JsonExporter(excel, options.Lowcase, options.ExportArray, dateFormat, options.ForceSheetName, header, options.ExcludePrefix); exporter.SaveToFile(exportPath, cd); //-- 生成C#定义文件 if (options.CSharpPath != null && options.CSharpPath.Length > 0) { - CSDefineGenerator generator = new CSDefineGenerator(excelName, excel); + CSDefineGenerator generator = new CSDefineGenerator(excelName, excel, options.ExcludePrefix); generator.SaveToFile(options.CSharpPath, cd); } } diff --git a/Properties/AssemblyInfo.cs b/Properties/AssemblyInfo.cs index 04a2596..51dfab5 100644 --- a/Properties/AssemblyInfo.cs +++ b/Properties/AssemblyInfo.cs @@ -32,5 +32,5 @@ // 可以指定所有这些值,也可以使用“生成号”和“修订号”的默认值, // 方法是按如下所示使用“*”: // [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.3.0.0")] -[assembly: AssemblyFileVersion("1.3.0.0")] +[assembly: AssemblyVersion("1.4.0.0")] +[assembly: AssemblyFileVersion("1.4.0.0")]