This is done using AltChunk and AlternativeFormatImportPart. More or less it is described on the MSDN article.
using System.IO; using System.Reflection; using System.Text; using DocumentFormat.OpenXml.Packaging; using DocumentFormat.OpenXml.Wordprocessing; namespace TestC { class Program { static void Main(string[] args) { using (var document = WordprocessingDocument.Open(@"C:\Users\User\Documents\sample.docx", isEditable: true)) //я вынес файл html как ресурс сборки отдельно, это не принципиально using (var htmlStream = Assembly.GetExecutingAssembly().GetManifestResourceStream("TestC.Sample.html")) { var mainDocumentPart = document.MainDocumentPart; var html = new StreamReader(htmlStream).ReadToEnd(); //текст html var htmlAsUtf8Bytes = Encoding.UTF8.GetBytes(html); using (MemoryStream htmlContentStream = new MemoryStream(htmlAsUtf8Bytes)) { string partId = "id"; AlternativeFormatImportPart formatImportPart = mainDocumentPart.AddAlternativeFormatImportPart( AlternativeFormatImportPartType.Html, partId); formatImportPart.FeedData(htmlContentStream); AltChunk altChunk = new AltChunk(); altChunk.Id = partId; mainDocumentPart.Document.Body.Append(altChunk); } } } } }
Where Sample.html (taken from here ):
<HTML> <HEAD> <TITLE>Your Title Here</TITLE> </HEAD> <BODY> <HR> <a href="http://somegreatsite.com">Link Name</a> is a link to another nifty site <H1>This is a Header</H1> <H2>This is a Medium Header</H2> Send me mail at <a href="mailto:support@yourcompany.com"> support@yourcompany.com </a>. <P> This is a new paragraph! <P> <B>This is a new paragraph!</B> <BR> <B><I>This is a new sentence without a paragraph break, in bold italics.</I></B> <HR> </BODY> </HTML>
At the exit: 
For your example:
<HTML> <head> <style> .table { width: 100%; border: 1px solid; border-collapse: collapse; } .table td { border: 1px solid black; } </style> </head> <BODY> <table class="table"> <tr> <td>one</td> <td>two</td> </tr> </table> <p>Some text</p> </BODY> </HTML>
At the exit:

UPD Replace all paragraphs that consist only of the text [Html] in our HTML
using System; using System.IO; using System.Linq; using System.Reflection; using System.Text; using DocumentFormat.OpenXml.Packaging; using DocumentFormat.OpenXml.Wordprocessing; namespace Test { class Program { static void Main(string[] args) { using (var document = WordprocessingDocument.Open(@".docx file", isEditable: true)) //я вынес файл html как ресурс сборки отдельно, это не принципиально using (var htmlStream = Assembly.GetExecutingAssembly().GetManifestResourceStream("Test.Sample.html")) { var mainDocumentPart = document.MainDocumentPart; var documentBody = mainDocumentPart.Document.Body; var html = new StreamReader(htmlStream).ReadToEnd(); var htmlAsUtf8Bytes = Encoding.UTF8.GetBytes(html); Random random = new Random(); var paragraphsToReplace = documentBody.Descendants<Paragraph>().Where(x => x.InnerText.Equals("[Html]")).ToList(); foreach (var paragraph in paragraphsToReplace) { string partId = $"id_{random.Next()}"; AlternativeFormatImportPart formatImportPart = mainDocumentPart.AddAlternativeFormatImportPart( AlternativeFormatImportPartType.Html, partId); using (MemoryStream htmlContentStream = new MemoryStream(htmlAsUtf8Bytes)) { formatImportPart.FeedData(htmlContentStream); } AltChunk altChunk = new AltChunk(); altChunk.Id = partId; paragraph.InsertBeforeSelf(altChunk); paragraph.Remove(); } } } } }