一个简单的C++操作Excel的方案

因为工作的关系,我需要时常操作一下excel的数据,按照一定的格式加工原文件中的数据后,搞到另一个excel中

然后搜索了不少excel操作的开源类库,但搜到的代码要么就是需要第三方库配合,要么就是功能过于强大,导致使用成本较高

最终,找到一篇2006年的文章

 BasicExcel - A Class to Read and Write to Microsoft Excel


BasicExcel,一个读写Excel的类

一.基本介绍

BasicExcel 是一个非常简单的操作Excel的库,使用C++编写,虽然功能有限,但基本的读写单元格、工作簿、生成新的excel文件的功能还是具备,他最大的亮点就是不需要第三方依赖,整个库就两个文件

 一共就200多K,使用也很简单,以VS为例,只要把这两个文件包含在你的工程项目内就可以了

还有一点,目前我的测试,发现它并不能读取xlsx文件,如果要操作的话,需要转成xls,也就是excel2003以下的版本格式

二.类构成

整个BasicExcel 分为三个类

class BasicExcel:操作excel文件的,例如载入、保存文件,新建、删除工作表等

class BasicExcelWorksheet:操作工作表,例如:获取工作表名称,获取行、列数量

class BasicExcelCell:操作单元格,例如,读取,更改

来演示一下,它具体使用

首先,创建一个xls文件,里面有两个工作表,表的内容基本都一样

三.具体使用

首先,操作一个excel,需要先把他载入

 载入文件

int main(int argc, char* argv[])
{
  _wsetlocale(LC_ALL, L"chs");
  BasicExcel *e = new BasicExcel();  
  //加载excel文件
  if (!e->Load(argv[1]))
  {
    printf("文件载入错误");
    return 0;
  }
  //获取工作表数量
  int sheetscount = e->GetTotalWorkSheets();
  printf("工作表数:%d\n", sheetscount);
  for (size_t i = 0; i < sheetscount; i++)
  {
    //获取工作表名称
    wprintf(L"第%i个工作表名称:%s\n",i+1,e->GetUnicodeSheetName(i));
  }
  //获取索引为1的工作表,也就是第二个工作表
  BasicExcelWorksheet* sheet1 = e->GetWorksheet((unsigned)1);
  if (sheet1) {
    //更改单元格内容
    //changecell(sheet1,e);
    //读取单元格内容
    readsheet(sheet1);;    
  }
  return 0;
}

最好使用宽字符读取字符串,从使用中发现,如果你用多字节,可能会出错,首先要设置地域信息_wsetlocale(LC_ALL, L"chs");

读取单元格

void readsheet(BasicExcelWorksheet* sheet1)
{
  //获取行数
  size_t rows = sheet1->GetTotalRows();
  //获取列数
  size_t cols = sheet1->GetTotalCols();
  for (size_t r = 0; r < rows; r++) {
    printf("\n");
    for (size_t c = 0; c < cols; c++)
    {
      //获取r行,c列的内容
      BasicExcelCell* cell = sheet1->Cell(r, c);
      //判断单元格类型
      switch (cell->Type())
      {
      case BasicExcelCell::WSTRING:
      {
        const wchar_t* ret = cell->GetWString();
        wprintf(L"%s  ", ret);
      }
      break;
      case BasicExcelCell::DOUBLE:
      {
        double ret = cell->GetDouble();
        printf("%.2f   ", ret);
      }
      break;
      case BasicExcelCell::INT:
      {
        int ret = cell->GetInteger();
        printf("%d     ", ret);
      }
      break;
      default:
        break;
      }
    }
  }
}

输出如下

  更改单元格内容

void changecell(BasicExcelWorksheet* sheet1, BasicExcel *e)
{
  //更改单元单元格第1行第1列内容,设置为double类型,数值为0.12
  //然后保存为b.xls
  BasicExcelCell* cell = sheet1->Cell(1, 1);
  cell->SetDouble(0.12);
  e->SaveAs("b.xls");
}

结果如下.b.xls

创建新xls文件和工作表

int main(int argc, char* argv[])
{
  setlocale(LC_ALL, "chs");
  BasicExcel *e = new BasicExcel();
  //创建一个工作表
  e->New(1);
  BasicExcelWorksheet* sheet = e->GetWorksheet((unsigned)0);
  //将工作表命名
  sheet->Rename(L"新工作表");
  //选择第0行第0列
  BasicExcelCell* cell = sheet->Cell(0, 0);
  //设置文字
  cell->SetWString(L"测试");
  cell = sheet->Cell(1, 0);
  cell->SetWString(L"ABC");
  //另存文件
  e->SaveAs("c.xls");
  return 0;
}

结果如下

以上就是BasicExcel的基本使用和操作,可以看到,他的使用基本不需要学习成本,就可以开发,虽然功能上弱了一点,但基本的操作还是具备的

更多的关于BasicExcel操作方式,还要你自己去看看文档

  • 20
    点赞
  • 179
    收藏
    觉得还不错? 一键收藏
  • 17
    评论
BasicExcel一个开源的C++库,用于读写Microsoft Excel文件(xls格式)。这个库具有简单、轻量、易于使用的特点。它不依赖于任何其他库,可以方便地集成到任何C++项目中。 BasicExcel的源码结构清晰,主要包括以下几个部分: 1. BasicExcel.h:这是库的主要头文件,包含了主要的类和函数的声明。 2. BasicExcel.cpp:这是库的主要源文件,包含了类和函数的实现。它实现了与Excel文件的读写操作相关的功能,如打开文件、读取单元格数据、写入数据等。 3. ExcelFormat.h:这是一个辅助头文件,定义了一些与Excel文件格式相关的常量和结构体。 4. ExcelFormat.cpp:这是一个辅助源文件,实现了一些与Excel文件格式相关的功能,如区分数据类型、处理字符串、解析Excel文件的存储结构等。 5. example.cpp:这是一个示例文件,演示了如何使用BasicExcel库进行Excel文件读写操作的基本步骤。 BasicExcel的源码使用了面向对象的设计思想,通过封装、继承和多态等方式,提供了简洁的接口来实现对Excel文件的读写操作。它提供了一些常用的功能,如创建新的Excel文件、打开现有的Excel文件、读取单元格数据、写入数据等。 在使用BasicExcel时,我们只需要包含相应的头文件,并将源文件进行编译连接即可。使用BasicExcel库可以方便地读取、修改和生成Excel文件,为Excel文件的读写提供了一种简单、快速和可靠的解决方案

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 17
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值