Форум программистов, компьютерный форум, киберфорум
Visual Basic .NET
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.56/18: Рейтинг темы: голосов - 18, средняя оценка - 4.56
0 / 0 / 0
Регистрация: 04.05.2013
Сообщений: 49
1

Заполнение формул в Word

14.01.2018, 21:32. Показов 3220. Ответов 16
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Язык программирования Visual Basic Net.
Есть документ Word (версия с docx). В документе есть куча текста, формул, таблиц.
Как заполнять таблички - знаю.
Вопрос, как заменить определенный текст в документе и как заменить числа (или буквы) в формуле используя средства Vb.Net?

Формула любого вида (старый или новый формат).

P.s. задача, в принципе, следующая: есть програмка, которая производит расчет. Хочу при помощи кода автоматизировать вывод результатов расчета в конечный документ для пользователя. Для этого создам шаблон и в него вставлять рассчитанные значения
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.01.2018, 21:32
Ответы с готовыми решениями:

Загрузка картинок, формул в Rich TextBox с последующим сохранением WORD
Загрузка картинок, формул в Rich TextBox с последующим сохранением WORD. Вставить картинку...

Заполнение шаблона Word
В шаблоне есть таблица, как заполнить ее построчно из текстбокса?

Заполнение таблицы в шаблоне Word
Доброго времени суток господа. Вопрос возможно для знатоков прост... Создаю документ Word, в...

Заполнение строки Word, если ее длина неизвестна
Доброе время суток. :) Возник вот такой вопрос по Word Как написать строку в Ворде если я заранее...

16
99 / 94 / 23
Регистрация: 30.08.2015
Сообщений: 457
15.01.2018, 13:21 2
Цитата Сообщение от miki2343 Посмотреть сообщение
Для этого создам шаблон
а что если в шаблоне вместо значений подставить идентификационный набор символов и потом искать их и заменять на соответствующие им значения ?
0
0 / 0 / 0
Регистрация: 04.05.2013
Сообщений: 49
15.01.2018, 17:43  [ТС] 3
Кстати, как вариант.
Еще, кто сможет предложить способы?

Добавлено через 3 часа 41 минуту
В принципе испытал замену в новом редакторе формул. Меняет только если формула представлена в текстовом формате. Но это ничего страшного. Можно и так оставить.

Вопрос теперь в другом
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
     Dim Word As Word.Application
        Word = CreateObject("Word.Application")
        Word.Documents.Open("D:\test.dotx") 'открываем документ
        Word.Visible = True
 
        With Word.Selection.Find
            .Execute(Replace("мама", 0, 0))  'что ищем
            Word.Selection.Text = "заменено" 'на что меняем
        End With
 
        With Word.Selection.Find
            .Execute(Replace("папа", 0, 0))  'что ищем
            Word.Selection.Text = "заменено1" 'на что меняем
        End With
Этот код ошибочный, а именно он меняет только одно слово "мама" на "заменено1".
Как сделать, чтобы менял "мама" на "заменено", а "папа" на "заменено1". Причем это по всему документу а не в одном месте?

Понимаю, что надо прописать ReplaceAll, но проискав по инету, выдает все ошибки в коде.
0
99 / 94 / 23
Регистрация: 30.08.2015
Сообщений: 457
15.01.2018, 17:56 4
miki2343, зачем вам Visual Basic?

Добавлено через 15 секунд
нужен же Visual Basic .NET ?
0
0 / 0 / 0
Регистрация: 04.05.2013
Сообщений: 49
15.01.2018, 18:09  [ТС] 5
Прошу прощения - неверный тег при оформлении этого поста
0
99 / 94 / 23
Регистрация: 30.08.2015
Сообщений: 457
15.01.2018, 18:10 6
Лучший ответ Сообщение было отмечено miki2343 как решение

Решение

VB.NET
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
Imports Microsoft.Office.Interop
 
Public Class Form1
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Dim oWord As Word.Application
        oWord = CreateObject("Word.Application")
        oWord.Visible = True
        oWord.Documents.Open("C:\temp\test.docx")
 
 
        With oWord.Selection.Find
            .Text = "папа"
            .Replacement.Text = "удалить:)"
            .Forward = True
            .Wrap = Word.WdFindWrap.wdFindContinue
            .Format = False
            .MatchCase = False
            .MatchWholeWord = False
            .MatchWildcards = False
            .MatchSoundsLike = False
            .MatchAllWordForms = False
        End With
        oWord.Selection.Find.Execute(Replace:=Word.WdReplace.wdReplaceAll)
    End Sub
End Class
1
0 / 0 / 0
Регистрация: 04.05.2013
Сообщений: 49
15.01.2018, 18:29  [ТС] 7
Немножко Ваш код изменил, для удобства чтения в Vb.net.
Добавил вторую переменную.
Итог:

VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
  Dim oWord As Word.Application
        oWord = CreateObject("Word.Application")
        oWord.Visible = True
        oWord.Documents.Open("D:\test.dotx")
 
 
        With oWord.Selection.Find
            .Text = "папа"
            .Replacement.Text = "удалить:)"
        End With
        oWord.Selection.Find.Execute(Replace:=Word.WdReplace.wdReplaceAll, MatchAllWordForms:=False, MatchSoundsLike:=False, Wrap:=Word.WdFindWrap.wdFindContinue, Forward:=True, Format:=False, MatchCase:=False, MatchWholeWord:=False, MatchWildcards:=False)
 
        With oWord.Selection.Find
            .Text = "мама"
            .Replacement.Text = "кря-кря"
        End With
        oWord.Selection.Find.Execute(Replace:=Word.WdReplace.wdReplaceAll, MatchAllWordForms:=False, MatchSoundsLike:=False, Wrap:=Word.WdFindWrap.wdFindContinue, Forward:=True, Format:=False, MatchCase:=False, MatchWholeWord:=False, MatchWildcards:=False)
0
99 / 94 / 23
Регистрация: 30.08.2015
Сообщений: 457
15.01.2018, 18:47 8
остается только сохранить результат
VB.NET
1
2
3
        oWord.ActiveDocument.Save()
        oWord.Quit()
        oWord = Nothing
Добавлено через 13 минут
альтернативой может служить Latex формат документа word. тенденция его использования в сапрах и математических программах - растет и нет необходимости в дополнительных инструментах для формирования документов с графиками/формул к примеру в worde
0
0 / 0 / 0
Регистрация: 04.05.2013
Сообщений: 49
15.01.2018, 19:10  [ТС] 9
Лучше так А то шаблон испортим

VB.NET
1
2
        oWord.ActiveDocument.SaveAs("d:\Test.docx")
        oWord = Nothing

А это если еще и док закрыть (правда тогда зачем его показывать вначале))
VB.NET
1
2
3
oWord.ActiveDocument.SaveAs("d:\Test.docx")
oWord.Documents.Close()
oWord.Quit()
Добавлено через 17 минут
Объединю ответ в конечный код, а то просто таких тем не мало...

Итак:
1. Добавляем в проект: Проект->Добавить ссылку-> в COM находим Microsoft Office 16 Object Library (циферка не суть). Тыкаем галочку и тыкаем ОК
2. Код:
VB.NET
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
Imports Microsoft.Office.Interop
Public Class Form1
 
 
 Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Dim oWord As Word.Application
        oWord = CreateObject("Word.Application")
        oWord.Visible = True
        oWord.Documents.Open("D:\test.dotx")
 
        'эта секция меняет слово "папа" на "удалить:)" ВО ВСЕМ ДОКУМЕНТЕ
        With oWord.Selection.Find
            .Text = "папа"
            .Replacement.Text = "удалить:)"
        End With
        oWord.Selection.Find.Execute(Replace:=Word.WdReplace.wdReplaceAll, MatchAllWordForms:=False, MatchSoundsLike:=False, Wrap:=Word.WdFindWrap.wdFindContinue, Forward:=True, Format:=False, MatchCase:=False, MatchWholeWord:=False, MatchWildcards:=False)
 
        'эта секция меняет слово "мама" на "кря-кря" ВО ВСЕМ ДОКУМЕНТЕ
        With oWord.Selection.Find
            .Text = "мама"
            .Replacement.Text = "кря-кря"
        End With
        oWord.Selection.Find.Execute(Replace:=Word.WdReplace.wdReplaceAll, MatchAllWordForms:=False, MatchSoundsLike:=False, Wrap:=Word.WdFindWrap.wdFindContinue, Forward:=True, Format:=False, MatchCase:=False, MatchWholeWord:=False, MatchWildcards:=False)
 
 
        'сохраняем документ с ДРУГИМ расширением, дабы не повредить шаблон
        oWord.ActiveDocument.SaveAs("d:\Test.docx")
        oWord = Nothing
 
      
    End Sub
 
End Class
0
4407 / 3531 / 843
Регистрация: 02.02.2013
Сообщений: 3,417
Записей в блоге: 2
15.01.2018, 19:21 10
densy, если вы добавили ссылку на Office.Interop, то нет никакой необходимости использовать CreateObject("Word.Application") (используется при т.н. поздней привязке).
Пример с организацией т.н. ранней привязкой:
VB.NET
1
2
3
4
5
6
7
8
9
10
Imports WRD = Microsoft.Office.Interop.Word
Public Class Form1
    Private wApp As WRD.Application
    Private wDoc As WRD.Document
    Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
        wApp = New WRD.Application
        wDoc = wApp.Documents.Open(Path.Combine(Application.StartupPath, "tst.doc"))
        wApp.Visible = True
    End Sub
'…
1
0 / 0 / 0
Регистрация: 04.05.2013
Сообщений: 49
15.01.2018, 19:34  [ТС] 11
Я ошибся. Неправильно указал ссылку
Надо
Microsoft Word 16.- Object Library

Office - не катит
0
0 / 0 / 0
Регистрация: 04.05.2013
Сообщений: 49
25.02.2018, 08:43  [ТС] 12
Не хочется новую тему создавать.
А как удалить целую строку в документе?
0
1710 / 1198 / 227
Регистрация: 23.12.2010
Сообщений: 1,527
25.02.2018, 23:39 13
Цитата Сообщение от miki2343 Посмотреть сообщение
А то шаблон испортим
а чтоб шаблон не испортить, надо не ОТКРЫВАТЬ его, а СОЗДАВАТЬ НОВЫЙ ДОКУМЕНТ на основе имеющегося файла:
VB.NET
1
wDoc = wApp.Documents.Open(Path.Combine(Application.StartupPath, "tst.doc"))
меняем на
VB.NET
1
wDoc = wApp.Documents.Add(Path.Combine(Application.StartupPath, "tst.doc"))
ну а если метод add вызвать так: add() - будет создан документ на основе шаблона по-умолчанию (обычно это Normal.dot)
0
15 / 13 / 6
Регистрация: 13.03.2013
Сообщений: 130
26.02.2018, 19:59 14
Цитата Сообщение от miki2343 Посмотреть сообщение
Как заполнять таблички - знаю.
а можно поделиться знаниями?)))
как раз планирую решать такую задачу, не знаю с какой стороны подойти
планирую значения из DataGridView писать в docx-шаблон, в котором таблица плюс несколько текстовых строк
0
0 / 0 / 0
Регистрация: 04.05.2013
Сообщений: 49
26.02.2018, 20:07  [ТС] 15
Заполнение таблицы Word документа - здесь есть как добавлять строки. А так полно информации по работе с Word таблицами.
Но, на мой взгляд, выше описанный способ очень неплох, т.к. создаете шаблон, а потом просто меняете в нем определенные вещи.

Или спросите более точно тогда, думаю или я или другие более грамотные ответят
0
15 / 13 / 6
Регистрация: 13.03.2013
Сообщений: 130
26.02.2018, 20:10 16
Цитата Сообщение от miki2343 Посмотреть сообщение
Но, на мой взгляд, выше описанный способ очень неплох, т.к. создаете шаблон, а потом просто меняете в нем определенные вещи.
с заменой всё ясно
вопрос скорее как добавлять новые строки в таблицу
0
1710 / 1198 / 227
Регистрация: 23.12.2010
Сообщений: 1,527
27.02.2018, 10:19 17
Цитата Сообщение от forlife Посмотреть сообщение
вопрос скорее как добавлять новые строки в таблицу
Visual Basic
1
ThisDocument.Tables(1).Rows.add
это из VBA - вставляет новую строку в конец первой таблицы в документе.
https://msdn.microsoft.com/en-... ethod-word
0
27.02.2018, 10:19
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
27.02.2018, 10:19
Помогаю со студенческими работами здесь

Генерация и заполнение документа Word в студии 2к12
Доброго времени суток, уважаемые господа. Столкнулся с такой проблемой: -Имеется необходимость...

Как автоматизировать заполнение документа Word данными?
Здравствуйте. Подскажите пожалуйста как реализовать такую задумку? В организации есть 4...

Заполнение таблиц с использованием формул
- Создать 2 таблицы которые имеют входные данные (на фотке) используя эти таблицы сформировать...

Заполнение массива с использованием формул
Надо заполнить двумерный массив с использованием формуле(я так думаю,по этой формуле :A=I*J)...


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

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru