Форум программистов, компьютерный форум, киберфорум
C#: WPF, UWP и Silverlight
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.97/29: Рейтинг темы: голосов - 29, средняя оценка - 4.97
25 / 24 / 13
Регистрация: 04.07.2012
Сообщений: 463
1
.NET 4.x

Заполнить шаблон Word

08.09.2017, 21:03. Показов 5460. Ответов 8
Метки word (Все метки)

Author24 — интернет-сервис помощи студентам
нашел здесь, как заполнить шаблон. А как сохранить в одной книге Word несколько листов заполненного шаблона. Чтоб каждый экземпляр начинался с нового листа
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Word._Application oWord = new Word.Application();
 
        private void button1_Click(object sender, RoutedEventArgs e)
        {
            // Считывает шаблон и сохраняет измененный в новом
            _Document oDoc = GetDoc(@"C:\Users\Пропуск.dot");
            oDoc.SaveAs(FileName: Environment.CurrentDirectory + "\\For_print.doc");
            oDoc.Close();
        }
 
        private _Document GetDoc(string path)
        {
            _Document oDoc = oWord.Documents.Add(path);
            SetTemplate(oDoc);
            return oDoc;
        }
 
        private void SetTemplate(Word._Document oDoc)
        {
            oDoc.Bookmarks["фамилия"].Range.Text = "иванолв";
            oDoc.Bookmarks["имя"].Range.Text = "иван";
            oDoc.Bookmarks["отчество"].Range.Text = "иваныч";
        }
0
08.09.2017, 21:03
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
08.09.2017, 21:03
Ответы с готовыми решениями:

Шаблон word-документа
Ув. Форумчане!!! Помогите пожалуйста с формированием doc-файла посредством xml. Я понимаю, что нужно что-то творить с xslt, но что... ...

Вшить в программу шаблон word
Хочу вшить в свой проект готовый шаблон word (для удобства сотрудников, захотели посмотреть форму заявления на отгул к примеру открыли и...

Экспорт данных в шаблон Word
Здравствуйте, подскажите как сформировать отчёт из С# в Word. Заранее спасибо =)

8
25 / 24 / 13
Регистрация: 04.07.2012
Сообщений: 463
07.11.2017, 13:20  [ТС] 2
Тема еще актуальна. Надо с одним шаблоном создать несколько листов
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
// Создаём объект документа
            Word.Document doc = null;
            try
            {
                // Создаём объект приложения
                Word.Application app = new Word.Application();
                // Путь до шаблона документа
                string source = @"C:\Users\Desktop\фамилия.dot";
                // Открываем
                doc = app.Documents.Open(source);
                doc.Activate();
                                
                doc.Bookmarks["фамилия"].Range.Text = "иванов";
                doc.Bookmarks["имя"].Range.Text = "иван";
                doc.Bookmarks["отчество"].Range.Text = "иваныч";
 
                //вызвать разрыв страницы после последнего слова
                doc.Words.Last.InsertBreak(Word.WdBreakType.wdPageBreak);
 
                
 
                /*
                вот здесь наверно создавать второй экземпляр
                */
 
                // Закрываем документ
                doc.SaveAs(@"C:\Users\Desktop\Пропуск" + but.ToString() + ".doc");
                doc.Close();
                doc = null;                
                app.Quit();
                
                //Process.Start(@"C:\Users\Desktop\Пропуск.doc");
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
                // Если произошла ошибка, то
                // закрываем документ и выводим информацию
                doc.Close();
                doc = null;
                Console.WriteLine("Во время выполнения произошла ошибка!");
                Console.ReadLine();
            }
0
 Аватар для ViterAlex
8945 / 4857 / 1886
Регистрация: 11.02.2013
Сообщений: 10,246
07.11.2017, 15:36 3
alexs622, нельзя создать отдельную страницу документа из шаблона. Можно создать несколько документов из одного шаблона, а затем объединить их в один через поле INCLUDETEXT.
Для твоей задачи правильнее использовать слияние, но это требует наличия источника данных.
0
25 / 24 / 13
Регистрация: 04.07.2012
Сообщений: 463
07.11.2017, 18:37  [ТС] 4
Т.е для каждого листа шаблона создать свой Word.Application app и потом их связать? Можно подробнее?
0
 Аватар для ViterAlex
8945 / 4857 / 1886
Регистрация: 11.02.2013
Сообщений: 10,246
08.11.2017, 03:27 5
alexs622, судя по вопросу, ты не совсем понимаешь, что именно происходит. Нужно открыть приложение Word. На основе шаблона создавать новые документы и сохранять эти документы где-нибудь. Затем объединить все документы в один методом IncludeFile. Примерно таким классом это можно реализовать:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
public static class WordHelper
{
    private static dynamic _wdApp;
    private static dynamic _wdDoc;
    /// <summary>
    /// Создание приложения Word
    /// </summary>
    public static void CreateApp()
    {
        _wdApp = Activator.CreateInstance(Type.GetTypeFromProgID("Word.Application"));
        _wdApp.Visible = true;
    }
    /// <summary>
    /// Создание нового документ
    /// </summary>
    /// <param name="fileName">Полное имя файла нового документа</param>
    /// <param name="template">Путь к шаблону, на основе которого будет создаваться документ</param>
    /// <param name="firstName">Имя</param>
    /// <param name="middleName">Отчество</param>
    /// <param name="lastName">Фамилия</param>
    public static void NewDoc(string fileName, string template, string firstName, string middleName, string lastName)
    {
        _wdDoc = _wdApp.Documents.Add(template);
        _wdDoc.Bookmarks["FirstName"].Range.Text = firstName;
        _wdDoc.Bookmarks["MiddleName"].Range.Text = middleName;
        _wdDoc.Bookmarks["LastName"].Range.Text = lastName;
        _wdDoc.SaveAs(fileName);
        _wdDoc.Close();
    }
 
    /// <summary>
    /// Объединение документов
    /// </summary>
    /// <param name="fileName">Имя результирующего документа</param>
    /// <param name="docs">Полные пути к файлам, которые нужно включить в результирующий документ</param>
    public static void JoinDocs(string fileName, IEnumerable<string> docs)
    {
        _wdDoc = _wdApp.Documents.Add();
        foreach (var doc in docs)
        {
            _wdDoc.Paragraphs.Last.Range.InsertFile($"\"{doc}\"");
            _wdDoc.Paragraphs.Last.Range.InsertBreak(7);//wdPageBreak
        }
        _wdDoc.SaveAs(fileName);
        _wdDoc.Close();
    }
    /// <summary>
    /// Закрытие приложения Word
    /// </summary>
    public static void CloseApp()
    {
        if (_wdApp != null)
        {
            _wdApp.Quit(false);
            _wdApp = null;
        }
    }
}
Как примерно работать:
C#
1
2
3
4
5
WordHelper.CreateApp();
//создаёшь новые документы вызывая нужное количество раз метод NewDoc
//...
//Объединяешь созданные документы в один, вызва JoinDocs
WordHelper.CloseApp();
Что именно делать в методе NewDoc и какие параметры туда передавать — решаешь сам.
0
0 / 0 / 0
Регистрация: 16.04.2020
Сообщений: 10
07.01.2025, 14:08 6
Данный способ отлично работает, когда вертикальные листы А4. Как сделать, когда горизонтальные и разные размера (А4 с А5)?
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
15920 / 11063 / 2860
Регистрация: 21.04.2018
Сообщений: 32,465
Записей в блоге: 2
07.01.2025, 15:17 7
artem2598, тема восьмилетней давности.
ViterAlex уже почти год не заходит на Форум.

Советую создать новую свою тему, в которой сослаться на эту. В новой теме показать свою реализацию и описать возникшие проблемы.
0
0 / 0 / 0
Регистрация: 16.04.2020
Сообщений: 10
07.01.2025, 22:22 8
Хорошая идея. А при создании темы можно ссылку сделать на эту тему? Не будет нарушение форума?
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
15920 / 11063 / 2860
Регистрация: 21.04.2018
Сообщений: 32,465
Записей в блоге: 2
07.01.2025, 23:15 9
Цитата Сообщение от artem2598 Посмотреть сообщение
А при создании темы можно ссылку сделать на эту тему?
Без проблем. Конечно, можно.
0
07.01.2025, 23:15
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
07.01.2025, 23:15
Помогаю со студенческими работами здесь

Заполнить шаблон Word
Существует шаблон в ворде. Таблица... 2 колонки... И неизвестное количество записей в c# в datagridwiev; Так вот. Как бы мне запихать...

Заполнить шаблон документа (таблица в Word)
Здравствуйте. Вы мне уже очень помогли. Надеюсь, не оставите меня и в этот раз. Моя задача записать в файл строки. В документе Word...

Взять данные из базы MySQL, и заполнить ими определенный шаблон в Word-е
недавно начал писать приложение на C#. Суть его в том, чтобы взять данные из базы MySQL и заполнить ими определенный шаблон в ворде. В...

Word + Excel, Импорт данных из Excel в шаблон Word с условиями
Здравствуйте! Помогите, пожалуйста. Есть файл Word с расставленными закладками-метками и файл Excel с несколькими листами. С помощью...

Заполнить шаблон таблицы
Добрый день!Плохо знаю excel.. Задача: Заполнить шаблон таблицы Что требуется в данной задачи?Просто ввести произвольные данные в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему

Редактор формул (кликните на картинку в правом углу, чтобы закрыть)
Новые блоги и статьи
Использование кэша Laravel - полный гайд
bytestream 18.02.2025
Кэширование - один из наиболее эффективных способов повышения производительности веб-приложений. В современном мире, где скорость загрузки страниц напрямую влияет на удержание пользователей и. . .
Создаем REST API в Laravel с аутентификацией через Passport
bytestream 18.02.2025
Разработка современных веб-приложений все чаще требует создания надежного и хорошо структурированного API. REST API стал стандартом де-факто для построения взаимодействия между клиентской и серверной. . .
Пайплайны в Laravel - полный гайд
bytestream 18.02.2025
Разработка современных веб-приложений часто требует обработки сложных процессов, состоящих из множества последовательных шагов. Например, при создании системы комментариев может потребоваться. . .
Как правильно использовать @required в Symfony
bytestream 18.02.2025
При разработке приложений на Symfony мы часто сталкиваемся с необходимостью внедрения зависимостей. Фреймворк предоставляет несколько способов управления этим процессом, и одним из таких инструментов. . .
Система безопасности в Laravel: возможности и примеры
Wired 18.02.2025
Каждый день появляются новые виды атак и уязвимостей, которые могут поставить под угрозу конфиденциальные данные пользователей и функционирование всей системы. В этом контексте выбор надежного. . .
Давайте сравним Django и Laravel
Wired 18.02.2025
Django и Laravel - два мощных инструмента, которые часто сравнивают между собой. Оба фреймворка предлагают разработчикам богатый набор возможностей для создания масштабируемых веб-приложений, но. . .
Laravel или React - что лучше?
Wired 18.02.2025
В разработке веб выбор правильного инструмента часто определяет успех всего проекта. Особенно интересным представляется сравнение Laravel и React - двух популярных технологий, которые часто. . .
Laravel 11: новые возможности, гайд по обновлению
Wired 18.02.2025
Laravel 11 - это новая масштабная версия одного из самых популярных PHP-фреймворков, выпущенная в марте 2024 года. Эта версия продолжает традицию внедрения передовых технологий и методологий. . .
Миграции в Laravel
Wired 18.02.2025
Разработка веб-приложений на Laravel неразрывно связана с управлением структурой базы данных. При работе над проектом часто возникает необходимость вносить изменения в схему базы данных - добавлять. . .
Аутентификация в Laravel
Wired 18.02.2025
В современном мире веб-разработки безопасность пользовательских данных становится критически важным аспектом любого приложения. Laravel, как один из самых популярных PHP-фреймворков, предоставляет. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru