使用Xlnt来处理Excel数据

/*
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;

通过以上的方法 就可以有效的获取到指定单元格的值了
 

猜你喜欢

转载自blog.csdn.net/Wuzm_/article/details/83348908
今日推荐