使用BasicExcel操作Excel
摘要:这个类是国外人写的一个操作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 0 if index is invalid.
|
BasicExcelWorksheet* GetWorksheet(const char* name)
|
Get a pointer to an Excel worksheet that has given ANSI name. Returns 0 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. Returns0 if 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, 0 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 0 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: UNDEFINED , INT , DOUBLE , STRING , WSTRING .
|
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 null character).
|
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 strin g.
|
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相关推荐
- vc操作excel文件的类:CSpreadSheet,basicexcel
由于工作需要,需要在excel和mysql数据库之间互相交换数据,于是在网上搜索了一下用vc如何操作excel,基本上有三种实现方式,一种是利用odbc,一种是使用微软的automation技术,一种 ...
- C++操作Excel学习笔记
C++操作Excel学习笔记 一: [当前博文转载自http://blog.csdn.net/fullsail/article/details/4067416] C++读取Excel文件方式比较 C+ ...
- python excel操作单元格_python 操作excel表格的方法
说明:由于公司oa暂缺,人事妹子在做考勤的时候,需要通过几个excel表格去交叉比对员工是否有旷工或迟到,工作量大而且容易出错. 这时候it屌丝的机会来啦,花了一天时间给妹子撸了一个自动化脚本. 1. ...
- C#在客户端和服务端操作Excel文件
一.在客户端把数据导入到Excel文件步骤 1.创建Excel application对象,打开或生成Excel文件 //服务端创建StringBuilder对象 System.Text.St ...
- C#如何在Form中嵌入并且操作Excel表格
网上比较多讲述如何操作excel表的文章,但都是启动excel的窗口来打开excel数据文件.有时候需要把excel表嵌入到自己程序的form中,给客户一个不用切换窗口的操作界面,似乎更好.这在vc中 ...
- c#操作Excel整理总结
大家好,这是我在工作中总结的关于C#操作Excel的帮助类,欢迎大家批评指正! using System; using System.Collections.Generic; using System ...
- C#操作excel(多种方法比较)
我们在做excel资料的时候,通常有以下方法. 一.导入导出excel常用方法: 1.用查询表的方式查询并show在数据集控件上. 代码 public static string strCon = & ...
- python连接excel存放数据_有了这篇python操作Excel学习笔记,以后储存数据 办公很轻松!...
最近在做一些数据处理和计算的工作,因为数据是以.csv格式保存的,因此刚开始直接用Excel来处理.但是做着做着发现重复的劳动其实并没有多大的意义,于是就想着写个小工具帮着处理.以前正好在一本书上看到 ...
- openpyxl 操作 Excel表的格基本用法
在本教程中,将Python3和openpyxl库一起使用来操作 Excel 表格. 本文将介绍如下操作: 如何在内存中创建工作簿 如何从工作簿中检索.创建.复制.移动和删除工作表 如何从文件创建工作簿 ...
最新文章
- JSP简单标签带属性开发
- ORACLE数据库对比表结构
- 5G时代下,边缘计算产品的未来展望
- 凝血酶分子机器人_了不得!这个机器人可以拟制癌细胞生长
- PHP学习方向-进阶2(三) 1
- 大众伪原创软件 支持外链引蜘蛛 全自动操作
- golang mysql条件查询_mysql – 将变量传递给GoLang查询
- 使用kubectl访问Kubernetes集群时的身份验证和授权
- java构造方法编写_Java开发 Debug运行+类的编写+构造方法+方法重载+this【学习篇6】...
- php教程 TTP中GET与POST的区别
- 以python项目为例的Pyinstaller打包详细教程
- java前端开发JD
- 阿里云主要产品及功能介绍,阿里云产品分为6大分类:云计算基础/安全/大数据/人工智能/企业应用/物联网...
- 面试必问JavaScript基础面试题(附答案详解)
- 云pos系统的服务器性能,实施云POS系统的五大优势
- 如何确保数据的准确性
- 批量压缩图片软件 JAVA
- LoRa 扩频因子和码片
- Execl中进行时间相加,对时间求和的公式:
- java中如何添加画板背景图,在AI中怎么把已知图片在新建画板时候作为画板的背景来建立画板啊!...
热门文章
- 学Java的四天(在入土的边缘疯狂试探。。。)
- 大时代、10000小时定律和徐霞客
- zstuoj 4246 萌新吃果果
- [BZOJ4246]两个人的星座(计算几何)
- 8位数字的正则表达式
- 编程之类的文案_精选50句文案,个个都是让你灵感喷涌的句子!
- 对话月薪10万的技术老兵:技术人如何开心工作、快乐赚钱?
- 【历史上的今天】7 月 15 日:Mozilla 基金会正式成立;Enigma 密码机的首次工作;任天堂推出 FC 游戏机
- 【土旦】vue项目中 使用 pako.js 解密 gzip加密字符串
- OpenGL-入门-绘制点线面