excel转json工具的制作(C#语言)

最近在做一个火炬之光的技能系统的demo,需要用到配置表工具。

&在网上没有找到让自己满意的工具&自己感兴趣,

so自己做了一个。

我使用的C#语言,用了网上的SimpleJSON工具脚本来做的,下面直接上代码:

界面代码(ps.注释掉的部分是生成对应代码的类,但感觉目前写的不好,就不上传了。。。)

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Windows.Forms;
 4
 5 namespace ConfigTool
 6 {
 7     public partial class Form1 : Form
 8     {
 9         private string excelPath;
10         private string jsonPath;
11         private string codePath;
12
13         public Form1()
14         {
15             InitializeComponent();
16             InitPath();
17         }
18
19         private void InitPath()
20         {
21             excelPath = Tool. GetPath(4) + "ConfigExcel";
22             jsonPath = Tool.GetPath(5) + "Assets\\Resources\\Config";
23             //codePath = Tool.GetPath(5) + "Assets\\Scripts\\Config";
24             folderPath.Text = excelPath;
25         }
26
27         private void createJsonAndCode_Click(object sender, EventArgs e)
28         {
29             ExcelToJson etoJson = new ExcelToJson(excelPath, jsonPath);
30             etoJson.CreateJsonFiles();
31             fileNum.Text = etoJson.GetFileCount().ToString();
32
33             //AutoCreateCode createCode = new AutoCreateCode(codePath, etoJson.JsonDic);
34             //createCode.CreateCodeFiles();
35         }
36     }
37 }

工具代码

 1 using System;
 2 using System.IO;
 3
 4 namespace ConfigTool
 5 {
 6     public static class Tool
 7     {
 8         /// <summary>
 9         /// 创建文件
10         /// </summary>
11         /// <param name="_path">文件路径(包含文件名及其后缀)</param>
12         /// <param name="_content">文件存储的内容</param>
13         public static void CreateFile(string _path, string _content)
14         {
15             FileStream file = new FileStream(_path, FileMode.Create, FileAccess.Write);
16             StreamWriter writer = new StreamWriter(file);
17             writer.WriteLine(_content);
18             writer.Close();
19             file.Close();
20             Console.WriteLine(string.Format("生成{0}", _path));
21         }
22
23         /// <summary>
24         /// 删除指定文件夹下的子文件(不含子文件夹)
25         /// </summary>
26         /// <param name="_folderPath">文件夹路径</param>
27         public static void ClearFiles(string _folderPath)
28         {
29             Console.WriteLine("开始删除文件,文件夹目录为" + _folderPath);
30             if (!Directory.Exists(_folderPath))
31             {
32                 Console.WriteLine("指定的文件路径不存在");
33                 return;
34             }
35             var files = Directory.GetFiles(_folderPath);
36             foreach (var a in files)
37             {
38                 File.Delete(a);
39             }
40             Console.WriteLine("删除完成");
41         }
42
43         /// <summary>
44         /// 获取当前exe的上层几层路径
45         /// </summary>
46         /// <param name="_upperNum">向上几级</param>
47         /// <returns>路径</returns>
48         public static string GetPath(int _upperNum)
49         {
50             string exePath = Directory.GetCurrentDirectory();
51             string[] temp = exePath.Split("\\".ToCharArray());
52             string path = string.Empty;
53             for (int i = 0; i < temp.Length - _upperNum; i++)
54             {
55                 path += temp[i];
56                 path += "\\";
57             }
58             return path;
59         }
60     }
61 }

excel转json文件代码

  1 using System;
  2 using System.Collections.Generic;
  3 using SimpleJSON;
  4 using System.IO;
  5 using System.Data.OleDb;
  6 using System.Data;
  7
  8 namespace ConfigTool
  9 {
 10     public class ExcelToJson
 11     {
 12         private string sourcePath;
 13         private string savePath;
 14         private Dictionary<string, JSONClass> jsonDic = new Dictionary<string, JSONClass>();
 15         private int fileNum;
 16         public Dictionary<string, JSONClass> JsonDic
 17         {
 18             get
 19             {
 20                 return jsonDic;
 21             }
 22         }
 23
 24         public ExcelToJson(string _sourcePath, string _savePath)
 25         {
 26             sourcePath = _sourcePath;
 27             savePath = _savePath;
 28         }
 29
 30         public void CreateJsonFiles()
 31         {
 32             Tool.ClearFiles(savePath);
 33             AllConvertToJsons();
 34             foreach (var a in jsonDic)
 35             {
 36                 string path = string.Format("{0}\\{1}.json", savePath, a.Key);
 37                 Tool.CreateFile(path, a.Value.ToString());
 38             }
 39         }
 40
 41         public int GetFileCount()
 42         {
 43             return fileNum;
 44         }
 45
 46         private void AllConvertToJsons()
 47         {
 48             jsonDic.Clear();
 49             var excelPathList = GetAllExcel();
 50             fileNum = excelPathList.Count;
 51             foreach (var a in excelPathList)
 52             {
 53                 ConvertToJson(a);
 54             }
 55         }
 56
 57         private void ConvertToJson(string _excelPath)
 58         {
 59             OleDbConnection connection = CreateExcelOleDbConnection(_excelPath);
 60             if (connection == null)
 61             {
 62                 Console.WriteLine("无法成功生成OleDbConnection");
 63                 return;
 64             }
 65             List<OleDbDataReader> readers = InitExcel(_excelPath, connection);
 66             ReadersToJson(readers, connection);
 67         }
 68
 69         #region ConvertToJson 具体实现方法
 70         private List<OleDbDataReader> InitExcel(string _excelPath, OleDbConnection _connection)
 71         {
 72             if (_connection == null)
 73             {
 74                 return null;
 75             }
 76             _connection.Open();
 77             DataTable dataTable = _connection.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
 78
 79             List<OleDbDataReader> readers = new List<OleDbDataReader>();
 80             for (int i = 0; i < dataTable.Rows.Count; i++)
 81             {
 82                 string sheetName = dataTable.Rows[i]["Table_Name"].ToString();
 83                 if (sheetName.Contains("#"))//表中页签开头‘#‘为注释
 84                 {
 85                     continue;
 86                 }
 87                 OleDbCommand command = new OleDbCommand(string.Format("select * from [{0}]", sheetName), _connection);
 88                 readers.Add(command.ExecuteReader());
 89             }
 90             return readers;
 91         }
 92
 93         private OleDbConnection CreateExcelOleDbConnection(string _excelPath)
 94         {
 95             if (!File.Exists(_excelPath))
 96             {
 97                 Console.WriteLine("未找到指定文件" + _excelPath);
 98                 return null;
 99             }
100
101             string strExtension = Path.GetExtension(_excelPath);
102             string initStr = string.Empty;
103             switch (strExtension)
104             {
105                 case ".xls":
106                     initStr = string.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties=\"Excel 8.0;HDR=NO;IMEX=1;\"", _excelPath);
107                     break;
108                 case ".xlsx":
109                     initStr = string.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties=\"Excel 12.0;HDR=NO;IMEX=1;\"", _excelPath);
110                     break;
111                 default:
112                     Console.WriteLine("目标文件不是excel文件");
113                     return null;
114                     break;
115             }
116
117             return new OleDbConnection(initStr);
118         }
119
120         private void ReadersToJson(List<OleDbDataReader> _readers, OleDbConnection _connection)
121         {
122             for (int i = 0; i < _readers.Count; i++)
123             {
124                 OleDbDataReader reader = _readers[i];
125
126                 //获取表头
127                 reader.Read();
128                 string configTitle = reader[0].ToString();
129                 if (configTitle == null || configTitle == "")
130                 {
131                     Console.WriteLine("表头填写不正确");
132                 }
133                 int nextLineIndex = 1;
134
135                 //跳过无用行
136                 while (reader.Read())
137                 {
138                     nextLineIndex++;
139                     if (reader[0].ToString() == "Start")
140                     {
141                         break;
142                     }
143                 }
144
145                 //存储json的key,simplejson无法直接获取key
146                 int maxRowNum = reader.FieldCount;
147                 JSONClass jsonKey = new JSONClass();
148                 JSONClass jsonData = new JSONClass();
149                 reader.Read();
150                 for (int j = 1; j < maxRowNum; j++)
151                 {
152                     string key = reader[j].ToString();
153                     jsonKey.Add(key, key);
154                 }
155                 jsonData.Add("variate", jsonKey);
156
157                 //依次按行读取有效数据
158                 while (reader.Read())
159                 {
160                     string key = reader[0].ToString();
161                     if (key == "End")
162                     {
163                         break;
164                     }
165
166                     JSONClass curLineJson = new JSONClass();
167                     for (int j = 1; j < maxRowNum; j++)
168                     {
169                         curLineJson.Add(jsonKey[j - 1], reader[j].ToString());
170                     }
171                     jsonData.Add(key, curLineJson);
172                 }
173                 reader.Close();
174
175                 //将当前页签的json文件存储到字典中
176                 if (jsonDic.ContainsKey(configTitle))
177                 {
178                     jsonDic[configTitle].Add(jsonData);
179                 }
180                 else
181                 {
182                     jsonDic.Add(configTitle, jsonData);
183                 }
184             }
185             _connection.Close();
186         }
187         #endregion ConvertToJson 具体实现方法
188
189         /// <summary>
190         /// 获取源文件夹中的excel文件,文件名中的"###"作为注释,含有"###"的文件不计进行转换
191         /// </summary>
192         /// <returns>excel文件路径列表</returns>
193         private List<string> GetAllExcel()
194         {
195             DirectoryInfo dirInfo = new DirectoryInfo(sourcePath);
196             FileInfo[] fileInfos = dirInfo.GetFiles();
197             List<string> rtnValue = new List<string>();
198             foreach (var a in fileInfos)
199             {
200                 if (a.FullName.Contains("###"))
201                 {
202                     continue;
203                 }
204                 if (a.FullName.Contains(".xlsx")
205                     || a.FullName.Contains(".xls"))
206                 {
207                     if (rtnValue.Contains(a.FullName))
208                     {
209                         continue;
210                     }
211                     rtnValue.Add(a.FullName);
212                 }
213             }
214             return rtnValue;
215         }
216     }
217 } 

总结:

起始最核心的部分还是读取excel的部分,感觉应该对OleDbDataReader做一下说明:OleDbDataReader是一行一行来读取excel的读完一行再读下一行。我所写的确定表头,确定excel有效数据开始行就是利用这个性质来做的。

ps.刚开始理解不好,写了好几个无用的循环,后来反应过来改掉了(手动捂脸)。

时间: 2024-10-17 16:01:19

excel转json工具的制作(C#语言)的相关文章

使用nodejs、ejsExcel、express、vuejs编写一个excel转json的工具——第一步:创建一个包含webpack的vuejs项目

最近开发一个h5的游戏,需要一个excel转json的工具,网上找了找,没有发现适合的工具.想到自己之前用nodejs.express和vuejs做过一个网站,也用过ejsExcel插件,于是自己动手做了一个.这里简单的记录一下开发过程,给自己留个纪念. 这是本系列的第一篇博客,从新建项目开始吧. 1.需要按照nodejs和vuejs 安装的方法这里不提了,网上找一找,教程很多. 安装好了可以看一下nodejs.vuejs和express的版本号: 2.使用vuejs创建一个带webpack的项

TableML-GUI篇(Excel编译/解析工具)

项目情况 本文接上篇TableML Excel编译/解析工具,本文主要介绍GUI工具的使用,及配置项,如果你想了解此工具更加详细的说明,请阅读上篇文章. 项目地址:https://github.com/zhaoqingqing/TableML 项目介绍和更新日志 项目介绍 TableML, Table Markup Language, 基于电子表格的标记语言, 类似JSON, XML, INI,TableML可以作为软件项目的配置标记语言, 与之不同的是,您可以使用Excel等电子表格编辑软件来

Excel转Json,Json转CSharp

一份给策划最好的礼物!就是:Excel2Json2CSharp 策划配置Excel,动不动就要改数值啊,增加字段啊.程序这边对应的解析类就得改动啊.整一个麻烦了得!所以我就整理了这个Excel2Json2CSharp工具,让策划自个玩去了吧~!为了Windows和Mac都能使用(亲测都可用),我没有用wpf或者winform来做.还是以Unity插件形式提供. Excel2Json2CSharp功能 :1.把指定路径下的所有excel文件全部生成Json文件2.把指定路径下的所有Json文件全部

TestLink学习七:TestLink测试用例Excel转换XML工具

最近在整理测试用例,所以想找一个合适的工具来完成对测试需求.测试用例的管理.对比了一翻,发现开源工具中扩展比较好的还属TestLink,而且还可以与JIRA进行对接,这样就引起了我更大的兴趣.加上之前本来就接触过此工具,只是源于各种原因没能深入去研究来着,这次也就是决心于此!于是就找来了Testlink的最新版1.9.3,将其搭建在Ubuntu Server上,很快我们就可以正常方访问了.不过说实话,Testlink界面确实很难看,不过毕竟它不是商业工具,而且可以自己去扩展并定制开发,这就是最大

Code片段 : .properties属性文件操作工具类 &amp; JSON工具类

摘要: 原创出处:www.bysocket.com 泥瓦匠BYSocket 希望转载,保留摘要,谢谢! “贵专” — 泥瓦匠 一.java.util.Properties API & 案例 java.util.Properties 是一个属性集合.常见的api有如下: load(InputStream inStream)  从输入流中读取属性 getProperty(String key)  根据key,获取属性值 getOrDefault(Object key, V defaultValue)

Excel格式导入导出数据(单语言版本)

Excel格式导入导出数据(单语言版本) 可以使用常用的excel格式导入导出相关数据,包含: 1. 商品分类: 2. 筛选组: 3. 筛选: 4. 商品资料: 5. 商品附加图片资料,(不包含图片本身的上传或抓取): 6. 商品选项: 7. 商品属性: 8. 产品特价数据: 9. 商品折扣数据: 10. 商品奖励积分数据: 特色: 1. 常用excel软件编辑商品数据后导入: 2. 导出的文件名称包含日期和时间,便于备份存档: 3. 由于涉及到服务器的内存,以及数据的多寡,可以将数据按照商品I

Docker,用任何工具链和任何语言来构建任何应用

在看过Docker的两个Hello World的程序后,我们对Docker有了一个大概的感性的认识,那么Docker是到底是什么呢?Docker是一个面向开发者和系统管理员编译,装载,和运行分布式应用的开放式平台.它包括了Docker引擎,一个可移植的,轻量级的,运行时环境和打包工具,还包括了Docker Hub,一个用于共享应用和自动化工作流的云服务. Docker和一般的虚拟机有什么不同之处 对一般的虚拟机而言,每个虚拟化的应用包括的不仅仅是这个应用本身(大概数十M)以及应用所必需的bin文

Java中json工具对比分析

Java中几个json工具分析 1, 环境 JDK1.6+IDE(IntelliJ IDEA)+windowsXP+GBK编码 2,分析对象 jackson1.8.2 http://jackson.codehaus.org/ gson1.7.1 http://code.google.com/p/google-gson/ jsob_lib2.4 http://json-lib.sourceforge.NET/ 3,使用实例          用两个bean进行测试,两个bean都嵌套有数组和对象,

tablib把数据导出为Excel、JSON、CSV等格式的Py库(写入数据并导出exl)

#tablib把数据导出为Excel.JSON.CSV等格式的Py库 #python 3 import tablib #定义列标题 headers = ('1列', '2列', '3列', '4列', '5列') #需写入的数据,按照一行一行的输入 #元组数据的个数必须和列数一致 data = [('23','23','34','23','34'),('sadf','23','sdf','23','fsad')] #写入数据 mylist = tablib.Dataset(*data, head