|
Обмен данными между Excel и Word
|
|
|
|
indigo |
Пятница, 13 Мая 2005, 16:01
|
Участник
Профиль
Группа: Гость форума
Сообщений: 2
Регистрация: 13.05.2005
Пользователь №: 8665
Конфигурация
Корпус: -- Процессор: -- Материнская плата: -- Оперативная память: -- Видеокарта: -- Жесткий диск (винчестер): -- Дисковод: -- CD/DVD: -- Модем: -- Сетевой адаптер: -- Звуковая плата: -- Монитор: -- Операционная система: -- Прочее: --
|
Необходимо отладить процесс создания отчетов, минимизируя потерю времени при переносе данных из одного формата в другой. При создании отчетов бОльшая часть данных создается в формате Excel, включая формулы для расчетов и диаграммы. Наглядное представление материала формируется в документах Word, в которых должны быть представлены данные из Excel, а также дополнительные изображения, причем документы должны сохранять общий стиль оформления, включая поля, колонтитулы, шрифт, размер шрифта, цвет, нумерацию страниц, заголовки разделов и т.д. Вопрос стоит принципиальный: как правильно организовать процесс?
|
|
|
|
|
Квазимодо |
Понедельник, 16 Мая 2005, 7:51
|
Участник
Профиль
Группа: Участник
Сообщений: 162
Регистрация: 25.11.2003
Пользователь №: 6223
Конфигурация
Корпус: -- Материнская плата: -- Оперативная память: -- Видеокарта: -- Жесткий диск (винчестер): -- Дисковод: Нет дисковода CD/DVD: -- Модем: -- Сетевой адаптер: -- Звуковая плата: -- Монитор: -- Операционная система: -- Прочее: --
|
Может быть, попробовать вставить дополнительные изображения (если их немного) прямо в отчет в Excel и обойтись без Word? Или, наоборот, внедрить объекты Excel с данными в документы Word, а в них уже определяться со стилями подписей, комментариев к этим данным, колонтитулов и т.д.?
--------------------
Я долго учился на чужих ошибках, и теперь мои собственные ошибки не хуже, чем у других.
|
|
|
|
|
indigo |
Понедельник, 16 Мая 2005, 8:41
|
Участник
Профиль
Группа: Гость форума
Сообщений: 2
Регистрация: 13.05.2005
Пользователь №: 8665
Конфигурация
Корпус: -- Процессор: -- Материнская плата: -- Оперативная память: -- Видеокарта: -- Жесткий диск (винчестер): -- Дисковод: -- CD/DVD: -- Модем: -- Сетевой адаптер: -- Звуковая плата: -- Монитор: -- Операционная система: -- Прочее: --
|
Цитата(Квазимодо @ Понедельник, 16 Мая 2005, 7:51) Может быть, попробовать вставить дополнительные изображения (если их немного) прямо в отчет в Excel и обойтись без Word? Или, наоборот, внедрить объекты Excel с данными в документы Word, а в них уже определяться со стилями подписей, комментариев к этим данным, колонтитулов и т.д.? 1. Объем отчетов составляет несколько десятков страниц, на которых есть и фотографии, и схемы (иногда из Автокада). При этом нужно делать и содержание с нумерацией страниц, колонтитулы тоже "веселые" - с графическими объектами и надписями внизу и вверху. 2. При вставке листа книги Excel в документ как объекта (меню «Вставка» - «Объект» - «Создание из файла») размер шрифтов получаемой таблицы в документе Word не соответствует исходному в Excel, а таблица размером больше 1 страницы обрезается. Может, я что-то не так делаю?
|
|
|
|
|
Квазимодо |
Вторник, 17 Мая 2005, 17:39
|
Участник
Профиль
Группа: Участник
Сообщений: 162
Регистрация: 25.11.2003
Пользователь №: 6223
Конфигурация
Корпус: -- Материнская плата: -- Оперативная память: -- Видеокарта: -- Жесткий диск (винчестер): -- Дисковод: Нет дисковода CD/DVD: -- Модем: -- Сетевой адаптер: -- Звуковая плата: -- Монитор: -- Операционная система: -- Прочее: --
|
Да нет, делаешь ты все правильно. Но тогда придется копать в другом направлении - создавать таблицы в Word с нужным оформлением и записывать данные из Excel. Но поскольку в Word нет вставки значений (без изменения форматов), придется писать макрос (Word-овский). У меня получилось следующее: Код Sub Worksheet2Word() Dim Ws As Excel.Worksheet Set XlApp = CreateObject("Excel.Application") 'запрос имени открываемой таблицы Result = XlApp.GetOpenFilename("Файлы Microsoft Excel (*.xls), *.xls", , "Выберите файл:") XlApp.Workbooks.Open Result Set XlWb = XlApp.Workbooks(1) 'для работы потребуется создать форму с ComboBox-ом (там будет список листов открываемой книги) UserForm1.ComboBox1.Clear For i = 1 To XlWb.Worksheets.Count UserForm1.ComboBox1.AddItem XlWb.Worksheets(i).Name Next UserForm1.Show 'определение границ использованной части листа, которая и перенесется в таблицу Word With XlWb.Worksheets(UserForm1.ComboBox1.ListIndex + 1) StartCol = .UsedRange.Column StartRow = .UsedRange.Row EndRow = .UsedRange.Rows.Count EndCol = .UsedRange.Columns.Count End With 'создаем таблицу в документе Word там, где стоит курсор Set Table1 = ActiveDocument.Tables.Add(Selection.Range, EndRow - StartRow + 1, MaxCol) 'для сходства с таблицей Excel нужно убрать отступы в ячейках Table1.LeftPadding = 0 'левый Table1.RightPadding = 0 'правый Table1.TopPadding = 0 'верхний Table1.BottomPadding = 0 'нижний Set Ws = XlWb.Worksheets(UserForm1.ComboBox1.ListIndex + 1) 'в этих циклах проставляются форматы ячеек. Наверное, тут лучше было бы оптимизировать '(ставить не для одной ячейки, а для ряда или даже для всей таблицы сразу, а по отличающимся 'ячейкам пройтись потом), но, не видя данных, пока ничего лучшего предложить не могу For i = 1 To EndCol - StartCol + 1 For j = 1 To EndRow - StartRow + 1 'проверка формата ячейки в Excel (в соответствии с ним переносится значение) StrFormat = Ws.Cells(StartRow + j - 1, StartCol + i - 1).NumberFormat If (StrFormat = "General") Or (StrFormat = "@") Then 'если общий или текстовый, S = Ws.Cells(StartRow + j - 1, StartCol + i - 1).Value 'то значение переносится как есть Else 'иначе форматируется (например, если формат числовой) S = Format(Ws.Cells(StartRow + j - 1, StartCol + i - 1).Value, StrFormat) End If With Table1.Cell(j, i) With .Range.Font 'шрифт в ячейке .Name = Ws.Cells(StartRow + j - 1, StartCol + i - 1).Font.Name .Size = Ws.Cells(StartRow + j - 1, StartCol + i - 1).Font.Size .Bold = Ws.Cells(StartRow + j - 1, StartCol + i - 1).Font.Bold .Italic = Ws.Cells(StartRow + j - 1, StartCol + i - 1).Font.Italic End With 'вертикальное выравнивание VA = Ws.Cells(StartRow + j - 1, StartCol + i - 1).VerticalAlignment Select Case VA Case xlVAlignBottom .VerticalAlignment = wdAlignVerticalBottom Case xlVAlignCenter .VerticalAlignment = wdAlignVerticalCenter Case xlVAlignTop .VerticalAlignment = wdAlignVerticalTop End Select 'горизонтальное выравнивание (в Word оно применяется не к ячейке таблицы, а к тексту в ней) HA = Ws.Cells(StartRow + j - 1, StartCol + i - 1).HorizontalAlignment Select Case HA Case xlHAlignLeft .Range.ParagraphFormat.Alignment = wdAlignParagraphLeft Case xlHAlignCenter .Range.ParagraphFormat.Alignment = wdAlignParagraphCenter Case xlHAlignRight .Range.ParagraphFormat.Alignment = wdAlignParagraphRight End Select End With Table1.Cell(j, i).Range.InsertAfter S Next Next DisplayAlerts = False 'установка ширины столбцов For i = 1 To EndCol - StartCol + 1 W = XlWb.Worksheets(UserForm1.ComboBox1.ListIndex + 1).Columns(StartCol + i - 1).Width Table1.Columns(i).Width = W Next 'установка высоты строк For i = 1 To EndRow - StartRow + 1 H = XlWb.Worksheets(UserForm1.ComboBox1.ListIndex + 1).Rows(StartRow + i - 1).Height Table1.Rows(i).Height = H Next 'закрываем Excel XlApp.Quit Set XlWb = Nothing Set XlApp = Nothing End Sub
Макрос проверен в Office 2000. Для его работы создаешь форму (UserForm1) ComboBox-ом и кнопкой Ok, а в редакторе VB подключаешь Tools -> References -> Microsoft Excel x.x Object Library. Конечно, этот вариант многого не учитывает: выравнивания по значению, границ и заливок, сквозных строк/столбцов, объединений ячеек, таблиц, которые разбиваются на несколько страниц не только по высоте, но и по ширине. Так что постарайся доработать, что потребуется. Будет что-то непонятно, пиши еще.
--------------------
Я долго учился на чужих ошибках, и теперь мои собственные ошибки не хуже, чем у других.
|
|
|
|
|
|
1 чел. читают эту тему (1 Гостей и 0 Скрытых Пользователей)
|
0 Пользователей:
|
|
© Copyright by WinCity.Ru 2001 - 2008 | Обратная связьУслуги веб-хостинга предоставлены компанией MTW.RU
|
|