如何在sql server中存储Microsoft Word文档的格式化片段

时间:2010-11-15 13:04:42

标签: c# sql-server formatting ms-word insert

我需要提取Word文档的格式化文本片段并将其存储在SQL Server表中,以便以后处理,然后使用C#重新插入Word文档。

我看过Word DOM,似乎我需要使用Document.Load(),Document.Save()和Range.Copy(),Range.Paste()方法的组合来为每个片段创建一个文件,然后将其加载到数据库中。

是否有更简单(更有效的方法)?

顺便说一下,代码片段可以是隐藏文本,我正在考虑将片段存储为RTF。

2 个答案:

答案 0 :(得分:1)

最后我使用Aspose.Words for .NET从我感兴趣的Word文件中提取代码片段并将它们存储为RTF:

// Get insteresting code snippets (in this case text runs with 
// style "tw4winMark")
Document sourceDocument = new Document(fileName);
var runs = sourceDocument.GetChildNodes(NodeType.Run, true)
    .Select(r => r.Font.StyleName == "tw4winMark").ToList();

// Store snippets into temporary document
// Read Aspose documentation for details
Document document = new Document();
if (runs.Count > 0) {
    NodeImporter nodeImporter = new NodeImporter(
        runs[0].Document,
        document,
        ImportFormatMode.KeepSourceFormatting
    );

    foreach (Run run in runs) {
        Run importedRun = nodeImporter.ImportNode(run, true) as Run;
        importedRun.Font.Hidden = false;
        document.Sections[0].Body.Paragraphs[0].AppendChild(importedRun);
    }
}

// save temporary document in MemoryStream as RTF
RtfSaveOptions saveOptions = new RtfSaveOptions();
MemoryStream ms = new MemoryStream();
document.Save(ms, saveOptions);

// retrieve RTF from MemoryStream
ms.Seek(0, SeekOrigin.Begin);
StreamReader sr = new StreamReader(ms);
string rtf = sr.ReadToEnd();

然后可以像往常一样将rtf存储到数据库的文本字段中,并在RTF文本控件中对其进行编辑。

答案 1 :(得分:0)

Document.load,然后通过RANGE对象选择范围,然后使用range对象的XML属性获取该范​​围的XML并存储它。

稍后您可以使用相反的过程将XML插入到另一个文档中。

编辑代码段可能会很有趣,因为我不知道任何基于Web的WORD兼容编辑器。