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

Radzhab

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

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


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

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

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


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



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


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


Подготовка закончена и переходим непосредственно к программированию.
Открываем элемент С# Код и вставляем сниппет
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 Гиперссылку добавлю в следующем уроке.
 

Для запуска проектов требуется программа ZennoPoster.
Это основное приложение, предназначенное для выполнения автоматизированных шаблонов действий (ботов).
Подробнее...

Для того чтобы запустить шаблон, откройте программу ZennoPoster. Нажмите кнопку «Добавить», и выберите файл проекта, который хотите запустить.
Подробнее о том, где и как выполняется проект.

Последнее редактирование:

rostonix

Известная личность
Регистрация
23.12.2011
Сообщения
29 067
Благодарностей
5 703
Баллы
113
Клево) Спасибо)
 

codeby

Client
Регистрация
25.08.2014
Сообщения
394
Благодарностей
53
Баллы
28
А в чём практическая ценность создания таких документов через Зеннопостер?
 

rostonix

Известная личность
Регистрация
23.12.2011
Сообщения
29 067
Благодарностей
5 703
Баллы
113
Не знаю, но не один раз спрашивали)
 

AlisaZ

Client
Регистрация
17.09.2014
Сообщения
159
Благодарностей
173
Баллы
43
Отличная статья, как такое замутить по генерации ПДФ-ок?
 
  • Спасибо
Реакции: strannic

Radzhab

Client
Регистрация
23.05.2014
Сообщения
1 500
Благодарностей
1 263
Баллы
113

Radzhab

Client
Регистрация
23.05.2014
Сообщения
1 500
Благодарностей
1 263
Баллы
113
Работа с текстом
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);
 
  • Спасибо
Реакции: AlisaZ, tatarin и LmPopo

misterio

Пользователь
Регистрация
06.09.2014
Сообщения
92
Благодарностей
20
Баллы
8
напишите пжлст инструкцию по работе с PDF и Excel

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

Radzhab

Client
Регистрация
23.05.2014
Сообщения
1 500
Благодарностей
1 263
Баллы
113
Ну пока вроде тока один человек за Excel) Если еще потянутся люди - накатаем. Какие проблемы
 

LmPopo

Client
Регистрация
06.12.2012
Сообщения
299
Благодарностей
136
Баллы
43
Я за PDF )
 
  • Спасибо
Реакции: Wide, strannic и AlisaZ

tatarin

Client
Регистрация
28.10.2012
Сообщения
795
Благодарностей
131
Баллы
43
Побольше бы таких постов!
 

Vertyoz

Client
Регистрация
25.08.2014
Сообщения
22
Благодарностей
0
Баллы
1
Спасибо за новенькие фичи! ))) Очень интересная статья.
Я за +1 по созданию подобного в Exel :=)))
 

AlisaZ

Client
Регистрация
17.09.2014
Сообщения
159
Благодарностей
173
Баллы
43
Однозначно пожалуйста ПДФ в начале :de:
 
  • Спасибо
Реакции: LmPopo

Radzhab

Client
Регистрация
23.05.2014
Сообщения
1 500
Благодарностей
1 263
Баллы
113
Скиньте какие именно ништяки нужны в pdf. Например тот шаблон который чаще всего встречается.
 

Nick

Client
Регистрация
22.07.2014
Сообщения
1 961
Благодарностей
796
Баллы
113
Я — за Excel.
В PDF я бы тоже таблички отчётов генерил.
 
  • Спасибо
Реакции: Hannes и Vertyoz

AlisaZ

Client
Регистрация
17.09.2014
Сообщения
159
Благодарностей
173
Баллы
43
Скиньте какие именно ништяки нужны в pdf
Рандом картинки из некой папки на диске и + текстовка из файлов, ну и пару-тройку урлов на нужный сайт(вверху, посередине и внизу страницы)
 

Lankorn

Client
Регистрация
09.01.2013
Сообщения
78
Благодарностей
3
Баллы
8
У меня версия 5.0.3.0 В окошке "Добавить ссылку на сборку" не могу в ручную добавить путь, в котором находится DocX.dll, т.к. "обзора" нету в этой версии программы.
За статью спасибо. Буду изучать.
 

alex8ebber

Client
Регистрация
04.12.2013
Сообщения
57
Благодарностей
5
Баллы
8
Привет!

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

Вложения

  • 11,1 КБ Просмотры: 539

Radzhab

Client
Регистрация
23.05.2014
Сообщения
1 500
Благодарностей
1 263
Баллы
113
У меня работает
 

alex8ebber

Client
Регистрация
04.12.2013
Сообщения
57
Благодарностей
5
Баллы
8

Radzhab

Client
Регистрация
23.05.2014
Сообщения
1 500
Благодарностей
1 263
Баллы
113
Версия офиса роли не играет. Скорее всего в другой разрядности перекомпилить библиотеку.
 

Radzhab

Client
Регистрация
23.05.2014
Сообщения
1 500
Благодарностей
1 263
Баллы
113
я был прав
 

GreenWay

Client
Регистрация
11.05.2012
Сообщения
423
Благодарностей
132
Баллы
43
Как иначе добавить элемент Директивы using и указать пространство имен using Novacode ?
Версия программы 5.0.4.2
 

Radzhab

Client
Регистрация
23.05.2014
Сообщения
1 500
Благодарностей
1 263
Баллы
113
Скорее всего пихнуть в папку с программоц
 

GreenWay

Client
Регистрация
11.05.2012
Сообщения
423
Благодарностей
132
Баллы
43
ОК попробую
 

GreenWay

Client
Регистрация
11.05.2012
Сообщения
423
Благодарностей
132
Баллы
43
Что-то теряюсь с этим "Добавить элементы Директивы using и указать пространство имен using Novacode, - куда что прописать и куда-что положить?
Radzhab подскажи пожалуйста.
 

Radzhab

Client
Регистрация
23.05.2014
Сообщения
1 500
Благодарностей
1 263
Баллы
113
Что-то теряюсь с этим "Добавить элементы Директивы using и указать пространство имен using Novacode, - куда что прописать и куда-что положить?
Radzhab подскажи пожалуйста.
using Novacode добавь и все заработает. Если не получится пиши в скайп.
 

GreenWay

Client
Регистрация
11.05.2012
Сообщения
423
Благодарностей
132
Баллы
43
У меня чуть более старая версия ZP(5.0.4.2), и соответственно там нет экшена "Директивы using"
Можно ли как нибудь иначе(не через экшен) добавить элементы Директивы using и указать пространство имен using Novacode?
 

shulai

Client
Регистрация
23.08.2011
Сообщения
1
Благодарностей
0
Баллы
1
Скажите пожалуйста, а с помощью какой команды вставится отступы по краям в Word файле? Например слева линейку надо поставит на 5 , а справа на 15 см?
 

rostonix

Известная личность
Регистрация
23.12.2011
Сообщения
29 067
Благодарностей
5 703
Баллы
113
У меня чуть более старая версия ZP(5.0.4.2), и соответственно там нет экшена "Директивы using"
Можно ли как нибудь иначе(не через экшен) добавить элементы Директивы using и указать пространство имен using Novacode?
нельзя. в этом случае в коде просто нужно прописывать методы с полным именем классов, начиная с Novacode.
 

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