|
|
|
| Добрый день!
Может кто сталкивался с такой проблемой:
Давным давно, когда разрабатывался мой сайт, в него надо было поместить
порядка 20 таблиц с данными из Word. Все таблицы сложные и большие (до 120 строк). За не имением времени, я их импортировал из Worda в FrontPage.
Результат был ужасен, но информация была представлена.
Теперь назрела необлодимость все сделать по-человечески.
Вопрос: Можно ли как-нибудь автоматизировать процесс преобразования этого хлама в просто набор тегов table, tr, td, rowspan, collspan, навороты пропишу в CSS?
Так импортируется таблица Word в FrontPage:
<table class="MsoNormalTable" border="1" cellspacing="0" cellpadding="0" style="border-collapse: collapse; border: medium none">
<thead>
<tr style="page-break-inside:avoid;height:28.7pt">
<td width="37" style="width: 27.55pt; height: 28.7pt; border-left: medium none; border-right: 1.0pt solid windowtext; border-top: 1.0pt solid windowtext; border-bottom: 1.0pt solid windowtext; padding-left: 5.4pt; padding-right: 5.4pt; padding-top: 0cm; padding-bottom: 0cm">
<p class="MsoNormal" align="center" style="text-align:center">
№</td>
<td width="387" colspan="2" style="width: 290.6pt; height: 28.7pt; border-left: medium none; border-right: 1.0pt solid windowtext; border-top: 1.0pt solid windowtext; border-bottom: 1.0pt solid windowtext; padding-left: 5.4pt; padding-right: 5.4pt; padding-top: 0cm; padding-bottom: 0cm">
<p class="MsoNormal" align="center" style="text-align:center">
Наименование параметра</td>
<td width="117" style="width: 88.1pt; height: 28.7pt; border-left: medium none; border-right: 1.0pt solid windowtext; border-top: 1.0pt solid windowtext; border-bottom: medium none; padding-left: 5.4pt; padding-right: 5.4pt; padding-top: 0cm; padding-bottom: 0cm">
<p class="MsoNormal" align="center" style="text-align:center">
ОПН-0,64/0,76-10(II)
УХЛ1</td>
<td width="118" style="width: 88.15pt; height: 28.7pt; border-left: medium none; border-right: medium none; border-top: 1.0pt solid windowtext; border-bottom: 1.0pt solid windowtext; padding-left: 5.4pt; padding-right: 5.4pt; padding-top: 0cm; padding-bottom: 0cm">
<p class="MsoNormal" align="center" style="text-align:center">
ОПН-1,28/1,56-10(II)
УХЛ1</td>
</tr>
|
Неужели я обречен неделями редактировать такие таблицы :( | |
|
|
|
|
|
|
|
для: boris
(15.08.2005 в 11:31)
| | в редакторах есть поиск/замена ;) | |
|
|
|
|
|
|
|
для: P@Sol
(15.08.2005 в 11:46)
| | Дело в том, что атрибуты тегов td и p везде разные (где-то указана разная ширина, где-то - collspan, а также margin, padding и т.д.). Замена не спасает, все равно ковыряешь почти вручную. | |
|
|
|
|
|
|
|
для: Boris
(15.08.2005 в 12:22)
| | Можно попытаться пройтись по этому хозяству регулярными выражениями, но тогда потребуется файл с такой таблицей. | |
|
|
|
|
|
|
|
для: cheops
(15.08.2005 в 12:35)
| | Что значит файл с такой таблицей?
Кстати на диске к ващей книге есть система администрирования контента, в ней - импорт таблицы из csv -файла.
Берешь таблицу из Word, всавляешь в Exell, сохраняешь как csv, импотируешь ее, используя ваше приложение выделяешь код и вставляешь к себе в страницу.
Там чистые теги, здорово!
Но только если нет объединенных ячеек или столбцов, иначе все съезжает.
Я пока не вникал в алгоритм работы этого преобразования, сразу вопрос:
можно ли быстро это исправить или это требует значитильных усилий и быстрее будет редактировать потом полученную таблицу? | |
|
|
|
|
|
|
|
для: Boris
(15.08.2005 в 12:57)
| | >Что значит файл с такой таблицей?
C замусоренной таблицей - чтобы было на чём тестировать... Я предлагаю написать PHP-скрипт, который будет - проходится по файлу и читстить тэги от css-мусора... | |
|
|
|
|
|
|
|
для: cheops
(15.08.2005 в 13:45)
| | Простите меня за наглость. но я "никак" в регулярных выражениях,
но принцип такой:
Обработке подвергаются теги tr, td и p.
удалить все вплоть до знака ">" , оставлять конструкции: rowspan="x" и collspan="x", если они попадаются.
Что-нибудь типа:
str_replace("<tr .... .rowspan="..." .collspan="...">" .........
|
Голова уже болит от продуктов Microsoft, наливаю чаю, забиваюсь в уголок читать регулярные выражения :)
Эх, все откладывал, да откладывал! | |
|
|
|
|
|
|
|
для: Boris
(15.08.2005 в 14:31)
| | Вот если по быстренькому, то можно использовать следующий скрипт
<?php
$text = '<table class="MsoNormalTable" border="1" cellspacing="0" cellpadding="0" style="border-collapse: collapse; border: medium none">
<thead>
<tr style="page-break-inside:avoid;height:28.7pt">
<td width="37" style="width: 27.55pt; height: 28.7pt; border-left: medium none; border-right: 1.0pt solid windowtext; border-top: 1.0pt solid windowtext; border-bottom: 1.0pt solid windowtext; padding-left: 5.4pt; padding-right: 5.4pt; padding-top: 0cm; padding-bottom: 0cm">
<p class="MsoNormal" align="center" style="text-align:center">
№</td>
<td width="387" colspan="2" style="width: 290.6pt; height: 28.7pt; border-left: medium none; border-right: 1.0pt solid windowtext; border-top: 1.0pt solid windowtext; border-bottom: 1.0pt solid windowtext; padding-left: 5.4pt; padding-right: 5.4pt; padding-top: 0cm; padding-bottom: 0cm">
<p class="MsoNormal" align="center" style="text-align:center">
Наименование параметра</td>
<td width="117" style="width: 88.1pt; height: 28.7pt; border-left: medium none; border-right: 1.0pt solid windowtext; border-top: 1.0pt solid windowtext; border-bottom: medium none; padding-left: 5.4pt; padding-right: 5.4pt; padding-top: 0cm; padding-bottom: 0cm">
<p class="MsoNormal" align="center" style="text-align:center">
ОПН-0,64/0,76-10(II)
УХЛ1</td>
<td width="118" style="width: 88.15pt; height: 28.7pt; border-left: medium none; border-right: medium none; border-top: 1.0pt solid windowtext; border-bottom: 1.0pt solid windowtext; padding-left: 5.4pt; padding-right: 5.4pt; padding-top: 0cm; padding-bottom: 0cm">
<p class="MsoNormal" align="center" style="text-align:center">
ОПН-1,28/1,56-10(II)
УХЛ1</td>
</tr>';
$text = preg_replace("|<tr([^>]+)>|i","<tr>",$text);
$text = preg_replace("|<td([^>]+)>|i","<td>",$text);
$text = preg_replace("|<p([^>]+)>|i","<p>",$text);
echo $text;
?>
|
он правда rowspan и colspan вырезает и в нём требуется осуществить чтение каждого файла директории - если с этим будут проблемы, обращайтесь будем совершенствовать скрипт. | |
|
|
|
|
|
|
|
для: Boris
(15.08.2005 в 12:22)
| | а что если скопировать ее прямо из броузера? или открыть в том же ворде/экселе и скопировать оттуда: в этом случае должны скопироваться данные с разделителями (если ничего не напутал). | |
|
|
|
|
|
|
|
для: Loki
(15.08.2005 в 13:12)
| | Не- копировать не выйдет, оно так и скопируется.
Моно попродовать так:
Вариант 1 - в дримвэйвер есть функция очистки именно вордовских таблиц, эффективность правда порядка 30%
Вариант 2 - распечатать таблицы на вирт. принтер или на обычный, потом загнать в фаин ридер и разпознать под эксель, из экселя в CVS... Геморойно, но это работает :-). | |
|
|
|
|
|
|
|
для: Duran
(15.08.2005 в 15:06)
| | >Не- копировать не выйдет, оно так и скопируется.
Как "так"?
у меня знакомый делал реализацию для заказчика: из экселя таблица тупо копировалась в textarea, откуда разбиралась средствами php и записывалась в БД. Чем не решение? | |
|
|
|
|
|
|
|
для: Loki
(15.08.2005 в 16:01)
| | "так" - это из ворда :-)
Посему, я и посоветовал перегнать в ёксель или в cvs | |
|
|
|
|
|
|
|
для: Duran
(16.08.2005 в 10:27)
| | Только что скопировал прямо из броузера в эксель таблицу - вставилась без вопросов, а из экселя скопировал в textarea - тоже никаких трудностей - все поля разделены знаком табуляции - бери да пользуйся:) ну или в csv можно... мне кажется, самый простой вариант (если там не 10000 файлов:) | |
|
|
|