0 / 0 / 0
Регистрация: 22.07.2011
Сообщений: 3
1

Экспорт таблицы из Word в Excel

22.07.2011, 18:14. Показов 24473. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Уважаемые, здравствуйте.
Столкнулся с проблемой рутинизации обработки присылаемых файлов в Word и с необходимостью экспорта всего одной имеющей ценность таблицы в Excel, с некоторыми предварительными коррективами. Требуется написать макрос, выполняющий следующие действия:

В открытом файле MS Word 2007 найти таблицу, первая ячейка которой содержит текст "ITEM" (название столбца) и работать уже с этой таблицей. С таблицей нужно проделать следующие манипуляции:

есть два столбца: "DESCRIPTION" и соседний "MODEL". Данные этих двух столбцов необходимо построчно объединить. Причем, в случае, если в ячейке в столбце "MODEL" есть какой-то текст, то в конец текста в ячейке из столбца "DESCRIPTION" нужно добавить текст ", mod.", после чего объединять.
При ручном объединении столкнулся с проблемой разнесения объединяемого текста по разным строкам. Хотелось бы этого избежать.
После построчного объединения двух столбцов, таблицу необходимо экспортировать в Excell и предоставить возможность выбора директории для сохранения. Имя файла можно брать равным имени файла документа Word, из которого делался экспорт. При экспорте вручную часто значения типа 1.1 или 2.3 автоматически конвертируются в даты. Этого нужно избежать.

Очень благодарен за помощь.
Попутно буду признателен за совет по предпочтительности использования ActiveCell.Offset или Selection.Move
Вложения
Тип файла: docx Исходник.docx (13.8 Кб, 723 просмотров)
Тип файла: xls Результат.xls (26.0 Кб, 566 просмотров)
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.07.2011, 18:14
Ответы с готовыми решениями:

Экспорт данных таблицы из Excel в Word
Здравствуйте, при написании курсовой столкнулся с проблемой вывода информации из Excel в таблицу...

Экспорт таблицы из Excel в Word файл
Столкнулся с трудностью, нужно экспортировать таблицу из excel файла в word. Может кто подсказать,...

Экспорт таблицы из Ms Word и запись в MS Excel
Добрый день. Надеюсь на вашу помощь, т.к. поиск не помог. Суть в том что имеется документ Word, в...

Экспорт в Word и Excel
Как прописать код, чтобы экспортировать из dataGridview в формате doc и xls

4
Заблокирован
22.07.2011, 20:38 2
SunTechnik
вопросы:
  1. нужные таблицы Word все полностью одинаковые, а именно:
    • ячейки не объединены,
    • первая и вторая строка одинаковые во всех таблицах,
    • объединять нужно всегда ячейки в 3 и 4 столбцах;
    • шапки последних двух столбцов всегда одни и те же?
  2. должно получиться полностью, как во вложенном файле Excel? Если так, то в #1 вы указали не все действия (например, не указали, что нужно убрать знак Евро);
  3. в документе Word таблица должна остаться в первоначальном виде?
0
0 / 0 / 0
Регистрация: 22.07.2011
Сообщений: 3
22.07.2011, 22:17  [ТС] 3
В документе Word может твориться все, что заблагорассудится. Лишь бы не сохранялось то, что натворилось. Вордовский документ, судя по всему, делается по одному шаблону. В том смысле, что допустим одинаковость нужных таблиц в части количества столбцов, стандартности шапки и общего форматирования. Количество строк всегда разное.
В любом случае, поняв, как сделан макрос, я его смогу модернизировать уже самостоятельно и доделаю, чтобы он выделял два последних столбца, искал бы и удалял лишние пробелы, значки Евро, убирал бы точки, разеляющие разряды и т.д. Наверное, действительно, стоит это проделать с таблицей еще в Вордах.
0
Заблокирован
23.07.2011, 11:42 4
SunTechnik,
код выполняет все операции, кроме оформления текста в Excel. Код работает с активным документом Word. Excel может быть или открыт или закрыт - значение не имеет.

Надо подключить библиотеку объектов программы Excel:
Tools - References... - Microsoft Excel Object Library.
Это позволяет проще писать код, т.к. после того, как ставим точку, появляются всплывающие подсказки.
Но такое нужно делать на каждом компьютере. Если компьютеров много, то есть др. способ работы с Excel из Word. Напишите, если надо.

Все коды, расположенные ниже, нужно поместить в один модуль. Запускать нужно только процедуру с именем Main.

Main
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
Sub Main()
'Создание переменных.
Dim Документ As Word.Document
Dim Временный As Word.Document
Dim Таблица As Word.Table, ВрТаблица As Word.Table
'Обращаться к документу будем через переменную Документ,
'так удобнее обращаться и кода меньше писать.
Set Документ = ActiveDocument
'Чтобы не изменить таблицу в документе,
'создадим временный документ и в него скопируем таблицу.
'Там таблицу и будем обрабатывать, а временный документ потом
'закроем без сохранения.
'Visible:=False - временный документ не будет отображать,
'т.к. нет необходимости в этом.
Set Временный = Application.Documents.Add(Visible:=False)
'Поиск таблицы, первая ячейка, которой содержит текст ITEM.
For Each Таблица In Документ.Tables
    'LCase - делает все буквы маленьками (вдруг по каким-то
    'причинам текст ITEM будет маленькими буквами).
    'С помощью InStr определяем, содержится ли в ячейке текст ITEM.
    'Если первая ячейка таблицы содержит текст ITEM, то
    If InStr(LCase(Таблица.Cell(1, 1).Range.Text), "item") > 0 Then
        'Копируем таблицу.
        Таблица.Range.Copy
        'Вставляем скопированную таблицу во временный документ.
        Временный.Range(Start:=0, End:=0).Paste
        'Таблица во временном документе всего одна, поэтому
        'порядковый номер таблицы во временном документе один.
        'Работать с таблицей во временном документе будем через
        'переменную ВрТаблица, чтобы меньше кода писать.
        Set ВрТаблица = Временный.Tables(1)
        'Дальнейшую работу проведём в отдельном коде
        '(чтобы было проще ориентироваться в коде).
        'Call вызывает процедуру.
        'Т.к. предстоит работать с таблицей во временным документом, то
        'процедуре P1 надо сказать, что мы хотим работать с таблицей во
        'временным документом.
        Call P1(ВрТаблица)
        'Удаление знаков Евро и пробелов в последних двух столбцах.
        'Удаление точек из чисел.
        Call P2(ВрТаблица)
        'Объединение ячеек в столбцах 3 и 4.
        Call P3(ВрТаблица)
        'Копируем и вставляем обработанную таблицу в Excel.
        'Передадим ещё процедуре имя документа, чтобы такое же имя
        'файлу Excel.
        Call P4(ВрТаблица, Документ.Name)
        Exit For
    End If
Next Таблица
'Закрытие временного файла без сохранения.
Временный.Close SaveChanges:=wdDoNotSaveChanges
'Сообщение, что работа сделана.
MsgBox "Работа сделана", vbInformation
End Sub

P1
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Sub P1(ByRef ВрТаблица As Word.Table)
'Обрабатываем шапки в последних двух столбцах.
'Trim - убирает пробелы.
'С помощью Left берём из ячейки нужное количество символов.
    'Т.к. в каждой ячейки таблицы Word всегда есть 2 непечатаемых символа,
    'то нужно взять текст без этих двух непечатаемых символов.
'С помощью Len определяем количество символов в ячейке.
'Для 5 столбца (предпоследний столбец).
ВрТаблица.Cell(1, 5).Range.Text = _
    Trim(Left(ВрТаблица.Cell(1, 5).Range.Text, Len(ВрТаблица.Cell(1, 5).Range.Text) - 2)) & " " & _
    Trim(Left(ВрТаблица.Cell(2, 5).Range.Text, Len(ВрТаблица.Cell(2, 5).Range.Text) - 2))
'Для 6 столбца (последний столбец).
ВрТаблица.Cell(1, 6).Range.Text = _
    Trim(Left(ВрТаблица.Cell(1, 6).Range.Text, Len(ВрТаблица.Cell(1, 6).Range.Text) - 2)) & " " & _
    Trim(Left(ВрТаблица.Cell(2, 6).Range.Text, Len(ВрТаблица.Cell(2, 6).Range.Text) - 2))
'Удаление второй строки.
ВрТаблица.Rows(2).Delete
End Sub

P2
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
Sub P2(ByRef ВрТаблица As Word.Table)
'Удаление знаков Евро и пробелов в последних двух столбцах.
'Удаление точек из чисел.
Dim i As Long
'Будем просматривать все ячейки, кроме первой,
'в предпоследнем и последнем столбцах.
'ВрТаблица.Rows.Count - это количество строк в таблице.
'With ... End With - используется, чтобы меньше кода писать.
For i = 2 To ВрТаблица.Rows.Count Step 1
    'Для 5 столбца (предпоследний столбец).
    With ВрТаблица.Cell(i, 5).Range
        'С помощью Replace заменяем знак Евро (код этого символа
        'по таблице ASCII 136) на пустоту (т.е. просто удаляем).
        'С помощью Trim удаляем лишние пробелы.
        .Text = Trim(Replace(Left(.Text, Len(.Text) - 2), Chr(136), ""))
        'Удаление точки из цифры, чтобы в Excel это было число нужного формата.
        .Text = Replace(Left(.Text, Len(.Text) - 2), ".", "")
    End With
    'Для 6 столбца (последний столбец).
    With ВрТаблица.Cell(i, 6).Range
        .Text = Trim(Replace(Left(.Text, Len(.Text) - 2), Chr(136), ""))
        .Text = Replace(Left(.Text, Len(.Text) - 2), ".", "")
    End With
Next i
End Sub

P3
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Sub P3(ByRef ВрТаблица As Word.Table)
'Объединение ячеек в столбцах 3 и 4.
Dim i As Long
'Формируем заголовок столбца 3.
ВрТаблица.Cell(1, 3).Range.Text = "DESCRIPTION, MOD."
For i = 2 To ВрТаблица.Rows.Count Step 1
    'В каждой ячейке таблицы Word всегда есть 2 символа.
    'Если в ячейке больше двух символов, значит в этой ячейке есть данные.
    'С помощью Trim уберём случайные пробелы, т.к. пробелы считаются тоже символами.
    'Trim не убирает неразрывные пробелы.
    If Len(Trim(ВрТаблица.Cell(i, 4).Range.Text)) > 2 Then
        ВрТаблица.Cell(i, 3).Range.Text = _
            Left(ВрТаблица.Cell(i, 3).Range.Text, Len(ВрТаблица.Cell(i, 3).Range.Text) - 2) & _
            ", mod. " & _
            Trim(Left(ВрТаблица.Cell(i, 4).Range.Text, Len(ВрТаблица.Cell(i, 4).Range.Text) - 2))
    End If
Next i
'Удаляем столбец 4.
ВрТаблица.Columns(4).Delete
End Sub

P4
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
Sub P4(ByRef ВрТаблица As Word.Table, Имя As String)
'Копируем и вставляем обработанную таблицу в Excel.
'Сохранение Excel.
Dim Эксель As New Excel.Application
Dim Книга As Excel.Workbook
Dim Массив() As String
'Копирование таблицы из временного файла Word.
ВрТаблица.Range.Copy
'Чтобы программу Excel было видно.
Эксель.Visible = True
'xlWBATWorksheet - создаёт только один лист Excel.
Set Книга = Эксель.Workbooks.Add(Template:=xlWBATWorksheet)
'Вставка скопированного из Word в Excel.
Книга.Worksheets(1).Cells(1, 1).PasteSpecial Paste:=xlPasteValues
'Имя получаем с расширением документов Word.
'Поэтому расширение надо убрать. В именах файлов не может быть точек,
'поэтом для ориентира можно использовать точку в расширении.
'Получим массив состоящий из двух элементов:
'часть до точки и часть после точки.
Массив = Split(Имя, ".")
'Возьмём часть до точки (элементы массива нумеруются
'по умолчанию с нуля, поэтому порядковый номер
'первого элемента массива будет ноль).
Имя = Массив(0)
With Эксель.FileDialog(msoFileDialogSaveAs)
    .AllowMultiSelect = False
    .ButtonName = "Сохранить"
    .InitialFileName = Имя
    .Title = "Сохранение документа"
    '-1 - означает, что нажата кнопка "Сохранить".
    If .Show = -1 Then
        .Execute
    End If
End With
End Sub
1
0 / 0 / 0
Регистрация: 22.07.2011
Сообщений: 3
23.07.2011, 19:05  [ТС] 5
Спасибо большое, в понедельник разбираться засяду
0
23.07.2011, 19:05
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.07.2011, 19:05
Помогаю со студенческими работами здесь

Экспорт в Word и Excel
Можно ли при экспорте в Ворд или Ексель данных из набора данных (который в делфи) создать заголовки...

Экспорт таблицы в Word
Всем привет! Нашёл на форуме код на экспорт таблицы из Datagrid в word. Всё работает, но помимо...

Экспорт из Excel в Word колонтитулы
Добрый день уважаемые Гуру VBA. Подскажите пожалуйста, как заменить текст в колонтитулах Word из...

Экспорт и импорт из Excel в Word
Добрый день. Есть такая задача: Имеется таблица в формате эксель(прикреплена во вложении). 1)...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru