0

linq を使用して Excel XML の読み取りと変更を試みています。最初にDatagridという名前のワークシートを取得し ます。そこから最初の行を選択します (Index を使用)。次に、この行でプロパティが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 が表示されます。

コードの先頭に既に次の imports ステートメントがあります。

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>
4

1 に答える 1

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)
于 2012-08-18T19:28:19.203 に答える