OpenXml Error de tabla "<p> se requieren elementos antes de cada </tc>"

He creado una plantilla de Word que luego estoy procesando a través del SDK de OpenXML para reemplazar parte del contenido del documento con datos de una consulta de base de datos.

La plantilla consta de texto básico con controles de contenido de texto sin formato inyectados en los lugares en los que quiero reemplazar el texto. Luego estoy usando el texto en estos controles como clave para buscar los valores de reemplazo. En la mayoría de los casos, esto funciona bien (simplemente actualizo la propiedad Text del objeto Text).

En un caso, estoy reemplazando el texto con una tabla. En este caso, construyo una tabla en código y luego reemplazo el contenido del objeto SdtContentRun (el padre del objeto Ejecutar, que a su vez es el padre del objeto Texto) con el nuevo objeto Tabla ...

var sdtContentRunElements =
  from sdtContentRun in this.Document.MainDocumentPart.RootElement.Descendants<SdtContentRun>()
  select sdtContentRun;

sdtContentRunElements.ForEach(sdtContentRunElement => {

  Run firstRunElement = sdtContentRunElement.Descendants<Run>().FirstOrDefault();
  if (firstRunElement != null) {

    Text firstTextElement = firstRunElement.Descendants<Text>().FirstOrDefault();
    if (firstTextElement != null) {

      switch (firstTextElement.Text) {

        case TableBookmark:

          Table advisoryTable = new Table(...); // See below
          OpenXmlElement parent = firstRunElement.Parent;
          parent.RemoveAllChildren();
          parent.Append(advisoryTable);
          break;

        case ContractorItemAdvisoriesLetter.ContractorCodeBookmark:

          firstTextElement.Text = @"New text";
          break;

      }
    }
  }
}

}

Esto da como resultado el siguiente XML (tomado de la herramienta de productividad Open XML SDK 2.0 para Microsoft Office) ...

<w:sdtContent xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main">
  <w:tbl>
    <w:tr>
      <w:tc>
        <w:p>
          <w:r>
            <w:t>Lorem ipsum dolor sit amet</w:t>
          </w:r>
        </w:p>
      </w:tc>
    </w:tr>
  </w:tbl>
</w:sdtContent>

(Parte del contenido de la tabla se ha eliminado porque sentí que simplemente resolvería el problema)

Cuando intento abrir el documento en Word, aparece un error. El error que se informa es ...

Mapeo de células ambiguas encontrado. Posible elemento de párrafo faltante. Se requieren <p> elementos antes de cada </tc>

Probablemente valga la pena mencionar que cuando veo el explorador de documentos en Open XML SDK 2.0 Productivity Tool para Microsoft Office, el elemento w: tbl (y todos los elementos contenidos en él) se reconocen comoOpenXmlUnknownElement en lugar de ser reconocido comoTable objetos. No sé si esto es relevante o si es una peculiaridad de la herramienta SDK.

Claramente me estoy perdiendo algo. Por lo que puedo decir de la Definición de clase de tabla, es perfectamente legal colocar un w: tbl dentro de un contenido w: sdt (a menos que esté leyendo esto incorrectamente), por lo que ahora no sé cuál puede ser el problema. También hay muy pocos resultados si googleas "Tabla" y "OpenXmlUnknownElement" sin que ninguno de los resultados parezca estar relacionado con mi problema.

¿Alguna sugerencia

EDIT: La investigación adicional parece indicar que el problema en realidad radica en la incrustación de otra tabla dentro de una de las celdas de la tabla que se agregó anteriormente. El nuevo objeto Table se agrega directamente a un objeto TableCell que nuevamente, de acuerdo con la documentación de la Tabla mencionada anteriormente, debería ser aceptable ...

Table advisoryTable = new Table();

advisories.ForEach(advisory => {

    advisoryTable.Append(new TableRow(new TableCell(new Paragraph(new Run(new Text(advisory.NoteText))))));

    advisory.ItemAdvisories.ForEach(itemAdvisory => {

        Item item = itemAdvisory.Item;

        Table itemTable = new Table();
        itemTable.Append(new TableRow[] {

            new TableRow(new TableCell[] {
                new TableCell(new Paragraph(new Run(new Text(string.Format(@"Item {0}", item.Sequence)))))
            })

        });

        advisoryTable.Append(new TableRow(new TableCell(itemTable)));

    });

});

Resultando en..

<w:tbl xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main">
  <w:tr>
    <w:tc>
      <w:p>
        <w:r>
          <w:t>Lorem ipsum dolor sit amet</w:t>
        </w:r>
      </w:p>
    </w:tc>
  </w:tr>
  <w:tr>
    <w:tc>
      <w:tbl>
        <w:tr>
          <w:tc>
            <w:p>
              <w:r>
                <w:t>Item 1</w:t>
              </w:r>
            </w:p>
          </w:tc>
        </w:tr>
      </w:tbl>
    </w:tc>
  </w:tr>
</w:tbl>

He intentado agregar un párrafo entre TableCell y la tabla incrustada, pero esto simplemente da como resultado un nuevo error, esta vez "error no especificado".

Respuestas a la pregunta(1)

Su respuesta a la pregunta