读书人

c++解析excel的步骤

发布时间: 2012-10-12 10:17:04 作者: rapoo

c++解析excel的方法

一般的脚本都是适合程序猿来操作的,再也没有比excel表格这样强大,且被大多数人广泛接受的脚本配置工具(在我眼中可以看做一个脚本配置工具)


于是我写了一套算法来解析excel表格。得到一个多维数组(vector向量,来获取excel表格中的数据)

解析方法需要用到tinyXml解析工具,对于这个工具不太熟悉的朋友可以看看我之前写过的关于tinyXml工具的入门博客。



下面就是解析方法:

1,在编辑完excel表格后,保存为xml格式就可以了。

vector<vector<string> > HelloWorld::wordVector(const char * xmlName)

{

vector<vector<string> > ivec;

//创建一个XML的文档对象。

TiXmlDocument *myDocument = new TiXmlDocument(CCFileUtils::fullPathFromRelativePath(xmlName));

myDocument->LoadFile();

//获得根元素,即Persons。

TiXmlElement *RootElement = myDocument->RootElement();

//输出根元素名称,即输出Persons。

TiXmlElement * element1 = RootElement->FirstChildElement("Worksheet");

TiXmlElement * element2 = element1->FirstChildElement("Table");

TiXmlElement * element3 = element2->FirstChildElement("Row");

TiXmlElement * memoryRowNodeElement = element3;

while (true)//一共有多少组单词

{

if (memoryRowNodeElement == NULL)

{

break;

}


TiXmlElement * element40;

TiXmlElement * element41 = memoryRowNodeElement->FirstChildElement("Cell");

element40 = element41;

vector<string> tempIvec;

while (true)//一组单词中有多少个元素构成(英文单词,中文解释,记忆方法等)

{

if (element41==NULL)

{

ivec.push_back(tempIvec);

break;

}

TiXmlElement * element42 = element41->FirstChildElement("Data");

TiXmlElement * element43 = element42->FirstChildElement("Font");

if (element43 == NULL)

{

string s1(element42->GetText());

tempIvec.push_back(s1);

// printf("%s\n",s1.c_str());

}

else

{

TiXmlElement * element53 = element42->FirstChildElement("Font");

string s2(element53->GetText());

while (true)

{

TiXmlElement * element54 = element53->NextSiblingElement();

element53 = element54;

if (element54!=NULL)

{

const char* char1 = element54->GetText();

string tempString(char1);

s2 = s2+tempString;

// printf("%d\n",(int)element54);

// printf("%s\n",s2.c_str());

}

else

{

tempIvec.push_back(s2);

break;

}

}

}

element41 = element40->NextSiblingElement("Cell");

element40 = element41;

}

if (memoryRowNodeElement == NULL)

{

break;

}

TiXmlElement * tempElementRow = memoryRowNodeElement->NextSiblingElement("Row");

memoryRowNodeElement = tempElementRow;

}


return ivec;

}




2,以上是解析的所有代码,可以直接使用。

使用方法为


string str = "WordList1.xml";//标注出要解析的xml文件名字

const char * char1 = str.c_str();

vector<vector<string> > ivec = wordVector(char1);//开始解析

3,遍历2维vector<vector<string> > 的方法

void HelloWorld::traversingVector(vector<vector<string> > ivec)

{

for (int i = 0 ; i<ivec.size();i++)

{

vector<string> tempIvec = ivec[i];

for (int j = 0; j<tempIvec.size(); j++)

{

string str = tempIvec[j];

cout<<str<<endl;

}

cout<<"/////////////////////"<<endl;

}

}


读书人网 >C++

热点推荐