一般的腳本都是適合程序猿來操作的,再也沒有比excel表格這樣強(qiáng)大,且被大多數(shù)人廣泛接受的腳本配置工具(在我眼中可以看做一個(gè)腳本配置工具)
于是我寫了一套算法來解析excel表格。得到一個(gè)多維數(shù)組(vector向量,來獲取excel表格中的數(shù)據(jù))
解析方法需要用到tinyXml解析工具,對于這個(gè)工具不太熟悉的朋友可以看看我之前寫過的關(guān)于tinyXml工具的入門博客。
下面就是解析方法:
1,在編輯完excel表格后,保存為xml格式就可以了。
vector<vector<string> > HelloWorld::wordVector(const char * xmlName)
{
vector<vector<string> > ivec;
//創(chuàng)建一個(gè)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)//一組單詞中有多少個(gè)元素構(gòu)成(英文單詞,中文解釋,記憶方法等)
{
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";//標(biāo)注出要解析的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<<"http://///////////////////"<<endl;
}
}