一般的脚本都是适合程序猿来操作的,再也没有比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; } } |
|
来自: wtkc > 《msOffice》