首先定义了一个excel,里面对一个区域进行定义名称,例如Area=Sheet1!$A$3:$E$12然后在这个excel转换的xml里面会有一段定义的范围的字段,如  <NamedRange ss:Name="Area" ss:RefersTo="=Sheet1!R3C1:R12C5"/>现在问题是怎么在.net里面取到这区域里面的xml值
就是多个<Row />
还有取出来的话放到哪里?现在我是在用xpath在做,能取到上面所说的ss:Name="Area"的NamedRange下的ss:RefersTo的值
然后取到了row跟col的值,分别给x1,y1 x2,y2用innerxml不断添加节点的话只添加子节点的值
<Row><Cell><Data>1</Data></Cell></Row>
<Row><Cell><Data>2</Data></Cell></Row>
<Row><Cell><Data>3</Data></Cell></Row>row1.innerxml +=row2.innerxml 的出来row1.innerxml的值为Cell><Data>1</Data></Cell>Cell><Data>2</Data></Cell>
我想那个<Row></Row>也能添加进去如果不这样做还有什么好的方法可以获取到几行Row的值,<Row>的父节点是<Table>,但是我要取的值只是<Table>里面的几个子节点有没有动态获取excel内容的例子,刚学习在c#里面读取excel的xml格式然后添加数据进去,想如果excel里面改动格式的话通过excel里面的定义字段来添加数据,不用每次改格式都需要改后台代码

解决方案 »

  1.   


    XmlNode Name = doc.SelectSingleNode("//*/ss:Names/ss:NamedRange[@ss:Name='Area']", xmlnsManager);
                string area = Name.Attributes[1].InnerText;
                string randc = area.Split('!')[1];  
                string[] s = randc.Split(':');
                string s1 = string.Empty;
                string s2 = string.Empty;
                for (int i = 0; i < s[0].Length; i++)
                {
                    if (char.IsDigit(s[0][i]))
                        s1 += s[0][i];
                }
                if (s.Length > 1)
                {
                    for (int i = 0; i < s[1].Length; i++)
                    {
                        if (char.IsDigit(s[1][i]))
                            s2 += s[1][i];
                    }
                }
                int ai = 0, bi = 0, ci = 0, di = 0;
                ai = int.Parse(s1[0].ToString());   //x1    R
                bi = int.Parse(s1[1].ToString());   //y1    C
                if (s2 != string.Empty)
                {
                    ci = int.Parse(s2[0].ToString());   //x2    R
                    di = int.Parse(s2[1].ToString());   //y2    C
                }
                XmlNodeList tables = doc.SelectSingleNode("//*/ss:Table", xmlnsManager).SelectNodes("ss:Row",xmlnsManager);
                int rows = tables.Count;
                XmlNode row1, row2, col1, col2;
                row1 = tables[ai - 1];
                col1 = row1.ChildNodes[bi - 1];
                if (s2 != string.Empty)
                {
                    row2 = tables[ci - 1];
                    col2 = row2.ChildNodes[di - 1];
                }
                string content = string.Empty;
                for (int i = ai; i < ci + 1; i++)
                {
                    content += tables[i - 1].OuterXml;
                }
      

  2.   

    上面content得出来的是几个Row的值