c++读取excel的代码详解

我来详细讲解“c++读取excel的代码详解”的攻略。

简述

用 C++ 读取 Excel 文件可以使用第三方库:libxlsC++库xlsxwriter。这里我们介绍一下使用 libxls。

步骤

读取 Excel 文件的步骤分为三个:打开文件、读内容、关闭文件。下面我们来一步步演示。

1. 打开文件

首先,我们需要从 Excel 文件中获取工作表数据。在使用 libxls 之前,我们需要向编译器告知 libxls 的头文件和库文件位置。在 Visual Studio 中的方法是:

  1. 右键点击项目,选择“属性”;
  2. 在窗口左边选择“VC++目录”;
  3. 在“头文件目录”中添加包含 libxls 的头文件目录;
  4. 在“库目录”中添加包含 libxls 的库文件目录;
  5. 在“链接器-输入-附加依赖项”中添加库文件。

头文件路径和库文件路径可以根据实际情况进行修改。

打开 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技术站

(0)
上一篇 2023年5月25日
下一篇 2023年5月25日

相关文章

  • Django-xadmin+rule对象级权限的实现方式

    下面我将为您讲解“Django-xadmin+rule对象级权限的实现方式”的完整攻略。 1. 什么是Django-xadmin xadmin是一个基于Django的后台管理系统,它提供了一系列方便的功能,可以极大地帮助我们快速地搭建后台管理系统。 2. 什么是rule对象级权限 Django中的权限和认证机制已经非常完善了,但是它只能区分用户是否有某个权限…

    人工智能概览 2023年5月25日
    00
  • 调试Django时打印SQL语句的日志代码实例

    当我们在使用Django进行开发时,需要查看某些请求的SQL查询语句以进一步优化性能。Django默认提供了ORM系统用于构建和查询SQL语句,同时,Django框架也允许我们对ORM查询的SQL语句进行日志记录。 为了打印SQL查询日志,我们需要在Django的配置文件中添加以下设置: LOGGING = { ‘version’: 1, ‘disable_…

    人工智能概论 2023年5月25日
    00
  • Android Studio Intent隐式启动,发短信,拨号,打电话,访问网页等实例代码

    下面是Android Studio Intent隐式启动的完整攻略,包含发短信、拨号、打电话、访问网页等实例代码: 1. Intent隐式启动 Intent是Android系统中一种重要的组件之一,它可以帮助我们在不同的应用组件之间传递数据,同时也可以启动其他的应用组件,其中包括Activity、Service、Broadcast Receiver等。Int…

    人工智能概览 2023年5月25日
    00
  • Nginx解决403 forbidden的完整步骤

    下面是“Nginx解决403 forbidden的完整步骤”的完整攻略,希望对您有所帮助。 1. 确认权限设置 首先,我们需要确认权限设置是否正确。 在Nginx的配置文件中,可以通过以下方式指定访问的路径: location /path/to/resource { … } 在这里,需要确认相关路径和权限设置是否正确。可以使用以下命令查看文件和目录的权限…

    人工智能概览 2023年5月25日
    00
  • SpringBoot使用OpenCV示例总结

    SpringBoot使用OpenCV示例总结 简介 OpenCV是一个开源的计算机视觉库,可以用于图像处理、机器视觉和模式识别等领域。SpringBoot是一个基于Spring框架的快速开发微服务的框架。本示例将演示如何在SpringBoot中使用OpenCV库。 准备工作 在开始前,需要安装以下软件: JDK 1.8及以上版本 Maven OpenCV 4…

    人工智能概览 2023年5月25日
    00
  • 基于ubuntu16 Python3 tensorflow(TensorFlow环境搭建)

    下面是基于Ubuntu 16.04搭建Python3 TensorFlow环境的完整攻略: 系统要求 在开始之前,确保你的系统满足以下要求: Ubuntu 16.04 确保网络连接正常 安装Python3 首先,我们需要安装Python3: 打开终端,在命令行中输入以下命令安装Python3: sudo apt-get update sudo apt-get…

    人工智能概览 2023年5月25日
    00
  • Python开发之Nginx+uWSGI+virtualenv多项目部署教程

    下面我来为您详细讲解“Python开发之Nginx+uWSGI+virtualenv多项目部署教程”的完整攻略。 一、什么是Nginx+uWSGI+virtualenv多项目部署? Nginx和uWSGI是两种常见的Python Web服务器。Nginx负责处理静态资源和代理请求,而uWSGI则负责处理动态请求。virtualenv是Python的虚拟环境工…

    人工智能概览 2023年5月25日
    00
  • opencv实现多张图像拼接

    下面就为大家提供一份关于 Opencv 实现多张图像拼接的攻略。 1. 了解多张图像拼接 多张图像拼接,即将多张图像合并为一张图像。常见的多张图像拼接方式有横向拼接、纵向拼接和网格拼接。 2. 实现多张图像拼接的准备 在使用 Opencv 实现多张图像拼接之前,需要对其进行一定的配置,以便程序能够调用到 Opencv 库中的相关函数。 2.1 安装 Open…

    人工智能概览 2023年5月25日
    00
合作推广
合作推广
分享本页
返回顶部