前言:
一年前在學數據庫的時候,有個想法,就是怎麼用代碼來讀取excel的數據;爲此,我曾請教Boss Liu,Boss Liu指點說OpenSource裏有我要的東西。由於一些小事情,耽擱了,結果這個想法就over了;沒想到,現在我需要用上;既然如此,那我得好好學學。在此我要感謝Boss Liu的指導,否則對於這問題,我估計現在也不知道怎麼解決;
正題:
BasicExcel
1.設計者:新加坡人Yap Chun Wei;
2.基本的功能(對excel裏的sheet進行的操作):
1)Read and write number (integers, real numbers) and strings (ANSI, UTF16)
2)Add worksheets
3)Rename worksheets
4)Delete worksheets
5)Get the name of a worksheet
3.優點:
1)採用com方式實現,訪問速度快,api接口也比較簡單
2)可以跨平臺使用
4.一些操作(讀取操作)的具體實現
1)prepare:
下載BasicExcel;說明:該包裏面有四個文件,由於演示程序不是沒用MFC,所以只需要將BasicExcel.hpp與BasicExcel.cpp放在你建的工程下面,或者可以將四個文件都放在你自己的類庫中,然後導入;
使用的excel的名字:classification.data.xls
sheet的名字:analysis.data
2)show:
#include "BasicExcel.hpp" // Load a workbook with one sheet, display its contents int main(int argc, char* argv[]) { BasicExcel e; // load excel e.Load("classification.data.xls"); BasicExcelWorksheet* sheet = e.GetWorksheet("analysis.data"); if (sheet){ size_t maxRows = sheet->GetTotalRows(); size_t maxCols = sheet->GetTotalCols(); cout << "Dimension of " << sheet->GetAnsiSheetName() << " (" << maxRows << ", " << maxCols << ")" << endl; for (size_t r = 0; r < maxRows; ++r){ printf("%10d", r+1); for (size_t c = 0; c < maxCols; ++c){ BasicExcelCell* cell = sheet->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; } }else{ printf("cannot read this sheet!\n"); } cout << endl; return 0; }
#include "BasicExcel.hpp" // Create a new workbook and write some contents. int main(int argc, char* argv[]) { BasicExcel e; // create a workbook e.New(); // create a sheet BasicExcelWorksheet* sheet = e.AddWorksheet("analysis.data"); // cell BasicExcelCell* cell; if (sheet){ size_t c; // SetString for (c = 0; c < 4; ++c){ cell = sheet->Cell(0, c); cell->SetString("property"); // sheet->Cell(0,c)->SetInteger("property"); } // SetInteger for (c = 0; c < 4; ++c){ cell = sheet->Cell(1, c); cell->SetInteger(c); // sheet->Cell(1,c)->SetInteger(c); } // SetDouble for (c = 0; c < 4; ++c){ cell = sheet->Cell(2, c); double data = c / 2.0; cell->SetDouble(data); // sheet->Cell(2,c)->SetDouble(data); } } // save to a excel e.SaveAs("classification.data.xls"); return 0; }