美文网首页
windows 平台下 xlnt 结合visual studio

windows 平台下 xlnt 结合visual studio

作者: crowluya | 来源:发表于2018-10-01 13:34 被阅读0次

    安装cmake

    cmake官网
    下64位

    Windows下载安装xlnt

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

    Cmake编译xlnt

    1.打开Cmake(Gui)

     在where is souce codedir 放xlnt源代码地址  ( F:\CODE\CPPCODE\xlnt-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-master\include中得到头文件文件夹
    
     在 xlnt-master\build\source\Debug中得到动态链接库 
    动态链接库中有  xlntd.dll  xlntd.lib 这是需要用到的东西 
    
    如果没有xlntd.dll就是没编译好 请重试
    

    visual studio2017 项目中引入xlnt

    配置xlnt 到你的项目

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

    1. 配置头文件路径的配置
      配置属性-VC++目录-引用目录
      填入 xlnt-master\include
    2. 第三方库库文件路径
      配置属性-VC++目录-库目录
      填入 xlnt-master\build\source\Debug
    3. 引用库名称的配置

    配置属性-连接器-依赖-附加依赖项
    填入 xlntd.lib

    1. 配置完之后 复制xlntd.dll放到你的项目文件夹中去 (将xlnt-master\include下的 xlnt文件夹也复制到项目中去)

    以下是xlnt 生成excel的示例项目

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

    1.生成空的项目

    vs2017 文件->新建-->其他-->空项目-->ddxls(C:\Users\Administrator\source\repos\ddxls)

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

    2.给项目配置xlnt

    - 项目右键点击,然后选择最下方的属性按钮,打开配置的窗口
    - 1. 配置头文件路径的配置
        配置属性-VC++目录-引用目录
        填入 xlnt-master\include
    - 2. 第三方库库文件路径
        配置属性-VC++目录-库目录
        填入 xlnt-master\build\source\Debug
    - 3. 引用库名称的配置 
    配置属性-连接器-依赖-附加依赖项
    填入 xlntd.lib
    
    - 4.给项目添加动态链接库
     复制xlntd.dll放到你的项目文件夹中去 (将xlnt-master\include下的 xlnt文件夹也复制到项目文件夹"C:\Users\Administrator\source\repos\ddxls\ddxls中去"
    
    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. 生成 --> 编译 或者直接点击 本地调试器完成调试

    参考

    win10下安装cmake

    cmake和win10结合

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

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

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

    相关文章

      网友评论

          本文标题:windows 平台下 xlnt 结合visual studio

          本文链接:https://www.haomeiwen.com/subject/doknoftx.html