Использование Office Open XML

Пример решения задачи по нахождению самого длинного слова в документе MS Word с помощью Office Open XML.

Для работы необходимо скачать и установить Open XML SDK 2.0. Вместе с ним можно так же установить Open XML SDK 2.0 Productivity Tool for Microsoft Office - эта программа помогает в понимании структуры документов формата docx.
После установки Open XML SDK 2.0 можно будет добавить к проекту .NET библиотеку DocumentFormat.OpenXML. Также, для удобства, можно использовать пространство имен DocumentFormat.OpenXml.

Исходный код примера:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using DocumentFormat.OpenXml;
using DocumentFormat.OpenXml.Packaging;
using DocumentFormat.OpenXml.Wordprocessing;
using System.Xml;
using System.Xml.Linq;
using System.Windows.Forms;

namespace UsingOpenXML
{
    class Program
    {
        [STAThread]
        static void Main(string[] args)
        {
            string fullPath = "";
            Console.WriteLine("Выберите файл для конвертации.\n" +
                              "Откроется диалоговое окно выбора файла.");
            OpenFileDialog myFileDlg = new OpenFileDialog();
            myFileDlg.DefaultExt = "docx";
            myFileDlg.Filter = "Microsoft Word Document (*.docx)|*.docx";
            System.Windows.Forms.DialogResult res = myFileDlg.ShowDialog();
            if (res != System.Windows.Forms.DialogResult.OK)
            {
                Console.WriteLine("Выбор отменен. Выходим...");
                Console.ReadKey();
                return;
            }
            fullPath = myFileDlg.FileName;

            XNamespace nameSpace = "http://schemas.openxmlformats.org/wordprocessingml/2006/main";
            XNamespace relationshipsns = "http://schemas.openxmlformats.org/officeDocument/2006/relationship";
            // Открываем документ.
            using (WordprocessingDocument doc = WordprocessingDocument.Open(fullPath, true))
            {
                // Получаем основную часть документа.
                MainDocumentPart MainDoc = doc.MainDocumentPart;
                // Получаем тело документа.
                Body body = doc.MainDocumentPart.Document.Body;
                string maxLenWord = "";
                int len = 0;
                // Получаем текста.
                IEnumerable<Text> arrayText =  body.Descendants<Text>().ToArray();
                foreach (Text text in arrayText)
                {
                    string str = text.Text;
                    // Разделяем полученную строку.
                    string[] split = str.Split(' ', '!', '\'');
                    // Проходим по каждому слову.
                    foreach (string word in split)
                    {
                        if (word.Length > len)
                        {
                            maxLenWord = word;
                            len = word.Length;
                        }
                    }
                }
                // Пробел включается в слово. Удалим его, если он есть.
                if (maxLenWord[maxLenWord.Length - 1] == ' ')
                    maxLenWord = maxLenWord.Substring(0, maxLenWord.Length - 1);
                Console.WriteLine("Самое длинное слово: {0}, его длина: {1}", maxLenWord, maxLenWord.Length);
            }
        }
    }
}

см. также статью Генерируем OfficeOpenXML-документы за 5 минут
--
автор: Балаян Артур

Last edited Jan 24, 2012 at 5:01 AM by basph, version 8

Comments

No comments yet.