Импорт таблицы 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:
Просмотров: 17199
 
Непрочитано 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 вне форума  
 
Непрочитано 09.10.2010, 12:01
#21
ShaggyDoc

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


Цитата:
в случае с Excel - программисту с буфером обмена работать не нужно
Зачем? С Excel можно работать напрямую - там же объектная модель. И даже можно без наличия Excel на компьютере.
ShaggyDoc вне форума  
 
Непрочитано 09.10.2010, 18:58
#22
hwd

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


Цитата:
Сообщение от ShaggyDoc Посмотреть сообщение
Зачем? С Excel можно работать напрямую
Повторюсь зачем:
Цитата:
юзер выделяет в excel нужную таблицу, нажимает Ctrl + C, открывает AutoCAD, нажимает Ctrl + V и в результате вставляется таблица AutoCAD, оформленная должным образом (стиль таблицы/цвета/толщины/стиль текста/размеры/формулы/объединения ячеек и т.п.).
т.е. в указанной ситуации данные передаются через буфер обмена.
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:
hwd вне форума  
 
Непрочитано 09.10.2010, 19:05
#23
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


Цитата:
Сообщение от hwd Посмотреть сообщение
С Excel можно работать напрямую
То есть возможность набора в таблице AutoCad вы не рассматриваете в принципе??
А как будет выглядеть таблица из Excel если ячейки ее заполнены функциями макросов на VBA?
gomer вне форума  
 
Непрочитано 09.10.2010, 19:21
#24
hwd

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


Цитата:
Сообщение от gomer Посмотреть сообщение
Цитата:
Сообщение от hwd
С Excel можно работать напрямую
То есть возможность набора в таблице AutoCad вы не рассматриваете в принципе??
А как будет выглядеть таблица из Excel если ячейки ее заполнены функциями макросов на VBA?
gomer, не нужно мне присваивать чужих сообщений - это раз.
Мой вопрос был про извлечение данных из буфера обмена - не нужно софистикой заниматься выдвигая такую фигню:
Цитата:
То есть возможность набора в таблице AutoCad вы не рассматриваете в принципе??
Это два...
Вы бы ещё спросили, не предаю ли я анафеме мышку и клавиатуру...
Цитата:
А как будет выглядеть таблица из Excel если ячейки ее заполнены функциями макросов на VBA?
А если самому подумать? имхо ответ вполне очевиден.
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:
hwd вне форума  
 
Непрочитано 10.10.2010, 13:17
#25
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


>hwd: Сорри, опять промахнулся...
Цитата:
Сообщение от hwd Посмотреть сообщение
ответ вполне очевиден
Если спросил, значит, для меня не очевиден=) но это все оффтоп...
gomer вне форума  
 
Автор темы   Непрочитано 11.10.2010, 08:40
#26
Сергей Дубина


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


Олег (jr.) спасибо. Буду разбираться.
ShaggyDoc читал вашу книгу, достойный труд. Но мне Ваша разметка не подходит.
__________________
КазнитьØнельзяØпомиловать:eek:
Сергей Дубина вне форума  
 
Непрочитано 11.10.2010, 19:30
#27
hwd

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


Для тех, кому интересно, как программно получить таблицу MS Excel из буфера обмена, причём получить в формате xml - смотреть решение здесь.

>Сергей Дубина
А как такой вариант?
Решение построено построено по подобию WPF-разметки.
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:
hwd вне форума  
 
Автор темы   Непрочитано 12.10.2010, 08:57
#28
Сергей Дубина


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


Я поясню свою мотивацию, у меня есть надстройка в MS Excel, хочу переписать в exe-шник с сохранением в HTML, причины пояснять не буду. Недокументированные данные (не вошедшие в таблицу) будут храниться там-же в теге XML.
На предложенной странице:
Цитата:
Сообщение от hwd Посмотреть сообщение
Код, вычерчивающий таблицу по xml-шаблону не выкладываю, т.к. он на .Net.
Ecли не трудно ссылку на .Net можно?
__________________
КазнитьØнельзяØпомиловать:eek:
Сергей Дубина вне форума  
 
Непрочитано 12.10.2010, 09:14
#29
hwd

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


Цитата:
Сообщение от Сергей Дубина Посмотреть сообщение
с сохранением в HTML, причины пояснять не буду
А если всё таки пояснить, зачем именно в HTML, почему сразу не сохранять в XML?
Цитата:
Ecли не трудно ссылку на .Net можно?
Я не опубликовывал в интернете этот код. Постараюсь выложить в ближайшее время (день-два).
п.с. А вы что, на .net пишете?
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:
hwd вне форума  
 
Автор темы   Непрочитано 12.10.2010, 09:30
#30
Сергей Дубина


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


Цитата:
Сообщение от hwd Посмотреть сообщение
А если всё таки пояснить, зачем именно в HTML, почему сразу не сохранять в XML?
Чтобы Вася Пупкин увидел табличку а не гору + и -. А XSL я пока еще не допёр.
Цитата:
Сообщение от hwd Посмотреть сообщение
А вы что, на .net пишете?
VB6
__________________
КазнитьØнельзяØпомиловать:eek:
Сергей Дубина вне форума  
 
Непрочитано 12.10.2010, 10:15
#31
hwd

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


Цитата:
Сообщение от Сергей Дубина Посмотреть сообщение
Чтобы Вася Пупкин увидел табличку а не гору + и -.
А Html-то зачем? У Васи Пупкина на компьютере из софта только браузер?
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:
hwd вне форума  
 
Автор темы   Непрочитано 12.10.2010, 10:24
#32
Сергей Дубина


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


Цитата:
Сообщение от hwd Посмотреть сообщение
А Html-то зачем? У Васи Пупкина на компьютере из софта только браузер?
Да, офисная дисциплина. Я не сисадмин, а простой советский инженер.
__________________
КазнитьØнельзяØпомиловать:eek:
Сергей Дубина вне форума  
 
Непрочитано 12.10.2010, 10:32
#33
hwd

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


>Сергей Дубина
Тогда без меня - подобный подход считаю неразумным, а соответственно и решение под него писать не вижу смысла - сугубо ИМХО.
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:
hwd вне форума  
 
Автор темы   Непрочитано 12.10.2010, 10:36
#34
Сергей Дубина


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


Цитата:
Сообщение от hwd Посмотреть сообщение
Я не опубликовывал в интернете этот код. Постараюсь выложить в ближайшее время (день-два).
Цитата:
Сообщение от hwd Посмотреть сообщение
Тогда без меня
Про ссылочку не забудешь?
__________________
КазнитьØнельзяØпомиловать:eek:
Сергей Дубина вне форума  
 
Непрочитано 12.10.2010, 10:39
#35
hwd

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


Цитата:
Сообщение от Сергей Дубина Посмотреть сообщение
Про ссылочку не забудешь?
Не забуду. Хотя не понимаю, как она тебе поможет в твоём случае. C# - это далеко не VB6.
Кроме того - таблицы-то мною создаются в AutoCAD, а не в браузере.
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:
hwd вне форума  
 
Автор темы   Непрочитано 12.10.2010, 10:42
#36
Сергей Дубина


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


Цитата:
Сообщение от hwd Посмотреть сообщение
Хотя не понимаю, как она тебе поможет в твоём случае. C#
Спасибо за всё. Тогда не надо.
__________________
КазнитьØнельзяØпомиловать:eek:
Сергей Дубина вне форума  
 
Непрочитано 12.10.2010, 14:22
#37
Sad Dog

Ищу работу
 
Регистрация: 12.06.2010
Сообщений: 35


Всёж-таки правильно экспортировать из Exel в XML, а визуализировать в броузере с помощью таблицы стилей CSS или XSL трансформации. Эти же XML-данные можно будет визуализировать в автокаде с помощью спец-плагина (правда, его еще надо написать). Выглядит удобно.
Вот толстая книга по XSLT:
Дуг Тидуэлл. XSLT, 2-е издание. Издательство Символ-плюс, 2010 г., 960 стр. Вдруг пригодится.
Если уж совсем никак, то экспортируйте из Exel в XHTML - это HTML разметка по сути, только оформленная строго по правилам XML. Т.е. все теги строго закрыты, вложенность не "перехлестывается", один корневой элемент. Такой файл можно попытаться разбирать обычным XML-парсером (правда, лично я не пробовал).
Вот толстая книга по HTML(XHTML):
Муссиано Ч., Кеннеди Б. HTML и XHTML. Подробное руководство, 6-е издание. Символ-плюс, 2008 г., 752 стр.
Sad Dog вне форума  
 
Непрочитано 12.10.2010, 14:27
#38
hwd

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


Цитата:
Сообщение от Sad Dog Посмотреть сообщение
Всёж-таки правильно экспортировать из Exel в XML
+1
Цитата:
Сообщение от Sad Dog Посмотреть сообщение
Эти же XML-данные можно будет визуализировать в автокаде с помощью спец-плагина (правда, его еще надо написать).
+1
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:
hwd вне форума  
 
Автор темы   Непрочитано 12.10.2010, 15:42
#39
Сергей Дубина


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


Цитата:
Сообщение от Sad Dog Посмотреть сообщение
экспортировать из Exel в XML
Экспортировать нужно не в XML а в автокад, от Exel нужно уйти. А плагина нет и не будет. Флуктуация фантазии.
__________________
КазнитьØнельзяØпомиловать:eek:
Сергей Дубина вне форума  
 
Непрочитано 12.10.2010, 15:58
#40
hwd

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


Цитата:
Сообщение от Сергей Дубина Посмотреть сообщение
А плагина нет и не будет. Флуктуация фантазии.
Более чем уверен, что такие плагины есть. Более того - один из них я сейчас как раз модифицирую (изменяю свою первую версию), внося изменение в логику его работы.
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:
hwd вне форума  
 
Автор темы   Непрочитано 12.10.2010, 16:20
#41
Сергей Дубина


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


Цитата:
Сообщение от hwd Посмотреть сообщение
Более того - один из них я сейчас как раз модифицирую
Экспорт из XML в автокад? Примитивами чертит?
__________________
КазнитьØнельзяØпомиловать:eek:
Сергей Дубина вне форума  
 
Непрочитано 12.10.2010, 16:26
#42
hwd

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


Цитата:
Сообщение от Сергей Дубина Посмотреть сообщение
Экспорт из XML в автокад? Примитивами чертит?
Нет конечно, я же не извращенец - таблицу автокадовскую создаёт.
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:
hwd вне форума  
 
Автор темы   Непрочитано 12.10.2010, 16:28
#43
Сергей Дубина


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


Продавать будешь?
__________________
КазнитьØнельзяØпомиловать:eek:
Сергей Дубина вне форума  
 
Непрочитано 12.10.2010, 16:31
#44
hwd

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


Цитата:
Сообщение от Сергей Дубина Посмотреть сообщение
Продавать будешь?
Пока не планировал.
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:
hwd вне форума  
 
Автор темы   Непрочитано 12.10.2010, 16:33
#45
Сергей Дубина


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


А XSL к XML есть? Или что-то аналогичное? Как всё выглядеть будет на экране?
__________________
КазнитьØнельзяØпомиловать:eek:
Сергей Дубина вне форума  
 
Непрочитано 12.10.2010, 16:35
#46
hwd

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


Цитата:
Сообщение от Сергей Дубина Посмотреть сообщение
А XSL к XML есть? Или что-то аналогичное? Как всё выглядеть будет на экране?
Если интересует - покажу, когда завершу модификацию.
XSL не использовал никогда, если нужно проверить XML на корректность - предпочитаю XSD.
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:
hwd вне форума  
 
Автор темы   Непрочитано 12.10.2010, 16:39
#47
Сергей Дубина


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


В XML только данные хранятся? Для отображения в браузерах не планируется?
__________________
КазнитьØнельзяØпомиловать:eek:
Сергей Дубина вне форума  
 
Непрочитано 12.10.2010, 16:54
#48
hwd

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


Цитата:
Сообщение от Сергей Дубина Посмотреть сообщение
В XML только данные хранятся? Для отображения в браузерах не планируется?
Какие данные?
Мои пользователи предпочитают создавать ведомости и спецификации в екселе (у них под это дело на VBA куча макросов). С таблицами екселя работать быстрее и удобней, чем с автокадовскими, однако в конце концов результат (ведомости и спецификации) должны быть помещены в чертежи автокада.
Юзеры выделяют в екселе нужную таблицу и жмут Ctrl+C, затем переходят в нужный чертёж и жмут Ctrl + V и вставляют таблицу в Автокад. Причём таблица вставляется в виде автокадовской таблицы, полностью оформленной как нужно (размеры/цвета/текстовый стили и т.п.).
В момент вставки объекта из буфера обмена, я программно определяю, что вставляемый объект является таблицей Excel, преобразую её в формат xml, после чего определяю её название (Title), т.е. выясняю, что это за ведомость/спецификация. Далее программно лезу в др. xml-файл, в котором определены шаблоны разных спецификаций и ведомостей, нахожу нужный, создаю по нему заготовку Table и затем заливаю в неё данные. В таком шаблоне заранее прописаны высота строк, ширины колонок, полностью оформленная шапка, формулы и т.п.
При желании шаблоны легко правятся/модифицируются. Из расчётов на чайников - можно выбрать таблицу в чертеже, и на основе этой таблицы автоматом сгенерировать xml-шаблон ведомости.

Работа с браузером меня не интересует.
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:
hwd вне форума  
 
Автор темы   Непрочитано 13.10.2010, 08:25
#49
Сергей Дубина


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


Цитата:
Сообщение от hwd Посмотреть сообщение
Юзеры выделяют в екселе нужную таблицу и жмут Ctrl+C, затем переходят в нужный чертёж и жмут Ctrl + V и вставляют таблицу в Автокад
в Автокаде реактор?
__________________
КазнитьØнельзяØпомиловать:eek:
Сергей Дубина вне форума  
 
Непрочитано 13.10.2010, 08:54
#50
hwd

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


Цитата:
Сообщение от Сергей Дубина Посмотреть сообщение
в Автокаде реактор?
От слова "реактор" у меня начинает дёргаться глаз...
В .Net это называется событием. Да, я отлавливаю событие вставки чего-либо из буфера обмена, и на основании того, что в этом буфере содержится принимаю решение что делать.
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:
hwd вне форума  
 
Автор темы   Непрочитано 13.10.2010, 09:21
#51
Сергей Дубина


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


Цитата:
Сообщение от hwd Посмотреть сообщение
объект является таблицей Excel, преобразую её в формат xml,
Вот этот маневр не очень понятен, можно ведь напрямую через объектую модель Excel?
__________________
КазнитьØнельзяØпомиловать:eek:
Сергей Дубина вне форума  
 
Непрочитано 13.10.2010, 10:25
#52
hwd

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


Цитата:
Сообщение от Сергей Дубина Посмотреть сообщение
Вот этот маневр не очень понятен, можно ведь напрямую через объектую модель Excel?
Можно, но код экспорта в xml занимает 5 строк, как я уже показывал и работать с XML в данной ситуации гораздо удобнее, во всяком случае мне.
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:
hwd вне форума  
 
Автор темы   Непрочитано 13.10.2010, 10:32
#53
Сергей Дубина


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


Ясно. Удачи!
__________________
КазнитьØнельзяØпомиловать:eek:
Сергей Дубина вне форума  
 
Непрочитано 13.10.2010, 11:48
#54
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,839


Цитата:
Сообщение от hwd Посмотреть сообщение
Можно, но код экспорта в xml занимает 5 строк, как я уже показывал и работать с XML в данной ситуации гораздо удобнее, во всяком случае мне.
Только не воспринимай это как оскорбление в свой адрес, но в этой строке и зарыта одна из основных бед программирования - программа пишется под задачу - а не под то, как удобней "отмазаться" - согласись интерфейс переноса данных через буфер обмена (выберите там, вставьте туда) это не есть правильный путь. У excel'а есть прекрасная компонентная модель (оно-же как и у автокада) из которой можно вытащить все что угодно (или попросить через нее, что-то сделать пользователя), да это подольше разрабатывать нежели взять готовую xml библиотеку - но с твоим-то опытом в .Net...
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Непрочитано 13.10.2010, 11:56
#55
hwd

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


Цитата:
Сообщение от Дима_ Посмотреть сообщение
программа пишется под задачу
Ты сам же и ответил на свою реплику. Задачей и было реализовать корректный копипаст через буфер обмена - выше я писал об этом неоднократно.
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:
hwd вне форума  
 
Непрочитано 13.10.2010, 13:16
#56
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,839


Вот задача:
Цитата:
Сообщение от hwd Посмотреть сообщение
С таблицами екселя работать быстрее и удобней, чем с автокадовскими, однако в конце концов результат (ведомости и спецификации) должны быть помещены в чертежи автокада.
А это уже Вы притянули:
Цитата:
Задачей и было реализовать корректный копипаст через буфер обмена
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Непрочитано 13.10.2010, 13:21
#57
hwd

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


>Дима_
читать внимательней пост #10:
Цитата:
...я решал задачу, при которой юзер выделяет в excel нужную таблицу, нажимает Ctrl + C, открывает AutoCAD, нажимает Ctrl + V и в результате вставляется таблица AutoCAD...
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:
hwd вне форума  
 
Непрочитано 13.10.2010, 13:57
#58
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,839


Согласен, но мне почему-то кажется, что пользователь делал так - потому что не знает другого метода, и он бы с удовольствием делал это более "дружелюбным" методом. Вам же для того чтоб обои рабочего стола поменять не надо изображение в буфер обмена взять и куда-то там его вставить...
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Непрочитано 13.10.2010, 14:00
#59
hwd

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


Цитата:
Сообщение от Дима_ Посмотреть сообщение
мне почему-то кажется, что пользователь делал так - потому что не знает другого метода, и он бы с удовольствием делал это более "дружелюбным" методом.
Вам не правильно кажется. Копипаст - реализация, заказанная именно пользователями.
Цитата:
Сообщение от Дима_ Посмотреть сообщение
Вам же для того чтоб обои рабочего стола поменять не надо изображение в буфер обмена взять и куда-то там его вставить...
Пример не в "тему".
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:
hwd вне форума  
 
Непрочитано 13.10.2010, 17:13
#60
kp+

идущий по граблям
 
Регистрация: 26.05.2005
Сообщений: 5,175


Вменяемый, "дружелюбный" копипаст из Ёкселя в Акад (и наоборот, желательно) - мечта многих пользователей, в т.ч. моя. Стандартные инструменты - связь таблицы Акада с Екселем и экспорт таблицы Акада в Ексел-совместимый файл - неудобны для множества мелких разовых задач (и вообще неудобны )
От Atable, к сожалению, приходится отходить

Цитата:
У excel'а есть прекрасная компонентная модель (оно-же как и у автокада) из которой можно вытащить все что угодно
Это тоже для больших, конкретно сформулированных задач, не по мелочи.

Короче:
hwd> Если действительно выставишь свой плагин на продажу, и цена не превысит разумных пределов - я второй в очереди на покупку (после Сергея )

Последний раз редактировалось kp+, 13.10.2010 в 17:23.
kp+ вне форума  
 
Непрочитано 15.10.2010, 07:12 Импорт таблицы HTML тэг TABLE в таблицу AutoCAD
#61
Ernmalind

Дримландия
 
Регистрация: 22.09.2010
Дримландия
Сообщений: 2
<phrase 1=


есть БД на сервере, в ней есть таблица называется text весом около 150 метров, а в этой таблице есть столбик называется content который мне и нужен и который занимает почти весь размер таблицы.

собственно вопрос, как мне экспортировать только столбик content?

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

прошу откликнутся кто знает.
Ernmalind вне форума  
 
Непрочитано 15.10.2010, 08:31
#62
hwd

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


Есть такое слово - "SQL":
select content from text order by content

Код:
[Выделить все]
        static void Main(string[] args)
        {
            DbProviderFactory fac = DbProviderFactories.GetFactory("System.Data.OleDb");           
            DbDataReader rd;
            using (DbConnection con = fac.CreateConnection())
            {
                con.ConnectionString = "Data Source=(local);Initial Catalog=HwdTestDb;Integrated Security=true;Provider=sqloledb";
                using (DbCommand cmd = fac.CreateCommand())
                {
                    cmd.CommandText = "select content from text order by content";
                    con.Open();
                    rd = cmd.ExecuteReader();
                    while (rd.Read())
                    {
                        Console.WriteLine(rd.GetValue(0));
                    }
                }
            }
            Console.Read();
        }
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:

Последний раз редактировалось hwd, 15.10.2010 в 09:23.
hwd вне форума  
 
Непрочитано 01.11.2010, 16:47
#63
hwd

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


Цитата:
Сообщение от hwd Посмотреть сообщение
Для тех, кому интересно, как программно получить таблицу MS Excel из буфера обмена, причём получить в формате xml - смотреть решение здесь.

>Сергей Дубина
А как такой вариант?
Решение построено построено по подобию WPF-разметки.
По поводу копирования таблиц из буфера обмена - столкнулся с рядом проблем. Какого рода проблемы и как их обойти - опубликовал здесь.
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :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