Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

HTML+CSS+JavaScript

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Преобразование таблиц Word
 
 автор: boris   (15.08.2005 в 11:31)   письмо автору
 
 

Добрый день!
Может кто сталкивался с такой проблемой:
Давным давно, когда разрабатывался мой сайт, в него надо было поместить
порядка 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>

Неужели я обречен неделями редактировать такие таблицы :(

   
 
 автор: P@Sol   (15.08.2005 в 11:46)   письмо автору
 
   для: boris   (15.08.2005 в 11:31)
 

в редакторах есть поиск/замена ;)

   
 
 автор: Boris   (15.08.2005 в 12:22)   письмо автору
 
   для: P@Sol   (15.08.2005 в 11:46)
 

Дело в том, что атрибуты тегов td и p везде разные (где-то указана разная ширина, где-то - collspan, а также margin, padding и т.д.). Замена не спасает, все равно ковыряешь почти вручную.

   
 
 автор: cheops   (15.08.2005 в 12:35)   письмо автору
 
   для: Boris   (15.08.2005 в 12:22)
 

Можно попытаться пройтись по этому хозяству регулярными выражениями, но тогда потребуется файл с такой таблицей.

   
 
 автор: Boris   (15.08.2005 в 12:57)   письмо автору
 
   для: cheops   (15.08.2005 в 12:35)
 

Что значит файл с такой таблицей?
Кстати на диске к ващей книге есть система администрирования контента, в ней - импорт таблицы из csv -файла.
Берешь таблицу из Word, всавляешь в Exell, сохраняешь как csv, импотируешь ее, используя ваше приложение выделяешь код и вставляешь к себе в страницу.
Там чистые теги, здорово!
Но только если нет объединенных ячеек или столбцов, иначе все съезжает.
Я пока не вникал в алгоритм работы этого преобразования, сразу вопрос:
можно ли быстро это исправить или это требует значитильных усилий и быстрее будет редактировать потом полученную таблицу?

   
 
 автор: cheops   (15.08.2005 в 13:45)   письмо автору
 
   для: Boris   (15.08.2005 в 12:57)
 

>Что значит файл с такой таблицей?
C замусоренной таблицей - чтобы было на чём тестировать... Я предлагаю написать PHP-скрипт, который будет - проходится по файлу и читстить тэги от css-мусора...

   
 
 автор: Boris   (15.08.2005 в 14:31)   письмо автору
 
   для: cheops   (15.08.2005 в 13:45)
 

Простите меня за наглость. но я "никак" в регулярных выражениях,
но принцип такой:
Обработке подвергаются теги tr, td и p.
удалить все вплоть до знака ">" , оставлять конструкции: rowspan="x" и collspan="x", если они попадаются.
Что-нибудь типа:

str_replace("<tr ....  .rowspan="..." .collspan="...">" .........  

Голова уже болит от продуктов Microsoft, наливаю чаю, забиваюсь в уголок читать регулярные выражения :)
Эх, все откладывал, да откладывал!

   
 
 автор: cheops   (15.08.2005 в 20:21)   письмо автору
 
   для: 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 вырезает и в нём требуется осуществить чтение каждого файла директории - если с этим будут проблемы, обращайтесь будем совершенствовать скрипт.

   
 
 автор: Loki   (15.08.2005 в 13:12)   письмо автору
 
   для: Boris   (15.08.2005 в 12:22)
 

а что если скопировать ее прямо из броузера? или открыть в том же ворде/экселе и скопировать оттуда: в этом случае должны скопироваться данные с разделителями (если ничего не напутал).

   
 
 автор: Duran   (15.08.2005 в 15:06)   письмо автору
 
   для: Loki   (15.08.2005 в 13:12)
 

Не- копировать не выйдет, оно так и скопируется.
Моно попродовать так:

Вариант 1 - в дримвэйвер есть функция очистки именно вордовских таблиц, эффективность правда порядка 30%
Вариант 2 - распечатать таблицы на вирт. принтер или на обычный, потом загнать в фаин ридер и разпознать под эксель, из экселя в CVS... Геморойно, но это работает :-).

   
 
 автор: Loki   (15.08.2005 в 16:01)   письмо автору
 
   для: Duran   (15.08.2005 в 15:06)
 

>Не- копировать не выйдет, оно так и скопируется.
Как "так"?
у меня знакомый делал реализацию для заказчика: из экселя таблица тупо копировалась в textarea, откуда разбиралась средствами php и записывалась в БД. Чем не решение?

   
 
 автор: Duran   (16.08.2005 в 10:27)   письмо автору
 
   для: Loki   (15.08.2005 в 16:01)
 

"так" - это из ворда :-)
Посему, я и посоветовал перегнать в ёксель или в cvs

   
 
 автор: Loki   (16.08.2005 в 11:12)   письмо автору
 
   для: Duran   (16.08.2005 в 10:27)
 

Только что скопировал прямо из броузера в эксель таблицу - вставилась без вопросов, а из экселя скопировал в textarea - тоже никаких трудностей - все поля разделены знаком табуляции - бери да пользуйся:) ну или в csv можно... мне кажется, самый простой вариант (если там не 10000 файлов:)

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования