我正在尝试使用linq来读取和修改一些Excel XML,首先我抓住名为 Datagrid 的工作表 从那里我选择第一行(使用索引) 现在我想在这一行找到属性 atrHeader
的单元格 Dim dg = From item In root...<ss:Worksheet> Select item Where item.@ss:Name = "Datagrid"
Dim r = From item In dg...<Table>...<Row> Select item Where item.@ss:Index = 1 row
Dim cell = From item In r...<Cell> Select item Where item.@ecProperty = "atrHeader"
此时一切都很好。现在我想做的是创建一个新单元格并将其插入到找到的单元格之前。
Dim newCell As New XElement("cell", 123)
cell.First.AddBeforeSelf(newCell)
保存文件后,我看到新值应该是
<cell xmlns="">123</cell>
但是我需要它像
<ss:Cell>123</ss:Cell>
如果我在创建新元素时尝试使用“ss:cell”,我会得到一个RTE说“:”不能包含
我的代码顶部确实有以下import语句:
Imports <xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet">
初始XML
<ss:Worksheet ss:Name="Datagrid">
<ss:Table ss:ExpandedColumnCount="17" ss:ExpandedRowCount="5" x:FullColumns="1" x:FullRows="1" ss:DefaultRowHeight="15">
<ss:Row ss:Index="1" ss:AutoFitHeight="0">
<ss:Cell ecProperty="model_name" ss:StyleID="styleReadOnly">
<ss:Data ss:Type="String">Joe's Project</ss:Data>
</ss:Cell>
<ss:Cell ss:Index="6" ss:StyleID="styleColumnDescription">
<ss:Data ss:Type="String">Type</ss:Data>
</ss:Cell>
<ss:Cell ecProperty="atrHeader" ss:Index="7">
<ss:Data ss:Type="String">blank</ss:Data>
</ss:Cell>
</ss:Row>
<ss:Row ss:AutoFitHeight="0" ss:Index="2">
<ss:Cell ecProperty="email_address" ss:StyleID="styleBiDirectional">
<ss:Data ss:Type="String">joe@ec.com</ss:Data>
</ss:Cell>
<ss:Cell ss:Index="6" ss:StyleID="styleColumnDescription">
<ss:Data ss:Type="String">Full Path</ss:Data>
</ss:Cell>
<ss:Cell ecProperty="atrHeader" ss:Index="7">
<ss:Data ss:Type="String">blank</ss:Data>
</ss:Cell>
</ss:Row>
</ss:Table>
</ss:Worksheet>
答案 0 :(得分:0)
导入命名空间只允许您在使用XML文字和查询(AFAIK)时获得设计时支持。这允许您像编写查询一样编写查询并创建文字元素。您也可以将newCell
创建为文字。
Dim newCell = <ss:cell>123</ss:cell>
否则,您需要XNamespace
来创建元素。
Dim ss As XNamespace = "urn:schemas-microsoft-com:office:spreadsheet"
Dim newCell As New XElement(ss + "cell", 123)