basicexcel基本使用
来源:互联网 发布:单片机时钟频率与定时 编辑:程序博客网 时间:2024/06/05 18:42
BasicExcel的使用
链接:http://www.codeproject.com/Articles/13852/BasicExcel-A-Class-to-Read-and-Write-to-Microsoft
参考:OpenOffice's Excel file format (http://sc.openoffice.org/excelfileformat.pdf)
一个用STL C++写的读写Excel文件的类,是CSpreadSheet作者封装的,与CSpreadSheet的区别:不依赖ODBC,而CSpreadSheet依赖ODBC,需要MFC库的支持,不能跨平台。
BasicExcel的限制:
1)不支持格式化;
2)不支持公式;
3)不支持图表;
4)不支持Unicode UTF-32;
5)中文支持不好;
class BasicExcel
void New(int sheets=3)
创建一个新工作薄,默认3张工作表
bool Load(const char* filename)
载入一个已存在的工作薄文件bool Save()
保存当前工作薄到已载入文件
bool SaveAs(const char* filename)
保存当前工作薄到一个新文件
size_t GetTotalWorkSheets()
获取当前工作薄的工作表数目
BasicExcelWorksheet* GetWorksheet(size_t sheetIndex)
BasicExcelWorksheet* GetWorksheet(const char* name)
BasicExcelWorksheet* GetWorksheet(const wchar_t* name)
获取指定索引的工作表对象,索引从0开始,索引无效则返回值为NULL
获取指定名称的工作表对象,名称无效则返回值为NULL
BasicExcelWorksheet* AddWorksheet(int sheetIndex=-1)
BasicExcelWorksheet* AddWorksheet(const char* name, int sheetIndex=-1)
BasicExcelWorksheet* AddWorksheet(const wchar_t* name, int sheetIndex=-1)
添加指定索引的工作表,名称默认为SheetX,X从1开始,如果sheetIndex==-1,则默认添加到最后一个位置
添加指定名称和索引的工作表,如果sheetIndex==-1,则默认添加到最后一个位置
bool DeleteWorksheet(size_t sheetIndex)
bool DeleteWorksheet(const char* name)
bool DeleteWorksheet(const wchar_t* name)
删除指定索引或名称的工作表char* GetAnsiSheetName(size_t sheetIndex)
wchar_t* GetUnicodeSheetName(size_t sheetIndex)
bool GetSheetName(size_t sheetIndex, char* name)
bool GetSheetName(size_t sheetIndex, wchar_t* name)
获取指定索引的工作表名称
bool RenameWorksheet(size_t sheetIndex, const char* to)
bool RenameWorksheet(size_t sheetIndex, const wchar_t* to)
bool RenameWorksheet(const char* from, const char* to)
bool RenameWorksheet(const wchar_t* from, const wchar_t* to)
重命名指定索引或名称的工作表
class BasicExcelWorksheet
char* GetAnsiSheetName()
wchar_t* GetUnicodeSheetName()
bool GetSheetName(char* name)
bool GetSheetName(wchar_t* name)
获取当前工作表的名称
bool Rename(const char* to)
bool Rename(const wchar_t* to)
重命名当前工作表
void Print(ostream& os, char delimiter=',', char textQualifier='\0')
输出整张工作表到指定输出流,指定列分隔字符和文本限定符
指定列分隔符为','和文本限定符为'\"',该函数可以用来保存当前工作表为CSV格式
size_t GetTotalRows()
获取当前工作表的总行数
size_t GetTotalCols()
获取当前工作表的总列数
BasicExcelCell* Cell(size_t row, size_t col)
获取指定行、列的单元格对象,行、列值从0开始,如果行值超过65535或者列值超过255则返回NULL
bool EraseCell(size_t row, size_t col)
清空指定行、列的单元格对象的内容
class BasicExcelCell
int Type() const
获取单元格值类型,包括以下值:
UNDEFINED
,INT
,DOUBLE
,STRING
,WSTRING
bool Get(int& val) const
bool Get(double& val) const
bool Get(char* str) const
bool Get(wchar_t* str) const
从当前单元格获取指定类型的内容
size_t GetStringLength()
获取当前单元格字符串长度
int GetInteger() const
double GetDouble() const
const char* GetString() const
const wchar_t* GetWString() const
从当前单元格获取指定类型的内容
ostream& operator<<(ostream& os, const BasicExcelCell& cell)
输出当前单元格内容到输出流中
void Set(int val)
void Set(double val)
void Set(const char* str)
void Set(const wchar_t* str)
输出指定格式的内容到当前单元格void SetInteger(int val)
void SetDouble(double val)
void SetString(const char* str)
void SetWString(const wchar_t* str)
输出指定格式的内容到当前单元格
void EraseContents()
清空当前单元格的内容示例代码:在Qt线程中递归遍历文件夹中文件后将文件名和文件大小写入Excel表格
main.cpp
1 #include <QtCore/QCoreApplication> 2 #include "mythread.h" 3 4 int main(int argc, char *argv[]) 5 { 6 QCoreApplication a(argc, argv); 7 8 MyThread mythread; 9 mythread.setCurrentDirectory(QString("C:/Program Files/360"));10 mythread.setStart();11 12 return a.exec();13 }
mythread.h
1 #ifndef MY_THREAD_H 2 #define MY_THREAD_H 3 4 5 #include <QThread> 6 #include <QMutex> 7 #include <QWaitCondition> 8 9 #include "BasicExcel.h"10 11 using namespace YExcel;12 13 class MyThread : public QThread14 {15 Q_OBJECT16 17 public:18 MyThread();19 ~MyThread();20 21 void setStart();22 void setCurrentDirectory(QString strCurrentDirectory);23 void recursiveTraverseDir(QString dirString);24 25 protected:26 void run();27 28 29 private:30 void ExportToExcel();31 32 private:33 bool bRunning;34 QWaitCondition waitRunning;35 QMutex mutex;36 37 QString strCurrentDirectory;38 QString strFileName;39 int iFileSize;40 41 BasicExcel beObject;42 BasicExcelWorksheet* bewCurrentSheet;43 BasicExcelCell* becCurrentCell;44 char strCurrentSheet[8];45 int iCurrentRow;46 int iSheetIndex;47 };48 49 #endif // MY_THREAD_H
mythread.cpp
1 #include <QDir> 2 #include <QFileInfo> 3 #include <Qt> 4 #include <QtGlobal> 5 #include <QtCore/qmath.h> 6 #include "mythread.h" 7 8 MyThread::MyThread() 9 { 10 bRunning = false; 11 12 beObject.New(); 13 bewCurrentSheet = beObject.GetWorksheet("Sheet1"); 14 iCurrentRow = 0; 15 iSheetIndex = 1; 16 17 start(); 18 } 19 20 MyThread::~MyThread() 21 { 22 wait(); 23 } 24 25 void MyThread::setStart() 26 { 27 QMutexLocker locker(&mutex); 28 this->bRunning = true; 29 waitRunning.wakeOne(); 30 } 31 32 void MyThread::setCurrentDirectory(QString strCurrentDirectory) 33 { 34 QMutexLocker locker(&mutex); 35 this->strCurrentDirectory = strCurrentDirectory; 36 } 37 38 void MyThread::run() 39 { 40 forever 41 { 42 { 43 QMutexLocker locker(&mutex); 44 if(!bRunning) 45 { 46 waitRunning.wait(&mutex); 47 } 48 } 49 50 recursiveTraverseDir(strCurrentDirectory); 51 beObject.SaveAs("example.xls"); 52 53 { 54 QMutexLocker locker(&mutex); 55 if(bRunning) 56 { 57 bRunning = false; 58 } 59 } 60 } 61 62 } 63 64 void MyThread::recursiveTraverseDir(QString dirString) 65 { 66 QDir dir(dirString); 67 if (!dir.exists()) 68 { 69 return; 70 } 71 72 dir.setFilter(QDir::Dirs | QDir::Files); 73 dir.setSorting(QDir::DirsFirst); 74 75 QFileInfoList fileInfolist = dir.entryInfoList(); 76 77 int i = 0; 78 bool bIsDir; 79 QFileInfo fileInfo; 80 81 do{ 82 fileInfo = fileInfolist.at(i); 83 if(fileInfo.fileName() == "." | fileInfo.fileName() == "..") 84 { 85 i++; 86 continue; 87 } 88 89 bIsDir = fileInfo.isDir(); 90 if (bIsDir) 91 { 92 recursiveTraverseDir(fileInfo.filePath()); 93 } 94 else 95 { 96 strFileName = fileInfo.fileName(); 97 iFileSize = qCeil((fileInfo.size()) / 1024); 98 99 cout << strFileName.toLatin1().data() << "\t\t" << iFileSize << endl;100 101 ExportToExcel();102 }103 104 msleep(50);105 i++;106 107 }while(i < fileInfolist.size());108 }109 110 void MyThread::ExportToExcel()111 {112 if(bewCurrentSheet)113 {114 becCurrentCell = bewCurrentSheet->Cell(iCurrentRow, 0);115 becCurrentCell->SetString(strFileName.toLatin1().data());116 117 becCurrentCell = bewCurrentSheet->Cell(iCurrentRow, 1);118 becCurrentCell->SetInteger(iFileSize);119 120 iCurrentRow++;121 }122 }
执行结果:
阅读全文
0 0
- basicexcel基本使用
- basicexcel 使用
- 使用BasicExcel操作Excel
- BasicExcel
- basicexcel
- QT下BasicExcel库的初步使用
- QT下BasicExcel库的初步使用
- MFC中使用BasicExcel外部类
- QT下使用BasicExcel 并支持中文
- BasicExcel 对Excel 的操作使用
- [用C++链接Excel,使用BasicExcel库文件]
- CSpreadsheet basicexcel
- BasicExcel说明文档
- BasicExcel 中文路径问题
- Excel操作类-CSpreadSheet and BasicExcel
- BasicExcel使用方法,VC读取Excel方法
- Excel操作类-CSpreadSheet and BasicExcel
- BasicExcel另存为中文文件名出错的解决
- HDU 1074 Doing Homework(状压dp+记录路径)
- Excel地图插件v1.2版本发布
- /etc/ld.so.conf文件
- 四大组件contentProvider短信数据库xml的编写(query()各参数含义)
- 2016 年最受欢迎的编程语言是什么?
- basicexcel基本使用
- latex 处理表格/复杂表格
- 逻辑回归(Logistic Regression)
- 编写一个学生类Students,该类成员变量包括学号no、姓名name、性别sex和年龄age,该类的成员方法有genNo()getName ).
- 求和
- npm介绍及基本操作
- 一起来学习Mybatis(二)-初始化配置分析
- JVM之内存模型与线程
- 前端开发:菜单栏的收缩问题