vs2010上配置使用libxl(vs2010生成Excel,多tab、修改表格颜色、任意行插入内容)

简介:由于项目需要把检测数据生成Excel表格,并且不同类型的数据要分tab记录,要求不同的数据要用不同的的颜色标示出来,还要可以修改任意行的内容,在任意表格插入内容。为了完成需求从网上找到了libxl这个库,但是正版需要钱买,后来下载了一个破解版的libxl,现在使用起来感觉不错,写此文章记录使用细节。

第一步:准备工具。

1.1、下载libxl库,下载地址:https://download.csdn.net/download/cwj066/10656221

1.2、安装vs2010即以上版本软件。

第二步:在vs2010上配置libxl开发环境。

2.1、打开vs2010新建一个名字为testLibXL的win32控制台空项目。

2.2、解压下载的压缩包,把LibXL拷贝任意目录(里面有bin、lib和include三个目录)。

2.3、配置

项目(testLibXL)---》属性---》配置属性---》VC++目录---》可执行文件目录  D:\xxx\LibXL\bin
项目(testLibXL)---》属性---》配置属性---》VC++目录---》包含目录        D:\xxx\LibXL\include
项目(testLibXL)---》属性---》配置属性---》VC++目录---》库目录          D:\xxx\LibXL\lib

项目(testLibXL)---》属性---》配置属性---》链接器---》输入---》附加依赖项:写入libxl.lib

第三步:vs2010上使用libXL(简单例子)。

3.1、在testLibXL项目添加一个名字为main.cpp的源文件。

在main.cpp文件中引入libXL库,代码如下所示

//引入C++库
#include <iostream>
using namespace std;

// 引入libxl.h
#include "libxl.h"
#pragma comment(lib, "libxl.lib")
using namespace libxl;

3.2、添加表格操作对象。

//表格操作对象
Sheet *pRunRecordSheet;       //runrecord表sheet操作对象
libxl::Font *pFontSize;              //字体大小
libxl::Font *pFontRed;              //红色字体
libxl::Font *pFontGreen;           //绿色字体
Format* pBoldFormatRed;       //红色格式
Format* pBoldFormatGreen;    //绿色格式
Format* pBoldFormatSize;       //字体大小格式
Format* pDateFormat;              //居中显示

3.3、声明表格操作函数
//声明表格操作函数
void CreateBook();                       //新建一个Excel
void CreateStudenInfoHead();             //创建学生信息表头
void CreateStudenScoreHead();            //创建学生成绩表头
void SaveBook(char *pFilePath);          //保存Excel内容
void AddTab(char *pTabName);             //添加一个tab(即:Sheet表单)
void WriteData2Sheet(const char *pStudenName, const char *pClassName, const int iAge, const char *pSex);//写学生信息到表(指定行)
void WriteScore2Sheet(const char *pStudenName, const char *pClassName, const double fScore);             //写学生成绩到表(指定行)

3.5 实现声明函数。

/*****************************************************************************
 * 函数名称:CreateBook
 * 函数功能:新建一个Excel
 * 输入参数: 无
 * 输出参数: 无
 * 返回值  : 无
 * 日   期 : 2018.9.18
 * 作   者 : mark-puls
*****************************************************************************/
void CreateBook()
{
    if(pDataBook) pDataBook->release();
    pDataBook = xlCreateBook();//创建一个二进制格式的XLS(Execl97-03)的实例,在使用前必须先调用这个函数创建操作excel的对象
}

/*****************************************************************************
 * 函数名称:CreateStudenInfoHead
 * 函数功能:创建学生信息表头
 * 输入参数: 无
 * 输出参数: 无
 * 返回值  : 无
 * 日   期 : 2018.9.18
 * 作   者 : mark-puls
*****************************************************************************/
void CreateStudenInfoHead() 
{
    iRowCount = 2;

    //1 添加一个tab
    pRecordSheet = pDataBook->addSheet("学生信息"); 

    //2 创建tab的属性
    pFontSize = pDataBook->addFont();//创建字体大小对象
    pFontSize->setColor(COLOR_BLACK);//颜色为黑色
    pFontSize->setSize(15);          //字体大小为15

    //3 设置表头的属性
    pBoldFormatSize = pDataBook->addFormat();//设置字体格式指针
    pBoldFormatSize->setFont(pFontSize);
    pBoldFormatSize->setAlignV(ALIGNV_CENTER);//表头垂直居中显示
    pBoldFormatSize->setAlignH(ALIGNH_CENTER);//表头水平居中显示

    //4 把表头属性写到表里
    pRecordSheet->writeStr(0, 0, "学生信息", pBoldFormatSize); //设置第一行的内容
    pRecordSheet->setMerge(0, 0, 0, 3);

    //5 设置行列属性
    pDateFormat = pDataBook->addFormat();
    pDateFormat->setAlignV(ALIGNV_CENTER);  
    pDateFormat->setAlignH(ALIGNH_CENTER);
    pRecordSheet->setRow(1, 18);
    pRecordSheet->setCol(0, 0, 20);
    pRecordSheet->setCol(1, 1, 14);
    pRecordSheet->setCol(2, 2, 10);
    pRecordSheet->setCol(3, 3, 22);
    pRecordSheet->writeStr(1, 0, "姓名", pDateFormat);  //标题第1列 固定模式
    pRecordSheet->writeStr(1, 1, "班级", pDateFormat);  //标题第2列 固定模式
    pRecordSheet->writeStr(1, 2, "年龄", pDateFormat);    //标题第3列 固定模式
    pRecordSheet->writeStr(1, 3, "性别", pDateFormat);    //标题第4列 固定模式

    //红色字体属性 
    pFontRed = pDataBook->addFont();//创建一个红色字体对象
    pFontRed->setColor( COLOR_RED);        //设置红颜色
    pBoldFormatRed = pDataBook->addFormat();//设置字体格式指针
    pBoldFormatRed->setFont(pFontRed); //应用上面设置的字体
    pBoldFormatRed->setAlignV(ALIGNV_CENTER);  //表头居中显示
    pBoldFormatRed->setAlignH(ALIGNH_CENTER);

    //绿色字体属性
    pFontGreen = pDataBook->addFont();         //创建一个绿色字体对象
    pFontGreen->setColor(COLOR_GREEN);        //设置绿颜色
    pBoldFormatGreen = pDataBook->addFormat();//设置字体格式指针
    pBoldFormatGreen->setFont(pFontGreen);       //应用上面设置的字体
    pBoldFormatGreen->setAlignV(ALIGNV_CENTER);  //表头居中显示
    pBoldFormatGreen->setAlignH(ALIGNH_CENTER);
}

/*****************************************************************************
 * 函数名称:CreateStudenScoreHead
 * 函数功能:创建学生成绩表头
 * 输入参数: 无
 * 输出参数: 无
 * 返回值  : 无
 * 日   期 : 2018.9.18
 * 作   者 : mark-puls
*****************************************************************************/
void CreateStudenScoreHead()            
{
    iRowCount = 2;

    //1 添加一个tab
    pRecordSheet = pDataBook->addSheet("学生成绩单"); 

    //2 创建tab的属性
    pFontSize = pDataBook->addFont();//创建字体大小对象
    pFontSize->setColor(COLOR_BLACK);//颜色为黑色
    pFontSize->setSize(15);          //字体大小为15

    //3 设置表头的属性
    pBoldFormatSize = pDataBook->addFormat();//设置字体格式指针
    pBoldFormatSize->setFont(pFontSize);
    pBoldFormatSize->setAlignV(ALIGNV_CENTER);//表头垂直居中显示
    pBoldFormatSize->setAlignH(ALIGNH_CENTER);//表头水平居中显示

    //4 把表头属性写到表里
    pRecordSheet->writeStr(0, 0, "学生成绩单", pBoldFormatSize); //设置第一行的内容
    pRecordSheet->setMerge(0, 0, 0, 2);

    //5 设置行列属性
    pDateFormat = pDataBook->addFormat();
    pDateFormat->setAlignV(ALIGNV_CENTER);  
    pDateFormat->setAlignH(ALIGNH_CENTER);
    pRecordSheet->setRow(1, 18);
    pRecordSheet->setCol(0, 0, 20);
    pRecordSheet->setCol(1, 1, 14);
    pRecordSheet->setCol(2, 2, 10);
    pRecordSheet->setCol(3, 3, 22);
    pRecordSheet->writeStr(1, 0, "姓名", pDateFormat);  //标题第1列 固定模式
    pRecordSheet->writeStr(1, 1, "班级", pDateFormat);  //标题第2列 固定模式
    pRecordSheet->writeStr(1, 2, "成绩", pDateFormat);    //标题第3列 固定模式
}

/*****************************************************************************
 * 函数名称:AddTab
 * 函数功能:添加一个tab(即:Sheet表单)
 * 输入参数: pTabName tab的名字
 * 输出参数: 无
 * 返回值  : 无
 * 日   期 : 2018.9.18
 * 作   者 : mark-puls
*****************************************************************************/
void AddTab(char *pTabName)             
{
    //判断数据合法性
    if (pDataBook == NULL || pBoldFormatSize == NULL) return;

    //添加一个tab
    pRecordSheet = pDataBook->addSheet(pTabName); //添加一个工作表(tab名字)
    pRecordSheet->writeStr(0, 0, pTabName, pBoldFormatSize); //表头名字
}

/*****************************************************************************
 * 函数名称:WriteData2Sheet
 * 函数功能:写数据到表(指定行)
 * 输入参数1: pStudenName 学生名称
 * 输入参数2: pClassName  班级名称
 * 输入参数3: iAge        学生年龄
 * 输入参数4: pSex        学生性别
 * 输出参数: 无
 * 返回值  : 无
 * 日   期 : 2018.9.18
 * 作   者 : mark-puls
*****************************************************************************/
void WriteData2Sheet(const char *pStudenName, const char *pClassName, const int iAge, const char *pSex)                  
{
    //每次写4列
    pRecordSheet->writeStr(iRowCount, 0, pStudenName, pDateFormat);
    pRecordSheet->writeStr(iRowCount, 1, pClassName, pDateFormat);
    pRecordSheet->writeNum(iRowCount, 2, iAge, pDateFormat);
    pRecordSheet->writeStr(iRowCount, 3, pSex, pDateFormat);

    //第一列默认绿色
    pRecordSheet->setCellFormat(iRowCount, 0, pBoldFormatGreen);

    //写完之后移到下一行
    iRowCount++;
}

/*****************************************************************************
 * 函数名称:WriteScore2Sheet
 * 函数功能:写学生成绩到表(指定行)
 * 输入参数1: pStudenName 学生名称
 * 输入参数2: pClassName  班级名称
 * 输入参数3: iAge        学生年龄
 * 输入参数4: pSex        学生性别
 * 输出参数: 无
 * 返回值  : 无
 * 日   期 : 2018.9.18
 * 作   者 : mark-puls
*****************************************************************************/
void WriteScore2Sheet(const char *pStudenName, const char *pClassName, const double fScore)
{
    //每次写4列
    pRecordSheet->writeStr(iRowCount, 0, pStudenName, pDateFormat);
    pRecordSheet->writeStr(iRowCount, 1, pClassName, pDateFormat);
    pRecordSheet->writeNum(iRowCount, 2, fScore, pDateFormat);

    pRecordSheet->setCellFormat(iRowCount, 0, pBoldFormatGreen);//名字默认绿色
    pRecordSheet->setCellFormat(iRowCount, 2, pBoldFormatRed);//成绩默认红色

    //写完之后移到下一行
    iRowCount++;
}

/*****************************************************************************
 * 函数名称:SaveBook
 * 函数功能:保存Excel内容
 * 输入参数: pFilePath 保存文件路径
 * 输出参数: 无
 * 返回值  : 无
 * 日   期 : 2018.9.18
 * 作   者 : mark-puls
*****************************************************************************/
void SaveBook(char *pFilePath)
{
    //数据合法性判断
    if (pDataBook == NULL || pFilePath == NULL) return;

    //保存Excel内容
    pDataBook->save(pFilePath);
}

3.6、main函数的调用

//统计写了多少行
int iRowCount = 2;

int main(int argc, char *argv[])
{
    //1 新建一个Excel
    CreateBook();

    //2 创建学生信息表头
    CreateStudenInfoHead();

    //3 写一行学生信息到表中
    WriteData2Sheet("朱晓明", "二年级1班", 8, "男");
    WriteData2Sheet("陈大勇", "二年级6班", 6, "男");
    WriteData2Sheet("李红霞", "二年级4班", 8, "女");
    WriteData2Sheet("谭伟强", "二年级1班", 9, "男");
    WriteData2Sheet("范冰冰", "二年级3班", 8, "女");

    //4 创建成绩表头
    CreateStudenScoreHead();

    //5 写一行学生数学成绩到表中
    WriteScore2Sheet("朱晓明", "二年级1班", 98.5);
    WriteScore2Sheet("陈大勇", "二年级6班", 68.6);
    WriteScore2Sheet("李红霞", "二年级4班", 88.8);
    WriteScore2Sheet("谭伟强", "二年级1班", 86.3);
    WriteScore2Sheet("范冰冰", "二年级3班", 58.9);

    //6 保存Excel内容
    SaveBook("C:\\Users\\MARK\\Desktop\\studen.xls");

    return 0;
}

第四步:测试结果如下

4.1 学生信息表

4.2 学生成绩表

总结:1、如果不是破解版的libXL库会有水印,所以还是下载破解版的,有钱的可以买正版

           2、只有当写完了所有数据才能调用save()函数保存Excel,调用了之后不可再写数据到表里面了

           3、这的AddTab()没有演示,喜欢的老铁可以自己测试一下

工程源码链接:https://download.csdn.net/download/cwj066/10673674

猜你喜欢

转载自blog.csdn.net/cwj066/article/details/82752949
今日推荐