【ExcelExport 】,Excel转lua,json,xml开发工具

正文:

基于https://github.com/monkey256/ExcelExport 开发的再次改版,

相比旧版:

1.新版支持公式导出,多语言导出
2.去除不必要的功能,优化核心代码
3.数值校验
4.描述表格与数值表格合二为一,方便查看
5.支持插入空列
6.根据定义字段导出客户端与服务器两份
7.语言包独立处理,根据语言生成多份.lua文件
 

主要功能

1.软件说明:
    “一键导出”
        对指定目录下所有.xlsx与.xls文件分别导出到输出目录下的客户端.lua与服务器.xml文件
    “语言包导出”
        关键词【Language】,检测到相应文件名时,根据不同语言导出多份.lua文件

2.通过命令行启动说明:
    ***查看帮助界面***  -h|-help
        示例: tablegen2.exe -h

    ***一键导出***  -p handyExp
        示例: tablegen2.exe -i fullPath -o outputDir -p handyExp

    ***按指定类型导出***  -p xml|json|lua
        示例: tablegen2.exe -i fullPath -o outputDir -p lua

 

using System;
using System.Collections.Generic;
using NPOI.HSSF.UserModel;
using NPOI.SS.UserModel;
using System.IO;
using NPOI.XSSF.UserModel;
using System.Collections;
using tablegen2.common;

namespace tablegen2.logic
{
    public static class TableExcelReader
    {
        // def表参数占位索引
        private const int DEF_HEADER_INDEX = 3;
        // data表参数索引
        private const int DATA_HEADER_INDEX = DEF_HEADER_INDEX + 1;
        // data表数据索引
        private const int DATA_DATA_INDEX = DEF_HEADER_INDEX + 2;

        // 根据路径读取解析xls
        public static TableExcelData loadFromExcel(string filePath)
        {
            if (!File.Exists(filePath))
                throw new Exception(string.Format("{0} 文件不存在!", filePath));

            var ext = Path.GetExtension(filePath).ToLower();
            if (ext != ".xls" && ext != ".xlsx")
                throw new Exception(string.Format("无法识别的文件扩展名 {0}", ext));

            var headers = new List<TableExcelHeader>();
            var rows = new List<TableExcelRow>();

            var fs = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
            // 解析xls文档核心模块
            var workbook = ext == ".xls" ? (IWorkbook)new HSSFWorkbook(fs) : (IWorkbook)new XSSFWorkbook(fs);
            fs.Close();

            _readDataFromWorkbook(workbook, headers, rows);

            return new TableExcelData(headers, rows);
        }

        private static void _readDataFromWorkbook(IWorkbook wb, List<TableExcelHeader> defHeader, List<TableExcelRow> rows)
        {
            var dataSheet = _checkSheetValidity(wb, AppData.Config.SheetNameForData);

            var defHeaderIdx = new ArrayList();
            var dataList = new List<List<string>>();

            // 检查Sheet是否存在空行
            _checkSheetIsNullRow(dataSheet, AppData.Config.SheetNameForData);
            // 读取def
            _readDefSheet(dataSheet, defHeader);
            // 检查data首行定义字段数据
            _checkHeadersFromDataSheet(dataSheet, defHeader);
            // 检查data中的数值是否符合指定类型
            _checkAllDataSheetValidity(dataSheet, defHeader);
            // 检查data中的主键ID是否空值或重复
            _checkDataSheetKeyUnique(dataSheet, defHeader, "Id");
            // 读取data
            _readDataSheet(dataSheet, defHeader, rows);
        }

        private static ISheet _checkSheetValidity(IWorkb
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值