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

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

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

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

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

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

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

Последний раз редактировалось Bart, 30.10.2009 в 15:19.
Просмотров: 7429
 
Непрочитано 30.10.2009, 14:22
#2
Дима_

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


А что тебе подсказать-то?
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Автор темы   Непрочитано 30.10.2009, 14:30
#3
Bart


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


Как именно это реализовывать. Перебирать все возможные варианты, чтобы найти то, что есть в спецификации или это как-то еще можно сделать?

Последний раз редактировалось Bart, 30.10.2009 в 15:17.
Bart вне форума  
 
Непрочитано 30.10.2009, 15:03
#4
Admin
Administrator


 
Регистрация: 21.08.2003
Ульяновск
Сообщений: 3,960


Цитата:
#youtube_inline_div
Bart, у тебя вирус на машине! Что это за беда в каждом сообщении?
Admin вне форума  
 
Автор темы   Непрочитано 30.10.2009, 15:16
#5
Bart


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


Разобрался.
У меня стоит гризманки. Есть скрипт Youtube inline watcher. Вот он что-то как-то на данном форуме подглючивает.
Bart вне форума  
 
Непрочитано 30.10.2009, 15:33
#6
Дима_

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


Делается БД - в простом случае экселевская таблица, в ней прописываються имена блоков и все возможные атрибуты (координаты углы - если блоки динамические - то их атрибуты и т.д.) Ну и все собственно - далее програмка читает эксель и вставляет блоки.
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Автор темы   Непрочитано 30.10.2009, 16:15
#7
Bart


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


Цитата:
Сообщение от Дима_ Посмотреть сообщение
Делается БД - в простом случае экселевская таблица, в ней прописываються имена блоков...
Вся сложность в том, что экселевскую таблицу будет делать пользователь, который вообще не в курсе про блоки или координаты. Можно, сделать эту таблицу с блоками и координатами, но тогда придется в нее забивать все элементы, которые могут быть. А это уже не удобно для работы пользователя.
Или я чего-то не понимаю.
Bart вне форума  
 
Непрочитано 30.10.2009, 16:24
#8
Дима_

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


Мы по моему на разных языках говорим - чтоб автокад мог создать что-либо "нажатием одной кнопки" ему нужны исходные данные - та самая спецификация, в каком виде ее будет вбивать пользователь решать только Вам - нужно разработать формат, который будет понятен пользователю и который компьютер может расшифровать и перевсети в блоки и их координаты. Если формат Вы сами можете представить и понимаете что нужно - постарайтесь его описать, если нет, а задачу решить нужно - то могу посоветывать только раздел "поиск исполнителей".
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Автор темы   Непрочитано 30.10.2009, 17:08
#9
Bart


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


Вот весь вопрос как раз и состоит в том, что как перейти от пользовательской спецификации к тому, с чем автокад сможет работать.
Нужен метод.
Или каким-то образом сопоставлять исходную таблицу с эталонной, в которой прописаны координаты и прочее (все, что нужно для автокада) или же прописывать все необходимое в теле программы, основываясь на исходной спецификации.
Bart вне форума  
 
Непрочитано 30.10.2009, 17:51
#10
Дима_

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


Я думаю правильней всю конвертацию проводить в теле программы
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Непрочитано 31.10.2009, 16:40
#11
Олег (jr.)

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


Для начала нужно научится читать данные
Небольшой пример (из 2-х столбцов первого листа)
Измени имена файлов
Код:
[Выделить все]
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 acadApp = Autodesk.AutoCAD.ApplicationServices.Application

<Assembly: CommandClass(GetType(ReadExcelADO.ReadTable))>

Namespace ReadExcelADO
	Public Class ReadTable
		<CommandMethod("RX")> _
		Public Shared Sub ReadDataTable()
			Dim doc As Document = acadApp.DocumentManager.MdiActiveDocument
			Dim ed As Editor = doc.Editor
			Dim Path As String = "c:\ExcelTest.xls"
			' initialize the Excel Application class
			Dim app As Excel.ApplicationClass = New ApplicationClass()
			' create the workbook object by opening the excel file.
			Dim workBook As Excel.Workbook = app.Workbooks.Open(Path, 0, True, 5, "", "", _
				True, Excel.XlPlatform.xlWindows, vbTab, False, False, 0, _
				True, 1, 0)
			' get the active worksheet using sheet name or active sheet
			'Excel.Worksheet workSheet = (Excel.Worksheet)workBook.ActiveSheet;
			' or get worksheet by index
			Dim workSheet As Excel.Worksheet = DirectCast(workBook.Worksheets.get_Item(1), Excel.Worksheet)
			Try
				Dim rang As Excel.Range = DirectCast(workSheet.UsedRange, Excel.Range)
				Dim rows As Integer = rang.Rows.Count
				Dim i As Integer = 1
				While i < rows + 1
					Dim blockname As String = (DirectCast(workSheet.Cells(i, 1), Excel.Range)).Value2.ToString()
					Dim tagname As String = (DirectCast(workSheet.Cells(i, 2), Excel.Range)).Value2.ToString()


					ed.WriteMessage(vbLf & "First Column : {0}, Second column: {1} ", blockname, tagname)
					System.Math.Max(System.Threading.Interlocked.Increment(i),i - 1)
				End While
				workBook.Close(False, Path, Nothing)
				rang = Nothing
				workSheet = Nothing
				workBook = Nothing
				app.Quit()
				System.Runtime.InteropServices.Marshal.FinalReleaseComObject(app)
			Catch ex As System.Exception

				ed.WriteMessage(vbLf & "{0}", ex.StackTrace)
			End Try
		End Sub
		'
		<CommandMethod("ADO")> _
		Public Shared Sub ReadXlWithAdo()
			Dim doc As Document = acadApp.DocumentManager.MdiActiveDocument
			Dim ed As Editor = doc.Editor

			Dim strcon As String = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + "c:\ExcelTest.xls;" + "Extended Properties=""Excel 8.0;HDR=YES"""
			' create connection
			Dim conn As New OleDbConnection(strcon)
			Dim da As New OleDbDataAdapter("SELECT * FROM [Sheet1$A1:B]", conn)
			Dim ds As New DataSet()
			' fill dataset
			da.Fill(ds)
			'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}", dr(0), dr(1))
			Next
			conn.Close()
			ed.WriteMessage(vbLf & "{0}" & vbLf, "================MDB Table================")
			strcon = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + "c:\sample.mdb"
			Dim dt As System.Data.DataTable = ReadRecords(strcon, "tblEmployee")
			'tblEmployee-имя таблицы
			For Each dw As DataRow In dt.Rows

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

		End Sub

		Public Shared Function ReadRecords(strconn As [String], tablename As [String]) As System.Data.DataTable
			Dim conn As New 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 ds <> Nothing Then
				Return ds.Tables(0)
			Else
				Return Nothing
			End If
		End Function
	End Class
End Namespaceх
~'J'~

Последний раз редактировалось Олег (jr.), 01.11.2009 в 13:10. Причина: добавлена процедура
Олег (jr.) вне форума  
 
Автор темы   Непрочитано 16.11.2009, 12:18
#12
Bart


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


Олег (jr.)
спасибо. Опробую. был в отпуске, так что пока не успел.
Буду думать что и как делать.

Dim workSheet As Excel.Worksheet = DirectCast(workBook.Worksheets.get_Item(1), Excel.Worksheet)

Пишет, что:
"get_Item" не является членом "Microsoft.Office.Interop.Excel.Sheets"

Последний раз редактировалось Bart, 18.11.2009 в 16:27.
Bart вне форума  
 
Непрочитано 18.11.2009, 15:10
#13
Олег (jr.)

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


Цитата:
Сообщение от Bart Посмотреть сообщение
Олег (jr.)
спасибо. Опробую. был в отпуске, так что пока не успел.
Буду думать что и как делать.
Проверь ссылки на библиотеки
см. рис.

~'J'~
Миниатюры
Нажмите на изображение для увеличения
Название: References.JPG
Просмотров: 112
Размер:	16.3 Кб
ID:	29117  
Олег (jr.) вне форума  
 
Автор темы   Непрочитано 18.11.2009, 16:09
#14
Bart


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


Откуда брать ссылку на excel и office?
У меня добавлена Microsoft.Office.Interop.Excel. Это не то?

И вот с этим я не справился пока
If ds <> Nothing Then

Оператор "<>" для типов "System.Data.DataSet" и "System.Data.DataSet" не определен.

Последний раз редактировалось Bart, 18.11.2009 в 16:26.
Bart вне форума  
 
Непрочитано 18.11.2009, 20:06
#15
Олег (jr.)

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


Цитата:
Сообщение от Bart Посмотреть сообщение
Откуда брать ссылку на excel и office?
У меня добавлена Microsoft.Office.Interop.Excel. Это не то?

И вот с этим я не справился пока
If ds <> Nothing Then

Оператор "<>" для типов "System.Data.DataSet" и "System.Data.DataSet" не определен.

Ошибка машинного конвертора кода (в реальности
код написан на C#)
Нужно:
If Not ds Is Nothing Then

Насчет References:
На вкладке COM:
Microsof Excel 11.0 Object Library
Microsoft Office 11.0 Object Library

Переделал пример на VB.NET - на моей машине работает
(A2008, Visual Studio2005)

~'J'~
Вложения
Тип файла: zip ReadExcelADO_VB.zip (179.0 Кб, 162 просмотров)

Последний раз редактировалось Олег (jr.), 18.11.2009 в 20:51. Причина: добавлен файл
Олег (jr.) вне форума  
 
Автор темы   Непрочитано 19.11.2009, 10:55
#16
Bart


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


Ага. Все дело было в том, что
workBook.Worksheets.get_Item(1) надо было заменить на

workBook.Worksheets.Item(1).

У меня Visual Studio2008 и office 2007, так что я поправил еще ряд ошибок. Но еще кое-что осталось, так что пока прога не работает. Видимо, с VS2005 к VS2008 произошли изменения и данные методы немного не пашут.
Например вот тут:
Dim workBook As Excel.Workbook = app.Workbooks.Open(Path, 0, True, 5, "", "", _
True, Excel.XlPlatform.xlWindows, vbTab, False, False, 0, _
True, 1, 0)

Пишет, что старый метод.
Причина найдена - баг!
You run an English version of Excel. However, the regional settings for the computer are configured for a non-English language.
http://support.microsoft.com/default...b;EN-US;320369

Последний раз редактировалось Bart, 20.11.2009 в 13:24.
Bart вне форума  
 
Автор темы   Непрочитано 20.11.2009, 17:29
#17
Bart


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


Олег (jr.), спасибо.
Со всем разобрался.
Еще нет примерчиков по работе с данными?
Bart вне форума  
 
Непрочитано 20.11.2009, 22:41
#18
Олег (jr.)

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


Цитата:
Сообщение от Bart Посмотреть сообщение
Олег (jr.), спасибо.
Со всем разобрался.
Еще нет примерчиков по работе с данными?
Я особо не занимался - а что конкретно нужно?
Как бы в продолжение темы

~'J'~
Олег (jr.) вне форума  
 
Автор темы   Непрочитано 24.11.2009, 10:43
#19
Bart


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


А как, используя ADO, осуществлять поиск и выбор нужных значений в eсxel таблице?
Например: находим строку с определенным значением (столбец 1), далее присваиваем переменной значение следующего столбца (столбец 2) в этой строке.

Последний раз редактировалось Bart, 26.11.2009 в 16:30.
Bart вне форума  
 
Непрочитано 27.11.2009, 02:05
#20
Олег (jr.)

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


Цитата:
Сообщение от Bart Посмотреть сообщение
А как, используя ADO, осуществлять поиск и выбор нужных значений в eсxel таблице?
Например: находим строку с определенным значением (столбец 1), далее присваиваем переменной значение следующего столбца (столбец 2) в этой строке.
Извини, забыл про тему
Я не в форме пока на несколько дней
Поправлюсь - продолжим
Тут несколько вариантов: через SQL запросы в
таблице либо методом Find самого Эксель
Примеров готовых нет

~'J'~
Олег (jr.) вне форума  
Ответ
Вернуться   Форум 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