Skip to content

Commit f1f808b

Browse files
committed
exclude sheet and column with prefix
1 parent cdaa094 commit f1f808b

File tree

10 files changed

+73
-22
lines changed

10 files changed

+73
-22
lines changed

CSDefineGenerator.cs

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ public string code {
2727
}
2828
}
2929

30-
public CSDefineGenerator(string excelName, ExcelLoader excel)
30+
public CSDefineGenerator(string excelName, ExcelLoader excel, string excludePrefix)
3131
{
3232
//-- 创建代码字符串
3333
StringBuilder sb = new StringBuilder();
@@ -44,7 +44,7 @@ public CSDefineGenerator(string excelName, ExcelLoader excel)
4444
for (int i = 0; i < excel.Sheets.Count; i++)
4545
{
4646
DataTable sheet = excel.Sheets[i];
47-
sb.Append(_exportSheet(sheet));
47+
sb.Append(_exportSheet(sheet, excludePrefix));
4848
}
4949

5050
sb.AppendLine();
@@ -53,18 +53,27 @@ public CSDefineGenerator(string excelName, ExcelLoader excel)
5353
mCode = sb.ToString();
5454
}
5555

56-
private string _exportSheet(DataTable sheet)
56+
private string _exportSheet(DataTable sheet, string excludePrefix)
5757
{
5858
if (sheet.Columns.Count < 0 || sheet.Rows.Count < 2)
5959
return "";
6060

61+
string sheetName = sheet.TableName;
62+
if (excludePrefix.Length > 0 && sheetName.StartsWith(excludePrefix))
63+
return "";
64+
6165
// get field list
6266
List<FieldDef> fieldList = new List<FieldDef>();
6367
DataRow typeRow = sheet.Rows[0];
6468
DataRow commentRow = sheet.Rows[1];
6569

6670
foreach (DataColumn column in sheet.Columns)
6771
{
72+
// 过滤掉包含指定前缀的列
73+
string columnName = column.ToString();
74+
if (excludePrefix.Length > 0 && columnName.StartsWith(excludePrefix))
75+
continue;
76+
6877
FieldDef field;
6978
field.name = column.ToString();
7079
field.type = typeRow[column].ToString();

Docs/ExampleData.xlsx

1.58 KB
Binary file not shown.

GUI/DataManager.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -93,10 +93,10 @@ public void loadExcel(Program.Options options)
9393
ExcelLoader excel = new ExcelLoader(excelPath, header);
9494

9595
//-- C# 结构体定义
96-
mCSharp = new CSDefineGenerator(excelPath, excel);
96+
mCSharp = new CSDefineGenerator(excelPath, excel, options.ExcludePrefix);
9797

9898
//-- 导出JSON
99-
mJson = new JsonExporter(excel, options.Lowcase, options.ExportArray, options.DateFormat, options.ForceSheetName, header);
99+
mJson = new JsonExporter(excel, options.Lowcase, options.ExportArray, options.DateFormat, options.ForceSheetName, header, options.ExcludePrefix);
100100
}
101101
}
102102
}

GUI/MainForm.Designer.cs

Lines changed: 24 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

GUI/MainForm.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -143,6 +143,7 @@ private void loadExcelAsync(string path)
143143
options.HeaderRows = int.Parse(this.comboBoxHeader.Text);
144144
options.DateFormat = this.comboBoxDateFormat.Text;
145145
options.ForceSheetName = this.comboBoxSheetName.SelectedIndex == 0;
146+
options.ExcludePrefix = this.textBoxExculdePrefix.Text;
146147

147148
//-- start import
148149
this.backgroundWorker.RunWorkerAsync(options);

GUI/MainForm.resx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -141,6 +141,9 @@
141141
<metadata name="toolStrip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
142142
<value>17, 17</value>
143143
</metadata>
144+
<metadata name="label7.GenerateMember" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
145+
<value>False</value>
146+
</metadata>
144147
<metadata name="backgroundWorker.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
145148
<value>241, 17</value>
146149
</metadata>

JsonExporter.cs

Lines changed: 21 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -25,13 +25,18 @@ public string context {
2525
/// 构造函数:完成内部数据创建
2626
/// </summary>
2727
/// <param name="excel">ExcelLoader Object</param>
28-
public JsonExporter(ExcelLoader excel, bool lowcase, bool exportArray, string dateFormat, bool forceSheetName, int headerRows)
28+
public JsonExporter(ExcelLoader excel, bool lowcase, bool exportArray, string dateFormat, bool forceSheetName, int headerRows, string excludePrefix)
2929
{
3030
mHeaderRows = headerRows-1;
3131
List<DataTable> validSheets = new List<DataTable>();
3232
for (int i = 0; i < excel.Sheets.Count; i++)
3333
{
3434
DataTable sheet = excel.Sheets[i];
35+
36+
// 过滤掉包含特定前缀的表单
37+
string sheetName = sheet.TableName;
38+
if (excludePrefix.Length>0 && sheetName.StartsWith(excludePrefix))
39+
continue;
3540

3641
if (sheet.Columns.Count > 0 && sheet.Rows.Count > 0)
3742
validSheets.Add(sheet);
@@ -47,7 +52,7 @@ public JsonExporter(ExcelLoader excel, bool lowcase, bool exportArray, string da
4752
{ // single sheet
4853

4954
//-- convert to object
50-
object sheetValue = convertSheet(validSheets[0], exportArray, lowcase);
55+
object sheetValue = convertSheet(validSheets[0], exportArray, lowcase, excludePrefix);
5156

5257
//-- convert to json string
5358
mContext = JsonConvert.SerializeObject(sheetValue, jsonSettings);
@@ -58,7 +63,7 @@ public JsonExporter(ExcelLoader excel, bool lowcase, bool exportArray, string da
5863
Dictionary<string, object> data = new Dictionary<string, object>();
5964
foreach (var sheet in validSheets)
6065
{
61-
object sheetValue = convertSheet(sheet, exportArray, lowcase);
66+
object sheetValue = convertSheet(sheet, exportArray, lowcase, excludePrefix);
6267
data.Add(sheet.TableName, sheetValue);
6368
}
6469

@@ -67,15 +72,15 @@ public JsonExporter(ExcelLoader excel, bool lowcase, bool exportArray, string da
6772
}
6873
}
6974

70-
private object convertSheet(DataTable sheet, bool exportArray, bool lowcase)
75+
private object convertSheet(DataTable sheet, bool exportArray, bool lowcase, string excludePrefix)
7176
{
7277
if (exportArray)
73-
return convertSheetToArray(sheet, lowcase);
78+
return convertSheetToArray(sheet, lowcase, excludePrefix);
7479
else
75-
return convertSheetToDict(sheet, lowcase);
80+
return convertSheetToDict(sheet, lowcase, excludePrefix);
7681
}
7782

78-
private object convertSheetToArray(DataTable sheet, bool lowcase)
83+
private object convertSheetToArray(DataTable sheet, bool lowcase, string excludePrefix)
7984
{
8085
List<object> values = new List<object>();
8186

@@ -85,7 +90,7 @@ private object convertSheetToArray(DataTable sheet, bool lowcase)
8590
DataRow row = sheet.Rows[i];
8691

8792
values.Add(
88-
convertRowToDict(sheet, row, lowcase, firstDataRow)
93+
convertRowToDict(sheet, row, lowcase, firstDataRow, excludePrefix)
8994
);
9095
}
9196

@@ -95,7 +100,7 @@ private object convertSheetToArray(DataTable sheet, bool lowcase)
95100
/// <summary>
96101
/// 以第一列为ID,转换成ID->Object的字典对象
97102
/// </summary>
98-
private object convertSheetToDict(DataTable sheet, bool lowcase)
103+
private object convertSheetToDict(DataTable sheet, bool lowcase, string excludePrefix)
99104
{
100105
Dictionary<string, object> importData =
101106
new Dictionary<string, object>();
@@ -108,7 +113,7 @@ private object convertSheetToDict(DataTable sheet, bool lowcase)
108113
if (ID.Length <= 0)
109114
ID = string.Format("row_{0}", i);
110115

111-
var rowObject = convertRowToDict(sheet, row, lowcase, firstDataRow);
116+
var rowObject = convertRowToDict(sheet, row, lowcase, firstDataRow, excludePrefix);
112117
// 多余的字段
113118
// rowObject[ID] = ID;
114119
importData[ID] = rowObject;
@@ -120,12 +125,17 @@ private object convertSheetToDict(DataTable sheet, bool lowcase)
120125
/// <summary>
121126
/// 把一行数据转换成一个对象,每一列是一个属性
122127
/// </summary>
123-
private Dictionary<string, object> convertRowToDict(DataTable sheet, DataRow row, bool lowcase, int firstDataRow)
128+
private Dictionary<string, object> convertRowToDict(DataTable sheet, DataRow row, bool lowcase, int firstDataRow, string excludePrefix)
124129
{
125130
var rowData = new Dictionary<string, object>();
126131
int col = 0;
127132
foreach (DataColumn column in sheet.Columns)
128133
{
134+
// 过滤掉包含指定前缀的列
135+
string columnName = column.ToString();
136+
if (excludePrefix.Length > 0 && columnName.StartsWith(excludePrefix))
137+
continue;
138+
129139
object value = row[column];
130140

131141
if (value.GetType() == typeof(System.DBNull))

Program.Options.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,12 @@ public bool ForceSheetName {
7373
get;
7474
set;
7575
}
76+
77+
[Option('x', "exclude_prefix", Required = false, DefaultValue = "", HelpText = "exclude sheet or column start with specified prefix.")]
78+
public string ExcludePrefix {
79+
get;
80+
set;
81+
}
7682
}
7783
}
7884
}

Program.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -106,13 +106,13 @@ private static void Run(Options options)
106106
ExcelLoader excel = new ExcelLoader(excelPath, header);
107107

108108
//-- export
109-
JsonExporter exporter = new JsonExporter(excel, options.Lowcase, options.ExportArray, dateFormat, options.ForceSheetName, header);
109+
JsonExporter exporter = new JsonExporter(excel, options.Lowcase, options.ExportArray, dateFormat, options.ForceSheetName, header, options.ExcludePrefix);
110110
exporter.SaveToFile(exportPath, cd);
111111

112112
//-- 生成C#定义文件
113113
if (options.CSharpPath != null && options.CSharpPath.Length > 0)
114114
{
115-
CSDefineGenerator generator = new CSDefineGenerator(excelName, excel);
115+
CSDefineGenerator generator = new CSDefineGenerator(excelName, excel, options.ExcludePrefix);
116116
generator.SaveToFile(options.CSharpPath, cd);
117117
}
118118
}

Properties/AssemblyInfo.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,5 +32,5 @@
3232
// 可以指定所有这些值,也可以使用“生成号”和“修订号”的默认值,
3333
// 方法是按如下所示使用“*”:
3434
// [assembly: AssemblyVersion("1.0.*")]
35-
[assembly: AssemblyVersion("1.3.0.0")]
36-
[assembly: AssemblyFileVersion("1.3.0.0")]
35+
[assembly: AssemblyVersion("1.4.0.0")]
36+
[assembly: AssemblyFileVersion("1.4.0.0")]

0 commit comments

Comments
 (0)