libxl创建实例

//.cpp 头文件
//20170612 LuckyRen
#include <iostream>
#include <windows.h>
#include "libxl.h"
#include <map>
#include "string"
#pragma comment(lib,"libxl.lib")
using namespace libxl;

//测试按钮
void CLibxlTestDlg::OnBnClickedBtnT()
{
	//源文件路径
	CString tPath = _T("C:\\Users\\Desktop\\TT\\正式.xls");
	//目标文件路径
	CString tPath1 = _T("C:\\Users\\Desktop\\TT\\正式1.xls");//向
	//源文件路径

	CString ttPath = _T("C:\\Users\\Desktop\\TT\\正式2.xls");
	//保存路径
	CString SavePath = _T("C:\\Users\\Desktop\\TT\\out.xls");
	//sheet 名称
	CopySheet(tPath, tPath1, SavePath);
	CopySheet(ttPath, SavePath, SavePath);
	//CopySheet(ttPath, tPath1, SavePath);
	//打开Book
	::ShellExecute(NULL, L"open", SavePath, NULL, NULL, SW_SHOW); 

	return ;
}


/*
函数名称:CopySheet()
创建日期:20170622 
功能描述:复制一个Book中的sheet内容到另一个Book中的sheet表中,格式内容不改变
参数描述:srcPath:源Book路径     dstPath:目标Book路径   savePath:保存路径
*/
void CLibxlTestDlg ::CopySheet(CString srcPath, CString dstPath, CString savePath)
{
	//创建源文件book
	libxl::Book* srcBook = xlCreateBook();
	//创建目标book
	libxl::Book* dstBook = xlCreateBook();
	//加载源Book
	srcBook->load(srcPath);
	//获取源book中第一页sheet表
	Sheet* srcSheet = srcBook->getSheet(0);
	//获取源sheet表名称
	CString SheetName = srcSheet->name();
	//加载目标book
	dstBook->load(dstPath);
	//获取目标book中sheet表总个数
	int Index = dstBook->sheetCount();
	CString Name[6];
	for(int i=0; i < Index; i++)
	{//获取目标sheet表名称
		Sheet *dstSheet = dstBook->getSheet(i);
		//获取目标sheet表名称
		CString sheetname = dstSheet->name();	
		Name[i] = dstSheet->name(); 
	}
	//向目标book中已有sheet表的下一个位置添加一个新的sheet表
	//Sheet *dstSheet = dstBook->insertSheet(Index, SheetName);
	//添加一个新的sheet表
	Sheet* dstSheet = dstBook->addSheet(SheetName);
	for(int col = srcSheet->firstCol(); col < srcSheet->lastCol(); ++col)
	{//设置新Sheet表列宽格式
		dstSheet->setCol(col, col, srcSheet->colWidth(col), 0, srcSheet->colHidden(col));
	}
	std::map<Format*, Format*> formats;
	//复制格式
	Format *srcFormat, *dstFormat;
	int rowFirst = 0; //第一行
	int rowLast = 0;  //最后一行
	int colFirst = 0; //第一列
	int colLast = 0;  //最后一列
	for(int row = srcSheet->firstRow(); row < srcSheet->lastRow(); ++row)
	{//源sheet表单元格第一行 到单元格最后一行
		//设置目标Sheet表行高度格式
		dstSheet->setRow(row, srcSheet->rowHeight(row), 0, srcSheet->rowHidden(row));
		//源Sheet表单元格第一列 到单元格最后一列
		for(int col = srcSheet->firstCol(); col < srcSheet->lastCol(); ++col)
		{
			// 复制合并块
			//判断指定的单元是否在合并区域
			if(srcSheet->getMerge(row, col, &rowFirst, &rowLast, &colFirst, &colLast))
			{              
				dstSheet->setMerge(rowFirst, rowLast, colFirst, colLast);              
			}
			srcFormat = srcSheet->cellFormat(row, col);
			if(!srcFormat) 
				continue;

			检查格式
			if(formats.count(srcFormat) == 0)
			{                    
				//没有找到格式,在输出文件中创建它
				
				dstFormat = dstBook->addFormat(srcFormat);
				int count = dstBook->formatSize();

				formats[srcFormat] = dstFormat;
			}
			else
			{// 格式已经创建
				dstFormat = formats[srcFormat];
			}
			复制单元格的值
			CellType ct = srcSheet->cellType(row, col);
			switch(ct)
			{
			case CELLTYPE_NUMBER:
				{
					double value = srcSheet->readNum(row, col, &srcFormat);                         
					dstSheet->writeNum(row, col, value, dstFormat);
					break;
				}
			case CELLTYPE_BOOLEAN:
				{
					bool value = srcSheet->readBool(row, col, &srcFormat);
					dstSheet->writeBool(row, col, value, dstFormat);
					break;
				}
			case CELLTYPE_STRING:
				{
					const wchar_t* s = srcSheet->readStr(row, col, &srcFormat);                
					dstSheet->writeStr(row, col, s, dstFormat);
					break;
				}
			case CELLTYPE_BLANK:                    
				{
					srcSheet->readBlank(row, col, &srcFormat);
					dstSheet->writeBlank(row, col, dstFormat);            
					break;
				}
			case CELLTYPE_EMPTY:
				{
					break;
				}
			}
		}
	}
	formats.clear();
	//保存路径
	dstBook->save(savePath);
	dstBook->release();
	srcBook->release();
	
	return;
}



  
  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值