因为工作的关系,我需要时常操作一下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操作方式,还要你自己去看看文档

技术
下载桌面版
GitHub
Gitee
SourceForge
百度网盘(提取码:draw)
云服务器优惠
华为云优惠券
腾讯云优惠券
阿里云优惠券
Vultr优惠券
站点信息
问题反馈
邮箱:[email protected]
吐槽一下
QQ群:766591547
关注微信