Работаем с MS Word из C#, часть 4. Обьединяем несколько файлов в один, считаем количество страниц

Задача: сделать большой документ Word, состоящий из множества более мелких, заполняемых по шаблону (чтобы пользователю было удобно смотреть/печатать). Каждый поддокумент должен начинаться с новой страницы, длина каждого документа (даже в страницах) заранее не известна, но ее нужно считать и выводит. … Читать далее

Работаем с MS Word из C#, часть 3. Работа с таблицами

Выбрать уже существующую таблицу внутри документа можно по ее порядковому номеру (начиная с 1 и начала документа) можно через интерфейс Tables. При этом мы получим объект типа Table Новая вставляется методом Tables.Add (предполагается что мы уже получили диапазон _currentRange того … Читать далее

Работаем с MS Word из C#, часть 2. Вставляем текст на закладку и форматируем

Продолжение былинной саги про Office.Interop.Word. Самый простой способ вставить кусок текста в нужную часть Word-шаблона - использовать закладки. В отличие от текстовых меток закладки не надо искать, они невидимы и всегда имеют уникальное имя. Имея открытый в предыдущей части документ … Читать далее

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

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

Работаем с MS Word из C#, часть 0, класс и тестовый проект-пример WinForms

Иллюстрация к циклу заметок про работу с Microsoft Word из C#. Проект Visual Studio 2010, два класса - WordDocument и WordSelection (просто часть документа, обертка над Range), реализующие описанные приемы, тестовый шаблон и простенькое окошко, позволяющее протестировать работу классов и … Читать далее

LinQ запрос к DataTable

Задача: выполнить запрос на LinQ к DataTable. Стандартная DataTable LinQ не поддерживает, но решается это затруднение очень просто, надо использовать метод AsEnumerable() из LinQ to Dataset. Таблица должна быть строго типизирована, иначе получим ошибку Specified cast is not valid. Минимальный … Читать далее

Выбираем/получаем выбранную строку/ячейку в DataGridView

Задача: получить выбранную в данный момент строку/ячейку DataGridView и/или выбрать ее. На самом деле это одна и та же задача, если количество строк и столбцов в гриде может непредсказуемо меняться. Мы конечно можем получить выбранный столбец через свойство SelectedRows, но … Читать далее

Ошибка Collection was modified; enumeration operation might not execute

Иногда программисту хочется чего-то удалить из коллекции. Например строку из коллекции строк DataTable. Он радостно пишет что-то в духе: и получает жестокий облом в виде ошибки с невнятным сообщением "Collection was modified; enumeration operation might not execute". … Читать далее

ComboBox - подстраиваем ширину выпадающего списка под самый длинный элемент

Два очевидных решения - сделать всплывающую подсказку или увеличить ширину самого выпадающего списка. Вычисляем максимальную длину строки в таблице-справочнике: Setting DropDown list width of DataGridView ComboBoxColumn - WinForms … Читать далее

Работа с Excel из C# через COM Interop, часть 1, открываем документ и выводим данные

Задача: вывести данные в таблицу Excel с красивым оформлением и открыть ее, чтобы пользователь мог напечатать или сохранить средствами самого Excel. Необходимо поддерживать все версии Office, начиная с 97, то есть вывод в новые xml-форматы Office 2007 и выше невозможен … Читать далее