Как в ворд вставить код программы

Я ведь это уже делал, но хрен теперь найдешь тот кусок кода, гуглим снова… Где бы найти простое и понятное руководство для начинающего, а не тонкости для мега-гуру?

Главная→C#→MS Office→ Работаем с MS Word из C#, часть 1. Открываем шаблон, ищем текст внутри документа

Рубрики

Свежие записи

  • Вырезаем числовую часть из начала строки в transact-sql
  • Пул соединений с базой данных в ADO.NET / OleDb — как избежать проблем с утечкой соединений в ASP.NET (перевод)
  • ASP .Net MVC, JQuery и AJAX — отсылаем данные на сервер
  • Разделитель тысяч и дробной части для decimal
  • Создаем расширенный Control в WinForms наследуясь от существующего
  • Вставка строк и изменение границ ячеек в Excel Interop из C#
  • Как прочитать данные из удаленного DataRow в DataTable
  • Проблемы с кодировкой при копировании русского текста из MS SQL Studio в Outlook/Word/Office
  • Как проверить, существует ли таблица в MS SQL Server перед удалением/созданием
  • Очень просто.
  • Получаем выбранные строки DataGridView, в котором выбраны только ячейки
  • Ошибка в коде привела к убыткам в 476 миллионов долларов и банкротству компании
  • Отслеживаем изменения выбранного значения в колонке ComboBox DataGridView (DataGridViewComboBoxColumn)
  • Excel 2010, Windows 7, два монитора и «ошибка при направлении команды приложению»
  • Удаляем default-ограничение (constraint) в Transact Sql

Свежие комментарии

  • Kirill к записи Самоучитель по C# для начинающих. 01. Основы языка, переменные, логика, циклы.
  • как избавиться от чувства вины к записи Как добавить строку/текст в начало файла в C# и .Net
  • DannyLef к записи Полезные расширения-плагины для WordPress
  • как избавиться от чувства вины к записи Как добавить строку/текст в начало файла в C# и .Net
  • gweg2ehgwEHERWQHQ к записи Простейшее диалоговое окно-вопрос (MessageBox) в WindowsForms

Архивы

Мета

Работаем с MS Word из C#, часть 1. Открываем шаблон, ищем текст внутри документа

Опубликовано 11.07.2012 автором Ведомир

Как в Word вставить программный код с подсветкой синтаксиса? Оформляем код в ворд с Notepad++

Задача: вывести данные в документ Word. На самом деле это очень большая и необъятная тема, примерно как сам Word, 90% возможностей которого не используются обычными пользователями. Сузим до более простой и чаще встречающейся на практике задачи, с которой в своей время пришлось столкнуться мне самому: надо вывести красивую справку, договор, отчет или иной документ Word с добавлением данных из кода C#. Само собой должны поддерживаться версии Word до 2007, так что о новых форматах файлов придется забыть.

Для начала вспомним, что в Word есть такая замечательная вещь как шаблоны. Соответственно большую часть сложного оформления можно вынести в них и из кода открывать шаблон и вставлять данные в нужные места. Для начала ограничимся простыми строками (типовая задача в крупных предприятиях — вставка дат, цифр, фио и тому подобных вещей, договор на сумму такую-то, от такой-то даты с фио таким-то с параметрами объекта такими-то).

Как сделать красивый листинг кода в Word

Задача на текущую статью: открыть из кода C# шаблон Word и что-то в него вставить. Шаблон в формате .dot приготовим заранее, в том же самом ворде. Для связи с ним будем использовать механизм COM Interoperability (сокращенно Interop), то есть запускать отдельный exe-процесс самого Word и через специальный интерфейс управлять им. Интерфейсы слава богу есть и находятся они в специальных библиотеках, поставляемых вместе с Office, но документация по ним крайне невнятная, поведение местами очень странное и не логичное. В версиях Visual Studio 2010 и выше возможности программирования Office расширены, но текущее руководство действительно и для 2008 студии.

Читайте также:
Как называется программа геолокации

1. Подключить нужные библиотеки
2. Открыть шаблон Word
3. Найти в нем нужное место
4. Вставить в него строку с информацией

1. Проект в студии у нас уже должен быть. В разделе Ссылки/References кликаем правой кнопкой, идем в «Добавить ссылку» и ищем Microsoft.Office.Interop.Word. В параметрах добавленной библиотеки ставим true в Копировать локально/Copy local, так как библиотеку надо копировать вместе с исполняемыми файлами проекта.

В код добавляем соответствующие using

using Word = Microsoft.Office.Interop.Word; using System.Reflection;

2. Теперь вам предстоит провести много времени с замечательным интерфейсом Word, который представляет сам текстовый редактор и его потроха в виде разнообразных обьектов. Сейчас важны два — Application и Document. Переменные для них по ряду не очевидных причин лучше объявлять через интерфейсы.

Word._Application application; Word._Document document;

Так же почти все функции Word требуют объектных параметров, даже если внутри них сидят простые строки и логические значения, так что лучше заранее сделать несколько оберток

Object missingObj = System.Reflection.Missing.Value; Object trueObj = true; Object falseObj = false;

Чтобы запустить Word и открыть в нем шаблон с диска (путь известен), потребуется примерно такой код

//создаем обьект приложения word application = new Word.Application(); // создаем путь к файлу Object templatePathObj = «путь к файлу шаблона»;; // если вылетим не этом этапе, приложение останется открытым try < document = application.Documents.Add(ref templatePathObj, ref missingObj, ref missingObj, ref missingObj); >catch (Exception error) < document.Close(ref falseObj, ref missingObj, ref missingObj); application.Quit(ref missingObj, ref missingObj, ref missingObj); document = null; application = null; throw error; >_application.Visible = true;

Принципиально важны два момента

1. Мы создаем неуправляемый ресурс, который не соберет сборщик мусора — отдельный процесс в памяти с приложением Word, если мы его не закроем и не выведем на экран, он так и останется там висеть до выключения компьютера. Более того такие ворды могут накапливаться незаметно для пользователя, программист-то еще прибьет их вручную. Заботиться о высвобождения неуправляемого ресурса должен программист.

2. По умолчанию Word запускается невидимым, на экран его выводим мы.

Пришло время познакомится с фундаментом работы с Word — великим и ужасным объектом Range. Его суть сложно описать словами -это некоторый произвольный кусок документа, диапазон (range), который может включать в себя все что угодно — от пары символов, до таблиц, закладок и прочих интересных вещей. Не стоит путать его с Selection — куском документа, выделенным мышкой, который само собой можно конвертировать в Range. Соотвественно нам надо получить Range для всего документа, найти нужную строку внутри него, получить Range для этой строки и уже внутри этого последнего диапазона заменить текст на требуемый. И не стоит забывать, что документ может иметь сложную структуру с колонтитулами и прочей ересью, возможный универсальный метод для замены всех вхождений данной строки:

// обьектные строки для Word object strToFindObj = strToFind; object replaceStrObj = replaceStr; // диапазон документа Word Word.Range wordRange; //тип поиска и замены object replaceTypeObj; replaceTypeObj = Word.WdReplace.wdReplaceAll; // обходим все разделы документа for (int i = 1; i ; wordFindObj.GetType().InvokeMember(«Execute», BindingFlags.InvokeMethod, null, wordFindObj, wordFindParameters); >

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

Даже если нам надо найти (и например отформатировать) именно строку с текстом внутри документа, лучше всего выдать наружу найденный Range и уже с ним производить разные злодеяния. Получим примерно такой метод:

object stringToFindObj = stringToFind; Word.Range wordRange; bool rangeFound; //в цикле обходим все разделы документа, получаем Range, запускаем поиск // если поиск вернул true, он долже ужать Range до найденное строки, выходим и возвращаем Range // обходим все разделы документа for (int i = 1; i ; rangeFound = (bool)wordFindObj.GetType().InvokeMember(«Execute», BindingFlags.InvokeMethod, null, wordFindObj, wordFindParameters); if (rangeFound) < return wordRange; >> // если ничего не нашли, возвращаем null return null;

Читайте также:
Рабочая программа технология внеурочная деятельность

Простейшее решение проблемы уникальности текста (нужно нам найти Range слова Word, но внутри всего документа оно встречается десятки раз) — искать строку внутри строки, сначала найти уникальную строку, потом не уникальную внутри нее, неэстетично, но дешево, надежно и практично.

// оформляем обьектные параметры object stringToFindObj = stringToFind; bool rangeFound; /* Обходим редкий глюк в Find, ПРИЗНАННЫЙ MICROSOFT, метод Execute на некоторых машинах вылетает с ошибкой «Заглушке переданы неправильные данные / Stub received bad data» http://support.microsoft.com/default.aspx?scid=kb;en-us;313104 rangeFound = containerRange.Find.Execute(ref stringToFindObj, ref wordMissing, ref wordMissing, ref wordMissing, ref wordMissing, ref wordMissing, ref wordMissing, ref wordMissing, ref wordMissing, ref wordMissing, ref wordMissing, ref wordMissing, ref wordMissing, ref wordMissing, ref wordMissing); */ Word.Find wordFindObj = containerRange.Find; object[] wordFindParameters = new object[15] < stringToFindObj, _missingObj, _missingObj, _missingObj, _missingObj, _missingObj, _missingObj, _missingObj, _missingObj, _missingObj, _missingObj, _missingObj, _missingObj, _missingObj, _missingObj >; rangeFound = (bool)wordFindObj.GetType().InvokeMember(«Execute», BindingFlags.InvokeMethod, null, wordFindObj, wordFindParameters); if (rangeFound) < return containerRange; >else

Если строку надо просто заменить, то сойдет простейшее

_range.Text = «Это текст заменит содержимое Range»;

Но так как Range является универсальный контейнером для любого куска документа Word, то его возможности неизмеримо шире, часть их будет рассмотрена в дальнейших заметках.

Если нам надо просто встать в начало документа (и что-то вставить уже туда):

object start = 0; object end = 0; _currentRange = _document.Range(ref start, ref end);

Сохранить документ на диск можно следующим образом

Object pathToSaveObj = pathToSaveString; _document.SaveAs(ref pathToSaveObj, Word.WdSaveFormat.wdFormatDocument, ref _missingObj, ref _missingObj, ref _missingObj, ref _missingObj, ref _missingObj, ref _missingObj, ref _missingObj, ref _missingObj, ref _missingObj, ref _missingObj, ref _missingObj, ref _missingObj, ref _missingObj, ref _missingObj);

  1. Работаем с MS Word из C#, часть 0, класс и тестовый проект-пример WinForms
  2. Работаем с MS Word из C#, часть 1. Открываем шаблон, ищем текст внутри документа
  3. Работаем с MS Word из C#, часть 2. Вставляем текст на закладку и форматируем
  4. Работаем с MS Word из C#, часть 3. Работа с таблицами
  5. Работаем с MS Word из C#, часть 4. Обьединяем несколько файлов в один, считаем количество страниц
  6. Microsoft.Office.Interop.Word Namespace
  7. Range Interface

Комментарии

Работаем с MS Word из C#, часть 1. Открываем шаблон, ищем текст внутри документа — Комментарии (9)

Павел говорит 24.02.2016 в 18:41 :

Локально этот код работает, но как быть с сервером? Как сделать так, чтобы Word открывался на стороне клиента, когда сайт и файлы уже на сервере?

Источник: nullpro.info

Как в ворд вставить код программы

При написании технической документации (технические задания, описания системы, инструкции и др.) иногда нужно добавить программный код в эту документацию. Для достижения более высокого уровня читабельности этого кода желательно, чтобы он отображался с подсветкой синтаксиса — в соответствии с его стандартом. Подобная практика значительно облечает работу с документом в будущем не только другим людям, но и самому автору.

SQL. Подсветка кода в MS Word

Так как один из самых распространенных текстовых редакторов — это MS Word, и я, в том числе, часто в нем работаю, рассмотрим задачу, как наиболее просто, быстро и удобно отобразить программный код баз данных SQL в этом редакторе.

По умолчанию, копируя текст SQL-скрипта в Word, подстветка синтаксиса не отображается в ворде, причем, даже если копировать из редакторов, поддерживающих подсветку ситаксиса (например, из Notepad++). Вручную менять стили текста кода очень трудоемко, особенно, если речь идет о 5 и более строках кода.

SQL. Подсветка кода в MS Word

Выход с данной ситуации — установить и использовать программу HeidiSQL. Перед вставкой кода в Word вставить его в окно для выполнения запроса:

Потом скопировать его из этого окна и затем вставить в текстовый редактор ворд:

SQL. Подсветка кода в MS Word

В результате мы имеем в вордовском документе SQL-код с подсветкой ситаксиса!

Возможно, иные SQL-менеджеры позволяют делать то же самое, подобные проверки не выполнялись, т.к. HeidiSQL — замечательная программа — очень устраивает своим функционалом и удобным интерфейсом.

Читайте также:
Turbo pascal программы описание

Источник: skalolaskovy.ru

Как добавить форматированный код в документ Microsoft Word?

Мне нужно написать документ в MS-Word 2007, который содержит много примеров VB.NET и C# код.

каков наилучший способ заставить код выглядеть разумным в документе?

какие стили и т. д. Люди используют?

(У меня нет времени вручную редактировать/форматировать код, и я был бы очень рад, если бы он выглядел так же, как в developer studio)

в других работах, что делают люди, которые пишут книги по программированию, там должны хорошее автоматизированное разрешение для этого.

Я хотел бы способ использовать таблицы стилей word, чтобы контролировать, как выглядит код, но не хочу, чтобы «выбрать» каждое ключевое слово и т.д., Чтобы установить его стиль.

задан Community

Количество просмотров материала

29.12.2022 16:42 2672

Распечатать страницу

5 ответов

вы можете использовать исходные услуги выделения и копировать / вставить в документ Word. Думаю, это будет самый быстрый способ (upd. простой copypaste от VS будет также работает).

второй способ — создать стиль для блока кода, сохранить его и применить ко всем блокам кода.

отвечен sashaeve 2022-12-31 00:30

Word не поддерживает подсветку синтаксиса, или другое форматирование кода. Поэтому лучше всего создавать подсветку etc в другой программе (visual studio, eclipse, notepad++ или этой вебсайт который может сделать 14 языка и не требует никакой установки).

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

исправить это, вместо прямого копирования и вставка, используйте вставить ->объект ->OpenDocument Text. Откроется новый документ. Вставьте текст здесь и закройте окно. Теперь ваш код будет отображаться как объект со всем форматированием, показанным в предыдущем окне, но без проверки орфографии или грамматики.

хотя можно форматировать код со стилями, нет встроенных стилей, чтобы сделать это, и это не совсем то, что стили предназначены для этого. Если вы чтобы использовать стили для форматирования кода, просто используйте этот стиль во всех создаваемых объектах.

обновление: если вы хотите сделать это со стилями кода, вот несколько идей.

  • используйте стиль абзаца с моноширинным шрифтом
  • светлый фон (серый хорошо работает)
  • правописание отключено
  • убедитесь, что интервал между строками так, как вы хотите

Если вы хотите добавить немного больше сложность, вы можете наложить стили символов поверх стиля абзаца, чтобы создать что-то похожее на предварительный просмотр кода на stackoverflow с различным форматированием и/или цветом для имен классов, имен экземпляров и т. д.

настройка стиля, как это требует работы, но вы можете получить более настраиваемый результат, чем по сравнению с тем, что вы можете получить с помощью подсветки синтаксиса из notepad++ или Visual Studio.

ускорение при форматировании кода со стилем, это может помочь сначала выполните подсветку синтаксиса в одной из этих программ, а затем воспользуйтесь утилитой поиска Word для поиска текста, соответствующего цвету или другому стилю шрифта, чтобы вам не приходилось вручную определять, что такое имя класса, например, в коде вручную (он находится в разделе more->format в строке поиска).

отвечен soandos 2022-12-31 02:47

Мне нравится использовать Notepad++. В NP++ выберите правильный синтаксис, щелкните правой кнопкой мыши на выбранном коде, выберите «команды плагина», нажмите»копировать текст с подсветкой синтаксиса». Вставьте его в Word, и у вас есть очень красивый код.

отвечен Robert 2022-12-31 05:04

Если вы настроите VS так, как вы хотите, чтобы он выглядел в документе, простая вставка кода будет работать. Он сохранит цвета и другое форматирование.

однако, если вы когда-либо хотите изменить стиль в документе, это будет очень трудно управлять. В этом случае создайте code стиль в word и убедившись, что все вставленный код установлен на это способ сделать (то, если вы измените стиль, все помеченные как этот стиль изменится). Эта воля не позволяют иметь подсветку синтаксиса как в VS.

отвечен Oded 2022-12-31 07:21

Это то, что я сделал.

enter image description here

конечные результаты :

Источник: kompsekret.ru

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru