C сохранение в word
Я ведь это уже делал, но хрен теперь найдешь тот кусок кода, гуглим снова… Где бы найти простое и понятное руководство для начинающего, а не тонкости для мега-гуру?
Рубрики
Свежие записи
Свежие комментарии
Архивы
1. Подключить нужные библиотеки
2. Открыть шаблон Word
3. Найти в нем нужное место
4. Вставить в него строку с информацией
1. Проект в студии у нас уже должен быть. В разделе Ссылки/References кликаем правой кнопкой, идем в "Добавить ссылку" и ищем Microsoft.Office.Interop.Word. В параметрах добавленной библиотеки ставим true в Копировать локально/Copy local, так как библиотеку надо копировать вместе с исполняемыми файлами проекта.
В код добавляем соответствующие using
2. Теперь вам предстоит провести много времени с замечательным интерфейсом Word, который представляет сам текстовый редактор и его потроха в виде разнообразных обьектов. Сейчас важны два - Application и Document. Переменные для них по ряду не очевидных причин лучше объявлять через интерфейсы.
Так же почти все функции Word требуют объектных параметров, даже если внутри них сидят простые строки и логические значения, так что лучше заранее сделать несколько оберток
Чтобы запустить Word и открыть в нем шаблон с диска (путь известен), потребуется примерно такой код
Принципиально важны два момента
1. Мы создаем неуправляемый ресурс, который не соберет сборщик мусора - отдельный процесс в памяти с приложением Word, если мы его не закроем и не выведем на экран, он так и останется там висеть до выключения компьютера. Более того такие ворды могут накапливаться незаметно для пользователя, программист-то еще прибьет их вручную. Заботиться о высвобождения неуправляемого ресурса должен программист.
2. По умолчанию Word запускается невидимым, на экран его выводим мы.
Для начала рассмотрим самый простой и примитивный вариант - поиск и замена строки в документе Word. Некоторые программисты так и работают - ставят в шаблон текстовую метку вроде @@nowDate и заменяют ее на нужное значение.
Пришло время познакомится с фундаментом работы с Word - великим и ужасным объектом Range. Его суть сложно описать словами -это некоторый произвольный кусок документа, диапазон (range), который может включать в себя все что угодно - от пары символов, до таблиц, закладок и прочих интересных вещей. Не стоит путать его с Selection - куском документа, выделенным мышкой, который само собой можно конвертировать в Range. Соотвественно нам надо получить Range для всего документа, найти нужную строку внутри него, получить Range для этой строки и уже внутри этого последнего диапазона заменить текст на требуемый. И не стоит забывать, что документ может иметь сложную структуру с колонтитулами и прочей ересью, возможный универсальный метод для замены всех вхождений данной строки:
На самом деле это не самый лучший метод для вставки информации в документ, так как могут возникнуть сложности с уникальными именами для текстовых меток (если текст одной входит в начало другой, данный метод найдет ее и заменит), их совпадением с произвольным текстом и так далее.
Даже если нам надо найти (и например отформатировать) именно строку с текстом внутри документа, лучше всего выдать наружу найденный Range и уже с ним производить разные злодеяния. Получим примерно такой метод:
Простейшее решение проблемы уникальности текста (нужно нам найти Range слова Word, но внутри всего документа оно встречается десятки раз) - искать строку внутри строки, сначала найти уникальную строку, потом не уникальную внутри нее, неэстетично, но дешево, надежно и практично.
Если строку надо просто заменить, то сойдет простейшее
Но так как Range является универсальный контейнером для любого куска документа Word, то его возможности неизмеримо шире, часть их будет рассмотрена в дальнейших заметках.
Если нам надо просто встать в начало документа (и что-то вставить уже туда):
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Сохраняет указанный документ с новым именем или форматом. Некоторые аргументы этого метода соответствуют параметрам в диалоговом окне "Сохранить как" (меню "файл").
Параметры
Необязательный объект. Имя документа. Значение по умолчанию — текущая папка и имя файла. Если документ никогда не сохранялся, используется имя по умолчанию (например, Doc1. doc). Если документ с указанным именем уже существует, документ перезаписывается без запроса пользователя.
Необязательный объект. Формат, в котором сохранен документ. Может быть любой WdSaveFormat константой. Чтобы сохранить документ в другом формате, укажите соответствующее значение для SaveFormat свойства FileConverter объекта.
Необязательный объект. Значение true , чтобы заблокировать документ для примечаний. Значение по умолчанию - false.
Необязательный объект. Строка пароля для открытия документа. (См. примечания ниже).
Необязательный объект. Значение true , чтобы добавить документ в список недавно использовавшихся файлов в меню файл. По умолчанию используется значение True.
Необязательный объект. Строка пароля для сохранения изменений в документе. (См. примечания ниже).
Необязательный объект. Значение true , чтобы при открытии документа в Microsoft Word предлагалось состояние "только чтение". Значение по умолчанию - false.
Необязательный объект. Значение true для сохранения шрифтов TrueType вместе с документом. Если этот параметр опущен, EmbedTrueTypeFonts аргумент принимает значение EmbedTrueTypeFonts Свойства.
Необязательный объект. Если графика была импортирована с другой платформы (например, Macintosh), значение true , чтобы сохранить только версию Windows импортированной графики.
Необязательный объект. Значение true , чтобы сохранить данные, введенные пользователем в форме, в виде записи данных.
Необязательный объект. Если в документе есть вложенная почта, значение true , чтобы сохранить документ как аоце букву (средство рассылки сохраняется).
Необязательный параметр MsoEncoding . Кодовая страница или набор знаков, которые необходимо использовать для документов, сохраненных в виде кодированных текстовых файлов. По умолчанию используется системная кодовая страница.
Необязательный объект. Если документ сохраняется в виде текстового файла, значение true используется для вставки разрывов строк в конце каждой строки текста.
Необязательный объект. Если документ сохраняется в виде текстового файла, значение true позволяет Word заменять некоторые символы похожим на похожий текст. Например, отображение знака авторского права как (c). Значение по умолчанию - false.
Необязательный объект. Способ, с помощью которого Word помечает разрывы строк и абзацев в документах, сохраненных в виде текстовых файлов. Может быть любой WdLineEndingType константой.
Необязательный объект. Значение true добавляет управляющие символы в выходной файл для сохранения макета текста в исходном документе с двунаправленным письмом.
Комментарии
Избегайте использования в приложениях жестко заданных паролей. Если в процедуре требуется пароль, запросите пароль у пользователя, сохраните его в переменной, а затем используйте эту переменную в коде.
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Сохраняет указанный документ с новым именем или форматом. Некоторые аргументы этого метода соответствуют параметрам в диалоговом окне "Сохранить как" (вкладка "файл").
Параметры
Имя документа. Значение по умолчанию — текущая папка и имя файла. Если документ никогда не сохранялся, используется имя по умолчанию (например, Doc1. doc). Если документ с указанным именем уже существует, он перезаписывается без приглашения пользователя.
Формат, в котором сохранен документ. Может быть любой WdSaveFormat константой. Чтобы сохранить документ в другом формате, укажите соответствующее значение для SaveFormat свойства FileConverter объекта.
значение true , чтобы заблокировать документ для примечаний; в противном случае — false. Значение по умолчанию: false.
Строка пароля для открытия документа.
значение true , чтобы добавить документ в список недавно использовавшихся файлов в меню файл; в противном случае — false. Значение по умолчанию: true.
Строка пароля для сохранения изменений в документе.
значение true , чтобы при открытии документа в Microsoft Word предлагалось состояние "только чтение"; в противном случае — false. Значение по умолчанию: false.
значение true для сохранения шрифтов TrueType вместе с документом; в противном случае — false. Если этот параметр опущен, EmbedTrueTypeFonts параметр принимает значение EmbedTrueTypeFonts Свойства.
Если графика была импортирована с другой платформы (например, Macintosh), значение true , чтобы сохранить только версию импортированной графики Microsoft Windows.
значение true , чтобы сохранить данные, введенные пользователем в форме, в виде записи; в противном случае — false.
Если в документе есть вложенная почта, значение true , чтобы сохранить документ как аоце букву (средство рассылки сохраняется).
Кодовая страница или набор знаков, которые необходимо использовать для документов, сохраненных в виде кодированных текстовых файлов. По умолчанию используется системная кодовая страница. MsoEncodingС этим параметром нельзя использовать все константы.
Если документ сохраняется в виде текстового файла, значение true используется для вставки разрывов строк в конце каждой строки текста.
Если документ сохраняется в виде текстового файла, значение true позволяет Word заменять некоторые символы похожим на похожий текст. Например, отображение знака авторского права как (c). Значение по умолчанию: false.
Способ, с помощью которого Word помечает разрывы строк и абзацев в документах, сохраненных в виде текстовых файлов. Может быть одной из следующих WdLineEndingType констант: wdCRLF (по умолчанию) или ф:Микрософт.оффице.Интероп.Ворд.вдлининдингтипе.вдкронли.
значение true добавляет управляющие символы в выходной файл для сохранения макета текста в исходном документе с двунаправленным письмом.
Режим совместимости, который Word 2010 использует при открытии документа. WdCompatibilityModeизмен.
существует несколько способов сохранения Microsoft Office документов Word. Документ можно сохранить, не изменяя имя документа, или можно сохранить документ с новым именем.
Применимо к: Сведения в этом разделе относятся к - проектам уровня документа и добавлению VSTO - в проектах для Word. Дополнительные сведения см. в разделе доступность функций по типам приложений Office и проектов.
Сохранение документа без изменения имени
Сохранение документа, связанного с настройкой на уровне документа
Вызовите метод Save класса Document . Чтобы использовать этот пример кода, запустите его из класса ThisDocument в своем проекте.
Чтобы сохранить активный документ
Вызовите Save метод для активного документа. Чтобы использовать этот пример кода, запустите его из класса ThisDocument или ThisAddIn в своем проекте.
Если вы не уверены, что документ, который нужно сохранить, является активным документом, его можно указать по имени.
Сохранение документа, указанного по имени
Используйте имя документа в качестве аргумента для Documents коллекции. Чтобы использовать этот пример кода, запустите его из класса ThisDocument или ThisAddIn в своем проекте.
Сохранение документа с новым именем
Используйте SaveAs метод, чтобы сохранить документ с новым именем. Этот метод Document ведущего элемента можно использовать в проекте Word уровня документа или в собственном Document объекте любого проекта Word. Для этого метода требуется указать новое имя файла, но другие аргументы являются необязательными.
Сохранение документа, связанного с настройкой на уровне документа, с новым именем
Вызовите SaveAs метод ThisDocument класса в проекте, используя полный путь и имя файла. Если файл с таким именем уже существует в этой папке, он будет перезаписан без запроса подтверждения. Чтобы использовать этот пример кода, запустите его из класса ThisDocument .
SaveAs Метод создает исключение, если целевой каталог не существует или при сохранении файла возникли другие проблемы. Рекомендуется использовать try. catch блок вокруг SaveAs метода или внутри вызывающего метода.
Сохранение собственного документа с новым именем
Вызовите SaveAs метод объекта Document , который необходимо сохранить, используя полный путь и имя файла. Если файл с таким именем уже существует в этой папке, он будет перезаписан без запроса подтверждения.
В следующем примере кода активный документ сохраняется с новым именем. Чтобы использовать этот пример кода, запустите его из класса ThisDocument или ThisAddIn в своем проекте.
SaveAsМетод создает исключение, если целевой каталог не существует или при сохранении файла возникли другие проблемы. Рекомендуется использовать метод try. блок catch вокруг SaveAs метода или внутри вызывающего метода.
Компиляция кода
Для этого примера кода требуется следующее.
Чтобы сохранить документ по имени, документ с именем NewDocument.doc должен существовать в каталоге с именем Test на диске C.
Чтобы сохранить документ с новым именем, на диске C должен существовать каталог с именем Test .
Если вы столкнулись с проблемой и хотите поделиться своим опытом, знаниями или у вас есть интересная статья с иностранного сайта, предложение новой темы, статью которую Вы хотите видеть в ближайшем будущем, расскажите нам об этом и мы обязательно поделимся этими знаниями со всеми. Возможно, для других ваши знания, опыт и советы окажутся очень ценными и помогут вовремя найти правильный выход или не совершить ошибок.
Так же если у вас есть предложение о сотрудничестве, пожелания, указать на нарушения сайта или просто сказать слова благодарности, все это вы можете сделать через форму обратной связи. Читать дальше
Работа с документами Microsoft Word, Часть 1. Программное создание документа
Большинству операций, выполняемых программным способом, есть эквиваленты в пользовательском интерфейсе (UI), доступные как команды в меню и на панелях инструментов. Также существует нижележащая архитектура, обеспечивающая поддержку команд, выбираемых из UI. Всякий раз, когда вы создаете новый документ Word, он базируется на каком-либо шаблоне; расширение файлов шаблонов «.dot», а файлы документов – «.doc». Шаблон Word может содержать текст, код, стили, панели инструментов, элементы автотекста, комбинации клавиш для быстрого доступа к командам. Новый документ связывается с шаблоном и получает полный доступ к его элементам. Если вы не указываете конкретный шаблон, новый документ создается на основе стандартного шаблона «Normal.dot», который устанавливается при установке Word).
Шаблон Normal.dot является глобальным, он доступен любому документу, который вы создаете. Вы могли бы при желании поместить весь свой код в Normal.dot и создавать все документы в своей среде на основе собственного шаблона Normal (Обычный). Но тогда его файл мог бы стать чрезмерно большим, поэтому более эффективное решение для многих разработчиков - создание собственных шаблонов для конкретных приложений. В документах, создаваемых на основе вашего шаблона, код из стандартного шаблона Normal по-прежнему будет доступен. При необходимости можно связывать документ с несколькими шаблонами в дополнение к шаблону Normal.
В открывшемся окне «Добавить ссылку», перейдите на вкладку «COM» и выберете «Microsoft Word 14.0 Object Library» из предложенного списка библиотек.
Перейдите в конструктор главной формы и добавьте из панели элементов, командную кнопку «Button». Данный элемент необходим для запуска процесса создания документа и вызов MS Word для отображения.
Сделайте двойной клик левой клавишей мыши по элементу «Button» и вы перейдете в автоматически созданный метод события «button1_Click». Добавьте в него приведенный ниже код. Запустите ваш проект, нажав на клавиатуре, клавишу «F5». Нажмите на единственную кнопку, расположенную на главной форме вашего проекта. У вас автоматически откроется документ Microsoft Word с заполненным верхним и нижним колонтитулом, обычным и с применением стиля текстом, а так же заполненной таблицей.
Для сохранения документа в определенной директории, добавьте приведенный ниже код, после строки «winword.Visible = true;».
При работе с приложением Word в памяти компьютера создается отдельный процесс, если его не закрыть или не вывести созданный документ на экран, то он будет работать до выключения компьютера. Так же при постоянной работе с такими документами, их процессы будут накапливаться незаметно для пользователя, что может привести к зависанию компьютера или другим последствиям.
Читайте также: