Официальный форум российского программного комплекса T-FLEX PLM


Поиск  Правила 
Закрыть
Логин:
Пароль:
Забыли свой пароль?
Регистрация
Войти
 
Выбрать дату в календареВыбрать дату в календаре

Страницы: 1
Синхронизация значений переменных с ячейками Excel
 
В параллельной ветке форума задаётся вопрос по поводу двухсторонней синхронизации значений переменных с ячейками Excel.
Если бы данные передавались в одну сторону, то решение описано в документации. Нужно создать БД по ссылке на файл Excel и всё будет работать. Если же данные нужно передавать обратно, либо синхронизация должна быть не автоматической, то такое решение не подойдёт.Выкладываю решение.
В приложенном архиве 2 файла - файл ExcelSync с макросами - передача из Excel и сохранение в Excel. При необходимости их можно подключить к событиям открытия и сохранения документа, чтобы не жать на кнопки.
В дополнение файл Microsoft.Office.Interop.Excel.dll, который генерируется автоматически при подключении ссылки на Excel. Данный файл я сделал на Excel 2010. Можно его заменить на другую версию.

Текст макроса:

[SIZE=4]using System;
using TFlex.Model;
using Microsoft.Office.Interop.Excel;
namespace NewMacroNamespace
{
public class NewMacroClass
{
 static TFlex.Model.Variable FindVar(Document doc,string name)
 {
  foreach(TFlex.Model.Variable v in doc.GetVariables())
  {
   if(v.Name == name)
    return v;
  }
  return null;
 }[/SIZE]

[SIZE=4] public static void OnOpen()
 {
  Microsoft.Office.Interop.Excel.Application app = new Microsoft.Office.Interop.Excel.Application();
  Workbook excelWorkbook = app.Workbooks.Open("c:\\mail\\a.xlsx", 0, false, 5, "", "", false, Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "", true, false, 0, true, false, false);
  Sheets excelSheets = excelWorkbook.Worksheets;
  string currentSheet = "Лист1";
  Worksheet excelWorksheet = (Worksheet)excelSheets.get_Item(currentSheet);
  string cellValue = (excelWorksheet.Cells[2, 2] as Range).Value.ToString();[/SIZE]
[SIZE=4] Document doc = TFlex.Application.ActiveDocument;
  var v = FindVar(doc,"aaa") ;
  if(v == null)
  {
   excelWorkbook.Close();
   return;
  }
  doc.BeginChanges("Меняем значение переменной");
  v.Expression = cellValue;
  doc.EndChanges();
  excelWorkbook.Close();
 }[/SIZE]
[SIZE=4]
 public static void OnSave()
 {[/SIZE]
[SIZE=4] Document doc = TFlex.Application.ActiveDocument;
  var v = FindVar(doc,"aaa");
  if(v == null)
   return;
  Microsoft.Office.Interop.Excel.Application app = new Microsoft.Office.Interop.Excel.Application();
  Workbook excelWorkbook = app.Workbooks.Open("c:\\mail\\a.xlsx", 0, false, 5, "", "", false, Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "", true, false, 0, true, false, false);
  Sheets excelSheets = excelWorkbook.Worksheets;
  string currentSheet = "Лист1";
  Worksheet excelWorksheet = (Worksheet)excelSheets.get_Item(currentSheet);
  (excelWorksheet.Cells[2, 2] as Range).Value = v.RealValue;
  excelWorkbook.Close(true);
 }
}
}[/SIZE]f
Гнутая пружина
 
Уважаемые участники Форума,
Ввиду того, что наша площадка довольно удобна для обмена примерами, я выкладываю очередной пример, сделанный для участия вот в этой переписке:
[URL=http://isicad.ru/ru/articles.php?article_num=15436#6672]http://isicad.ru/ru/articles.php?article_num=15436#6672[/URL]
Заодно советую посмотреть статью, которая здесь опубликована.
В ответ на "сложный" пример от SolidWorks выкладываю гнутую/прямую пружину, сделанную в T-FLEX CAD.
Здесь не используются адаптивные технологии и параметрические массивы. Всё просто: 2 массива, один из которых подавляется в том случае если пружина является гнутой или прямой.
Хочу также заметить, что в отличие от исходного примера, данная модель не требует заранее создавать все варианты модели, которые предполагается использовать в виде конфигураций.
Расчёт пружины
 
Уважаемые участники Форума.
Участвуя в дискуссии о производительности и параметрических возможностях T-FLEX CAD, я решил подготовить краткую статью, связанную с темой обсуждения.
[URL=http://isicad.ru/ru/articles.php?article_num=15302#6082]http://isicad.ru/ru/articles.php?article_num=15302#6082[/URL]
Это пример параметрической модели пружины и её оптимизации как встроенным решателем T-FLEX CAD, так и внешней программой.

[SIZE=3]В примере будут затронуты вопросы создания параметрической модели пружины, оформление её как фрагмента с переменными для удобства использования в сборках, расчёт жёсткости пружины, расчёт диаметра проволоки пружины для обеспечения требуемой жёсткости как при помощи встроенного механизма оптимизации T-FLEX CAD, так и при помощи подключения внешней программы оптимизации. Большинство вопросов будут известны пользователям T-FLEX CAD, но некоторые могут быть интересны даже для «продвинутых» пользователей.[/SIZE]

[SIZE=3]1.[/SIZE] [SIZE=3]Создание модели пружины[/SIZE]
[SIZE=3]Пружина сжатия создаётся в T-FLEX CAD одной операцией. Операция пружина позволяет задать все параметры, такие как длина, диаметр, диаметр проволоки, шаг, количество витков, поджатие пружины на концах и шлифовку. Для создания модели пружины в модели требуется наличие всего лишь двух 3D узлов, задающих направление и длину.[/SIZE]
[SIZE=3]Для удобства управления параметрами пружины зададим большинство значений в свойствах операции при помощи переменных. Переменные сделаем внешними с тем, чтобы управлять ими из сборки. Создание конфигураций заранее конечно не требуется.[/SIZE]
Сравнение параметрических возможностей с ProE, Сравнение параметрических возможностей с ProE
 
Уважаемые участники Форума, на сайте isicad ([url]http://isicad.ru/ru/articles.php?article_num=15302#5628[/url]) возникла дискуссия на тему сравнения параметрических возможностей систем. Я решил опубликовать наш вариант решения задачи, опубликованной здесь: [url]http://www.saprobasni.ru/2011/11/n-n2.html#more[/url]
Вкратце - задача сводится к построению геометрии, соответствующей сумме двух графиков, заданных в табличном виде. Для T-FLEX эта задача не сложная (скажу больше, совсем простая). Привожу её решение.


[SIZE=4]1. Создаём таблицу в Excel или в любом другом удобном формате (например mdb, dbf) с нужными данными. Для удобства размещаем таблицы на двух разных листах (хотя это не обязательно). Количество точек в таблицах может быть разным, точки не синхронизированы[/SIZE]
Изменено: Сергей Козлов - 05.06.2012 01:48:26
Страницы: 1