最近自己搞C++读取表格,用的是libxl 3.6.5.0版本,由于不知道用户的表格有多少数据,所以我想精确的循环读取到最后一行。为此我去官网上面查了一下函数,找到了图片里面的内容:
看了解释,这不是有个现成的函数可以调用吗?直接调用lastFilledRow()就行了。唯一没想到的是这个函数在3.6.5.0版本里面压根就没有。可以用的是 lastRow(),但是这个函数返回的数据,只要带格式的单元格都返回,不是我要的效果。想了下,自己写一个这个功能就行了。在此记录一下代码:
const char* filepath = "D:\\BasicProfile.xlsx";//创建表格读取路径
Book* book = xlCreateXMLBook();//创建xlsx表格实例
book->setKey("Halil Kural", "windows-2723210a07c4e90162b26966a8jcdboe");//注册
if (book)//是否创建实例成功
{
if (book->load(filepath))//读取xlsx表格
{
Sheet* sheet = book->getSheet(1);//获取Sheet0,就是第一个工作表
if (sheet)
{
//找到最后一行
int lastrow;
for (int i = 0; i < 9999; i++)
{
CellType type = sheet->cellType(i,0);//获取单元格的类型
if (type == CELLTYPE_BLANK)//如果类型等于空白
{
lastrow = i;//记录下来
break;//跳出循环
}
}
//读取数据
for (int j = 1; j < lastrow; j++)
{
const char * namestr = sheet->readStr(j,0);
}
}
}