使用Xlnt来处理Excel数据

249次阅读
没有评论

共计 1537 个字符,预计需要花费 4 分钟才能阅读完成。

只可以解析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;

 

正文完
 
admin
版权声明:本站原创文章,由 admin 2022-06-03发表,共计1537字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
评论(没有评论)
验证码