TableML Excel编译/解析工具
TableML
TableML, Table Markup Language, 基于电子表格的标记语言,
类似JSON, XML, INI,TableML可以作为软件项目的配置标记语言,
与之不同的是,您可以使用Excel等电子表格编辑软件来配置TableML,自由地添加图标、注释、VB脚本和预编译指令,再由TableML编译器导出干净的TSV格式的配置表表格,编辑方便,使用简单。
目前提供C#版本的运行时、编译器、代码生成器。
感谢Mr.Kelly的开源项目,我基于Kelly的TableML基础,进行扩展增加或修改部分功能。
原始版本地址:https://github.com/mr-kelly/TableML
扩展版本地址:https://github.com/zhaoqingqing/TableML
Example
您可以使用Excel编译如下内容,并保存为文件setting/test.xls:

excel测试文件地址:https://github.com/zhaoqingqing/TableML/blob/custom/TableML/TableMLTests/TestSettings/TestExcel.xls
然后使用TableML命令行编译器:
TableML.exe --Src setting --To setting2 --CodeFile Code.cs
执行后,将会生成setting2/test.tml文件,打开可以看见编译后内容:
|
Id |
Value |
|
int |
string |
| 1 | Abcdefg |
| 2 | Yuiop |
另外附带一份Code.cs,自动生成的代码。
TableML编辑规则
以上的例子中,展示了TableML的大部分特性:
- TableML使用Excel等电子表格软件作为编辑器,并通过编译器导出成tml格式文件
- tml格式文件实质是TSV格式,即Tab Sperated Values,类似CSV
- 行头占3行:
- 第1行是列名
- 第2行是列的信息,通常是声明列的类型,可以自定义
- 第3行是列的注释
- 除外的所有行为内容
- 列名内容以#开头或Comment开头,改列被视为注释列,编译器忽略
- 行内容的第一个单元格内容,以#开头或Comment开头,改行被视为注释行,编译器忽略
- 可以使用预编译指令#if和#endif,条件式控制编译的行
工程使用说明
- 通过git clone 或者download master的方式将工程下载到本地
- 建议使用visual studio2012及更高版本打开 TableML\TableML.sln
- 在vs中设置TableMLCompilerConsole 为启动项目(解决方案面板,选中项目,右键 - 设为启动项目)
- 建议把项目的输出设为Release,然后选择 菜单栏 - 生成 - 生成TableMLCompilerConsole
- 打开目录 TableML\TableMLCompilerConsole\bin\Release 可以看到已经生成了TableML.exe
工程简介
TableML
- tml(tsv)文件读取接口,把tsv文件读取至内存,供应用程序访问
TableMLCompiler
- 对excel/csv 源文件进行编译,解析配置表规则生成tsv文件
TableMLCompilerConsole
- 提供命令行,根据条件对excel进行编译
TableMLGUI
- 提供GUI界面,增加编译选定excel,将数据导入到sqlite中
- 增加excel的查错,输出操作日志
- 更多介绍请查看:http://www.cnblogs.com/zhaoqingqing/p/7440867.html
TableMLTests
- 编译功能的单元测试
自定义配置
以下功能可以进行自定义或者是我扩展的功能:
1. 从第2列(指定列)开始读
修改SimpleExcelFile.cs中的StartColumnIdx值如:
public const int StartColumnIdx = 1;
2.每个表对应一个Class文件
调用方法如下:
batchCompiler.CompileTableMLAllInSingleFile(srcDirectory, OutputDirectory, CodeFilePath, templateString, "AppSettings", ".tml", null, true);
示例代码可参考:LocalDebug.cs中的CompileAll()
3.修改生成的代码模版
修改TableML.Compiler.DefaultTemplate中的字符串模版
4.预留指定行,自定义行,比如第6行是字段名,第8行是数据类型,第15行是字段注释
扩展SimpleExcelFile.PreserverRowCount = 预留行 修改SimpleExcelFile.ParseExcel中的Worksheet.GetRow();
excel读取规则
先读取Excel的行,再读取列,把数据写入到tml文件中。
GUI工具内存溢出
如果在使用TableMLGUI时,特别占用内存,建议把excel另存为csv格式,或者减少单个excel文件的大小,以减少内存占用。
更多功能
For SQL数据库
TableMLGUI提供一键将excel数据插入到sqlite中。
采用sql的事务机制,在插入大量数据的环境下,耗时更短。
同时在控制台输出sql语句方便调试查错。
自动读取配置代码生成
TableML编译器内置Liquid模板引擎。您可以自定义模板内容,来为不同的语言生成读表类。
TableML是KSFramework的一部分,用于游戏配置表读取代码,支持热重载、分表等机制。
TableML for C#/Mono/Xamarin
TableML目前只提供C#版本。当前TableML使用基于Xamarin Studio开发,TableML的C#版本具备了跨平台特性(Windows/Mac/Linux)。
TableML Excel编译/解析工具的更多相关文章
- TableML-GUI篇(Excel编译/解析工具)
项目情况 本文接上篇TableML Excel编译/解析工具,本文主要介绍GUI工具的使用,及配置项,如果你想了解此工具更加详细的说明,请阅读上篇文章. 项目地址:https://github.com ...
- TableML-GUI篇(C# 编译/解析 Excel/CSV工具)
项目情况 本文接上篇TableML Excel编译/解析工具,本文主要介绍GUI工具的使用,及配置项,如果你想了解此工具更加详细的说明,请阅读上篇文章. 项目地址:https://github.com ...
- Excel解析工具easyexcel全面探索
1. Excel解析工具easyexcel全面探索 1.1. 简介 之前我们想到Excel解析一般是使用POI,但POI存在一个严重的问题,就是非常消耗内存.所以阿里人员对它进行了重写从而诞生了eas ...
- 读取EXCEL文档解析工具类
package test;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException ...
- 自制 Word、Excel 批转 PDF 工具
原文:自制 Word.Excel 批转 PDF 工具 目前做金融业的项目,该公司每天会产生很多 Word.Excel 文档,需要大量地转换为 PDF,除了自己保存外,也要给金融主管机构作为备份.由于文 ...
- 一个基于POI的通用excel导入导出工具类的简单实现及使用方法
前言: 最近PM来了一个需求,简单来说就是在录入数据时一条一条插入到系统显得非常麻烦,让我实现一个直接通过excel导入的方法一次性录入所有数据.网上关于excel导入导出的例子很多,但大多相互借鉴. ...
- Java上传下载excel、解析Excel、生成Excel
在软件开发过程中难免需要批量上传与下载,生成报表保存也是常有之事,最近集团门户开发用到了Excel模版下载,Excel生成,圆满完成,对这一知识点进行整理,资源共享,有不足之处还望批评指正,文章结尾提 ...
- java使用POI进行 Excel文件解析
package com.timevale.esign.vip.util; import java.io.File; import java.io.FileInputStream; import jav ...
- excel模板解析—桥接模式:分离解析模板和业务校验
在做excel模板解析的时候,其实会有两个部分,第一,将模板读取出来,校验一些必录项等. 但除了这些,在数据真正被业务线使用的时候,还会有一些其他的校验,比如说:根据业务,年龄是不能超过多少岁的,包括 ...
随机推荐
- 【Tesseract】Tesseract 的训练流程
在泰迪杯A题中,我刚刚接触了Tesseact,其中训练字库中遇到了较多的问题.所以在此记录一下,也当做一个笔记,省得以后忘记. 为了方便 ,将tif命名格式设为[lang].[fontname].ex ...
- 在昆明网络SEO的走向站外的优化该何去何从?
昨天大概讲了SEO的站内优化,今天我们来讲讲网站站外的优化. 站外主要以第三平台为主,其中包含站外推广:常规推广.外链建设:利用第三方平台优化关键词排名: 1.博客平台,现在有好多博客平台是很不错的, ...
- [转载] OAuth2.0认证和授权原理
转载自http://www.tuicool.com/articles/qqeuE3 什么是OAuth授权? 一.什么是OAuth协议 OAuth(开放授权)是一个开放标准,允许第三方网站在用户授权的前 ...
- Python之作用域
作用域测试例子: >>> a = 10 >>> def test(): ... a = 20 ... print a ... >>> a 10 & ...
- ubuntu实时显示网速cpu占用和内存占用率
ubuntu实时显示网速cpu占用和内存占用率 大家在使用ubuntu的时候,有没有想让它实时显示网速,内存占用率,或者cpu占用率呢?现在我就教大家怎么实现,就像下面这样 1. 添加indicato ...
- phpstorm快捷键记录
快捷键记录 Ctrl + N 按类名查找Ctrl + Shift + N 按文件名查找,快速查找文件Ctrl + Shift+Alt+N 根据函数名查找Ctrl + F 当前文件查找Ctrl + Sh ...
- vue.js初学,笔记1,安装
最近学习vue.js,下面是笔记: 说明:因为npm安装插件是从国外服务器下载,受网络影响大,可能出现异常,如果npm的服务器在中国就好了,所以我们乐于分享的淘宝团队干了这事.来自官网:"这 ...
- 【练习】HTML+CSS
作业要求1 京东首页轮播图,效果如下 <!DOCTYPE html> <html lang="en"> <head> <meta char ...
- java学习笔记之字符流文件复制
字符文件复制 FileReader fr =new FileReader("b.txt");//绑定源文件 FileWriter fw= new FileWriter(" ...
- db2服务器端授权
昨天吃饭回来有点晚,没有及时写,今天补上. db2服务器端安装就不说了,网上很多.今天具体说说授权吧.这是个麻烦事. 安装的时候会让你创建数据库.你就根据提 ...