В данной инструкции рассмотрен пример получения данных из таблиц, содержащихся в файле Microsoft Word. Для реализации данной задачи используется объектная библиотека «Microsoft Word 14.0 Object Library».
Создайте проект Windows Form в Microsoft Visual Studio, для этого запустите среду разработки и перейдите в меню Файл->Создать...->Проект. Выберете версию .Net Fraemwork и введите имя проекта. После создания проекта, добавьте на форму три компонента:
Установите следующие параметры в свойствах компонента:
У вас откроется окно «Менеджер ссылок – (имя вашего проекта)», в левой части данного окна вам будет предложено выбрать одну из категорий. Visual Studio предоставляет четыре группы для выбора.
После добавления библиотеки, у вас появится три новых пункта в обозревателе решений:
using WordObj = Microsoft.Office.Interop.Word; - создается псевдоним пространства имен «Microsoft.Office.Interop.Word».
В данном примере для открытия файла используется класс «OpenFileDialog», реализующий открытие окна для выбора файла по заданному фильтру «MS Word 2003 (*.doc)|*.doc|MS Word 2007 (*.docx)|*.docx». Данный фильтр так же реализует защиту от выбора файла не относящегося к Word.
Сделайте двойной клик по компоненту «button1», вы перейдете в автоматически созданный метод «button1_Click», события компонента «Click». Добавьте приведенный ниже листинг кода в тело данного метода.
В случае если открываемый вами файл занят другим процессом или открыт другим пользователем, Microsoft Word выдаст вам предупреждение «Файл уже используется» и предложит несколько вариантов действий. Выберете первый вариант «Открыть только для чтения» – документ откроется на несколько секунд для загрузки данных и закроется.
Вы можете усложнить проект и добавить элемент управления «ComboBox», в котором будет предлагаться выбрать номер таблицы и посмотреть хранящиеся в ней данные. Для этого перейдите в «Панель элементов» и добавьте элемент управления «ComboBox» на главную форму проекта. У вас получится приведенный ниже вариант.
Сделайте двойной клик по добавленному компоненту, вы перейдете в автоматически созданный метод «comboBox1_SelectedIndexChanged», события «SelectedIndexChanged» происходящего каждый раз при выборе элемента из выпадающего списка компонента. Добавьте приведенный ниже код вызова метода, реализующего загрузку таблицы по номеру выделенного элемента в компоненте «comboBox1». В данном коде методу «LoadData», в качестве параметра передается свойство «SelectedIndex» содержащее номер выбранного элемента из списка, так как нумерация элементов списка начинается с нуля, а таблицы нумеруются с единицы, к данному числу прибавляется 1.
Вы перейдете в автоматически созданный метод «Form1_FormClosed», который будет выполняться при закрытии вашего приложения. Добавьте в него приведенный ниже код.
Создайте проект Windows Form в Microsoft Visual Studio, для этого запустите среду разработки и перейдите в меню Файл->Создать...->Проект. Выберете версию .Net Fraemwork и введите имя проекта. После создания проекта, добавьте на форму три компонента:
- textBox1 - в данном компоненте будет выводится путь, имя и расширение выбранного файла;
- button1 – кнопка для запуска процесса получения данных из выбранного файла;
- dataGridView1 – элемент управления необходимый для отображения полученных данных.
Установите следующие параметры в свойствах компонента:
- Dock – None – свойство задает границы элемента управления, прикрепленные к его родительскому элементу управления и определяет способ изменения его размеров относительно родительского элемента управления (http://microsoft.com)
- Anchor - Top, Bottom, Left, Right - свойство задает границы контейнера, с которым связан элемент управления, и определяет способ изменения его при изменении размеров его родительского элемента (http://microsoft.com).
У вас откроется окно «Менеджер ссылок – (имя вашего проекта)», в левой части данного окна вам будет предложено выбрать одну из категорий. Visual Studio предоставляет четыре группы для выбора.
- Сборки — список всех компонентов платформы .NET Framework, ссылки на которые можно добавить.
- Решение — список всех повторно используемых компонентов, созданных в локальных проектах.
- COM — список всех COM-компонентов, ссылки на которые можно добавить.
- Обзор — позволяет осуществлять поиск компонента в файловой системе.
После добавления библиотеки, у вас появится три новых пункта в обозревателе решений:
- Microsoft.Office.Core;
- Microsoft.Office.Interop.Word;
- VBIDE.
using WordObj = Microsoft.Office.Interop.Word; - создается псевдоним пространства имен «Microsoft.Office.Interop.Word».
В данном примере для открытия файла используется класс «OpenFileDialog», реализующий открытие окна для выбора файла по заданному фильтру «MS Word 2003 (*.doc)|*.doc|MS Word 2007 (*.docx)|*.docx». Данный фильтр так же реализует защиту от выбора файла не относящегося к Word.
OpenFileDialog dialog = new OpenFileDialog(); dialog.Filter = "MS Word 2003 (*.doc)|*.doc|MS Word 2007 (*.docx)|*.docx"; dialog.Title = "Выберите документ для загрузки данных";После выбора файла выполняется проверка, что файл действительно выбран. Если данное условие выполнено, создается новый объект «Application» или приложение «Word». Далее необходимо открыть указанный документ и добавить его в коллекцию документов, данную функцию выполняет метод «Documents.Open». Для загрузки данных из необходимой таблицы, выбирается активный документ из коллекции с помощью метода «ActiveDocument», из которого выбирается таблица для открытия. Нумерация таблиц начинается с 1.
Сделайте двойной клик по компоненту «button1», вы перейдете в автоматически созданный метод «button1_Click», события компонента «Click». Добавьте приведенный ниже листинг кода в тело данного метода.
OpenFileDialog dialog = new OpenFileDialog();
dialog.Filter = "MS Word 2003 (*.doc)|*.doc|MS Word 2007 (*.docx)|*.docx";
dialog.Title = "Выберите документ для загрузки данных";
if (dialog.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{
textBox1.Text = dialog.FileName;
WordObj.Application application = new WordObj.Application();
Object FileName = dialog.FileName;
application.Documents.Open(ref FileName);
WordObj.Document document = application.ActiveDocument;
WordObj.Table table = document.Tables[1];
if (table.Rows.Count > 0 && table.Columns.Count > 0)
{
List headers = new List();
DataTable dataTable = new DataTable();
for (int i = 0; i < table.Columns.Count; i++)
{
dataTable.Columns.Add();
headers.Add(table.Cell(1, i + 1).Range.Text.Trim('\a', '\r', '\n', '\t'));
}
for (int i = 0; i < table.Rows.Count - 1; i++)
{
string[] row = new string[table.Columns.Count];
for (int j = 0; j < table.Columns.Count; j++)
row[j] = table.Cell(i + 2, j + 1).Range.Text.Trim('\a', '\r', '\n', '\t');
dataTable.Rows.Add(row);
}
dataGridView1.DataSource = dataTable;
for (int i = 0; i < headers.Count; i++)
dataGridView1.Columns[i].HeaderText = headers[i];
}
application.Quit();
} Запустите проект, нажав на клавиатуре клавишу «F5». Нажмите на кнопку «Открыть», расположенную на форме. В открывшемся диалоговом окне выберете файл Microsoft Word содержащий табличные данные и нажмите кнопку «Открыть», расположенную в нижней части окна. Если в файле содержались таблицы, то первая из них расположенная ближе к началу документа будет загружена. В случае если открываемый вами файл занят другим процессом или открыт другим пользователем, Microsoft Word выдаст вам предупреждение «Файл уже используется» и предложит несколько вариантов действий. Выберете первый вариант «Открыть только для чтения» – документ откроется на несколько секунд для загрузки данных и закроется.
Вы можете усложнить проект и добавить элемент управления «ComboBox», в котором будет предлагаться выбрать номер таблицы и посмотреть хранящиеся в ней данные. Для этого перейдите в «Панель элементов» и добавьте элемент управления «ComboBox» на главную форму проекта. У вас получится приведенный ниже вариант.
Сделайте двойной клик по добавленному компоненту, вы перейдете в автоматически созданный метод «comboBox1_SelectedIndexChanged», события «SelectedIndexChanged» происходящего каждый раз при выборе элемента из выпадающего списка компонента. Добавьте приведенный ниже код вызова метода, реализующего загрузку таблицы по номеру выделенного элемента в компоненте «comboBox1». В данном коде методу «LoadData», в качестве параметра передается свойство «SelectedIndex» содержащее номер выбранного элемента из списка, так как нумерация элементов списка начинается с нуля, а таблицы нумеруются с единицы, к данному числу прибавляется 1.
LoadData(comboBox1.SelectedIndex + 1);Добавьте приведенный ниже листинг загрузки выбранной таблицы в листинг главной формы.
WordObj.Application application;
WordObj.Document document;
public void LoadData(int TableNum)
{
WordObj.Table table = document.Tables[TableNum];
if (table.Rows.Count > 0 && table.Columns.Count > 0)
{
List headers = new List();
DataTable dataTable = new DataTable();
for (int i = 0; i < table.Columns.Count; i++)
{
dataTable.Columns.Add();
headers.Add(table.Cell(1, i + 1).Range.Text.Trim('\a', '\r', '\n', '\t'));
}
for (int i = 0; i < table.Rows.Count - 1; i++)
{
string[] row = new string[table.Columns.Count];
for (int j = 0; j < table.Columns.Count; j++)
row[j] = table.Cell(i + 2, j + 1).Range.Text.Trim('\a', '\r', '\n', '\t');
dataTable.Rows.Add(row);
}
dataGridView1.DataSource = dataTable;
for (int i = 0; i < headers.Count; i++)
dataGridView1.Columns[i].HeaderText = headers[i];
}
} В методе «button1_Click», события «Click», компонента «Button1» замените существующий листинг, на приведенный ниже. Данный код реализует предварительную очистку списка таблиц, открытие документа, по количеству таблиц находящихся в документе заполняется элемент управления «comboBox1» и выбирается первый.comboBox1.Items.Clear();
OpenFileDialog dialog = new OpenFileDialog();
dialog.Filter = "MS Word 2003 (*.doc)|*.doc|MS Word 2007 (*.docx)|*.docx";
dialog.Title = "Выберите документ для загрузки данных";
if (dialog.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{
textBox1.Text = dialog.FileName;
application = new WordObj.Application();
Object FileName = dialog.FileName;
application.Documents.Open(ref FileName);
document = application.ActiveDocument;
for (int i=1; i <= document.Tables.Count; i++)
{
comboBox1.Items.Add("Таблица №"+i);
}
comboBox1.SelectedIndex = 0;
LoadData(comboBox1.SelectedIndex + 1);
} По завершению работы с документом его необходимо закрыть, перейдите в конструктор главной формы, выполнив сочетание клавиш «Shift+F7». Сделайте клик правой клавишей мыши по свободному пространству главной формы и выберете из открывшегося контекстного меню, пункт «Свойства». В верхней части окна свойств расположена кнопка с рисунком молнии, нажав на нее, вы перейдете в события главной формы. Найдите событие «FormClosed» и сделайте по нему двойной клик левой клавишей мыши. Вы перейдете в автоматически созданный метод «Form1_FormClosed», который будет выполняться при закрытии вашего приложения. Добавьте в него приведенный ниже код.
application.Quit();Запустите ваш проект, выберете документ, содержащий более одной таблицы. В выпадающем списке вы увидите номера таблиц доступные для выбора. Сделав клик по любой из них, данные автоматически будут загружены.
Ссылка для скачивания примера: Яндекс.Диск














Комментариев нет:
Отправить комментарий
Большая просьба, не писать в комментариях всякую ерунду не по теме!