源程序:http://www.codeproject.com/KB/office/BasicExcel.aspx
Using the code
I should give a list of the functions in the three classes which you should know to use BasicExcel
. This will be followed by a sample code.
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(constwchar_t* name) |
Get a pointer to an Excel worksheet that has given Unicode name. Returns 0 if there is no Excel worksheet with the given name. |
BasicExcelWorksheet* AddWorksheet(intsheetIndex=-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 from0 . Worksheet is added to the last position if sheetIndex == -1 . Returns a pointer to the worksheet if successful, 0 if otherwise. |
BasicExcelWorksheet* AddWorksheet(constwchar_t* name, intsheetIndex=-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. |
boolDeleteWorksheet(size_t sheetIndex) |
Delete an Excel worksheet at the given index. Index starts from 0 . Returns true if successful, false if otherwise. |
bool DeleteWorksheet(constchar* name) |
Delete an Excel worksheet that has given ANSI name. Returns true if successful,false if otherwise. |
bool DeleteWorksheet(constwchar_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 . Returns false 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. Returns false if name is in ANSI format. |
boolRenameWorksheet(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. |
boolRenameWorksheet(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(constchar* 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(constwchar_t* from, constwchar_t* to) |
Rename an Excel worksheet that has given Unicode name to another Unicode name. Returns true if successful, false if otherwise. |
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. |
boolGetSheetName(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(constwchar_t* to) |
Rename current Excel worksheet to another Unicode name. Returns true if successful, false if otherwise. |
void Print(ostream& os,char delimiter=',', chartextQualifier='\0') |
Print entire worksheet to an output stream, separating each column with the defined delimiter and enclosing text using the defined textQualifier . Leave out thetextQualifier 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. |
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 an integer . |
bool Get(double& val) const |
Get a double value. Returns false if cell does not contain a double . |
bool Get(char* str) const |
Get an ANSI string. Returns false if cell does not contain an ANSI string . |
bool Get(wchar_t* str) const |
Get an Unicode string. Returns false if cell does not contain an Unicodestring . |
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 an integer . |
double GetDouble() const |
Get a double value. Returns 0 .<code>0 if cell does not contain a double . |
const char* GetString() const |
Get an ANSI string . Returns 0 if cell does not contain an ANSI string . |
const wchar_t* GetWString() const |
Get an Unicode string . Returns 0 if cell does not contain an Unicodestring . |
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());
//中文处理如下:
wchar_t *pUnicode = const_cast<wchar_t*>(cell->GetWString()); size_t len = wcslen(pUnicode); char *buf = new char[2*len+1]; memset(buf,0,2*len+1); WideCharToMultiByte(CP_ACP,0,pUnicode,-1,buf,2*len+1,NULL,NULL); printf("%10s",buf); delete [] buf; 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)->SetWString(L"中文"); 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 contents e.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; }