摘要:这个类是国外人写的一个操作Excel类,应该说比较好用,虽然对中文的支持不够好,但经过转码后使用起来还是非常不错的。下给大家介绍一下:

此类总共包含4个类文件分别是:BasicExcel.hpp,BasicExcel.cpp,ExcelFormat.h,ExcelFormat.cpp前两个是操作Excel文件的,后两个是设置Excel单元格相关格式的等等。类文件下载路径及使用Demo链接如下:(http://shell.franken.de/svn/sky/excel/trunk/ExcelFormat/)

下面部分是引用CodeProject网站的使用说明和例子程序:

class BasicExcel

void New(int sheets=3) Create a new Excel workbook with a given number of spreadsheets (Minimum 1).
bool Load(const char* filename) Load an Excel workbook from a file.
bool Save() Save current Excel workbook to opened file.
bool SaveAs(const char* filename) Save current Excel workbook to a file.
size_t GetTotalWorkSheets() Total number of Excel worksheets in current Excel workbook.
BasicExcelWorksheet* GetWorksheet(size_t sheetIndex) Get a pointer to an Excel worksheet at the given index. Index starts from 0. Returns if index is invalid.
BasicExcelWorksheet* GetWorksheet(const char* name) Get a pointer to an Excel worksheet that has given ANSI name. Returns if there is no Excel worksheet with the given name.
BasicExcelWorksheet* GetWorksheet(const wchar_t* name) Get a pointer to an Excel worksheet that has given Unicode name. Returnsif there is no Excel worksheet with the given name.
BasicExcelWorksheet* AddWorksheet(int sheetIndex=-1) Add a new Excel worksheet to the given index. Name given to worksheet is SheetX, where X is a number which starts from 1. Index starts from 0. Worksheet is added to the last position if sheetIndex == -1. Returns a pointer to the worksheet if successful, if otherwise.
BasicExcelWorksheet* AddWorksheet(const char* name, int sheetIndex=-1) Add a new Excel worksheet with given ANSI name to the given index. Index starts from 0. Worksheet is added to the last position if sheetIndex == -1. Returns a pointer to the worksheet if successful, 0 if otherwise.
BasicExcelWorksheet* AddWorksheet(const wchar_t* name, int sheetIndex=-1) Add a new Excel worksheet with given Unicode name to the given index. Index starts from 0. Worksheet is added to the last position if sheetIndex == -1. Returns a pointer to the worksheet if successful, 0 if otherwise.
bool DeleteWorksheet(size_t sheetIndex) Delete an Excel worksheet at the given index. Index starts from 0. Returnstrue if successful, false if otherwise.
bool DeleteWorksheet(const char* name) Delete an Excel worksheet that has given ANSI name. Returns true if successful, false if otherwise.
bool DeleteWorksheet(const wchar_t* name) Delete an Excel worksheet that has given Unicode name. Returns true if successful, false if otherwise.
char* GetAnsiSheetName(size_t sheetIndex) Get the worksheet name at the given index. Index starts from 0. Returns 0 if name is in Unicode format.
wchar_t* GetUnicodeSheetName(size_t sheetIndex) Get the worksheet name at the given index. Index starts from 0. Returns 0 if name is in ANSI format.
bool GetSheetName(size_t sheetIndex, char* name) Get the worksheet name at the given index. Index starts from 0. Returnsfalse if name is in Unicode format.
bool GetSheetName(size_t sheetIndex, wchar_t* name) Get the worksheet name at the given index. Index starts from 0. Returnsfalse if name is in ANSI format.
bool RenameWorksheet(size_t sheetIndex, const char* to) Rename an Excel worksheet at the given index to the given ANSI name. Index starts from 0. Returns true if successful, false if otherwise.
bool RenameWorksheet(size_t sheetIndex, const wchar_t* to) Rename an Excel worksheet at the given index to the given Unicode name. Index starts from 0. Returns true if successful, false if otherwise.
bool RenameWorksheet(const char* from, const char* to) Rename an Excel worksheet that has given ANSI name to another ANSI name. Returns true if successful, false if otherwise.
bool RenameWorksheet(const wchar_t* from, const wchar_t* to) Rename an Excel worksheet that has given Unicode name to another Unicode name. Returns true if successful, false if otherwise.

class BasicExcelWorksheet

char* GetAnsiSheetName() Get the current worksheet name. Returns 0 if name is in Unicode format.
wchar_t* GetUnicodeSheetName() Get the current worksheet name. Returns 0 if name is in ANSI format.
bool GetSheetName(char* name) Get the current worksheet name. Returns false if name is in Unicode format.
bool GetSheetName(wchar_t* name) Get the current worksheet name. Returns false if name is in ANSI format.
bool Rename(const char* to) Rename current Excel worksheet to another ANSI name. Returns true if successful, false if otherwise.
bool Rename(const wchar_t* to) Rename current Excel worksheet to another Unicode name. Returns true if successful, false if otherwise.
void Print(ostream& os, char delimiter=',', char textQualifier='\0') Print entire worksheet to an output stream, separating each column with the defined delimiter and enclosing text using the defined textQualifier. Leave out the textQualifier argument if do not wish to have any text qualifiers.
size_t GetTotalRows() Total number of rows in current Excel worksheet.
size_t GetTotalCols() Total number of columns in current Excel worksheet.
BasicExcelCell* Cell(size_t row, size_t col) Return a pointer to an Excel cell. row and col starts from 0. Returns if row exceeds 65535 or col exceeds 255.
bool EraseCell(size_t row, size_t col) Erase content of a cell. row and col starts from 0. Returns true if successful,false if row or col exceeds range.

class BasicExcelCell

int Type() const Get type of value stored in current Excel cell. Returns one of the following enums: UNDEFINEDINTDOUBLESTRINGWSTRING.
bool Get(int& val) const Get an integer value. Returns false if cell does not contain aninteger.
bool Get(double& val) const Get a double value. Returns false if cell does not contain adouble.
bool Get(char* str) const Get an ANSI string. Returns false if cell does not contain an ANSIstring.
bool Get(wchar_t* str) const Get an Unicode string. Returns false if cell does not contain an Unicode string.
size_t GetStringLength() Return length of ANSI or Unicode string (excluding nullcharacter).
int GetInteger() const Get an integer value. Returns 0 if cell does not contain aninteger.
double GetDouble() const Get a double value. Returns 0.<code>0 if cell does not contain adouble.
const char* GetString() const Get an ANSI string. Returns 0 if cell does not contain an ANSIstring.
const wchar_t* GetWString() const Get an Unicode string. Returns 0 if cell does not contain an Unicode string.
ostream& operator<<(ostream& os, const BasicExcelCell& cell) Print cell to output stream. Print a null character if cell is undefined.
void Set(int val) Set content of current Excel cell to an integer.
void Set(double val) Set content of current Excel cell to a double.
void Set(const char* str) Set content of current Excel cell to an ANSI string.
void Set(const wchar_t* str) Set content of current Excel cell to an Unicode string.
void SetInteger(int val) Set content of current Excel cell to an integer.
void SetDouble(double val) Set content of current Excel cell to a double.
void SetString(const char* str) Set content of current Excel cell to an ANSI string.
void SetWString(const wchar_t* str) Set content of current Excel cell to an Unicode string.
void EraseContents() Erase the content of current Excel cell. Set type to UNDEFINED.

例子程序

#include "BasicExcel.hpp"
using namespace YExcel;int main(int argc, char* argv[])
{BasicExcel e;// Load a workbook with one sheet, display its contents and// save into another file.e.Load("example1.xls");BasicExcelWorksheet* sheet1 = e.GetWorksheet("Sheet1");if (sheet1){size_t maxRows = sheet1->GetTotalRows();size_t maxCols = sheet1->GetTotalCols();cout << "Dimension of " << sheet1->GetAnsiSheetName() <<" (" << maxRows << ", " << maxCols << ")" << endl;printf(" ");for (size_t c=0; c<maxCols; ++c) printf("%10d", c+1);cout << endl;for (size_t r=0; r<maxRows; ++r){printf("%10d", r+1);for (size_t c=0; c<maxCols; ++c){BasicExcelCell* cell = sheet1->Cell(r,c);switch (cell->Type()){case BasicExcelCell::UNDEFINED:printf(" ");break;case BasicExcelCell::INT:printf("%10d", cell->GetInteger());break;case BasicExcelCell::DOUBLE:printf("%10.6lf", cell->GetDouble());break;case BasicExcelCell::STRING:printf("%10s", cell->GetString());break;case BasicExcelCell::WSTRING:wprintf(L"%10s", cell->GetWString());break;}}cout << endl;}}cout << endl;e.SaveAs("example2.xls");// Create a new workbook with 2 worksheets and write some contents.e.New(2);e.RenameWorksheet("Sheet1", "Test1");BasicExcelWorksheet* sheet = e.GetWorksheet("Test1");BasicExcelCell* cell;if (sheet){for (size_t c=0; c<4; ++c){cell = sheet->Cell(0,c);cell->Set((int)c);}cell = sheet->Cell(1,3);cell->SetDouble(3.141592654);sheet->Cell(1,4)->SetString("Test str1");sheet->Cell(2,0)->SetString("Test str2");sheet->Cell(2,5)->SetString("Test str1");sheet->Cell(4,0)->SetDouble(1.1);sheet->Cell(4,1)->SetDouble(2.2);sheet->Cell(4,2)->SetDouble(3.3);sheet->Cell(4,3)->SetDouble(4.4);sheet->Cell(4,4)->SetDouble(5.5);sheet->Cell(4,4)->EraseContents();}sheet = e.AddWorksheet("Test2", 1);sheet = e.GetWorksheet(1);if (sheet){sheet->Cell(1,1)->SetDouble(1.1);sheet->Cell(2,2)->SetDouble(2.2);sheet->Cell(3,3)->SetDouble(3.3);sheet->Cell(4,4)->SetDouble(4.4);sheet->Cell(70,2)->SetDouble(5.5);}e.SaveAs("example3.xls");// Load the newly created sheet and display its contentse.Load("example3.xls");size_t maxSheets = e.GetTotalWorkSheets();cout << "Total number of worksheets: " << e.GetTotalWorkSheets() << endl;for (size_t i=0; i<maxSheets; ++i){BasicExcelWorksheet* sheet = e.GetWorksheet(i);if (sheet){size_t maxRows = sheet->GetTotalRows();size_t maxCols = sheet->GetTotalCols();cout << "Dimension of " << sheet->GetAnsiSheetName() <<" (" << maxRows << ", " << maxCols << ")" << endl;if (maxRows>0){printf(" ");for (size_t c=0; c<maxCols; ++c) printf("%10d", c+1);cout << endl;}for (size_t r=0; r<maxRows; ++r){printf("%10d", r+1);for (size_t c=0; c<maxCols; ++c){cout << setw(10) << *(sheet->Cell(r,c));// Another way of printing a cell content.}cout << endl;}if (i==0){ofstream f("example4.csv");sheet->Print(f, ',', '\"'); // Save the first sheet as a CSV file.f.close();}}cout << endl;}return 0;
}

再看一下我使用在项目的中例子程序哈,用着还不错的:
void CQueryTdZsDlg::ExportData()
{SetCtrlEnableWindow();m_dataProgress.SetPos(0);m_dataProgress.SetStep(1);m_dataProgress.SetRange(0,this->m_ListData.GetItemCount());m_DataNum.SetWindowText(_T(""));int nCurRow = 0;int nCurCol = 0;BasicExcel objExcel;    objExcel.New(1);    BasicExcelWorksheet* pSheet = objExcel.GetWorksheet(0);XLSFormatManager ExlFormat(objExcel);CellFormat celFormat(ExlFormat);ExcelFont  celFont;celFont._weight = FW_BOLD; celFont._height = FW_BOLD/2;celFont._name   = _T(L"宋体");celFormat.set_font(celFont);celFormat.set_alignment(EXCEL_HALIGN_CENTRED);BasicExcelCell* pCell = pSheet->Cell(0,0);pCell->SetWString("土地登记发证统计台账");pCell->SetFormat(celFormat);pCell->SetMergedColumns(this->m_ListData.GetHeaderCtrl()->GetItemCount());pCell->SetMergedRows(2);nCurRow = 2;celFont._weight = FW_BOLD;celFont._height = FW_BOLD/3;celFont._name    = _T(L"宋体");celFormat.set_font(celFont);celFormat.set_alignment(EXCEL_HALIGN_CENTRED);   for(int nCol  = 0 ; nCol != this->m_ListData.GetHeaderCtrl()->GetItemCount() ; ++nCol){HDITEM hdi;TCHAR lpBuffer[256]={0};hdi.mask       = HDI_TEXT;hdi.pszText     = lpBuffer;hdi.cchTextMax  = 255;this->m_ListData.GetHeaderCtrl()->GetItem(nCol,&hdi);switch(nCol){case 0:pSheet->SetColWidth(nCol,7000/3);break;case 1:pSheet->SetColWidth(nCol,25000/4);break;case 2:pSheet->SetColWidth(nCol,20000/4);break;case 3:pSheet->SetColWidth(nCol,47000/4);break;case 4:pSheet->SetColWidth(nCol,32000/5);break;case 5:pSheet->SetColWidth(nCol,39000/4);break;case 6:case 7:case 8:case 9:          case 10:pSheet->SetColWidth(nCol,16000/4);break;default:pSheet->SetColWidth(nCol,16000/4);break;}pCell = pSheet->Cell(nCurRow,nCol);pCell->SetWString(hdi.pszText);    pCell->SetFormat(celFormat);}++nCurRow;celFont._weight = FW_NORMAL;celFont._name  = _T(L"宋体"); celFormat.set_font(celFont);celFormat.set_alignment(EXCEL_HALIGN_CENTRED);celFormat.set_format_string(XLS_FORMAT_TEXT);for(int nRow = 0 ; nRow != this->m_ListData.GetItemCount() ; ++nRow){for(int nCol = 0 ; nCol != this->m_ListData.GetHeaderCtrl()->GetItemCount() ; ++nCol){         pCell = pSheet->Cell(nCurRow+nRow,nCol);pCell->SetWString(this->m_ListData.GetItemText(nRow,nCol));          pCell->SetFormat(celFormat);}m_dataProgress.SetPos(nRow+1);CString sTemp(_T(""));sTemp.Format(_T("%d/%d 正在导出"),nRow+1,this->m_ListData.GetItemCount());m_DataNum.SetWindowText(sTemp);}CString sFileName(_T("土地登记发证统计台账.xls"));size_t length = MultiByteToWideChar(CP_ACP,MB_COMPOSITE,sFileName,-1,NULL,0);if(length > 0){wchar_t* pUnicode = new wchar_t[length+1];memset(pUnicode,0,(length+1)*sizeof(wchar_t)); MultiByteToWideChar(CP_ACP,MB_COMPOSITE,sFileName,-1,(LPWSTR)pUnicode,length);objExcel.SaveAs(pUnicode);delete[] pUnicode;}//ShellExecute(0,"open",sFileName, NULL, NULL, SW_NORMAL);SetCtrlEnableWindow();CString sTemp(_T(""));sTemp.Format(_T("%d/%d 导出完成!"),this->m_ListData.GetItemCount(),this->m_ListData.GetItemCount());m_DataNum.SetWindowText(sTemp);
}
												

使用BasicExcel操作Excel相关推荐

  1. vc操作excel文件的类:CSpreadSheet,basicexcel

    由于工作需要,需要在excel和mysql数据库之间互相交换数据,于是在网上搜索了一下用vc如何操作excel,基本上有三种实现方式,一种是利用odbc,一种是使用微软的automation技术,一种 ...

  2. C++操作Excel学习笔记

    C++操作Excel学习笔记 一: [当前博文转载自http://blog.csdn.net/fullsail/article/details/4067416] C++读取Excel文件方式比较 C+ ...

  3. python excel操作单元格_python 操作excel表格的方法

    说明:由于公司oa暂缺,人事妹子在做考勤的时候,需要通过几个excel表格去交叉比对员工是否有旷工或迟到,工作量大而且容易出错. 这时候it屌丝的机会来啦,花了一天时间给妹子撸了一个自动化脚本. 1. ...

  4. C#在客户端和服务端操作Excel文件

    一.在客户端把数据导入到Excel文件步骤 1.创建Excel application对象,打开或生成Excel文件 //服务端创建StringBuilder对象     System.Text.St ...

  5. C#如何在Form中嵌入并且操作Excel表格

    网上比较多讲述如何操作excel表的文章,但都是启动excel的窗口来打开excel数据文件.有时候需要把excel表嵌入到自己程序的form中,给客户一个不用切换窗口的操作界面,似乎更好.这在vc中 ...

  6. c#操作Excel整理总结

    大家好,这是我在工作中总结的关于C#操作Excel的帮助类,欢迎大家批评指正! using System; using System.Collections.Generic; using System ...

  7. C#操作excel(多种方法比较)

    我们在做excel资料的时候,通常有以下方法. 一.导入导出excel常用方法: 1.用查询表的方式查询并show在数据集控件上. 代码 public static string strCon = & ...

  8. python连接excel存放数据_有了这篇python操作Excel学习笔记,以后储存数据 办公很轻松!...

    最近在做一些数据处理和计算的工作,因为数据是以.csv格式保存的,因此刚开始直接用Excel来处理.但是做着做着发现重复的劳动其实并没有多大的意义,于是就想着写个小工具帮着处理.以前正好在一本书上看到 ...

  9. openpyxl 操作 Excel表的格基本用法

    在本教程中,将Python3和openpyxl库一起使用来操作 Excel 表格. 本文将介绍如下操作: 如何在内存中创建工作簿 如何从工作簿中检索.创建.复制.移动和删除工作表 如何从文件创建工作簿 ...

最新文章

  1. JSP简单标签带属性开发
  2. ORACLE数据库对比表结构
  3. 5G时代下,边缘计算产品的未来展望
  4. 凝血酶分子机器人_了不得!这个机器人可以拟制癌细胞生长
  5. PHP学习方向-进阶2(三) 1
  6. 大众伪原创软件 支持外链引蜘蛛 全自动操作
  7. golang mysql条件查询_mysql – 将变量传递给GoLang查询
  8. 使用kubectl访问Kubernetes集群时的身份验证和授权
  9. java构造方法编写_Java开发 Debug运行+类的编写+构造方法+方法重载+this【学习篇6】...
  10. php教程 TTP中GET与POST的区别
  11. 以python项目为例的Pyinstaller打包详细教程
  12. java前端开发JD
  13. 阿里云主要产品及功能介绍,阿里云产品分为6大分类:云计算基础/安全/大数据/人工智能/企业应用/物联网...
  14. 面试必问JavaScript基础面试题(附答案详解)
  15. 云pos系统的服务器性能,实施云POS系统的五大优势
  16. 如何确保数据的准确性
  17. 批量压缩图片软件 JAVA
  18. LoRa 扩频因子和码片
  19. Execl中进行时间相加,对时间求和的公式:
  20. java中如何添加画板背景图,在AI中怎么把已知图片在新建画板时候作为画板的背景来建立画板啊!...

热门文章

  1. 学Java的四天(在入土的边缘疯狂试探。。。)
  2. 大时代、10000小时定律和徐霞客
  3. zstuoj 4246 萌新吃果果
  4. [BZOJ4246]两个人的星座(计算几何)
  5. 8位数字的正则表达式
  6. 编程之类的文案_精选50句文案,个个都是让你灵感喷涌的句子!
  7. 对话月薪10万的技术老兵:技术人如何开心工作、快乐赚钱?
  8. 【历史上的今天】7 月 15 日:Mozilla 基金会正式成立;Enigma 密码机的首次工作;任天堂推出 FC 游戏机
  9. 【土旦】vue项目中 使用 pako.js 解密 gzip加密字符串
  10. OpenGL-入门-绘制点线面