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

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

08.09.2017, 21:03. Показов 5206. Ответов 4
Метки 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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.09.2017, 21:03
Ответы с готовыми решениями:

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

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

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

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

4
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
8943 / 4855 / 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
8943 / 4855 / 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
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru