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命令行编译器:

  1. 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,条件式控制编译的行

工程使用说明

  1. 通过git clone 或者download master的方式将工程下载到本地
  2. 建议使用visual studio2012及更高版本打开 TableML\TableML.sln
  3. 在vs中设置TableMLCompilerConsole 为启动项目(解决方案面板,选中项目,右键 - 设为启动项目)
  4. 建议把项目的输出设为Release,然后选择 菜单栏 - 生成 - 生成TableMLCompilerConsole
  5. 打开目录 TableML\TableMLCompilerConsole\bin\Release 可以看到已经生成了TableML.exe

工程简介

TableML

  • tml(tsv)文件读取接口,把tsv文件读取至内存,供应用程序访问

TableMLCompiler

  • 对excel/csv 源文件进行编译,解析配置表规则生成tsv文件

TableMLCompilerConsole

  • 提供命令行,根据条件对excel进行编译

TableMLGUI

TableMLTests

  • 编译功能的单元测试

自定义配置

以下功能可以进行自定义或者是我扩展的功能:

1. 从第2列(指定列)开始读

​ 修改SimpleExcelFile.cs中的StartColumnIdx值如:

  1. public const int StartColumnIdx = 1;

2.每个表对应一个Class文件

调用方法如下:

  1. batchCompiler.CompileTableMLAllInSingleFile(srcDirectory, OutputDirectory, CodeFilePath, templateString, "AppSettings", ".tml", null, true);

示例代码可参考:LocalDebug.cs中的CompileAll()

3.修改生成的代码模版

修改TableML.Compiler.DefaultTemplate中的字符串模版

4.预留指定行,自定义行,比如第6行是字段名,第8行是数据类型,第15行是字段注释

  1. 扩展SimpleExcelFile.PreserverRowCount = 预留行
  2.  
  3. 修改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编译/解析工具的更多相关文章

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

    项目情况 本文接上篇TableML Excel编译/解析工具,本文主要介绍GUI工具的使用,及配置项,如果你想了解此工具更加详细的说明,请阅读上篇文章. 项目地址:https://github.com ...

  2. TableML-GUI篇(C# 编译/解析 Excel/CSV工具)

    项目情况 本文接上篇TableML Excel编译/解析工具,本文主要介绍GUI工具的使用,及配置项,如果你想了解此工具更加详细的说明,请阅读上篇文章. 项目地址:https://github.com ...

  3. Excel解析工具easyexcel全面探索

    1. Excel解析工具easyexcel全面探索 1.1. 简介 之前我们想到Excel解析一般是使用POI,但POI存在一个严重的问题,就是非常消耗内存.所以阿里人员对它进行了重写从而诞生了eas ...

  4. 读取EXCEL文档解析工具类

    package test;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException ...

  5. 自制 Word、Excel 批转 PDF 工具

    原文:自制 Word.Excel 批转 PDF 工具 目前做金融业的项目,该公司每天会产生很多 Word.Excel 文档,需要大量地转换为 PDF,除了自己保存外,也要给金融主管机构作为备份.由于文 ...

  6. 一个基于POI的通用excel导入导出工具类的简单实现及使用方法

    前言: 最近PM来了一个需求,简单来说就是在录入数据时一条一条插入到系统显得非常麻烦,让我实现一个直接通过excel导入的方法一次性录入所有数据.网上关于excel导入导出的例子很多,但大多相互借鉴. ...

  7. Java上传下载excel、解析Excel、生成Excel

    在软件开发过程中难免需要批量上传与下载,生成报表保存也是常有之事,最近集团门户开发用到了Excel模版下载,Excel生成,圆满完成,对这一知识点进行整理,资源共享,有不足之处还望批评指正,文章结尾提 ...

  8. java使用POI进行 Excel文件解析

    package com.timevale.esign.vip.util; import java.io.File; import java.io.FileInputStream; import jav ...

  9. excel模板解析—桥接模式:分离解析模板和业务校验

    在做excel模板解析的时候,其实会有两个部分,第一,将模板读取出来,校验一些必录项等. 但除了这些,在数据真正被业务线使用的时候,还会有一些其他的校验,比如说:根据业务,年龄是不能超过多少岁的,包括 ...

随机推荐

  1. C#的Main(String[] args)参数输入问题

    1.新建一个控制台应用程序,保存在桌面上,Main函数如下所示 using System;using System.Collections.Generic;using System.Linq;usin ...

  2. 两个Xml转换为DataSet方法(C#)

    ///通过传入的特定XML字符串,通过 ReadXml函数读取到DataSet中.protected static DataSet GetDataSetByXml(string xmlData){   ...

  3. java oop详解

    近日来重温了一下java oop的知识.加深了对面向对象的理解.尤其时继承方面.故写一篇博客.记录一下自己的想法和心得 1.面向对象主要分为三大点(封装,继承,多态) 封装的思想促进了类的形成.相比于 ...

  4. Database differential backup差异备份和还原

    完整备份: 备份全部选中的文件和文件夹,并不依赖文件的存档属性来确定备份哪些文件.(在备份过程中,任何现有的标记都被清除,每个文件都被标记为已备份,换言之,清除存档属性),完全备份也叫完整备份. 差异 ...

  5. ASP.NET Core教程【三】实体字段属性、链接标签、并发数据异常、文件上传及读取

    前文索引:ASP.NET Core教程[二]从保存数据看Razor Page的特有属性与服务端验证ASP.NET Core教程[一]关于Razor Page的知识 实体字段属性 再来看看我们的实体类 ...

  6. 关于 use-default-filters 属性的说明

    原创播客,如需转载请注明出处.原文地址:http://www.cnblogs.com/crawl/p/7940755.html ------------------------------------ ...

  7. [阿里云部署] Ubuntu+Flask+Nginx+uWSGI+Mysql搭建阿里云Web服务器

    部署地址:123.56.7.181 Ubuntu+Flask+Nginx+uWSGI+Mysql搭建阿里云Web服务器 这个标题就比之前的"ECS服务器配置Web环境的全过程及参考资料&qu ...

  8. DOM操作中,遍历动态集合的注意事项。ex: elem.children

    elem.childNodes和elem.children返回的都是动态集合. 动态集合(live collection): 不实际存储元素和属性值 每次访问集合都重新查找DOM树 遍历动态集合:   ...

  9. 升级 WIN8.1 VC6.0和 Visual Assist 的使用问题

    抱着好奇之心, 升级到了win8.1,没想到win8下 64位机器,原本可以运行的vc6.0(也就是 MSDEV.EXE)不能运行之,然后各种不痛快了. 经过从网上搜索,找到了改良办法,没想到微软想把 ...

  10. P1040 加分二叉树

    转自:(http://www.cnblogs.com/geek-007/p/7197439.html) 经典例题:加分二叉树(Luogu 1040) 设一个 n 个节点的二叉树 tree 的中序遍历为 ...