Создание Word документов

Radzhab

Client
Регистрация
23.05.2014
Сообщения
1 500
Реакции
1 269
Баллы
113
Здраствуйте друзья и "коллеги". Сегодня хотелось бы рассказать как создавать док-файлы в Zennoposter. Статья рассчитана на новичков)

Примерный план работ на сегодня показан на гифке
AptHeartfeltIndianelephant.gif


1) Добавляем текст с 22 размером шрифта
2) Делаем текст Жирным, Курсивным, Подчеркнутым
3) Центрируем текст
4) Преобразовываем текст в гипперсылку

Для работы нам понадобятся прямые руки, свежая голова ну и желание конечно же.

Переходим по ссылке http://docx.codeplex.com/ и качаем библиотеку.
vDr8K348h0QA6L.png


И переносим скачанный файл c расширением .dll в папку ExternalAssemblies. Если такой папки нет - просто создаем. У меня демо версия зеннки, поэтому такой путь.

XYmEVy9Et1w26d.png


Открываем ProjectMaker. Добавляем элемент ссылки из GAC и указываем ему путь к нашей библиотеке.
8ZrJVedDtGqrjK.png


Далее добавляем элемент Директивы using и указываем пространство имен using Novacode;
0KAgKYPphBRAlB.png


Подготовка закончена и переходим непосредственно к программированию.
Открываем элемент С# Код и вставляем сниппет
C#:
Развернуть Свернуть Копировать
var path = project.Variables["path"].Value; // Указываем путь к файлу
using (DocX document = DocX.Create(@"Test.docx"))
{
              // Создаем экземпляр класса Paragraph.
                Paragraph p = document.InsertParagraph();

                p.Append("Zennoposter word tutorial"); // Текст который мы добавляем

                p.Font(new FontFamily("Calibri")); // Шрифт Calibri

                p.FontSize(22); // Размер шрифта

                p.Bold(); // Жирный текст

                p.Italic(); // Курсивный текст

                p.UnderlineColor(Color.Blue); // Цвет линии подчеркивания

                p.Alignment = Alignment.center; // Выравнивание по центру
         
                // Ну и наконец сохраняем документ
                document.Save()
}
;

Для сравнение покажу как это делается с помощью Office.Interop
C#:
Развернуть Свернуть Копировать
using System;
using Microsoft.Office.Interop.Word;
using System.Reflection;
using System.IO;
namespace OfficeInterop
{
    class Program
    {
        static void Main(string[] args)
        {
            // Get the path of the executing assembly.
            string path = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
            // The location to save the file.
            Object oSaveAsFile = (Object)(path + @"\Test.docx");
            // Object of Missing "Null Value".
            Object oMissing = System.Reflection.Missing.Value;
            // Object of false.
            Object oFalse = false;
            // Create object of Word and Document.
            Application oWord = new Application();
            Document oWordDoc = new Document();
            // Don't display Word.
            oWord.Visible = false;
            // Add a new document.
            oWordDoc = oWord.Documents.Add(ref oMissing, ref oMissing, ref oMissing, ref oMissing);
       
            // Enter some text with the font Arial Black.
            oWord.Selection.Font.Name = "Arial Black";
            oWord.Selection.TypeText("Hello World");
            // Save the document.
            oWordDoc.SaveAs
            (
                ref oSaveAsFile, ref oMissing, ref oMissing, ref oMissing,
                ref oMissing, ref oMissing,ref oMissing, ref oMissing, ref oMissing,
                ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing,
                ref oMissing, ref oMissing
            );
            // Close the file.
            oWordDoc.Close(ref oFalse, ref oMissing, ref oMissing);
        
            // Quit Word.exe
            oWord.Quit(ref oMissing, ref oMissing, ref oMissing);
        }
    }
}
А теперь в OpenXML SDK
C#:
Развернуть Свернуть Копировать
  static void Main(string[] args)
        {
            // Create a package.
            WordprocessingDocument doc =
            WordprocessingDocument.Create
            (
                @"Test.docx",
                WordprocessingDocumentType.Document
            );
            // Create a main document part and add it to the package.
            MainDocumentPart mainPart = doc.AddMainDocumentPart();
            mainPart.Document = new Document();
       
            // Create some content.
            Text textFirstLine = new Text("Hello World");
            Run run = new Run(textFirstLine);
            Paragraph para = new Paragraph(run);
      
            // Apply a font.
            RunProperties runProp = new RunProperties();
            RunFonts runFont = new RunFonts();
            runFont.Ascii = "Arial Black";
            runProp.Append(runFont);
            run.PrependChild<RunProperties>(runProp);
            // Add the content into the document.
            Body body = new Body(para);
            mainPart.Document.Append(body);
       
            /* Save and close */
            mainPart.Document.Save();
            doc.Close();
        }
    }

Разве не чудесная библиотека)?

На сегодня думаю хватит. Это моя первая статья, так что не судите строго. Не хотел сразу грузить инфой пользователей, которые не особо хорошо разбираются в c# коде. Жду пожеланий ну и конструктивной критики конечно же. Создание Word документов думаю не очень востребовано, но все таки)). Хочу затронуть дальше работу с Excel.

ps Гиперссылку добавлю в следующем уроке.
 
Последнее редактирование:
Клево) Спасибо)
 
А в чём практическая ценность создания таких документов через Зеннопостер?
 
Не знаю, но не один раз спрашивали)
 
Отличная статья, как такое замутить по генерации ПДФ-ок?
 
  • Спасибо
Реакции: strannic
Работа с текстом
C#:
Развернуть Свернуть Копировать
 Paragraph p1 = document.InsertParagraph();

                  p1.Append("Простой текст со шрифтом Times new Roman ").Font(new FontFamily("Times new roman"))
                    .Append("Жирный красный \r\n ").Bold().Color(Color.Red)
                    .Append("Наклонного 15-ого размера \r\n").Italic().FontSize(15)
                    .Append("Подчеркнутый синий \r\n").UnderlineColor(Color.Blue)
                    .Append("Зачеркнутый \r\n").StrikeThrough(StrikeThrough.doubleStrike)
                    .Append("Двойное подчеркивание \r\n").UnderlineStyle(UnderlineStyle.doubleLine)
                    .Append("Цвет выделенного текста - зеленый").Highlight(Highlight.green);

Добавляем картинку
C#:
Развернуть Свернуть Копировать
 //Добавляем картинку из файла
                  Novacode.Image img = document.AddImage(@"D:\box.png");
                  Paragraph p2 = document.InsertParagraph();
                  Picture pic = img.CreatePicture();
                  p2.AppendPicture(pic);
Добавляем гиперссылку
C#:
Развернуть Свернуть Копировать
Paragraph p3 = document.InsertParagraph();
                  p3.Alignment = Alignment.center;

                  // Добавляем гиперссылку
                  Hyperlink h = document.AddHyperlink("Текст ссылки", new Uri("http://www.google.com"));
                  p3.AppendHyperlink(h);
qVrwoYbOueQrXg.png
 
  • Спасибо
Реакции: AlisaZ, tatarin и LmPopo
напишите пжлст инструкцию по работе с PDF и Excel

а еще было бы круто если бы HTMLки можно было генерить через какую нить библиотеку удобно а не ручками каждый тег по отдельности прописывать.
 
Побольше бы таких постов!
 
Спасибо за новенькие фичи! ))) Очень интересная статья.
Я за +1 по созданию подобного в Exel :=)))
 
Однозначно пожалуйста ПДФ в начале :de:
 
  • Спасибо
Реакции: LmPopo
Я — за Excel.
В PDF я бы тоже таблички отчётов генерил.
 
  • Спасибо
Реакции: Hannes и Vertyoz
Скиньте какие именно ништяки нужны в pdf

Рандом картинки из некой папки на диске и + текстовка из файлов, ну и пару-тройку урлов на нужный сайт(вверху, посередине и внизу страницы)
 
У меня версия 5.0.3.0 В окошке "Добавить ссылку на сборку" не могу в ручную добавить путь, в котором находится DocX.dll, т.к. "обзора" нету в этой версии программы.
За статью спасибо. Буду изучать.
 
Привет!

Не могу понять что не так, все сделано по инструкции, но в файл ничего не добавляется.
 

Вложения

  • test.xmlz
    test.xmlz
    11,1 KB · Просмотры: 697
Как иначе добавить элемент Директивы using и указать пространство имен using Novacode ?
Версия программы 5.0.4.2
 
ОК попробую
 
Что-то теряюсь с этим "Добавить элементы Директивы using и указать пространство имен using Novacode, - куда что прописать и куда-что положить?
Radzhab подскажи пожалуйста.
 
Что-то теряюсь с этим "Добавить элементы Директивы using и указать пространство имен using Novacode, - куда что прописать и куда-что положить?
Radzhab подскажи пожалуйста.
using Novacode добавь и все заработает. Если не получится пиши в скайп.
0KAgKYPphBRAlB.png
 
У меня чуть более старая версия ZP(5.0.4.2), и соответственно там нет экшена "Директивы using"
Можно ли как нибудь иначе(не через экшен) добавить элементы Директивы using и указать пространство имен using Novacode?
 
Скажите пожалуйста, а с помощью какой команды вставится отступы по краям в Word файле? Например слева линейку надо поставит на 5 , а справа на 15 см?
 
У меня чуть более старая версия ZP(5.0.4.2), и соответственно там нет экшена "Директивы using"
Можно ли как нибудь иначе(не через экшен) добавить элементы Директивы using и указать пространство имен using Novacode?
нельзя. в этом случае в коде просто нужно прописывать методы с полным именем классов, начиная с Novacode.
 

Кто просматривает тему: (Всего: 0, Пользователи: 0, Гости: 0)