excel转json工具的制作(C#语言)
最近在做一个火炬之光的技能系统的demo,需要用到配置表工具。
&在网上没有找到让自己满意的工具&自己感兴趣,
so自己做了一个。
我使用的C#语言,用了网上的SimpleJSON工具脚本来做的,下面直接上代码:
界面代码(ps.注释掉的部分是生成对应代码的类,但感觉目前写的不好,就不上传了。。。)
using System; using System.Collections.Generic; using System.Windows.Forms; namespace ConfigTool { public partial class Form1 : Form { private string excelPath; private string jsonPath; private string codePath; public Form1() { InitializeComponent(); InitPath(); } private void InitPath() { excelPath = Tool. GetPath() + "ConfigExcel"; jsonPath = Tool.GetPath() + "Assets\\Resources\\Config"; //codePath = Tool.GetPath(5) + "Assets\\Scripts\\Config"; folderPath.Text = excelPath; } private void createJsonAndCode_Click(object sender, EventArgs e) { ExcelToJson etoJson = new ExcelToJson(excelPath, jsonPath); etoJson.CreateJsonFiles(); fileNum.Text = etoJson.GetFileCount().ToString(); //AutoCreateCode createCode = new AutoCreateCode(codePath, etoJson.JsonDic); //createCode.CreateCodeFiles(); } } }
工具代码
using System; using System.IO; namespace ConfigTool { public static class Tool { /// <summary> /// 创建文件 /// </summary> /// <param name="_path">文件路径(包含文件名及其后缀)</param> /// <param name="_content">文件存储的内容</param> public static void CreateFile(string _path, string _content) { FileStream file = new FileStream(_path, FileMode.Create, FileAccess.Write); StreamWriter writer = new StreamWriter(file); writer.WriteLine(_content); writer.Close(); file.Close(); Console.WriteLine(string.Format("生成{0}", _path)); } /// <summary> /// 删除指定文件夹下的子文件(不含子文件夹) /// </summary> /// <param name="_folderPath">文件夹路径</param> public static void ClearFiles(string _folderPath) { Console.WriteLine("开始删除文件,文件夹目录为" + _folderPath); if (!Directory.Exists(_folderPath)) { Console.WriteLine("指定的文件路径不存在"); return; } var files = Directory.GetFiles(_folderPath); foreach (var a in files) { File.Delete(a); } Console.WriteLine("删除完成"); } /// <summary> /// 获取当前exe的上层几层路径 /// </summary> /// <param name="_upperNum">向上几级</param> /// <returns>路径</returns> public static string GetPath(int _upperNum) { string exePath = Directory.GetCurrentDirectory(); string[] temp = exePath.Split("\\".ToCharArray()); string path = string.Empty; ; i < temp.Length - _upperNum; i++) { path += temp[i]; path += "\\"; } return path; } } }
excel转json文件代码
using System; using System.Collections.Generic; using SimpleJSON; using System.IO; using System.Data.OleDb; using System.Data; namespace ConfigTool { public class ExcelToJson { private string sourcePath; private string savePath; private Dictionary<string, JSONClass> jsonDic = new Dictionary<string, JSONClass>(); private int fileNum; public Dictionary<string, JSONClass> JsonDic { get { return jsonDic; } } public ExcelToJson(string _sourcePath, string _savePath) { sourcePath = _sourcePath; savePath = _savePath; } public void CreateJsonFiles() { Tool.ClearFiles(savePath); AllConvertToJsons(); foreach (var a in jsonDic) { string path = string.Format("{0}\\{1}.json", savePath, a.Key); Tool.CreateFile(path, a.Value.ToString()); } } public int GetFileCount() { return fileNum; } private void AllConvertToJsons() { jsonDic.Clear(); var excelPathList = GetAllExcel(); fileNum = excelPathList.Count; foreach (var a in excelPathList) { ConvertToJson(a); } } private void ConvertToJson(string _excelPath) { OleDbConnection connection = CreateExcelOleDbConnection(_excelPath); if (connection == null) { Console.WriteLine("无法成功生成OleDbConnection"); return; } List<OleDbDataReader> readers = InitExcel(_excelPath, connection); ReadersToJson(readers, connection); } #region ConvertToJson 具体实现方法 private List<OleDbDataReader> InitExcel(string _excelPath, OleDbConnection _connection) { if (_connection == null) { return null; } _connection.Open(); DataTable dataTable = _connection.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null); List<OleDbDataReader> readers = new List<OleDbDataReader>(); ; i < dataTable.Rows.Count; i++) { string sheetName = dataTable.Rows[i]["Table_Name"].ToString(); if (sheetName.Contains("#"))//表中页签开头'#'为注释 { continue; } OleDbCommand command = new OleDbCommand(string.Format("select * from [{0}]", sheetName), _connection); readers.Add(command.ExecuteReader()); } return readers; } private OleDbConnection CreateExcelOleDbConnection(string _excelPath) { if (!File.Exists(_excelPath)) { Console.WriteLine("未找到指定文件" + _excelPath); return null; } string strExtension = Path.GetExtension(_excelPath); string initStr = string.Empty; switch (strExtension) { case ".xls": initStr = string.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties=\"Excel 8.0;HDR=NO;IMEX=1;\"", _excelPath); break; case ".xlsx": initStr = string.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties=\"Excel 12.0;HDR=NO;IMEX=1;\"", _excelPath); break; default: Console.WriteLine("目标文件不是excel文件"); return null; break; } return new OleDbConnection(initStr); } private void ReadersToJson(List<OleDbDataReader> _readers, OleDbConnection _connection) { ; i < _readers.Count; i++) { OleDbDataReader reader = _readers[i]; //获取表头 reader.Read(); ].ToString(); if (configTitle == null || configTitle == "") { Console.WriteLine("表头填写不正确"); } ; //跳过无用行 while (reader.Read()) { nextLineIndex++; ].ToString() == "Start") { break; } } //存储json的key,simplejson无法直接获取key int maxRowNum = reader.FieldCount; JSONClass jsonKey = new JSONClass(); JSONClass jsonData = new JSONClass(); reader.Read(); ; j < maxRowNum; j++) { string key = reader[j].ToString(); jsonKey.Add(key, key); } jsonData.Add("variate", jsonKey); //依次按行读取有效数据 while (reader.Read()) { ].ToString(); if (key == "End") { break; } JSONClass curLineJson = new JSONClass(); ; j < maxRowNum; j++) { curLineJson.Add(jsonKey[j - ], reader[j].ToString()); } jsonData.Add(key, curLineJson); } reader.Close(); //将当前页签的json文件存储到字典中 if (jsonDic.ContainsKey(configTitle)) { jsonDic[configTitle].Add(jsonData); } else { jsonDic.Add(configTitle, jsonData); } } _connection.Close(); } #endregion ConvertToJson 具体实现方法 /// <summary> /// 获取源文件夹中的excel文件,文件名中的"###"作为注释,含有"###"的文件不计进行转换 /// </summary> /// <returns>excel文件路径列表</returns> private List<string> GetAllExcel() { DirectoryInfo dirInfo = new DirectoryInfo(sourcePath); FileInfo[] fileInfos = dirInfo.GetFiles(); List<string> rtnValue = new List<string>(); foreach (var a in fileInfos) { if (a.FullName.Contains("###")) { continue; } if (a.FullName.Contains(".xlsx") || a.FullName.Contains(".xls")) { if (rtnValue.Contains(a.FullName)) { continue; } rtnValue.Add(a.FullName); } } return rtnValue; } } }
总结:
起始最核心的部分还是读取excel的部分,感觉应该对OleDbDataReader做一下说明:OleDbDataReader是一行一行来读取excel的读完一行再读下一行。我所写的确定表头,确定excel有效数据开始行就是利用这个性质来做的。
ps.刚开始理解不好,写了好几个无用的循环,后来反应过来改掉了(手动捂脸)。
excel转json工具的制作(C#语言)的更多相关文章
- Python——Excel转Json工具
Python工具Excel转Json 前置条件 1.安装python 下载python 我下载的是2.7: 2.配置环境变量 我的电脑右键--属性--高级系统设置--环境变量: 添加python的安装 ...
- Excel转Json工具
应用程序在本地的数据配置的格式一般有JSON.XML.YAML.INI等格式,但是如果直接编写JSON数据往往不是特别方便, 今天给大家分享的是如何在EXCEL配置好数据,然后一键转换成JSON和C# ...
- TableML-GUI篇(Excel编译/解析工具)
项目情况 本文接上篇TableML Excel编译/解析工具,本文主要介绍GUI工具的使用,及配置项,如果你想了解此工具更加详细的说明,请阅读上篇文章. 项目地址:https://github.com ...
- Excel转Json,Json转CSharp
一份给策划最好的礼物!就是:Excel2Json2CSharp 策划配置Excel,动不动就要改数值啊,增加字段啊. 程序这边对应的解析类就得改动啊.整一个麻烦了得! 所以我就整理了这个Excel2J ...
- Octopus——excel导入导出工具
Octopus Octopus是一个简易的Excel导入导出工具.目前主要就两个功能: 导入:将excel中一行数据转换为指定的java对象,并通过指定的正则表达式检查合法性. 导出:按照给定的xml ...
- Excel转Json
参考: Excel2JSON Excel转JSON Excel另存为JSON的技巧 (office的插件) excel2json 游戏程序员的自我修养 (其他人写的工具) Excel转JSON格式- ...
- 强大的json工具:fastJson
fastJson FastJSON是一个很好的java开源json工具类库,相比其他同类的json类库,它的速度的确是fast,最快!但是文档做得不好,在应用前不得不亲测一些功能. 实际上其他 ...
- 使用bison和yacc制作脚本语言(1)
使用bison和yacc制作脚本语言(1) 环境: 环境 windows 10 Cygwin64 语言 C 工具 mingw bison flex 主要是使用bison和flex这两个软件,编译器无所 ...
- java简易excel导入导出工具(封装POI)
Octopus 如何导入excel 如何导出excel github项目地址 Octopus Octopus 是一个简单的java excel导入导出工具. 如何导入excel 下面是一个excel文 ...
随机推荐
- css3 背景渐变
本来想先瞎扯些什么,然后又不知道讲什么的好,那就直接进入正题吧. 参考资料: Using CSS gradients (以及该页面内的大部分链接页面的资料) 首先区分下,平常给的纯色backgrou ...
- HTML精确定位:scrollLeft,scrollWidth,clientWidth,offsetWidth
HTML精确定位:scrollLeft,scrollWidth,clientWidth,offsetWidth scrollHeight: 获取对象的滚动高度. scrollLeft:设置或获取位于对 ...
- mysql复习相关
Mysql相关 mysql增删改查 我们需要修改数据表名或者修改数据表字段时,就需要使用到Mysql Alter命令 删除,添加或修改表字段 alter table student drop regi ...
- ORA-01722:无效数字
今天写查询语句,关联多张表,出现了这个错误. 结果发现时字段的数据类型不一致. select * from table_a a,table_b b where to_char(a.project_id ...
- Format 函数示例
Format 函数示例本示例显示用 Format 函数做格式化输出的不同用法.对于日期分隔号(/),时间分隔号(:),以及 AM/ PM 等文本而言,其真正的显示格式会因计算机上的国际标准不同而有所差 ...
- PHP中::、->、self、$this操作符的区别
在访问PHP类中的成员变量或方法时,如果被引用的变量或者方法被声明成const(定义常量)或者static(声明静态),那么就必须使用操作符::,反之如果被引用的变量或者方法没有被声明成const或者 ...
- apache 配置rewrite模块,URL中隐藏index.php
打开httpd.conf 去掉下面的井号 #LoadModule rewrite_module modules/mod_rewrite.so把前面的警号去掉 在网站根目录添加.htaccess Rew ...
- ES6学习笔记一
块级作用域:在ES5中只有全局作用域与函数作用域,ES6中新增的块级作用域避免变量的覆盖与泄露.考虑到代码运行环境,在块级作用域中应避免声明函数,最好用函数表达式的方式声明. let与const:le ...
- mysql mac 安装修改初始密码
step1:苹果->系统偏好设置->最下边点mysql 在弹出页面中 关闭mysql服务(点击stop mysql server) step2:进入终端输入:cd /usr/local/m ...
- Java Native Interface 六JNI中的异常
本文是<The Java Native Interface Programmer's Guide and Specification>读书笔记 在这里只讨论调用JNI方法可能会出现的异常, ...