我来详细讲解“c++读取excel的代码详解”的攻略。
简述
用 C++ 读取 Excel 文件可以使用第三方库:libxls 或 C++库xlsxwriter。这里我们介绍一下使用 libxls。
步骤
读取 Excel 文件的步骤分为三个:打开文件、读内容、关闭文件。下面我们来一步步演示。
1. 打开文件
首先,我们需要从 Excel 文件中获取工作表数据。在使用 libxls 之前,我们需要向编译器告知 libxls 的头文件和库文件位置。在 Visual Studio 中的方法是:
- 右键点击项目,选择“属性”;
- 在窗口左边选择“VC++目录”;
- 在“头文件目录”中添加包含 libxls 的头文件目录;
- 在“库目录”中添加包含 libxls 的库文件目录;
- 在“链接器-输入-附加依赖项”中添加库文件。
头文件路径和库文件路径可以根据实际情况进行修改。
打开 Excel 文件的操作在 libxls 中对应函数 xls_open()。下面这段代码打开了一个名为“test.xlsx”的 Excel 文件:
xlsWorkBook *pWorkBook = xls_open("test.xlsx", "UTF-8");
第二个参数需要指定编码格式,比如“UTF-8”、“GB2312”等。如果文件名包含中文,那么编码格式需要根据具体情况进行设置。
如果文件打开错误,那么 pWorkBook 变量将会是 NULL,需要进行错误处理。
if (pWorkBook == NULL) {
printf("Can't open file!\n");
return;
}
2. 读取内容
打开 Excel 文件后,我们就可以读取其工作表中的数据了。数据由行和列两个维度构成。首先,我们需要获取工作表中行和列的数量。
xlsWorkSheet* pSheet = xls_getWorkSheet(pWorkBook, 0); // 第0个工作表
xlsCellRange range;
xls_parseWorkSheet(pSheet); // 读取工作表
range = xls_getCellRange(pSheet);
int rows = range.lastrow - range.firstrow + 1; // 行数
int cols = range.lastcol - range.firstcol + 1; // 列数
上面这段代码先是读取了工作表,然后通过 xls_getCellRange() 函数获取工作表中第一行和第一列的索引、最后一行和最后一列的索引,然后计算行和列的数量。需要注意的是,工作表中索引从 0 开始计数,而读取行和列时需要加 1。
然后,我们可以通过双重循环读取每一个单元格的值。
for (int r = 0; r < rows; r++) {
for (int c = 0; c < cols; c++) {
xlsCell* pCell = xls_cell(pSheet, r, c);
printf("%s\t", pCell->str);
}
printf("\n");
}
在循环中,我们首先使用 xls_cell() 函数获取指定行和列的单元格,然后获取单元格中的字符串或者数字值。
3. 关闭文件
在读取完工作表中的数据后,我们需要调用 xls_close() 函数来关闭 Excel 文件。
xls_close(pWorkBook);
示例
下面是一个完整的示例,用来读取一个名为“test.xlsx”的 Excel 文件中第一个工作表的数据。在此之前,需要在 Visual Studio 中设置好 libxls 的头文件和库文件路径。
#include <libxls/xls.h>
#include <stdio.h>
int main()
{
xlsWorkBook* pWorkBook = xls_open("test.xlsx", "UTF-8");
if (pWorkBook == NULL) {
printf("Can't open file!\n");
return -1;
}
xlsWorkSheet* pSheet = xls_getWorkSheet(pWorkBook, 0);
xlsCellRange range;
xls_parseWorkSheet(pSheet);
range = xls_getCellRange(pSheet);
int rows = range.lastrow - range.firstrow + 1;
int cols = range.lastcol - range.firstcol + 1;
for (int r = 0; r < rows; r++) {
for (int c = 0; c < cols; c++) {
xlsCell* pCell = xls_cell(pSheet, r, c);
printf("%s\t", pCell->str);
}
printf("\n");
}
xls_close(pWorkBook);
return 0;
}
示例2
下面是一个稍微复杂一点的示例,用来读取 Excel 文件中另一个工作表的数据。这个 Excel 文件有两个工作表,读取第二个工作表并计算其中一列的和。
#include <libxls/xls.h>
#include <stdio.h>
int main()
{
xlsWorkBook* pWorkBook = xls_open("test.xlsx", "UTF-8");
if (pWorkBook == NULL) {
printf("Can't open file!\n");
return -1;
}
xlsWorkSheet* pSheet = xls_getWorkSheet(pWorkBook, 1); // 第2个工作表
xlsCellRange range;
xls_parseWorkSheet(pSheet);
range = xls_getCellRange(pSheet);
int rows = range.lastrow - range.firstrow + 1;
int cols = range.lastcol - range.firstcol + 1;
int sum = 0;
for (int r = 0; r < rows; r++) {
xlsCell* pCell = xls_cell(pSheet, r, 1); // 第2列
if (pCell->id == 3) {
sum += (int)pCell->d; // 数字类型
}
}
printf("Sum: %d\n", sum);
xls_close(pWorkBook);
return 0;
}
上面这个示例中,我们首先使用 xls_getWorkSheet() 函数获取第二个工作表,然后计算行和列的数量。在循环读取每一个单元格时,我们只读取了第二列的值,并且只计算其中的数字类型单元格的值的和。最后输出这个和。
结论
至此,本文介绍了如何使用 C++ 读取 Excel 文件的内容,主要是通过 libxls 库实现。读取步骤包括打开文件、读取内容、关闭文件。读取内容需要获取行和列的数量,并通过循环遍历每一个单元格。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:c++读取excel的代码详解 - Python技术站