Как хранить отформатированные фрагменты документов Microsoft Word на сервере SQL - PullRequest
2 голосов
/ 15 ноября 2010

Мне нужно извлечь отформатированные текстовые фрагменты документа Word и сохранить их в таблице SQL Server для последующей обработки и последующей вставки в документ Word с использованием C #.

Я посмотрел наWord DOM, и мне кажется, что мне нужно использовать комбинацию методов Document.Load (), Document.Save () и Range.Copy (), Range.Paste () для создания файла для каждого фрагмента, который я затем загружаю вБД.

Разве нет более простого (более эффективного способа)?

Кстати, фрагменты кода могут быть скрытым текстом, и я думал о сохранении фрагментов как RTF.

Ответы [ 2 ]

1 голос
/ 19 ноября 2010

Наконец я получил возможность использовать Aspose.Words для .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.

0 голосов
/ 16 ноября 2010

Document.load, затем выберите диапазон с помощью объекта RANGE, затем используйте свойство XML объекта диапазона, чтобы получить XML этого диапазона и сохранить его.

Позже вы можете вставить XML в другойдокумент с использованием обратного процесса.

Редактирование фрагментов может оказаться интересным, поскольку я не знаю ни одного редактора, совместимого с WORD.

...