|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
23.02.2014, 17:37 | #1 |
Форумчанин
Регистрация: 10.02.2014
Сообщений: 526
|
Перенос значений таблицы из MS Excel в MS Word. Delphi. Шпаргалка и "разбор полётов".
Раз уж здесь обосновался - напишу здесь эту тему.
Поводов написать аж четыре: 1. Может пригодиться тем, кто столкнётся с теми же вопросами; 2. Может, кто-то из знающих скажет как можно сделать лучше; 3. Сам потом смогу взять отсюда нужный фрагмент или мысль; 4. Ну и есть нерешённые вопросы, которые я вставлю по ходу описания. Может, подскажет кто чего. Всё использованное мной нарыто в разных местах интернета. Единого понятного источника найти не удалось. Попробую собрать информацию в одном месте. Суть задачи. 1. Есть Экселевский файл, лежит в папке с программой, "УС.xlsx", содержащий таблицы с данными: пять/шесть колонок, произвольное количество строк. Листов (вкладок) с такими таблицами тоже произвольное. Некоторые строки (с названиями разделов или подразделов) объединены по горизонтали в одну (5 в 1 или 6 в 1). Встречается форматирование шрифта в названии разделов (полужирный, подчёркивание, курсив). 2. Есть Вордовый документ-шаблон из двух листов, тоже в папке программы, "УС.doc". На первом - "титульный лист" с колонтитулами, штампом, содержанием и загаловком; на втором колонтитулы с штампом и "шапкой" таблицы и одна строка таблицы с нужным количеством ячеек (столбцов) и установленной шириной. 3. Цель: перенести таблицу из Экселя в Ворд. 3.1. Объединённые ячейки Экселя объединить и в ворде 3.2. Форматирование шрифта (жирный/курсив/подчёркивание) перенести только из названий разделов/подразделов (объединённые строки). 3.3. В объединённых строках выравнивание в ячейке перенести полностью, в остальных - по конкретным правилам: по вертикали - все по центру; по горизонтали: 2, 5(6) - по левому краю, остальные - по середине. 3.4. Данные с новой вкладки (листа) Экселя должны начинаться с нового листа Ворда. 3.5. Не все вкладки (листы) может быть нужно переносить в Ворд. На данный момент для 5 или 6 столбцов предполагается использовать разные шаблоны. После "обстреливания" программы пойду дальше разбираться и сделаю программное разделение 4-го столбца. Моё решение задачи. На форме: 1. CheckListBox - для вывода названий вкладок 2. CheckBox - если с галочкой, то столбцов 6 3. Кнопка - для старта переноса 4. Memo - для вывода всяких сообщений, которые могут пригодится. Всё делается без дополнительных компонентов по работе с Экселем и Вордом. В тексте программы: Используемые переменные: Код:
Код:
1.1. При создании формы (событие "FormCreate") последовательно проверяем: 1.1.1. установлен ли Эксель на компьютере. Код:
1.1.2. Запущен ли Эксель Код:
Код:
Последний раз редактировалось Ship_1; 23.02.2014 в 18:39. |
23.02.2014, 17:40 | #2 |
Форумчанин
Регистрация: 10.02.2014
Сообщений: 526
|
(продолжение)
И вот тут у меня первый вопрос знатокам:
Между строками Код:
1.3. Пробуем открыть нужный файл: Код:
1.4. Если открытие прошло успешно - получаем необходимый список вкладок, выводя их в CheckListBox, чтобы там можно было выбрать какие вкладки переносить в Ворд. Код:
Код:
1.6. Закрываем Эксель. Проверяем переменную стадии открытия, установленность и запущенность Экселя. После этого если число открытых файлов больше одного - отыскиваем по имени наш файл и закрываем его, иначе (если файлов открыто не больше одного) закрываем Эксель. Код:
Код:
Последний раз редактировалось Ship_1; 23.02.2014 в 18:43. |
23.02.2014, 17:44 | #3 |
Форумчанин
Регистрация: 10.02.2014
Сообщений: 526
|
(продолжение)
2. Сам перенос таблицы. На событии нажатия кнопки ("Button1Click").
2.1. Запускаем Эксель и открываем файл, повторяя шаги 1.1 - 1.3. 2.2. Запускаем Ворд и открываем шаблон по тому же принципу: 2.2.1. Проверяем установленность Код:
Код:
Код:
Код:
2.2.4 Открываем файл Код:
2.2.5. Целиком часть открытия Вордаи файла документа. Код:
Последний раз редактировалось Ship_1; 23.02.2014 в 18:16. |
23.02.2014, 17:47 | #4 |
Форумчанин
Регистрация: 10.02.2014
Сообщений: 526
|
(продолжение)
2.3. "Подгатавливаем почву" для переноса таблиц.
2.3.1. Для начала в открытой Вордовой таблице установим нужную высоту строки таблицы: Код:
2.3.2. После этого введём переменные для обозначения номера создаваемой в ворде таблицы и номера последней перенесённой строки. Код:
Код:
Код:
Код:
Код:
Код:
Чтоб не возиться с ненужными столбцами, случайно считающимися Экселем используемыми, я и задал жёсткую привязку числа колонок. А необрабатывание ненужных строк встроил в программу (будет дальше). 2.3.7. И запускаем второй уровень перебора - по строкам таблицы. Код:
|
23.02.2014, 17:52 | #5 |
Форумчанин
Регистрация: 10.02.2014
Сообщений: 526
|
(продолжение)
2.4. Приступаем непосредственно к переносу.
2.4.1. Добавляем новую строку. Код:
2.4.2. Проверяем первую ячейку аналогичной строки активной вкладки Экселя наобъединённость, и, если она входит в объединённые Код:
Код:
Код:
Шрифт: Код:
Выравнивание: Код:
Код:
|
23.02.2014, 17:57 | #6 |
Форумчанин
Регистрация: 10.02.2014
Сообщений: 526
|
(продолжение)
2.4.3. Если же у нас строка не объединённая, значит она содержит обычные данные.
2.4.3.1. Применяем необходимое выравнивание ячейкам Код:
Код:
Код:
Окончанием данных считаем не только конец используемого диапазона активной вкладки Экселя (по причине, описаной в п.2.3.6.), но и две пустые ячейки подряд во втором столбце Код:
|
23.02.2014, 18:04 | #7 |
Форумчанин
Регистрация: 10.02.2014
Сообщений: 526
|
(окончание)
2.4.5. Это был конец второго уровня перебора, начатый в п.2.3.7. После его выполнения перенос данных с одной вкладки будет закончен.
2.4.6. Т.к. каждая новая вкладка должна начинаться с нового листа - делаем разрыв. Я пробовал экспериментировать с разрывом страницы, чтобы не было заморочек с колонтитулами, т.к. для каждого нового раздела свои условия или копия предыдущих, что в любом случае не здорово, т.к. появляется дополнительная зона отслеживания. Но в какую бы ячейку я вручную не вставлял разрыв страницы - всегда на новой странице появлялась сначала пустая текстовая строка, а потом продолжалась таблица. Это совсем не подходит для моей задачи, т.к. "шапка" таблицы у меня в колонтитулах, и таблица должна начинаться сразу после конца колонтитулов. С этой задачей справилась вставка нового раздела. Код:
2.4.7. После этого обнуляем переменную последней перенесённой строки таблицы и увеличиваем на одну переменную номера создаваемой таблицы. Код:
2.5. Теперь можно закрыть Ворд (примерно так же, какЭксель в п.1.6, 1.7.) С одной лишь разницей: сам Ворд мы не закрываем, а оставляем открытым для работы с полученным результатом. Код:
Код:
На этом пока всё. Жаль, здесь потом нельзя будет отредактировать эту запись. Сделал бы покрасивее... Надеюсь, сделал эту запись на пользу обществу, а не во вред (учитывая объём) Программа пока сырая. Буду дальше разбирать. Если кто знает - три наиболее интересующих меня сейчас вопроса: 1. Как задать смещение таблицы в Ворде относительно верха и лева листа? 2. Как программно сделать в новом разделе другие колонтитулы (т.е. убрать значение "как в предыдущем разделе). 3. Можно ли скопировать таблицу в Ворде из одного места в другой целиком (проще, чем нарисовать заново с такими же параметрами)? Присутствующая недоработка: изначальную строку, после выполнения всех циклов, программа переносит в новый раздел. В результате в конце появляется всегда один лист с одной строкой. Во вложении юнит целиком. Последний раз редактировалось Ship_1; 23.02.2014 в 18:42. |
02.03.2014, 20:43 | #8 |
Форумчанин
Регистрация: 10.02.2014
Сообщений: 526
|
Хм... Вопросы без ответа, тема без сообщений... Зря писал?
|
04.04.2016, 13:42 | #9 |
Новичок
Джуниор
Регистрация: 04.04.2016
Сообщений: 1
|
Спасибо большое))
|
Опции темы | Поиск в этой теме |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Постоянно слетает галочка "автоматически" в "Параметры Excel", "Формулы", "Вычисления в книге" | Alexsandrr | Microsoft Office Excel | 4 | 19.10.2013 14:22 |
Суммирование значений "детальной" таблицы | JUDAS | SQL, базы данных | 2 | 13.10.2011 14:32 |
Связь автофигуры "Надпись" в Word со значением ячейки в Excel. | OMEN_6666 | Microsoft Office Excel | 2 | 24.12.2010 20:43 |
Поиск "проблемных значений" и вставка строки в новый документ Excel | Gvaridos | Microsoft Office Excel | 5 | 16.11.2010 13:56 |
Автоматическое сохранение + Печать. Продолжение темы "Перенос данных из Excel в Word" | The_Andrei | Microsoft Office Word | 15 | 23.06.2009 23:46 |