forked from neil3d/excel2json
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Program.cs
120 lines (107 loc) · 4.16 KB
/
Program.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
using System;
using System.IO;
using System.Data;
using System.Text;
using System.Windows.Forms;
namespace excel2json
{
/// <summary>
/// 应用程序
/// </summary>
sealed partial class Program
{
/// <summary>
/// 应用程序入口
/// </summary>
/// <param name="args">命令行参数</param>
[STAThread]
static void Main(string[] args)
{
if (args.Length <= 0)
{
//-- GUI MODE ----------------------------------------------------------
Console.WriteLine("Launch excel2json GUI Mode...");
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new GUI.MainForm());
}
else
{
//-- COMMAND LINE MODE -------------------------------------------------
//-- 分析命令行参数
var options = new Options();
var parser = new CommandLine.Parser(with => with.HelpWriter = Console.Error);
if (parser.ParseArgumentsStrict(args, options, () => Environment.Exit(-1)))
{
//-- 执行导出操作
try
{
DateTime startTime = DateTime.Now;
Run(options);
//-- 程序计时
DateTime endTime = DateTime.Now;
TimeSpan dur = endTime - startTime;
Console.WriteLine(
string.Format("[{0}]:\tConversion complete in [{1}ms].",
Path.GetFileName(options.ExcelPath),
dur.TotalMilliseconds)
);
}
catch (Exception exp)
{
Console.WriteLine("Error: " + exp.Message);
}
}
}// end of else
}
/// <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);
//-- Header
int header = options.HeaderRows;
//-- Encoding
Encoding cd = new UTF8Encoding(false);
if (options.Encoding != "utf8-nobom")
{
foreach (EncodingInfo ei in Encoding.GetEncodings())
{
Encoding e = ei.GetEncoding();
if (e.HeaderName == options.Encoding)
{
cd = e;
break;
}
}
}
//-- Date Format
string dateFormat = options.DateFormat;
//-- Export path
string exportPath;
if (options.JsonPath != null && options.JsonPath.Length > 0)
{
exportPath = options.JsonPath;
}
else
{
exportPath = Path.ChangeExtension(excelPath, ".json");
}
//-- Load Excel
ExcelLoader excel = new ExcelLoader(excelPath, header);
//-- export
JsonExporter exporter = new JsonExporter(excel, options.Lowcase, options.ExportArray, dateFormat, options.ForceSheetName, header, options.ExcludePrefix, options.CellJson, options.AllString);
exporter.SaveToFile(exportPath, cd);
//-- 生成C#定义文件
if (options.CSharpPath != null && options.CSharpPath.Length > 0)
{
CSDefineGenerator generator = new CSDefineGenerator(excelName, excel, options.ExcludePrefix);
generator.SaveToFile(options.CSharpPath, cd);
}
}
}
}