Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > Как найти разделитель PageBreak на странице?


Автор: shandy 11.1.2011, 21:10
В общем задача такая открыть один большой файл worda (.doc) и разделить его на несколько маленьких файлов. Причем не постранично (на каждой странице стоит разрыв (pagebreak)), а с некоторым условием: если на странице есть слово "М.П." и разрыв страницы то это конец нового документа..... и так далее по всему документу...

Сам алгоритм мне понятен - найти Range() от начала документа до его PageBreak + проверка на этой странице ключевого слова (с этим тоже проблема - как использовать поиск с учетом страниц?) и потом этот  Range сохранить в новый документ, вырезать со старого и сохранить старый документ и снова повтор действий...
В общем все очень туманно...
Могу ли я искать разрыв страницы используя "range.Find.Execute" и символ "^12", и как тогда определить его позицию в документе?

Облазил весь инет так и не нашел ничего похожего, буду благодарен любой помощи... 

Автор: shandy 13.1.2011, 22:32
В общем задачу кое-как решил - грубо, но эффективно, если кто скажет, как ещё можно оптимизировать код - welcome...
Код

...
wordApplication.Documents.Add(currentFileName);
            Word.Document doc = wordApplication.ActiveDocument;
            object missing = Type.Missing;
            object fileName = null;
            object ex = Word.WdSaveFormat.wdFormatDocument;
            string Dir = App.CurrentDir + Properties.Settings.Default.sourceProtokolDir + "\\";
            object s = "М.П.";
            object s1 = Word.WdFindWrap.wdFindStop;
            int number = 1;
            while (true)
            {
                if (wordApplication.Selection.Find.Execute(s, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref s1, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing))
                {
                    wordApplication.Selection.Start = wordApplication.Selection.Range.End;
                    object s2 = "^m";
                    bool f = wordApplication.Selection.Find.Execute(s2, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref s1, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing);
                    if (f)
                    {
                        doc.Range(0, wordApplication.Selection.End + 1).Select();
                        wordApplication.Selection.Cut();
                        wordApplication.Documents.Add(App.CurrentDir + Properties.Settings.Default.FileTemplateDoc);
                        Word.Document doc2 = wordApplication.ActiveDocument;
                        doc2.Range(0, 0).Paste();
                        fileName = Dir + number++.ToString() + ".doc";
                        doc2.SaveAs(ref fileName,
                            ref ex, ref missing, ref missing, ref missing, ref missing,
                            ref missing, ref missing, ref missing, ref missing, ref missing,
                            ref missing, ref missing, ref missing, ref missing, ref missing);
                        doc2.Close();
                    }
                    else
                    {
                        fileName = Dir + number++.ToString() + ".doc";
                        doc.SaveAs(ref fileName,
                            ref ex, ref missing, ref missing, ref missing, ref missing,
                            ref missing, ref missing, ref missing, ref missing, ref missing,
                            ref missing, ref missing, ref missing, ref missing, ref missing);
                    }
                }
                else
                {
                    break;
                }
            }
            wordApplication.Documents.Close(Word.WdSaveOptions.wdDoNotSaveChanges);
...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)