vs2015编译Xlnt库操作excel表格

vs2015编译Xlnt库操作excel表格

xlnt是c++编写的开源excel操作工具,支持c++14标准。可以方便的通过代码的方式操作excel表格。支持sheet的读写和编辑,单元格操作支持写入和读取字符串或者数值类型。单元格样式设置等。可用于读取Excel中的单元格数据或者将数据写入单元格并保存到excel文件中。通过参考github项目主页上的Example我们可以使用Xlnt来进行excel操作。

编译Xlnt库

1, 从github上面下载代码,可以通过git命令行或者通过网页上的下载链接下载代码到本地。

通过git下载代码
git clone http://github.com/tfussell/xlnt.git
在这里插入图片描述
通过网页下载代码:https://github.com/tfussell/xlnt
网页下载页面

2, Cmake配置项目
Cmake下载和安装参考:https://blog.csdn.net/sinat_36264666/article/details/73177703

step1: 打开cmake选择代码目录和build目录
在这里插入图片描述
step2: 点击Configure按钮,选择vs2015编译器,点击Finish开始配置
在这里插入图片描述
step3: 配置完成后点击Generate生成项目
在这里插入图片描述
在这里插入图片描述

3, 编译Xlnt生成Xlnt库

step1: 使用管理员权限打开vs2015,然后打开工程并设置为编译release版本,右击ALL_BUILD开始编译。
在这里插入图片描述
在这里插入图片描述
step2: 安装Xlnt库,Build INSTALL之后会把Xlnt库安装到build目录下的installed目录下
在这里插入图片描述

使用Xlnt库
将CMakelist文件和main.cpp放到同一目录下,使用cmake配置工程,选择Xlnt安装的目录为D:\xlnt_download\build\installed

1:将CMakeLists和main文件放到同一目录下(main函数和CMakeLists参考代码部分)
在这里插入图片描述
2:使用cmake配置项目,选择Xlnt安装目录以便找到Xlnt头文件和库文件。
在这里插入图片描述
3:编译demo代码(demo将读取一个excel表格的数据,输出到控制台,还将一个excel表格保存到磁盘)
在这里插入图片描述
在这里插入图片描述
4: 运行时报找不到xlnt.dll文件错误,将install目录(D:\xlnt_download\build\installed)下bin目录下面的xlnt.dll文件copy到xlnt_demo.exe目录下,或者将xlnt.dll所在目录添加到系统环境变量中后重启电脑生效。

  • 报找不到dll错误
    在这里插入图片描述
  • 解决方式1,将dll文件copy到xlnt_demo.exe目录下
    在这里插入图片描述
    在这里插入图片描述
  • 解决方式2,将xlnt.dll文件所在的目录添加到系统环境变量中之后重启电脑生效
    在这里插入图片描述

相关代码及其运行结果
main.cpp代码

#include "xlnt/xlnt.hpp"
#include <iostream>
using namespace std;
int test_read_excel()
{
	/*https://blog.csdn.net/Wuzm_/article/details/83348908*/
	xlnt::path pth("read_file.xlsx");

	try {
		xlnt::workbook wb(pth);
		xlnt::worksheet ws = wb.sheet_by_index(0);
        
        /*注意第一个参数为列数,从1开始计算,第二个参数才是行数,从1开始计算*/
		int cell_value_int = ws.cell(1, 1).value<int>();/*第一列第一行*/
		printf("%d %d %d\n", 1, 1, cell_value_int);

		double cell_value_double = ws.cell(1, 2).value<int>();/*第一列第二行*/
		printf("%d %d %f\n", 1, 2, cell_value_double);

		string cell_value_string = ws.cell(1, 3).value<string>();/*第一列第三行*/
		printf("%d %d %s\n", 1, 3, cell_value_string.c_str());
	}
	catch (std::exception e)
	{
		cout << e.what() <<endl;
	}


	return 0;
}

int test_write_excel()
{
	/*https://blog.csdn.net/Wuzm_/article/details/83348908*/
	/*https://github.com/tfussell/xlnt*/
	xlnt::workbook wb;
	xlnt::worksheet ws = wb.active_sheet();
	ws.cell("A1").value(5);
	ws.cell("B2").value("string data");
	ws.cell("C3").formula("=RAND()");

	ws.cell(6, 8).value("data:68");

	ws.merge_cells("C3:C4");
	ws.freeze_panes("B2");
	wb.save("example.xlsx");
	return 0;
}

int main(int argc, char** argv)
{
	test_read_excel();
	test_write_excel();
	return 0;
}

CMakeLists文件内容

cmake_minimum_required (VERSION 2.6 FATAL_ERROR)

project (Xlnt_Test)

#xlnt install directory
set(XLNT_INSTALL_ROOT "" CACHE PATH "xlnt install root directory")
IF(EXISTS ${XLNT_INSTALL_ROOT})
  MESSAGE(STATUS "set XLNT_INSTALL_ROOT to ${XLNT_INSTALL_ROOT}")
  SET(XLNT_INCLUDE_DIR ${XLNT_INSTALL_ROOT}/include)
  SET(XLNT_LIBRARY_DIR ${XLNT_INSTALL_ROOT}/lib)
ELSE()
  message( FATAL_ERROR "XLNT_INSTALL_ROOT: ${XLNT_INSTALL_ROOT} is not a directory." )
ENDIF()

#xlnt include dir
IF(EXISTS ${XLNT_INCLUDE_DIR})
  MESSAGE(STATUS "set XLNT_INCLUDE to ${XLNT_INCLUDE_DIR}")
ELSE()
  message( FATAL_ERROR "XLNT_INCLUDE_DIR: ${XLNT_INSTALL_ROOT}/include is not exist." )
ENDIF()

#xlnt library dir
IF(EXISTS ${XLNT_LIBRARY_DIR})
  MESSAGE(STATUS "set XLNT_LIBRARY_DIR to ${XLNT_LIBRARY_DIR}")
ELSE()
  message( FATAL_ERROR "XLNT_LIBRARY_DIR: ${XLNT_INSTALL_ROOT}/lib is not exist." )
ENDIF()

#xlnt library
find_library(XLNT_LIBS xlnt ${XLNT_LIBRARY_DIR})
IF(EXISTS ${XLNT_LIBS})
  MESSAGE(STATUS "set XLNT_LIBS to ${XLNT_LIBS}")
ELSE()
  message( FATAL_ERROR "XLNT_LIBS: ${XLNT_LIBS} is not exist." )
ENDIF()

IF(XLNT_LIBS STREQUAL "")
MESSAGE("SUCCESS: FIND XLNT LIBRARY")
ENDIF()

include_directories(${XLNT_INCLUDE_DIR})
link_directories(${XLNT_LIBRARY_DIR})

SET(CMAKE_BUILD_TYPE Release)
ADD_DEFINITIONS(-D _XKEYCHECK_H)

ADD_EXECUTABLE  (xlnt_demo main.cpp)

#set vs startup project
set_property(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY VS_STARTUP_PROJECT xlnt_demo)
TARGET_LINK_LIBRARIES (xlnt_demo ${XLNT_LIBS})

运行结果截图
在这里插入图片描述
写到磁盘的文件
在这里插入图片描述
参考资料:
C++操作Excel,xlnt库的使用:https://blog.csdn.net/u010442908/article/details/81390567
使用Xlnt来处理Excel数据:https://blog.csdn.net/Wuzm_/article/details/83348908

  • 2
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值