Импорт таблицы HTML (тэг TABLE) в таблицу AutoCAD
| Правила | Регистрация | Пользователи | Сообщения за день |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Импорт таблицы HTML (тэг TABLE) в таблицу AutoCAD

Импорт таблицы HTML (тэг TABLE) в таблицу AutoCAD

Ответ
Поиск в этой теме
Непрочитано 08.10.2010, 09:00 #1
Импорт таблицы HTML (тэг TABLE) в таблицу AutoCAD
Сергей Дубина
 
Регистрация: 06.04.2009
Сообщений: 702

Здравствуйте. Подскажите сущестует ли утилита или функция для импорта таблицы HTML (тэг TABLE) в таблицу AutoCAD? Дайте ссылочку плз.
__________________
КазнитьØнельзяØпомиловать:eek:
Просмотров: 17198
 
Непрочитано 08.10.2010, 12:52
#2
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


Цитата:
Сообщение от Сергей Дубина Посмотреть сообщение
Здравствуйте. Подскажите сущестует ли утилита или функция для импорта таблицы HTML (тэг TABLE) в таблицу AutoCAD? Дайте ссылочку плз.
На чём пишешь и какой автокад?
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:
hwd вне форума  
 
Автор темы   Непрочитано 08.10.2010, 12:59
#3
Сергей Дубина


 
Регистрация: 06.04.2009
Сообщений: 702


Надеюсь готовая у кого-то есть. Не найду буду писать СОМ на VB.
__________________
КазнитьØнельзяØпомиловать:eek:
Сергей Дубина вне форума  
 
Непрочитано 08.10.2010, 13:01
#4
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


Цитата:
Сообщение от Сергей Дубина Посмотреть сообщение
Надеюсь готовая у кого-то есть. Не найду буду писать СОМ на VB.
аке, пиши сам.
п.с. возможно будет интересно глянуть. Я сначала из html конвертирую в xml и уж потом в то, что мне нужно. По указанной ссылке код конвертирования из html в xml. Был код по созданию табличного объекта на основании xml-кода (т.е. второй шаг), но сейчас найти не смог - где-то уже похерил...
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:

Последний раз редактировалось hwd, 08.10.2010 в 13:35.
hwd вне форума  
 
Автор темы   Непрочитано 08.10.2010, 14:34
#5
Сергей Дубина


 
Регистрация: 06.04.2009
Сообщений: 702


Спасибо. Я не знток Си но было интересно. Моя задача изначально проще т.к. html таблица будет точно соответствовать xml.
__________________
КазнитьØнельзяØпомиловать:eek:
Сергей Дубина вне форума  
 
Непрочитано 08.10.2010, 14:39
#6
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


Цитата:
Сообщение от Сергей Дубина Посмотреть сообщение
т.к. html таблица будет точно соответствовать xml.
т.е. изначально данные представлены всё же не в html, а в xml? Если "да", то всё до безобразия просто (правда нужно уточнить структуру xml, т.к. в таблице могут быть объединённые ячейки + выравнивание + границы). я преобразовывал в такой xml формат, который по структуре похож разметке xaml. И по ней создавал таблицы.
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:
hwd вне форума  
 
Автор темы   Непрочитано 08.10.2010, 14:40
#7
Сергей Дубина


 
Регистрация: 06.04.2009
Сообщений: 702


Где взять?
__________________
КазнитьØнельзяØпомиловать:eek:
Сергей Дубина вне форума  
 
Непрочитано 08.10.2010, 14:51
#8
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


Цитата:
Сообщение от Сергей Дубина Посмотреть сообщение
Где взять?
взять что? Пример таблицы покажи (разметку).
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:
hwd вне форума  
 
Непрочитано 08.10.2010, 15:02
#9
ShaggyDoc

Thượng Tá Quân Đội Nhân Dân Việt Nam
 
Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372


Импортировать из HTML проблематично. HTML может быть написан "грязно" (особенно если таблица откуда-то "из ворда"). Результаты могут быть непредсказуемы. Что, например, будете делать с атрибутами форматирования? С внешними стилями, или со стилями "in-line"? А если будут незакрытые теги?

Вот XML - другое дело. Там строгие правила, соответственно и разборка проще.

У меня все таблицы, рисуемые в AutoCAD в виде Table хранятся описанными в XML. Там и форма и данные.

Надо внимательней разбираться с источником данных для таблиц и уж в HTML их точно не стоит преобразовывать.
ShaggyDoc вне форума  
 
Непрочитано 08.10.2010, 15:13
#10
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


Цитата:
Сообщение от ShaggyDoc Посмотреть сообщение
Импортировать из HTML проблематично. HTML может быть написан "грязно" (особенно если таблица откуда-то "из ворда"). Результаты могут быть непредсказуемы. Что, например, будете делать с атрибутами форматирования? С внешними стилями, или со стилями "in-line"? А если будут незакрытые теги?
Вот именно эту проблему я и решал, производя экспорт из html в xml.

Кстати, может сможете подсказать - я решал задачу, при которой юзер выделяет в excel нужную таблицу, нажимает Ctrl + C, открывает AutoCAD, нажимает Ctrl + V и в результате вставляется таблица AutoCAD, оформленная должным образом (стиль таблицы/цвета/толщины/стиль текста/размеры/формулы/объединения ячеек и т.п.). Парсер мне пришлось писать потому, что из буфера обмена я не нашёл, как можно считать таблицу сразу в формате xml, но смог получить в формате html, после чего и вынужден был заниматься парсингом.

Вы в курсе, как можно из буфера обмена, в данной ситуации, получить таблицу сразу в формате xml, минуя html?
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:

Последний раз редактировалось hwd, 08.10.2010 в 15:18.
hwd вне форума  
 
Автор темы   Непрочитано 08.10.2010, 15:20
#11
Сергей Дубина


 
Регистрация: 06.04.2009
Сообщений: 702


Цитата:
Сообщение от hwd Посмотреть сообщение
взять что? Пример таблицы покажи (разметку).
Перефразирую:
Здравствуйте. Подскажите сущестует ли утилита или функция для импорта таблицы XML в таблицу AutoCAD?
Разметка произвольная, имена элементов XML соответствуют HTML (тэг TABLE и его комманда)
__________________
КазнитьØнельзяØпомиловать:eek:
Сергей Дубина вне форума  
 
Непрочитано 08.10.2010, 15:23
#12
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


Цитата:
Сообщение от Сергей Дубина Посмотреть сообщение
Перефразирую:
Здравствуйте. Подскажите сущестует ли утилита или функция для импорта таблицы XML в таблицу AutoCAD?
Разметка произвольная, имена элементов XML соответствуют HTML (тэг TABLE и его комманда)
Насколько я знаю - не существует, но если структура xml-файла известна (а не "произвольная разметка"), то написать такое самому не должно составить труда.
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:
hwd вне форума  
 
Автор темы   Непрочитано 08.10.2010, 15:42
#13
Сергей Дубина


 
Регистрация: 06.04.2009
Сообщений: 702


Начну с простых. А там видно будет. Может и на вложенные время найдется.
__________________
КазнитьØнельзяØпомиловать:eek:
Сергей Дубина вне форума  
 
Непрочитано 08.10.2010, 16:13
#14
Vildar

AutoCAD
 
Регистрация: 26.07.2007
Москва
Сообщений: 1,064


Цитата:
Сообщение от hwd Посмотреть сообщение
Кстати, может сможете подсказать - я решал задачу, при которой юзер выделяет в excel нужную таблицу, нажимает Ctrl + C, открывает AutoCAD, нажимает Ctrl + V и в результате вставляется таблица AutoCAD, оформленная должным образом (стиль таблицы/цвета/толщины/стиль текста/размеры/формулы/объединения ячеек и т.п.).
Можно использовать специальную вставку в акаде, как объекты AutoCAD, и вставить таблицу (меню Правка > Специальная вставка). Ну а потом стиль применить нужный.
ps работает в 2008 версии, в других не пробовал.
Vildar вне форума  
 
Непрочитано 08.10.2010, 16:15
#15
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


Цитата:
Сообщение от Vildar Посмотреть сообщение
Можно использовать специальную вставку в акаде, как объекты AutoCAD, и вставить таблицу (меню Правка > Специальная вставка). Ну а потом стиль применить нужный.
ps работает в 2008 версии, в других не пробовал.
Я знаю об этом, но это не то, что нужно.
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:
hwd вне форума  
 
Непрочитано 08.10.2010, 17:47
#16
ShaggyDoc

Thượng Tá Quân Đội Nhân Dân Việt Nam
 
Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372


Цитата:
Подскажите сущестует ли утилита или функция для импорта таблицы XML в таблицу AutoCAD?
Разметка произвольная, имена элементов XML соответствуют HTML (тэг TABLE и его комманда)
Ну, у меня в ruCAD существует. Но предназначение конкретное - делать любые стандартные и нестандартные таблицы.

Вот пример описания простейшей:
Код:
[Выделить все]
<?xml version="1.0" encoding="windows-1251" ?>
<table>
  <summaryinfo Title="ВЕДОМОСТЬ ЧЕРТЕЖЕЙ ОСНОВНОГО КОМПЛЕКТА" Subject="Система ruCAD" Author="ShaggyDoc" LastAuthor="ShaggyDoc" Create_DTM="23.04.2007 11:56:48" RevNumber="4"/>
  <title rows="1" height="15" ask_title="1">
  <columns count="3">
    <column_1 size="15" type="STRING" align="C"/>
    <column_2 size="140" type="STRING" align="L"/>
    <column_3 size="30" type="STRING" align="L"/>
  </columns>
    <row_1  height="15">
	  <cell_1 text="Лист" />
	  <cell_2 text="Наименование" />
	  <cell_3 text="Примечание" />
	</row_1>
  </title>
  <data rows="1">
    <row_1>
      <column_1 data=""/>
      <column_2 data=""/>
      <column_3 data=""/>
    </row_1>
  </data>
</table>
Имена элементов здесь заданы строго определенные (хотя могли бы быть другими).
Но удобнее иметь имя row_1...row_x вместо tr - в имени элемента уже заложен счетчик, это упрощает работу.

Но у XML важная особенность - наличие атрибутов. Это облегчает работу.

Таким образом структура никак не произвольная. Произвольным может быть, например, количество строк данных. Сами таблицы могут быть любыми, но описанными по строгим правилам.

Для рисования таблиц пришлось сделать около 25 дополнительных функций. Все это на LISP. И только для рисования собственно таблиц - там множество нюансов. А еще десяток функций разбирают XML, получая значения заданных атрибутов по заданному пути в дереве элементов. И COM-сервер, который физически читает файл и возвращает значения атрибутов.

Что касается специальной вставки, то это ручная работа. Не программирование.
ShaggyDoc вне форума  
 
Непрочитано 08.10.2010, 18:10
#17
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


>ShaggyDoc
А мой вопрос проигнорирован?
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:
hwd вне форума  
 
Непрочитано 08.10.2010, 19:29
1 | #18
Олег (jr.)

специалист по околачиванию грушевых деревьев
 
Регистрация: 14.09.2004
Pietari, Venäjä
Сообщений: 811


Цитата:
Сообщение от Сергей Дубина Посмотреть сообщение
Начну с простых. А там видно будет. Может и на вложенные время найдется.
Начни с простых
Код:
[Выделить все]
    Public Shared Function ParseTB(ByVal filename As String) As ArrayList
        ''based on code written by vladgrid from there:
        ''http://www.sql.ru/forum/actualthread.aspx?tid=109497#833091
        Dim outarr As ArrayList = New ArrayList
        Dim sr As New StreamReader(filename)
        Dim text As String = sr.ReadToEnd()
        sr.Close()
        Dim readstr() As Object = New Object() {text}
        Dim doc As mshtml.HTMLDocumentClass = New mshtml.HTMLDocumentClass
        doc.IHTMLDocument2_write(readstr)
        Dim tables As mshtml.IHTMLElementCollection = doc.getElementsByTagName("table")
        Dim table As mshtml.HTMLTableClass = tables.item(0)

        For Each row As mshtml.HTMLTableRowClass In table.rows
            Dim item As ArrayList = New ArrayList
            For Each col As mshtml.HTMLTableCellClass In row.cells
                item.Add(col.innerText)
            Next
            outarr.Add(item)
        Next
        Return outarr
    End Function
    <CommandMethod("HTML")> _
    Public Sub addTable()
        Dim adoc As Document = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument
        Dim ed As Editor = adoc.Editor
        Using lock As DocumentLock = adoc.LockDocument()
            Dim dbase As Database = HostApplicationServices.WorkingDatabase

            Using trans As Transaction = dbase.TransactionManager.StartTransaction()

                Try
                   
                    Dim data As ArrayList = ParseTB("C:\Blabla.html")''<-- change file name here

                    Dim nmRows As Integer = data.Count + 1
                    Dim nmColumns As Integer = data(0).Count
                    Dim position As Point3d = New Point3d(0, 0, 0) '<--dummy point

                    Dim rowHeight As Double = 7.5
                    Dim colWidth As Double = 75.0
                    Dim blkTbl As BlockTable = CType(trans.GetObject(dbase.BlockTableId, OpenMode.ForRead), BlockTable)
                    Dim blkTblRec As BlockTableRecord = CType(trans.GetObject(blkTbl(BlockTableRecord.ModelSpace), OpenMode.ForWrite), BlockTableRecord)
                    Dim myTable As Table = New Table()
                    myTable.IsHeaderSuppressed = False
                    myTable.IsTitleSuppressed = False

                    myTable.NumColumns = nmColumns
                    myTable.NumRows = nmRows
                    myTable.Height = nmRows * rowHeight
                    myTable.Width = nmColumns * colWidth
                    myTable.Position = position

                    myTable.RecomputeTableBlock(False)
                    myTable.GenerateLayout()
                    myTable.SetTextString(0, 0, "Title")

                    myTable.SetTextHeight(5, RowType.TitleRow) 'title row
                    myTable.SetTextHeight(5, RowType.HeaderRow) 'header row
                    myTable.SetTextHeight(4, RowType.DataRow) 'data row

                    
                    Dim i As Integer = 0
                    For Each item As ArrayList In data
                        Dim j As Integer = 0
                        For Each s As String In item
                            myTable.SetTextString(i + 1, j, s)
                            myTable.SetRowHeight(rowHeight)
                            myTable.SetColumnWidth(colWidth)
                            j = j + 1
                        Next
                        i = i + 1
                    Next

                    myTable.RecomputeTableBlock(True)
                    blkTblRec.AppendEntity(myTable)
                    trans.AddNewlyCreatedDBObject(myTable, True)
                    ed.Regen()
                    myTable.Dispose()
                    blkTbl.Dispose()
                    blkTblRec.Dispose()
                Catch ex As System.Exception
                    ed.WriteMessage(ex.Message & vbCrLf & ex.StackTrace)
                End Try
                trans.Commit()
            End Using
        End Using
    End Sub
~'J'~
Олег (jr.) вне форума  
 
Непрочитано 09.10.2010, 07:33
#19
ShaggyDoc

Thượng Tá Quân Đội Nhân Dân Việt Nam
 
Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372


Цитата:
А мой вопрос проигнорирован?
Про что? Про буфер обмена? А зачем с ним вообще работать программисту? В буфере может быть что угодно, разные данные в разных форматах. Разбираться с этим можно, но в самом крайнем случае, когда абсолютно никаких других путей нет.

Вот я знаю, что находится в буфере, если, например, из Word или HTML-документа скопировать таблицу. Если вставить "это" в какой-то редактор, который отображает и оформление, и код (например, редакторы TinyMCE или CKEditor в CMS сайтов), то видна вся гадость, занесенная из буфера. Например, ради двух строчек полезного кода заносится до десятка страниц бесполезной и даже вредной информации о всяких стилях с префиксами "mso:".

Цитата:
Начни с простых
Я бы с таких простых методов не стал начинать. Конечно, для VBA-шника это естественный путь - обратиться к MSHTML (а это такая гадость, но не тема этого форума).

Вообще-то пример хороший, для демонстрации принципиальных возможностей. Например, как можно было бы вставить таблицу в какой-то "документ вообще".

Однако мы имем дело с конкретными требования к оформлению таблиц в чертежах по стандартам. А это, например, "толщина" линий шапок, горизонтальных разграфок, высота текстов и прочее. Форма таблицы может быть любая, а оформление - стандартное. Вставив таблицу в AutoCAD, потом можно долго её настраивать. В итоге окажется проще её нарисовать вручную.

А где оформление зашито в HTML?

1. В таблице стилей, которая может быть во внешнем файле, а в тегах HTML будут только атрибуты классов или ID.

2. В таблице стилей, встроенной в файл.

3. "Чисто конкретно" в каждом теге HTML.

Для инженерной работы это все не годится. Если речь об обемене данными с рисованием таблиц в AutoCAD, то тут и более простые пути есть. Например, обычный текстовый CSV. Это простейший вариант, но в нем не опишешь саму структуру и оформление таблиц. XML позволяет совместить структуру и данные, причем никак не ограничен стандартными именами элементов и атрибутов.
ShaggyDoc вне форума  
 
Непрочитано 09.10.2010, 10:28
#20
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


Цитата:
Сообщение от ShaggyDoc Посмотреть сообщение
Про что? Про буфер обмена? А зачем с ним вообще работать программисту? В буфере может быть что угодно, разные данные в разных форматах. Разбираться с этим можно, но в самом крайнем случае, когда абсолютно никаких других путей нет.
Я чётко указал, что речь о том случае, когда в буфере обмена находится таблица, скопированная из excel. Проверить, является ли то, что на данный момент находится в буфере обмена, таблицей Excel - программисту не составляет труда.
Цитата:
Сообщение от ShaggyDoc Посмотреть сообщение
Вот я знаю, что находится в буфере, если, например, из Word или HTML-документа скопировать таблицу.
На данный момент меня интересует Excel. Т.е. если бы я задал вопрос про буфер обмена, при копировании таблицы из Word - это было бы нормально, (потому что вы знаете как это делается), а в случае с Excel - программисту с буфером обмена работать не нужно? Странная логика.
Цитата:
А где оформление зашито в HTML?

1. В таблице стилей, которая может быть во внешнем файле, а в тегах HTML будут только атрибуты классов или ID.

2. В таблице стилей, встроенной в файл.

3. "Чисто конкретно" в каждом теге HTML.
Дык не нужно гадать - можно просто посмотреть html-файл и всё увидеть. Оформление будет произведено всегда по одним и тем же правилам, как и в том случае, когда вы копируете содержимое в буфер обмена из Word.
В общем я вас понял и вопрос снят.
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:
hwd вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Импорт таблицы HTML (тэг TABLE) в таблицу AutoCAD



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
LISP. Вставка в таблицу поля, соотвествующего площади примитива Profan Готовые программы 272 06.06.2021 23:12
Таблицы из Excel в AutoCAD вставляются неполностью Nikolay_N AutoCAD 23 07.09.2019 21:12
В русской версии AutoCAD 2010 SP1 32-bit файл Acad.PGP содержит ошибки. hwd Баги и пожелания в Autodesk 21 21.04.2010 20:27
Информация по идентификационным кодам программ в сетевых лицензиях Autodesk KSI AutoCAD 1 14.09.2009 15:59
как с помощью vba начертить линию vasyavip Программирование 77 09.10.2008 23:17