引言
C++操作xlsx着实麻烦,所以为此精心创作水一篇文章也是很OK的吧。
本文GitHub传送门。作者:hans774882968以及hans774882968以及hans774882968
本文52pojie:www.52pojie.cn/thread-1917…
本文juejin:juejin.cn/post/736168…
本文CSDN:blog.csdn.net/hans7748829…
本文打算体验的库:
体验结果:建议使用OpenXLSX
。
环境
- Windows10 64位
g++.exe (x86_64-win32-seh-rev1, Built by MinGW-Builds project) 13.1.0
- VSCode+CMake插件+CMake Tools插件。本项目是用CMake Tools插件创建的,过程不赘述。
如何下载高版本g++
咕果一下,找到一个现成的。
VSCode修改CMake Tools插件使用的g++版本
左侧导航栏点击CMake的图标,左上角的PROJECT STATUS
处有一个树形组件,其中有Configure
节点,节点下有一项GCC 13.1.0 x86_64-w64-mingw32
,hover会出现铅笔,点击即可修改。若没有看到你想选的编译器,可以先选择[Scan for kits]
让插件先帮你找下。
执行哪个二进制文件
同上找到树形组件,其中有Debug
和Launch
节点,hover会出现铅笔,点击即可修改你想执行的二进制文件。
libxl
libxl官方文档并没有给出VSCode+CMake Tools如何配置,但可以参考eclipsecpp的配置文档。添加的配置如下:
1 | cmake复制代码# 路径必须用左斜杠分隔 |
另外需要注意,一定记得把bin64/libxl.dll
复制到exe文件所在的文件夹下,否则能编译成功,但运行时会静默失败。
示例代码看官方文档就会写了,这里就不贴出来了,只列出一些注意点。
一、Book* book = xlCreateXMLBook();
用于读写07及以后版本的xlsx。
二、cmake生成的二进制文件在build
文件夹下,而我的示例xlsx在根目录下,所以考虑先getcwd
再拼接出所求路径:
1 | cpp复制代码#include <bits/stdc++.h> |
三、调用canonical
前需要保证路径的文件/文件夹存在。为此,我们引入了utils.h utils.cpp
,并修改cmake
:
1 | cmake复制代码add_executable(libxl_write_xlsx_demo libxl_write_xlsx_demo.cpp utils.cpp utils.h) |
OpenXLSX
参考其GitHub的README,我选用了最简单的方式(和参考链接1一样的方式):先复制源码到项目根目录,然后配置cmake:
1 | cmake复制代码add_executable(opxl_read_xlsx_demo opxl_read_xlsx_demo.cpp) |
最后导入:
1 | cpp复制代码#include <OpenXLSX.hpp> |
于是就遇到了报错:uint32_t
等未定义,需要导入cstdint
。我搜索报错信息,只找到了这个issue。于是我就按照报错提示,给若干.hpp
手动添加了#include <cstdint>
。幸运的是,添加后就能编译成功了。
示例代码看官方Demo就会写了,这里就不贴出来了,只列出一些注意点。
一、官方Demo似乎没有给读取Excel的API,这里说一下:
1 | cpp复制代码void read_example_xlsx() { |
二、和libxl不同,OpenXLSX写入的公式不会在打开Excel时自己计算好结果。libxl官方说这不是bug,是feature:
Nota that OpenXLSX does not calculate the results of a formula. If you add a formula to a spreadsheet using OpenXLSX, you have to open the spreadsheet in the Excel application in order to see the results of the calculation.
三、同理,日期写入后打开Excel文档,也是一个浮点数,需要手动调格式才能看到日期。
参考资料
- 配置OpenXLSX:blog.csdn.net/weixin_4456…
本文转载自: 掘金