Работа с MS Word от C#, част 1

Вече направих това, но сега ще намерите това парче код, ще го потърсите в Google отново ... Къде мога да намеря просто и разбираемо ръководство за начинаещ, а не тънкости за мега-гуру?

Навигация на публикации

Работа с MS Word от C#, част 1. Отваряне на шаблона, търсене на текст в документа

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

Първо, нека си припомним, че Word има такова прекрасно нещо като шаблони. Съответно по-голямата част от сложния дизайн може да бъде преместен в тях и от кода можете да отворите шаблона и да вмъкнете данни на правилните места. Като начало ще се ограничим до прости редове (типична задача в големите предприятия е да вмъкнете дати, числа, пълни имена и други подобни, споразумение за такава и такава сума, от такава и такава дата с такова и такова име с параметри на обекта такива и такива).

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

1. Свържете необходимите библиотеки 2. Отворете шаблон на Word 3. Намерете правилното място в него 4. Вмъкнете ред с информация в него

1. Вече трябва да имаме проект в студиото. В секцията Връзки / Препратки щракнете с десния бутон, отидете на „Добавяне на връзка“ и потърсете Microsoft.Office.Interop.Word. В параметрите на добавената библиотека задайте true в Copy local / Copy local, тъй като библиотеката трябва да се копира заедно с изпълнимите файлове на проекта.

Добавяме съответното използване към кода

Освен това почти всички функции на Word изискват обектни параметри, дори ако съдържат прости низове и булеви стойности, така че е по-добре да направите няколко обвивки предварително

За да стартирате Word и да отворите шаблон от диск в него (пътят е известен), имате нужда от нещо подобно на този код

Две точки са от основно значение

1. Създаваме неуправляем ресурс, който garbage collector няма да събира - отделен процес в паметта с приложението Word, ако не го затворим и не го покажем на екрана, той ще остане да виси там, докато компютърът не бъде изключен. Освен това такива думи могат да се натрупват незабелязано от потребителя, програмистът ще ги убие ръчно. От програмиста зависи да се погрижи за освобождаването на неуправлявания ресурс.

2. По подразбиране Word стартира невидим, ние го показваме на екрана.

Като начало нека разгледаме най-простата и примитивна опция - търсене и замяна на низ в документ на Word. Някои програмисти работят по този начин - те поставят текстов етикет като @@nowDate в шаблона и го заменят с желаната стойност.

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

Всъщност това не е най-добрият метод за вмъкване на информация в документ, тъй като може да е трудно да имате уникални имена за текстови етикети (ако текстът на един идва в началото на друг, този метод ще го намери и замени), съпоставянето им с произволен текст и т.н.

Дори ако трябва да намерим (и например да форматираме) точно реда с текст в документа, най-добре е да раздадем намерения диапазон и да извършим различни зверства с него. Нека вземем метод като този:

Най-простото решение на проблема с уникалността на текста (трябва да намерим думата Range of the Word, но тя се среща десетки пъти в целия документ) е да търсим низ в низ, първо да намерим уникален низ, а след това да не е уникален вътре в него, неестетичен, но евтин, надежден и практичен.

Ако низът просто трябва да бъде заменен, тогава най-простият ще направи

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

Ако просто трябва да станем в началотодокумент (и поставете нещо вече там):

Можете да запишете документ на диск по следния начин