只可以解析xlsx格式,xls格式需转换或者其他库解析
/*
2018-10-15 16:59:12
使用开源库Xlnt来处理Excel文件(支持可读可写)
*/
直接在Git上搜索Xlnt就可以得到结果
如何使用Xlnt获取Excel表的具体某一项的数据
首先使用
auto cols = ws.columns(); //用这个来确定有几列 得到最大的列数
cols[0][0].value<std::string>(); //来获取一个string的变量 表示0列0行 xlnt也是从0开始计算下标的
rows[0][0].value<std::string>(); //来获取一个string的变量 表示0行0列 xlnt也是从0开始计算下标的
通过这种方法 就可以简单的获取到 某一行某一列的值
在一个Excel文件中有多个sheet 这种情况 怎么判断是那个sheet中的数据 在使用?
通过调用接口:
sheet_by_title 来打开不同的sheet 子表
//常用的一个业务流程
Step1 首先打开一个Excel表
workbook wb;
wb.load(路径);
Step2 根据打开的Excel表 得到含有几个sheet
wb.sheet_titles(); 返回一个vecor<string> 注意这个string的vector 如果含有中文会乱码 需要转换一下 Win32转换成ASCII来显示
Unicode的格式下 直接转换成Unicode格式就可以显示了
Step3 根据得到的sheet名字 可以打开对应的sheet表 这样可以打开指定的sheet表
wb.sheet_by_title(sheet名字) 然后根据打开的sheet 处理数据
Step4 处理相关的数据
auto cols = ws.columns(); //返回值是一个rang
返回的cols类似一个二维数组 然后可以开始处理数据
例如指定打开A1的数据
cols[0][0].value<std::string>(); //以string类型得到A1的数据
在使用sheet_by_title的时候 发现中文路径进入会出错(等着后面支持wstring 或者自己封装一下 做个接口)
在知道有多少sheet的前提下 还可以使用index来访问sheet
sheet_by_index 只需要提供下标即可
可以通过使用Xlnt来获得Excel的支持
代码片段
workbook wb; wb.load("D:\\WindowsProgram\\xlnt-master\\TestXlnt\\demo01.xlsx"); worksheet ws = wb.active_sheet(); auto cols = ws.columns(); //返回值是一个rang auto rows = ws.rows(); int ColLength = cols.length(); //获得有效的列数 int RowLength = rows.length(); //获的有效的行数 std::cout << "demo01有效列数为: " << ColLength << std::endl; std::cout << "demo01有效行数为: " << RowLength << std::endl; //取得指定一行一列的值 下标从0开始 例如 0,0 表示的就是A1 0,1表示B1 表示第1列第0行 std::string A1Value = cols[0][0].value<std::string>(); std::string B1Value = rows[0][2].value<std::string>(); //将string 转换成UTF8进行输出 B1Value = UTF8ToANSI(B1Value); std::cout << A1Value << std::endl; std::cout << B1Value << std::endl;