excel:
工具截图:
生成的json:
工具的整体难度还是比较小的
主要在于excel中json的格式定义和转成json的逻辑的编写
还需要有一些windows编程的api知识
本人是服务器对ui调整比较陌生所以
UI的布局没有仔细调整 主要先实现了功能
excel里的类型定义只是个常用的 可以根据需求进行调整和逻辑修改
暂时分为三个部分介绍(有空就发):
主要头文件
主要源文件
和使用的windows窗口api
依赖第三方库
CJson 用于读取json的配置 地址
xlnt 用于读取excel 地址
准备
vs版本2022
vs创建桌面应用程序
将上述依赖库编译成库导入cpp工程
主要头文件介绍
初始的一些定义:
//Define.h
#define H_DEFINE
#define DATAROW_USNAME 1 //英文名
#define DATAROW_CNNAME 2 //中文名字
#define DATAROW_FIELDTYPE 3 //字段类型
#define DATAROW_BEGIN 4 //数据开始的行
#define T_INT _T("int") //整型
#define T_INTARR _T("int[]")//整形数组
#define T_STRING _T("string")//字符串
#define T_TABLE _T("table{")//表 向后延申中间可以有多个 int string
#define T_TABLEARR _T("table[]{")//表组向后和向下延申 每行表示一个表元素
#define T_TABLEEND _T("}")//表结构的结尾
#define DUF_INT 0 //整形默认值
#define DUF_STRING _T(" ")//字符串默认值
#include <string>
#include <iostream>
//自适应字符集
#ifdef UNICODE
typedef std::wstring TSTR;
typedef std::wstringstream TSS;
typedef std::fstream TFS;
#define COUT std::wcout
#else
typedef std::string TSTR;
typedef std::stringstream TSS;
typedef std::fstream TFS;
#define COUT std::cout
#endif // UNICODE
//ExcelOperator.h 使用xlnt 对excel的读取和保存数据
//转换逻辑的主要实现类
#pragma once
#ifndef H_EXCELOPERATOR
#define H_EXCELOPERATOR
#include "Define.h"
#include <map>
class SheetOperator//记录excel里每个单元的数据 转成json
{
public:
void WriteIntData(TSS& context, const TSTR& fieldName, TSTR& data);
void WriteIntArrData(TSS& context, const TSTR& fieldName, TSTR& data);
void WritStringData(TSS& context, const TSTR& fieldName, TSTR& data);
void WriteTableData(TSS& context, const TSTR fieldName, int startCol, int endCol,int row);
void WriteTableArrData(TSS& context, const TSTR fieldName, int startCol, int endCol, int startRow, int endRow);
//读取excel后的数据
//结构 row:<col,data>
std::map<int, std::map<int, TSTR>> m_ExcelData;
TSTR m_Context;
};
class ExcelOperator
{
public:
ExcelOperator () {}
~ExcelOperator();
void ReadExcel(TSTR filePath);//读取excel
void CreateConfig();//生成json的输出内容
void ClearSheet();
void OutFile();//输入到文件
inline const TSTR& GetOutData(){ return m_OutData; }
private:
//读取excel后的数据
//结构 row:<col,data>
//std::map<int, std::map<int, TSTR>> m_ExcelData;
//TSTR m_ConfigName;
//TSTR m_Context;
std::map<TSTR, SheetOperator*> m_SheetMap;//每个单元的数据
TSTR m_OutPath; //输入excel的地址如果没有配置输出地址就使用这个地址输出
TSTR m_ConfigName;
TSTR m_OutData; //转换的json字符串
};
#ifndef H_EXCELPATH
#define H_EXCELPATH
#include <vector>
#include "Define.h"
//用于保存选择的excel地址和文件名
class ExcelPath
{
public:
ExcelPath(){}
TSTR GetSelectFolderPath() { return m_SelectFolderPath; }
inline void SetSelectFolderPath(TSTR path)
{
m_LastPath = m_SelectFolderPath;
m_SelectFolderPath = path;
}
bool LoadFileName();
inline const std::vector<TSTR>& GetReadFileName()
{
return m_FilePathInSelect;
}
void SetSelFilePath(const TSTR path) { m_SelectFilePath = path; }
TSTR GetSelFilePath() { return m_SelectFilePath; }
private:
std::vector<TSTR> m_FilePathInSelect;//文件夹下的excel文件名列表
TSTR m_SelectFolderPath;//选择的excel文件夹
TSTR m_SelectFilePath;//选择的excel文件
};
#endif // !H_EXCELPATH
//工具配置读取
#ifndef H_MYCONFIG
#define H_MYCONFIG
#include <string>
#include"Define.h"
class MyConfig
{
public:
MyConfig(){}
bool LoadConfig(TSTR path);
inline TSTR GetDefaultOpenFolder() { return m_DefaultOpenFolder; }
inline TSTR GetJsonOutFolder() { return m_JsonOutFolder; }
private:
TSTR m_DefaultOpenFolder;//默认的excel 文件夹地址
TSTR m_JsonOutFolder;//json文件的输出地址
};
#endif // !H_MYCONFIG
如果有错误的地方欢迎指正!