C#解析Excel生的XML文件
目的:要将excel导出的XML文件,解析生成gridview中
<Worksheet ss:Name="Sheet1">
<Table ss:ExpandedColumnCount="15" ss:ExpandedRowCount="14" x:FullColumns="1"
x:FullRows="1" ss:DefaultColumnWidth="54" ss:DefaultRowHeight="14.25">
<Row ss:Height="18.75">
<Cell ss:MergeAcross="14" ss:StyleID="s21"><Data ss:Type="String">标题</Data></Cell>
</Row>
<Row>
<Cell ss:MergeDown="2" ss:StyleID="s22"><Data ss:Type="String">标题2</Data></Cell>
<Cell ss:MergeDown="2" ss:StyleID="s22"><Data ss:Type="String">标题2</Data></Cell>
<Cell ss:MergeAcross="8" ss:StyleID="m70097194"><Data ss:Type="String">标题2</Data></Cell>
<Cell ss:MergeAcross="2" ss:StyleID="m70097204"><Data ss:Type="String">标题2</Data></Cell>
<Cell ss:MergeDown="2" ss:StyleID="s26"><Data ss:Type="String">标题2</Data></Cell>
</Row>
<Row>
<Cell ss:Index="3" ss:MergeDown="1" ss:StyleID="s22"><Data ss:Type="String">合计</Data></Cell>
<Cell ss:MergeAcross="2" ss:StyleID="s22"><Data ss:Type="String">标题2</Data></Cell>
<Cell ss:MergeAcross="4" ss:StyleID="s26"><Data ss:Type="String">标题2</Data></Cell>
<Cell ss:MergeDown="1" ss:StyleID="s26"><Data ss:Type="String">小计</Data></Cell>
<Cell ss:MergeDown="1" ss:StyleID="s26"><Data ss:Type="String">标题2</Data></Cell>
<Cell ss:MergeDown="1" ss:StyleID="s26"><Data ss:Type="String">标题2</Data></Cell>
</Row>
<Row>
<Cell ss:Index="4" ss:StyleID="s27"><Data ss:Type="String">小计</Data></Cell>
<Cell ss:StyleID="s27"><Data ss:Type="String">标题2</Data></Cell>
<Cell ss:StyleID="s27"><Data ss:Type="String">标题2</Data></Cell>
<Cell ss:StyleID="s28"><Data ss:Type="String">标题2</Data></Cell>
<Cell ss:StyleID="s28"><Data ss:Type="String">标题2</Data></Cell>
<Cell ss:StyleID="s28"><Data ss:Type="String">标题2</Data></Cell>
<Cell ss:StyleID="s28"><Data ss:Type="String">标题2</Data></Cell>
<Cell ss:StyleID="s28"><Data ss:Type="String">标题2</Data></Cell>
</Row>
<Row>
<Cell ss:Index="2"><Data ss:Type="String">填表: </Data></Cell>
<Cell ss:Index="7"><Data ss:Type="String">审核:</Data></Cell>
<Cell ss:Index="10"><Data ss:Type="String">审批:</Data></Cell>
</Row>
</Table>
分析函数:
private void initData()
{
Table gvt = new Table();
gv.Attributes.Add("ID", "gv");
gv.Controls.Add(gvt);
string sXml = this.Server.MapPath("XMLHeader/1.xml");
if (!System.IO.File.Exists(sXml))
return;
System.Xml.XmlDocument xmlDoc = new System.Xml.XmlDocument();
xmlDoc.Load(sXml);
System.Xml.XmlNode node = xmlDoc.GetElementsByTagName("Worksheet").Item(0).ChildNodes[0];
int iRows = node.ChildNodes.Count;
for (int i = 0; i < iRows; i++)
{
XmlNode xmlRow = node.ChildNodes[i];
GridViewRow addHeaderRow = new GridViewRow(0, 0, DataControlRowType.Header, DataControlRowState.Normal);
int iColumns = xmlRow.ChildNodes.Count;
for (int j = 0; j < iColumns; j++)
{
XmlNode xmlColumn = xmlRow.ChildNodes[j];
string sText = "";
sText = xmlColumn.InnerText;
if (sText == "") sText = " ";
int iRowSpan = 1;
XmlAttribute xmlAttrRowSpan = xmlColumn.Attributes["ss:MergeDown"];
if (xmlAttrRowSpan != null && !String.IsNullOrEmpty(xmlAttrRowSpan.Value))
iRowSpan = Convert.ToInt32(xmlAttrRowSpan.Value)+1;
int iColumnSpan = 1;
XmlAttribute xmlAttrColumnSpan = xmlColumn.Attributes["ss:MergeAcross"];
if (xmlAttrColumnSpan != null && !String.IsNullOrEmpty(xmlAttrColumnSpan.Value))
iColumnSpan = Convert.ToInt32(xmlAttrColumnSpan.Value)+1;
int iIndex = 0;
XmlAttribute xmlAttrIndex = xmlColumn.Attributes["ss:Index"];
if (xmlAttrIndex != null && !String.IsNullOrEmpty(xmlAttrIndex.Value))
iIndex = Convert.ToInt32(xmlAttrIndex.Value);
这里获得的了ss:Index但我一直没有下好怎么分析输出这个index的绝对定位,不知道excel本省是如何分析ss:Index这个标记的,请高手指点
//if (iIndex != 0)
//{
// int RowCellCount=addHeaderRow.Cells.Count;
// for (int k = 0; k < iIndex - RowCellCount; k++)
// {
// TableCell Cell = new TableCell();
// Cell.Text = " ";
// Cell.Wrap = false;
// Cell.BorderColor = Color.Black;
// Cell.HorizontalAlign = HorizontalAlign.Center;
// addHeaderRow.Cells.Add(Cell);
// }
// addHeaderRow.Cells[iIndex - 1].Text = sText;
//}
//else
//{
TableCell Cell = new TableCell();
Cell.Text = sText;
Cell.ColumnSpan = iColumnSpan;
Cell.RowSpan = iRowSpan;
Cell.Wrap = false;
Cell.BorderColor = Color.Black;
Cell.HorizontalAlign = HorizontalAlign.Center;
addHeaderRow.Cells.Add(Cell);
//}
}
this.gv.Controls[0].Controls.Add(addHeaderRow);
}
-------------------------------------------------------------------------------------------------
请注意红色部分,问题提问在上面,没有意义的跟帖,我不会给分的。请高手详细说明思路