我是靠谱客的博主 落后悟空,最近开发中收集的这篇文章主要介绍windows 平台下 xlnt 结合visual studio 2017 用c++操作excel,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

windows 平台下 xlnt 结合visual studio 2017 用c++操作excel

      • 安装cmake
        • Windows下载安装xlnt
      • Cmake编译xlnt
        • 1.打开Cmake(Gui)
        • 2.点击左下角 config
      • 3.设置完成之后点击 Generate
      • 4. 生成之后点击openProject
      • 5.在VS中点击 本地调试器 ()等项目生成完成
      • visual studio2017 项目中引入xlnt
        • 配置xlnt 到你的项目
      • 以下是visual 2017 使用xlnt 生成excel的示例项目
        • 1.生成空的项目
        • 2.给项目配置xlnt
          • 3.在demo.cpp添加代码
        • 4. 生成 --> 编译 或者直接点击 本地调试器完成调试 最后会生成
        • 解决xlnt读写中文写的问题
            • 参考

安装cmake

cmake官网
下64位

Windows下载安装xlnt

git clone https://github.com/tfussell/xlnt.git
cd xlnt
mkdir build
# git clone刚才下载的xlnt源代码位置 F:CODECPPCODExlnt
# 如果下载的zip文件
源代码位置 F:CODECPPCODExlnt-master
# cd xlnt-master
# mkdir build
# 我直接下载的zip文件 所以我的xlnt源代码地址是
F:CODECPPCODExlnt-master

Cmake编译xlnt

1.打开Cmake(Gui)

在这里插入图片描述

 在where is souce codedir 放xlnt源代码地址
( F:CODECPPCODExlnt-maste )
在在where build the ... 放你 新建的 build 文件夹地址(F:/CODE/CPPCODE/xlnt-master/build)

2.点击左下角 config

在这里插入图片描述

选中你的visual Studio 版本 下拉选中电脑版本的vs (默认是32位的 64位visual Stdio需要自己选择)
--> finish

在这里插入图片描述

3.设置完成之后点击 Generate

4. 生成之后点击openProject

5.在VS中点击 本地调试器 ()等项目生成完成

PS: 项目在visual stdudio 本地调试器生成解决方案
会弹窗跳出警告 无法启动程序 请无视
 在 xlnt-masterinclude中得到头文件文件夹
在 xlnt-masterbuildsourceDebug中得到动态链接库
动态链接库中有
xlntd.dll
xlntd.lib 这是需要用到的东西
如果没有xlntd.dll就是没编译好 请重试

visual studio2017 项目中引入xlnt

配置xlnt 到你的项目

项目右键点击它,然后选择最下方的属性按钮,打开配置的窗口

  1. 配置头文件路径的配置
    配置属性-VC++目录-引用目录
    填入 F:CODECPPCODExlnt-masterinclude (根据你自己的源码位置做出相应改变)
  2. 第三方库库文件路径
    配置属性-VC++目录-库目录
    填入 F:CODECPPCODExlnt-masterbuildsourceDebug
  3. 引用库名称的配置

配置属性-连接器-依赖-附加依赖项
填入 xlntd.lib
4. 配置完之后 复制xlntd.dll放到你的项目文件夹中去 (将xlnt-masterinclude下的 xlnt文件夹也复制到项目中去)

以下是visual 2017 使用xlnt 生成excel的示例项目

环境 win10 64位 VS2017 64位 cmake 3.12.2 64位

1.生成空的项目

vs2017 文件->新建–>其他–>空项目–>ddxls(C:UsersAdministratorsourcereposddxls)

  • 添加demo.cpp文件
    • 项目–>右键–>添加新项 -->demo.cpp

2.给项目配置xlnt

- 项目右键点击,然后选择最下方的属性按钮,打开配置的窗口
- 1. 配置头文件路径的配置
配置属性-VC++目录-引用目录
填入 xlnt-masterinclude
- 2. 第三方库库文件路径
配置属性-VC++目录-库目录
填入 xlnt-masterbuildsourceDebug
- 3. 引用库名称的配置
配置属性-连接器-依赖-附加依赖项
填入 xlntd.lib
- 4.给项目添加动态链接库
复制xlntd.dll放到你的项目文件夹中去 (将xlnt-masterinclude下的 xlnt文件夹也复制到项目文件夹"C:UsersAdministratorsourcereposddxlsddxls中去"
3.在demo.cpp添加代码

#include <iostream>
#include "xlnt/xlnt.hpp"
#include <string.h>
#include <stdio.h>
#define _CRT_SECURE_NO_WARNINGS
#include <vector>
#include <string>
int main()
{
//Creating a 2 dimensional vector which we will write values to
std::vector< std::vector<std::string> > wholeWorksheet;
//Looping through each row (100 rows as per the second argument in the for loop)
for (int outer = 0; outer < 100; outer++)
{
//Creating a fresh vector for a fresh row
std::vector<std::string> singleRow;
//Looping through each of the columns (100 as per the second argument in the for loop) in this particular row
for (int inner = 0; inner < 100; inner++)
{
//Adding a single value in each cell of the row
std::string val = std::to_string(inner + 1);
singleRow.push_back(val);
}
//Adding the single row to the 2 dimensional vector
wholeWorksheet.push_back(singleRow);
std::clog << "Writing to row " << outer << " in the vector " << std::endl;
}
//Writing to the spread sheet
//Creating the output workbook
std::clog << "Creating workbook" << std::endl;
xlnt::workbook wbOut;
//Setting the destination output file name
std::string dest_filename = "output.xlsx";
//Creating the output worksheet
xlnt::worksheet wsOut = wbOut.active_sheet();
//Giving the output worksheet a title/name
wsOut.title("data");
//We will now be looping through the 2 dimensional vector which we created above
//In this case we have two iterators one for the outer loop (row) and one for the inner loop (column)
std::clog << "Looping through vector and writing to spread sheet" << std::endl;
for (int fOut = 0; fOut < wholeWorksheet.size(); fOut++)
{
std::clog << "Row" << fOut << std::endl;
for (int fIn = 0; fIn < wholeWorksheet.at(fOut).size(); fIn++)
{
//Take notice of the difference between accessing the vector and accessing the work sheet
//As you may already know Excel spread sheets start at row 1 and column 1 (not row 0 and column 0 like you would expect from a C++ vector)
//In short the xlnt cell reference starts at column 1 row 1 (hence the + 1s below) and the vector reference starts at row 0 and column 0
wsOut.cell(xlnt::cell_reference(fIn + 1, fOut + 1)).value(wholeWorksheet.at(fOut).at(fIn));
//Further clarification to avoid confusion
//Cell reference arguments are (column number, row number); e.g. cell_reference(fIn + 1, fOut + 1)
//Vector arguments are (row number, column number); e.g. wholeWorksheet.at(fOut).at(fIn)
}
}
std::clog << "Finished writing spread sheet" << std::endl;
wbOut.save(dest_filename);
return 0;
}

4. 生成 --> 编译 或者直接点击 本地调试器完成调试 最后会生成

在这里插入图片描述

在这里插入图片描述

一个简单的例子 xlnt读写excel 但是无法解决中文字符输入的问题
解决xlnt读写中文写的问题 需要将Unicode 转 utf-8

#demoReadAndWriteExcel.cpp
#include <xlnt/xlnt.hpp>
#include <iostream>
void create() {
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.merge_cells("C3:C4");
ws.freeze_panes("B2");
wb.save("sample.xlsx");
}
void read() {
xlnt::workbook wb;
wb.load("sample.xlsx");
xlnt::worksheet ws = wb.active_sheet();
std::cout << ws.cell("A1") << std::endl;
std::cout << ws.cell("B2") << std::endl;
std::cout << ws.cell("C3") << std::endl;
}
int main()
{
create();
read();
return 0;
}

解决xlnt读写中文写的问题

需要将Unicode 转 utf-8
xlnt读写中文写的问题

C++操作Excel,xlnt库的使用

参考

CMake下载
win10下安装cmake

cmake和win10结合

Visual Studio下C++第三方库的配置方法总结

C++操作excel(利用github上的项目:xlnt)

C++操作Excel,xlnt库的使用

cmake简明教程-半小时从入门到精通
c++ example xlnt

最后

以上就是落后悟空为你收集整理的windows 平台下 xlnt 结合visual studio 2017 用c++操作excel的全部内容,希望文章能够帮你解决windows 平台下 xlnt 结合visual studio 2017 用c++操作excel所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(48)

评论列表共有 0 条评论

立即
投稿
返回
顶部