这段时间因为工作的要求,需要在程序中处理xml 格式的excel 文档。但是在期间遇到了一个问题就是Row 和 Cell 的index 属性相对绝对的问题。

之前在bing 找了一下没找到介绍相对转换成绝对的资料。在经过多次的尝试和对比在空白的文档中不同的cell 中输入值后的XML文件的代码。

终于找到了,在什么情况下 Row 和Cell  的index属性的时显时隐的问题。

总结:

1.在空白的文档中第一次在一个单元格中输入值。如果是A行,那么Row 就没有index 属性,如果是1 列,那么Cell 就没有Index 属性。(如果不是第一次输入的话,有可能其他单元格就保存了之前的相对或者是绝对的index,就不一定了)

2.如果在第一次在文档中输入值,连续的输入有值的单元格总是以相对属性表示(即没有显示index属性),Row则是依赖最左边带有绝对Index属性的单元格,或者是第一行(A)。Cell 的也类似(方向向上)。

3.如果在文档中一个单元格设值并且与其相邻的单元格没有值,那这个单元格的Row Cell 的index都是绝对属性的(即显示有index="x")

如图,A1,A2,A3 Row Cell都是没有index 属性,因为A1 是第一行第一列,默认两个属性都是1,A2,A3 则是Row属性依赖A1,而他们是第一列默认也是没有Cell 的index 属性。 D5 相对来说独立它的Row Cell 的index属性都是绝对的。 其他的就不说了,直接给xml 代码更好理解。

xml 源码

  1 <?xml version="1.0"?>
  2 <?mso-application progid="Excel.Sheet"?>
  3 <Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet"
  4  xmlns:o="urn:schemas-microsoft-com:office:office"
  5  xmlns:x="urn:schemas-microsoft-com:office:excel"
  6  xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet"
  7  xmlns:c="urn:schemas-microsoft-com:office:component:spreadsheet"
  8  xmlns:html="http://www.w3.org/TR/REC-html40">
  9  <DocumentProperties xmlns="urn:schemas-microsoft-com:office:office">
 10   <Author>user</Author>
 11   <LastAuthor>user</LastAuthor>
 12   <Created>2008-10-27T07:49:59Z</Created>
 13   <LastSaved>2008-10-27T08:20:37Z</LastSaved>
 14   <Version>14.00</Version>
 15  </DocumentProperties>
 16  <OfficeDocumentSettings xmlns="urn:schemas-microsoft-com:office:office">
 17   <AllowPNG/>
 18  </OfficeDocumentSettings>
 19  <ExcelWorkbook xmlns="urn:schemas-microsoft-com:office:excel">
 20   <WindowHeight>10005</WindowHeight>
 21   <WindowWidth>10005</WindowWidth>
 22   <WindowTopX>120</WindowTopX>
 23   <WindowTopY>135</WindowTopY>
 24   <ProtectStructure>False</ProtectStructure>
 25   <ProtectWindows>False</ProtectWindows>
 26  </ExcelWorkbook>
 27  <Styles>
 28   <Style ss:ID="Default" ss:Name="Normal">
 29    <Alignment ss:Vertical="Center"/>
 30    <Borders/>
 31    <Font ss:FontName="宋体" x:CharSet="134" ss:Size="11" ss:Color="#000000"/>
 32    <Interior/>
 33    <NumberFormat/>
 34    <Protection/>
 35   </Style>
 36   <Style ss:ID="s62">
 37    <Alignment ss:Vertical="Bottom"/>
 38    <Borders/>
 39    <Font ss:FontName="Arial" x:Family="Swiss"/>
 40    <Interior/>
 41    <NumberFormat/>
 42    <Protection/>
 43   </Style>
 44  </Styles>
 45  <Worksheet ss:Name="Sheet1">
 46   <Table ss:ExpandedColumnCount="11" ss:ExpandedRowCount="5" x:FullColumns="1"
 47    x:FullRows="1" ss:StyleID="s62" ss:DefaultColumnWidth="54">
 48    <Column ss:Index="2" ss:StyleID="s62" ss:AutoFitWidth="0" ss:Width="42.75"/>
 49    <Column ss:Index="9" ss:StyleID="s62" ss:AutoFitWidth="0" ss:Width="65.25"/>
 50    <Column ss:Index="11" ss:StyleID="s62" ss:AutoFitWidth="0" ss:Width="51.75"/>
 51    <Row ss:AutoFitHeight="0" ss:Height="13.5">
 52     <Cell><Data ss:Type="String">A1</Data></Cell>
 53    </Row>
 54    <Row ss:AutoFitHeight="0" ss:Height="13.5">
 55     <Cell><Data ss:Type="String">A2</Data></Cell>
 56     <Cell><Data ss:Type="String">B2</Data></Cell>
 57     <Cell><Data ss:Type="String">C2</Data></Cell>
 58     <Cell ss:Index="5"><Data ss:Type="String">E2</Data></Cell>
 59    </Row>
 60    <Row ss:AutoFitHeight="0" ss:Height="13.5">
 61     <Cell><Data ss:Type="String">A3</Data></Cell>
 62    </Row>
 63    <Row ss:Index="5">
 64     <Cell ss:Index="4"><Data ss:Type="String">D5</Data></Cell>
 65    </Row>
 66   </Table>
 67   <WorksheetOptions xmlns="urn:schemas-microsoft-com:office:excel">
 68    <Selected/>
 69    <Panes>
 70     <Pane>
 71      <Number>3</Number>
 72      <ActiveRow>4</ActiveRow>
 73      <ActiveCol>3</ActiveCol>
 74     </Pane>
 75    </Panes>
 76    <ProtectObjects>False</ProtectObjects>
 77    <ProtectScenarios>False</ProtectScenarios>
 78    <x:ViewableRange>R1:R262144</x:ViewableRange>
 79    <x:Selection>R10C6</x:Selection>
 80   </WorksheetOptions>
 81   <c:WorksheetOptions/>
 82  </Worksheet>
 83  <Worksheet ss:Name="Sheet2">
 84   <Table ss:ExpandedColumnCount="1" ss:ExpandedRowCount="1" x:FullColumns="1"
 85    x:FullRows="1" ss:StyleID="s62" ss:DefaultColumnWidth="54">
 86   </Table>
 87   <WorksheetOptions xmlns="urn:schemas-microsoft-com:office:excel">
 88    <ProtectObjects>False</ProtectObjects>
 89    <ProtectScenarios>False</ProtectScenarios>
 90    <x:ViewableRange>R1:R262144</x:ViewableRange>
 91    <x:Selection>R1C1</x:Selection>
 92   </WorksheetOptions>
 93   <c:WorksheetOptions/>
 94  </Worksheet>
 95  <Worksheet ss:Name="Sheet3">
 96   <Table ss:ExpandedColumnCount="1" ss:ExpandedRowCount="1" x:FullColumns="1"
 97    x:FullRows="1" ss:StyleID="s62" ss:DefaultColumnWidth="54">
 98   </Table>
 99   <WorksheetOptions xmlns="urn:schemas-microsoft-com:office:excel">
100    <ProtectObjects>False</ProtectObjects>
101    <ProtectScenarios>False</ProtectScenarios>
102    <x:ViewableRange>R1:R262144</x:ViewableRange>
103    <x:Selection>R1C1</x:Selection>
104   </WorksheetOptions>
105   <c:WorksheetOptions/>
106  </Worksheet>
107  <c:ComponentOptions>
108    <c:Label>
109     <c:Caption>Microsoft Office Spreadsheet</c:Caption>
110    </c:Label>
111    <c:MaxHeight>80%</c:MaxHeight>
112    <c:MaxWidth>80%</c:MaxWidth>
113    <c:NextSheetNumber>1</c:NextSheetNumber>
114   </c:ComponentOptions>
115  <x:WorkbookOptions>
116    <c:OWCVersion>12.0.0.6502</c:OWCVersion>
117    <x:Height>8811</x:Height>
118    <x:Width>22093</x:Width>
119   </x:WorkbookOptions>
120 </Workbook>

因为我在已经被编辑过的文档中在特定的地方插入值,所以之前就因为这个Index 的问题。我自己就写了一个根据这个规律写了一个补满所有属性的方法。

View Code

 1  XmlDocument doc = new XmlDocument();
 2         doc.LoadXml(xmlreport);
 3         //XmlNodeList nodeList;
 4         XmlElement root = doc.DocumentElement;
 5         const string nmgstring = "urn:schemas-microsoft-com:office:spreadsheet";
 6         XmlNamespaceManager nsmgr = new XmlNamespaceManager(doc.NameTable);
 7         nsmgr.AddNamespace("ss", nmgstring);
 8         XmlNode Temnode = root.SelectNodes("/ss:Workbook/ss:Worksheet/ss:Table", nsmgr)[0];
 9
10        //调用方法。得到这个字典就可以按照自己的来如何操作了
11             Dictionary<int, int> RowIndexs = SelectAllIndex(Temnode, nsmgr, true);

View Code

 1  /// <summary>
 2     /// 查找所有的index 信息,包含相对(-1)绝对(index 值)。如果不存在使用0作为其值 0425 liuhua
 3     /// </summary>
 4     /// <param name="TemRowNode">ss:table </param>
 5     /// <param name="nsmgr"></param>
 6     /// <returns></returns>
 7     private Dictionary<int, int> SelectAllIndex(XmlNode TemRowNode, XmlNamespaceManager nsmgr, bool IsRow)
 8     {
 9         Dictionary<int, int> TemResult = new Dictionary<int, int>();
10         XmlNodeList TemnodeList;
11         int TemTotal = 0;
12         if (IsRow)
13             TemnodeList = TemRowNode.SelectNodes("ss:Row", nsmgr);
14         else
15             TemnodeList = TemRowNode.SelectNodes("ss:Cell", nsmgr);
16
17         TemTotal = TemnodeList.Count+1;
18         int temno = 0;
19         for (int i = 1; i < TemTotal; i++)
20         {
21             int tindex = -1;
22             XmlNode temnode = TemnodeList[temno++];
23             if (temnode != null)
24             {
25                 XmlNode ar = temnode.Attributes.GetNamedItem("ss:Index");
26                 if (ar != null)
27                 {
28                     tindex = int.Parse(ar.Value);
29                     if (tindex > i)
30                     {
31                         // 如果当前的Index 比当前位置的应该的值大,那么在其之前应该没有显示写出缺少的index
32                         //在此补充修改循环总次数,确保包含最大index (绝对和相对)
33                         TemTotal += tindex - i;
34                         for (; i < tindex; i++)
35                             TemResult.Add(i, 0);
36                         TemResult.Add(tindex, i);
37                     }
38                     else if (tindex == i)
39                     { TemResult.Add(i, tindex); }
40                     else
41                     { /* 这个情况是不合法的格式。不做考虑*/ }
42                 }
43                 else
44                 {
45                     TemResult.Add(i, tindex);
46                 }
47             }
48             else
49             {
50                 TemResult.Add(i, 0);
51             }
52
53         }
54         return TemResult;
55     }

因为没有做有dome .只上传了这点代码。

算是个简单的分享,记录学习的点滴。如果有什么写错的,还请指出!谢谢。。

转载于:https://www.cnblogs.com/fxam/archive/2012/04/26/xml.html

EXCEL-XML 代码相对行列转换绝对相关推荐

  1. oracle行列转换关联union的方式_几行代码轻松玩转 Excel 行列转换

    几行代码轻松玩转 Excel 行列转换 下面这种交叉式的 Excel 表是很常见的格式,用来填写和查看都比较方便: 但是,如果想做进一步的统计分析,这种格式就不方便了,需要行列转换,变成如下格式的明细 ...

  2. JSON格式化 动态生成表格 表格转置 行列转换 Excel导出

    先看效果 初始化: JSON格式化 : 生成表格-方式1 : 生成表格-方式2 : Excel导出 需要行求和.列求和功能的查看 JSON格式化 动态生成表格 表格转置 行列转换 Excel导出 行求 ...

  3. word表格导出html代码,(网页源代码中的表格数据怎么导出excel)如何将把从WORD、EXCEL中复制的内容转换成HTML源代码,再通过网页表单提交上传到数据库?...

    如何将ASP页面中的表格生成一个Excel表,求源码 '给你个例子吧.保存为 asp文件看看.具体就在第一句. New Page 1PJ计画 第版 案件No 案件名 主门 顾客 PJ责任者 営业担当 ...

  4. php代码实现xml格式转换,PHP实现XML与数据格式进行转换类实例

    PHP实现XML与数据格式进行转换类实例 来源:中文源码网    浏览: 次    日期:2018年9月2日 [下载文档:  PHP实现XML与数据格式进行转换类实例.txt ] (友情提示:右键点上 ...

  5. 在Sqlserver下巧用行列转换日期的数据统计

    在Sqlserver下巧用行列转换日期的数据统计 原文:在Sqlserver下巧用行列转换日期的数据统计 在Sqlserver下巧用行列转换日期的数据统计 前言 在SQLSERVER 中有很多统计函数 ...

  6. SQL SERVER 与ACCESS、EXCEL的数据导入导出转换

    * 说明:复制表(只复制结构,源表名:a 新表名:b)       select * into b from a where 1<>1 * 说明:拷贝表(拷贝数据,源表名:a 目标表名:b ...

  7. [导入][转]精妙的SQL和SQL SERVER 与ACCESS、EXCEL的数据导入导出转换

    * 说明:复制表(只复制结构,源表名:a 新表名:b)       select * into b from a where 1<>1 * 说明:拷贝表(拷贝数据,源表名:a 目标表名:b ...

  8. SQL行列转换6种方法

    在进行报表开发时,很多时候会遇到行列转换操作,很对开发人员针对于SQL级别行列转换操作一直不甚理解,今天正好抽空对其进行了一些简单的总结.这里主要列举3种可以实现SQL行列转换的方法,包括通用SQL解 ...

  9. oracle中行列转换总结

    oracle中行列转换 1.行列转换包括以下六种情况: 2. 列转行 2.1 UNION ALL 2.2 MODEL 2.3 COLLECTION 2.4 UNPIVOT 3. 行转列 3.1 AGG ...

最新文章

  1. python函数第二次运行报错_Python学习笔记2-函数、高级特性
  2. 精选CVPR开源项目学习资源汇总
  3. 富文本编辑器---笑脸表情(一)
  4. 解决:SyntaxError: Non-ASCII character ‘\xe8‘ in file 1.py on line 4, but no encoding declared;
  5. IBatis.net介绍
  6. 重学java基础第一课:解决大家的疑问
  7. SqlServer自定义聚合函数
  8. python 类、模块、包的区别
  9. Nodejs框架+uniapp前端微商个人相册多端小程序源码
  10. 计科1501韩猛实验8
  11. AspectJ 在 Spring 中的使用
  12. 批量实现 cv2.cvtColor(images, cv2.COLOR_GRAY2RGB)
  13. 第二章作业-第1题-万世想
  14. A - Six Degrees of Cowvin Bacon POJ - 2139 最短路Floyd
  15. openssl生成CA证书
  16. 转:getParameter、getParameterValues、getParameterMap用法详解
  17. 文明与征服阵容搭配,文明与征服阵容推荐
  18. LeetCode 12 数字转化为罗马符号(难度: Medium)
  19. 将文件中每一行字符反序(python3)
  20. 5、基于51单片智能手环设计心率计蓝牙app计步器温湿度设计

热门文章

  1. 自学成才翁_作为一名自学成才的开发者从“我的旅程”中吸取的教训
  2. 拨测工具_您可以拨多少钱? 快速简单地介绍有用的工具。
  3. dhcp动态主机配置协议
  4. bootstrap-less源码分析:容器
  5. 神经网络基础知识梳理
  6. 代码生成器前戏 之 数据库元数据
  7. 《深入java虚拟机》读书笔记类加载
  8. Python 自动化运维 pycurl
  9. 切版网上线,启用qieban.cn
  10. linux基础(一)安装系统Centos6.5