//.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; }
libxl创建实例
最新推荐文章于 2024-07-22 12:52:36 发布