| Правила | Регистрация | Пользователи | Поиск | Сообщения за день | Все разделы прочитаны |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > .NET > Исходные данные в excel - набор чертежей (VB.net)

Исходные данные в excel - набор чертежей (VB.net)

Ответ
Поиск в этой теме
Непрочитано 30.10.2009, 14:13
Исходные данные в excel - набор чертежей (VB.net)
Bart
 
Регистрация: 23.07.2009
Сообщений: 35

Подскажите как реализовать следующую задачу: ...

Необходимо создать программу, которая при нажатии одной кнопки будет создавать набор чертежей.
Как исходные данные будет спецификация в excel. Там указываются компоненты, которые нужно разместить и и их количество. Состав компонентов от изделия к изделию будет разным. Но все возможные компоненты, входящие в состав изделия мы знаем.
Т.е. мы имеем кучу блоков AutoCAD, которые нужно разместить на чертежах в соответствии с тем, что написано в спецификации и по некоторым определенным правилам.

Мне говорят, что бы я делал методом перебора. Открываем файл excel и начинаем поиск элементов.
Например: у нас есть блок1, блок2, блок3. Открываем файл спецификации и ищем блок1, если нашли, то вставляем его в чертеж, если не нашли, то ищем блок2 и т.д. И таких блоков может быть несколько сотен.

Последний раз редактировалось Bart, 30.10.2009 в 15:19.
Просмотров: 9426
 
Автор темы   Непрочитано 27.11.2009, 11:00
#21
Bart


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


Поправляйся.
Про варианты я так и понял. Сижу-читаю msdn, пытаюсь что-либо найти.
Bart вне форума  
 
Непрочитано 27.11.2009, 15:02
#22
Олег (jr.)

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


Цитата:
Сообщение от Bart Посмотреть сообщение
Поправляйся.
Про варианты я так и понял. Сижу-читаю msdn, пытаюсь что-либо найти.
Тогда глянь сюда
http://msdn.microsoft.com/en-gb/libr...ffice.11).aspx
http://msdn.microsoft.com/en-us/libr...ffice.11).aspx
http://msdn.microsoft.com/en-us/libr...ffice.11).aspx

~'J'~
Олег (jr.) вне форума  
 
Непрочитано 29.11.2009, 14:08
#23
Олег (jr.)

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


Цитата:
Сообщение от Bart Посмотреть сообщение
Поправляйся.
Про варианты я так и понял. Сижу-читаю msdn, пытаюсь что-либо найти.

Я добавил функцию поиска строки таблицы по
указанному значению в определенном столбце
Посмотри, может пригодится
Есть еще минимум 2-3 метода (например поиск
методом Find в DataView для полученной DataTable и тд)
Успехов

~'J'~
Вложения
Тип файла: rar ReadExcelADO_VB.rar (140.2 Кб, 98 просмотров)
Олег (jr.) вне форума  
 
Автор темы   Непрочитано 30.11.2009, 11:42
#24
Bart


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


Этот поиск вот тут?
da.Fill(ds, "myTable")

или еще где-то? Что-то я больше никаких изменений не нашел.
Bart вне форума  
 
Непрочитано 30.11.2009, 17:49
#25
Олег (jr.)

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


Цитата:
Сообщение от Bart Посмотреть сообщение
Этот поиск вот тут?
da.Fill(ds, "myTable")

или еще где-то? Что-то я больше никаких изменений не нашел.
Нет, это выражение означает что DataAdapter (da) заполняет объект
DataSet (ds) данными в соответствии с запросом SQL
При этом таблице полученных данных присваивается имя myTable
(второй аргумент "myTable" можно опустить)

А поиск производится с помощью локальной функции ReadRecord
(см. в коде)

Код:
[Выделить все]
 ' Block Name - название столбца в таблице Эксель по которому
            ' идет поиск на соответствие:
            Dim ndt As System.Data.DataTable = ReadRecord(strcon, "[Sheet1$A1:B]", "Block Name", value)
            Dim row As System.Data.DataRow = ndt.Rows(0)
            If Not row Is Nothing Then
                Dim data As Object() = row.ItemArray
                ed.WriteMessage(vbLf & "{0}" & vbLf, "================ Search value ================")
                ed.WriteMessage(vbLf & "Seacrh for : {0}, Found value in the second column: {1}", value, data(1)) 'data(1) - значение во втором столбце
            Else
                ed.WriteMessage(vbLf & "Item with value : {0} does not exist", value)
            End If
~'J'~
Олег (jr.) вне форума  
 
Автор темы   Непрочитано 01.12.2009, 13:39
#26
Bart


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


Сделал вот так пока. Код поправлен для работы в VS2008.
Что я делаю: у меня есть спецификация (sheet1) и база (sheet2).
Я провожу выборку данных из базы по данным из спецификации и получаю нужные мне для построения значения, а также с учетом параметра (12), для выбора того, что мне нужно для построения на одном листе. Все это я выделил красным. Что делать с этим дальше я пока не додумал, в процессе.

Код:
[Выделить все]
Imports System
Imports System.Collections.Generic
Imports System.Text
Imports Microsoft.Office.Interop.Excel
Imports Excel = Microsoft.Office.Interop.Excel

Imports System.Data
Imports System.Data.OleDb

Imports Autodesk.AutoCAD.ApplicationServices
Imports Autodesk.AutoCAD.DatabaseServices
Imports Autodesk.AutoCAD.EditorInput
Imports Autodesk.AutoCAD.Geometry
Imports Autodesk.AutoCAD.Runtime
Imports acadAppl = Autodesk.AutoCAD.ApplicationServices.Application
Public Class ReadTable
    <CommandMethod("ADO")> _
    Public Shared Sub ReadXlWithAdo()
        Dim doc As Document = acadAppl.DocumentManager.MdiActiveDocument
        Dim ed As Editor = doc.Editor


        Dim strcon As String = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + "c:\Spec.xlsx;" + "Extended Properties=""Excel 8.0;HDR=YES""" 'заголовок есть
        ' create connection
        Dim conn As New System.Data.OleDb.OleDbConnection(strcon)
        Dim da As New OleDbDataAdapter("SELECT [Sheet1$].ID as IDN, [Sheet1$].Quant as Quant, [Sheet2$].file as file, [Sheet2$].name as name, [Sheet2$].dir as dir, [Sheet2$].ground as ground, [Sheet2$].groundN as groundN, [Sheet2$].Fr as Fr, [Sheet2$].t1 as t1, [Sheet2$].t2 as t2, [Sheet2$].draw as draw FROM [Sheet1$], [sheet2$] where [Sheet1$].ID=[Sheet2$].ID and [Sheet2$].draw = '12'", conn)

        Dim ds As New DataSet()
        da.Fill(ds)
        ' fill dataset
        'Show results in the command line (1st and 2nd column from worksheet)
        ed.WriteMessage(vbLf & "{0}" & vbLf, "================Excel Table================")
        For Each dr As DataRow In ds.Tables(0).Rows

            ed.WriteMessage(vbLf & "First Column : {0}, Second column: {1}, Third column: {2}", dr("File"), dr("name"), dr("dir"))
            If Not IsDBNull(dr("file")) Then
                BFile = strFilePath & CStr(dr("File"))
            End If
            If Not IsDBNull(dr("name")) Then
                BName = CStr(dr("name"))
            End If
            If Not IsDBNull(dr("dir")) Then
                drc = strFilePath & CStr(dr("dir"))
            End If
            If Not IsDBNull(dr("ground")) Then
                gr = strFilePath & CStr(dr("ground"))
            End If
            If Not IsDBNull(dr("groundN")) Then
                grN = CStr(dr("groundN"))
            End If
            If Not IsDBNull(dr("Fr")) Then
                from = dr("Fr")
            End If
            If Not IsDBNull(dr("t1")) Then
                to1 = CStr(dr("t1"))
            End If
            If Not IsDBNull(dr("t2")) Then
                to2 = CStr(dr("t2"))
            End If
        Next
        conn.Close()
        ed.WriteMessage(vbLf & "{0}" & vbLf, "================MDB Table================")
        strcon = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + "c:\Cabs.mdb"
        Dim dt As System.Data.DataTable = ReadRecords(strcon, "BOM")
        'tblEmployee-имя таблицы
        For Each dw As DataRow In dt.Rows

            ed.WriteMessage(vbLf & "Second Column : {0}, Third column: {1}, 4: {2}, 5: {3}, 6: {4}", dw(1), dw(2), dw(3), dw(4), dw(5))
        Next

    End Sub

    Public Shared Function ReadRecords(ByVal strconn As [String], ByVal tablename As [String]) As System.Data.DataTable
        Dim conn As New System.Data.OleDb.OleDbConnection(strconn)
        Dim cmdGetRecords As New OleDbCommand()
        Dim strquery As String = "SELECT * FROM " + tablename
        Dim da As New OleDbDataAdapter(strquery, conn)
        conn.Open()
        Dim ds As New DataSet()
        da.Fill(ds)
        conn.Close()
        If Not ds Is Nothing Then
            Return ds.Tables(0)
        Else
            Return Nothing
        End If
    End Function

End Class
Теперь вопрос в следующем: сейчас база и спецификация у меня в одном файле. Теперь нужно найти как мне работать с базой и спецификацией, которые лежат в разных файлах. Как сделать это я пока не знаю, но как-то можно. Вот тут нужна помощь.

Так. Чтение данных из разных файлов с помощью товарища я сделал. Если кому надо, то поделюсь.

Последний раз редактировалось Bart, 01.12.2009 в 17:38.
Bart вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > .NET > Исходные данные в excel - набор чертежей (VB.net)

Размещение рекламы
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Подскажите, существуют ли практические руководства по Lisp? vn LISP 261 26.11.2015 13:27
Ищу исходные данные для диплома. Yulia88 Поиск литературы, чертежей, моделей и прочих материалов 10 06.10.2009 22:41
Исходные данные для расчета теплообменника и вентилятора. Pavel Samofalov Отопление 10 02.05.2009 21:06
Scad исходные данные из текстового фала. FOXPRO SCAD 2 21.03.2008 09:34