C++中利用libxl操作Excel表格
libxl是一款操作excel的商业库,支持C、C++、C#和Delphi。下文利用libxl在C++中实现了从excel文档的表1中随机挑选记录,保存到新建的表中。以下为代码:
#include <iostream>
#include <Windows.h>
#include <conio.h>
#include <stdlib.h>
#include <time.h>
#include <vector>
#include "libxl.h"
#define MaxRandomCount 745;
#define MaxCol 40
using namespace libxl;
using namespace std;
bool copyCellToDestination(Sheet* srcSheet,int srcRow, int srcCol, Sheet* dstSheet, int dstRow, int dstCol);
int main()
{
const wchar_t* filename = L"D:\\WORKSTATION\\DATA\\图像分类实验\\ydexcel\\bmtYD.xls";
cout<<"program started successfully!"<<endl;
cout<<"started to generate random index..."<<endl;
//generate random index
vector<unsigned> vec;
vector<unsigned>::iterator it;
while(vec.size() < 400)
{
unsigned index = rand()%MaxRandomCount;
bool isExists = false;
for( it = vec.begin(); it != vec.end(); it++)
{
if(index == *it)
{
isExists = true;
break;
}
}
if(isExists) continue;
cout<<index<<"\t";
vec.push_back(index);
}
//operate excel file
Book* book = xlCreateBook();
if(!book) return 1;
if(!book->load(filename)) return 1;
int count = book->sheetCount();
Sheet* dstSheet = book->addSheet(L"selected");
if( !dstSheet)
{
cout<<"create new sheet failed, program is shutting down"<<endl;
return 1;
}
cout<<"create new sheet successful!"<<endl;
//get original sheet and destination sheet
Sheet* oriSheet = book->getSheet(0);
if(!oriSheet || !dstSheet)
{
cout<<"open sheet faild!"<<endl;
return 1;
}
//travel the whole vector
int dstRow = 1;
for(it=vec.begin(); it!=vec.end();it++)
{
for(int col = 0; col < MaxCol; col++)
{
//copy selected data to new sheet
if(!copyCellToDestination(oriSheet,*it, col, dstSheet, dstRow, col))
{
cout<<"fatal error occured when copy selected data in original sheet to destination sheet"
"program will ended! "<<endl;
return 1;
}
}
dstRow++;
}
book->save(L"C:\\Users\\Administrator\\Desktop\\result.xls");
system("pause");
return 0;
}
bool copyCellToDestination(Sheet* srcSheet,int srcRow, int srcCol, Sheet* dstSheet, int dstRow, int dstCol)
{
Format* format = srcSheet->cellFormat(srcRow, srcCol);
CellType type = srcSheet->cellType(srcRow, srcCol);
switch (type)
{
case CELLTYPE_BLANK:
{
if(!dstSheet->writeBlank(dstRow, dstCol,format)) return false;
break;
}
case CELLTYPE_EMPTY:
break;
case CELLTYPE_ERROR:
{
if(!dstSheet->writeStr(dstRow, dstCol, L"error", format)) return false;
break;
}
case CELLTYPE_BOOLEAN:
{
if(!dstSheet->writeBool(dstRow, dstCol, srcSheet->readBool(srcRow,srcCol,&format))) return false;
break;
}
case CELLTYPE_NUMBER:
{
double value = srcSheet->readNum(srcRow, srcCol, &format);
bool isSuccessed = dstSheet->writeNum(dstRow, dstCol, value);
if(!isSuccessed) return false;
break;
}
case CELLTYPE_STRING:
{
if (!dstSheet->writeStr(dstRow, dstCol, srcSheet->readStr(srcRow, srcCol,&format))) return false;
break;
}
default:
{
return false;
break;
}
}
return true;
}
以上是实现功能的代码,经过实际运行,可以实现相应的效果,但是由于libxl试用版的限制,只能处理部分数据。网上有破解版的libxl库,要想达到完全的效果可以去网上搜搜。
C++中利用libxl操作Excel表格的更多相关文章
- Python 利用Python操作excel表格之openyxl介绍Part2
利用Python操作excel表格之openyxl介绍 by:授客 QQ:1033553122 欢迎加入全国软件测试交流qq群(群号:7156436) ## 绘图 c = LineChart() ...
- Python 利用Python操作excel表格之openyxl介绍Part1
利用Python操作excel表格之openyxl介绍 by:授客 QQ:1033553122 欢迎加入全国软件测试交流qq群(群号:7156436),免费获取以下性能监控工具(类似Nmon精简版) ...
- Python 利用Python操作excel表格之xlwt介绍
利用Python操作excel表格之xlwt介绍 by:授客 QQ:1033553122 直接上代码 案例1 #!/usr/bin/env python # -*- coding:utf-8 ...
- Visual Studio 2010利用libxl读写excel表格数据
C++读写数据,一般通过txt文件,但是随着数据量的增大,采集数据时运用excel表格的优势得以逐步体现.本文主要介绍一下运用第三方库libxl,对excel表格数据进行读写.分为三个部分,第一部分是 ...
- 用NPOI、C#操作Excel表格生成班级成绩单
在C#中利用NPOI操作Excel表格非常方便,几乎上支持所有的Excel表格本身所有的功能,如字体设置.颜色设置.单元格合并.数值计算.页眉页脚等等. 这里准备使用NPOI生成一个班级成绩单Exce ...
- php中使用PHPExcel操作excel(xls)文件
读取中文的xls.csv文件会有问题,网上找了下资料,发现PHPExcel类库好用,官网地址:http://phpexcel.codeplex.com/ 1.读取xls文件内容 代码如下 复制代码 ...
- 【转】python操作excel表格(xlrd/xlwt)
[转]python操作excel表格(xlrd/xlwt) 最近遇到一个情景,就是定期生成并发送服务器使用情况报表,按照不同维度统计,涉及python对excel的操作,上网搜罗了一番,大多大同小异, ...
- 转载:python操作excel表格(xlrd/xlwt)
python操作excel表格(xlrd/xlwt) 最近遇到一个情景,就是定期生成并发送服务器使用情况报表,按照不同维度统计,涉及python对excel的操作,上网搜罗了一番,大多大同小异,而 ...
- C#开发中使用Npoi操作excel实例代码
C#开发中使用Npoi操作excel实例代码 出处:西西整理 作者:西西 日期:2012/11/16 9:35:50 [大 中 小] 评论: 0 | 我要发表看法 Npoi 是什么? 1.整个Exce ...
随机推荐
- js与webview 常用交互代码
常用js交互 css常用参数::: 是否允许用户选择元素的内容,选择值包括: auto:用户可以选择元素内的内容 none:用户不能选择任何内容 text:用户只能选择元素内的 ...
- 转载收藏之用 - 微信公众平台开发教程(五):使用Senparc.Weixin.MP SDK
Senparc.Weixin.MP SDK已经涵盖了微信5.0的所有公共API,以及2013年10月29日升级之后大部分实用的接口. 整个项目的源代码以及已经编译好的程序集可以在这个项目中获取到:ht ...
- dwz分页实现分析
dwz给我们提供了一个很好的列表UI 我对它的分析后将页面分为四个部分 <form id="pagerForm" method="post" action ...
- cf D. Alternating Current
http://codeforces.com/contest/344/problem/D #include <cstdio> #include <cstring> #includ ...
- [置顶] Android EditText/TextView使用SpannableString显示复合文本
在Android中EditText用于编辑文本,TextView用于显示文本,但是有时候我们需要对其中的文本进行样式等方面的设置.Android为我们提供了SpannableString类来对指定文本 ...
- voijs1883 月光的魔法
背景 影几欺哄了众生了天以外——月儿何曾圆缺 描述 有些东西就如同月光的魔法一般. Luke是爱着vijos的.他想为自己心爱的东西画些什么. 就画N个圆吧.把它们的圆心都固定在x轴上. 圆与圆.为了 ...
- poj1363
堆栈的模拟,给定序列,1,2,3,4,...判断堆栈出栈顺序是否合法 5 //5个数入栈1 2 3 4 5 //出栈顺序5 4 1 2 3 //出栈顺序0 //5个数的结束6 //6个数的入栈6 5 ...
- OpenStack Mixture HypervisorsDriver configure and implementation theory
通过本文,您将可以了解在 OpenStack 中如何进行混合 Hypervisor 的配置及其实现原理的基本分析.本文主要结合作者在 Nova 中的实际开发经验对 OpenStack 中混合 Hype ...
- 《Java程序员面试笔试宝典》之为什么需要public static void main(String[] args)这个方法
public staticvoid main(String[] args)为Java程序的入口方法,JVM在运行程序的时候,会首先查找main方法.其中,public是权限修饰符,表明任何类或对象都可 ...
- python高级编程 编写一个包1
#目的是:编写,发行python包可重复过程"""1:是缩短开始真正工作之前所需要的设置时间,也就是提供模板2:提供编写包的标准化方法3:简化测试驱动开发方法的使用4:为 ...