Jump to content

Получение данных из таблицы через API


viraeron

Recommended Posts

Есть большое количество чертежей, который вывалены в кучу и хотелось бы их как то отсортировать. В каждом чертеже есть одна и та же таблица, где изменяется название оборудования, для которого сделан чертеж. я думал через API достать название и дальше создать папки под каждый станок. немного владею c# и написал вот такую вещь:
 

using SolidWorks.Interop.sldworks;
using SolidWorks.Interop.swconst;
using SolidWorks.Interop.swdocumentmgr;
using System.Diagnostics;
namespace GetCellRangeITableAnnotationCSharp.csproj
{
    partial class SolidWorksMacro
    {

        public void Main()
        {
            ModelDoc2 swModel = default(ModelDoc2);
            SelectionMgr swSelectionMgr = default(SelectionMgr);
            DrawingDoc swDrawing = default(DrawingDoc);
            Annotation swAnnotation = default(Annotation);
            TableAnnotation swTableAnnotation = default(TableAnnotation);
            int firstRow = 0;
            int lastRow = 0;
            int firstColumn = 0;
            int lastColumn = 0;
            int idx = 0;

            swModel = (ModelDoc2)swApp.ActiveDoc;
            swSelectionMgr = (SelectionMgr)swModel.SelectionManager;
            swDrawing = (DrawingDoc)swModel;
            string text = "";


            for (idx = 1; idx <= swSelectionMgr.GetSelectedObjectCount2(-1); idx++)
            {
                swTableAnnotation = (TableAnnotation)swSelectionMgr.GetSelectedObject6(idx, -1);
                swAnnotation = (Annotation)swTableAnnotation.GetAnnotation();

                swTableAnnotation.GetCellRange(ref firstRow, ref lastRow, ref firstColumn, ref lastColumn);
                text = swTableAnnotation.get_Text2(1, 4, true); //Достаю нужный текст из (1,4)
                Debug.Print("First selected cell's row     = " + firstRow);
                Console.WriteLine(text);
                Debug.Print("Last selected cell's row      = " + lastRow);
                Debug.Print("First selected cell's column  = " + firstColumn);
                Debug.Print("Last selected cell's column   = " + lastColumn);
                Debug.Print("");


            }

            if ((firstRow == -1))
            {
                Console.WriteLine("Selected entire table!");
            }

            swModel.ClearSelection2(true);
            Console.ReadKey();
        }


        /// <summary>
        /// The SldWorks swApp variable is pre-assigned for you.
        /// </summary>

        public SldWorks swApp;

    }
    class Program
    {
        static void Main(string[] args)
        {
            SolidWorksMacro macro = new SolidWorksMacro();
            macro.swApp = new SldWorks();

            macro.Main();
        }
    }
}

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

Link to post
Share on other sites


UnPinned posts

Если много файлов , то может файловым менеджером воспользоваться ? Тотал командер справлялся на ура! У вас версия файлов Солида какая?

 

Если можно выделить и вывести часть текста в тотале с помощью плагина, то если сделаете под Тотал плагин который сможет вытаскивать часть искомых данных как для pdf файлов сделално было. Было бы круто, я лично был бы благодарен.

подобное поднималось для pdf фвйлов

 

https://wincmd.ru/plugring/WinScriptAdv.html

на основе этого плагина был написан макрос для выявления версии SolidWorks

Можно и выводить данные любые из файла.

Link to post
Share on other sites

@viraeron Попробуйте метод  swView.GetFirstTableAnnotation ,если у Вас всегда одна таблица на чертеже). Или swView.GetTableAnnotations , если несколько.

В документации к API есть примеры, ищите объект View

 
Edited by Chuvak
Link to post
Share on other sites
03.01.2025 в 11:15, viraeron сказал:

но не знаю как весь процесс автоматизировать, чтобы и чертежи сами открывались и данные из таблицы доставались

в этом то и проблема тебе все файлы нужно открыть по очереди..

Link to post
Share on other sites

@Maik812 Чертежи можно также с помощью макроса автоматом открывать. Можно использовать методы и свойства FileSysytemObject по работе с папками и файлами или встроенные методы в языке VBA.

Link to post
Share on other sites
4 минуты назад, Chuvak сказал:

помощью макроса автоматом открывать.

а сортировать , переносить и удалять?

Link to post
Share on other sites

@Chuvak @Maik812 swView.GetFirstTableAnnotation, это то что я искал, почему то сам найти не смог. открывать чертежи не проблема, на это уже есть код, его просто в цикл закинуть. сортировка и перенос есть изначально в c#, так что это не такая проблема

 

@Maik812 через тотал идея конечно интересная, но у меня чертежи все сохранены в tif. чисто технически можно все перевести в pdf, и работать через тотал, но это нужна еще дополнительно куча действий. я посмотрел в интернете и есть сервисы которые достают таблицы из пдф файлов, но не уверен как такие сервисы поведут себя со штампом в чертеже

 

Link to post
Share on other sites
6 часов назад, viraeron сказал:

через тотал идея конечно интересная, но у меня чертежи все сохранены в tif. чисто технически можно все перевести в pdf, и работать через тотал, но это нужна еще дополнительно куча действий. я посмотрел в интернете и есть сервисы которые достают таблицы из пдф файлов, но не уверен как такие сервисы поведут себя со штампом в чертеже

Ты не прав :) Обычно делается так с архивом. Тема кстати с pdf была поднята именно с переименование pdf файлов полученых из скана архива , кучей графических картинок к которым не как не подойти. Я вот не понимаю если чертежи в тифе причем тут апи Солида :)

Ну ладно суть простая , открывается Файн ридер и ему скармливается прям вся папка архива, после распознавание все сохраняется в pdf со слоем, учти там разные форматы пдф подберешь. Если заполнены рамки не рукой то 100% распознавание номера чертежа.  Как только вывел в столбец номер чертежа, групповое переименование  в имени плагин и фильтр который вывел текст в столбец, предворительно показывает результат. Клик и все переименовано по рамке или любому другому тексту от регулярки зависет!

Наименование не смог выделить.

Ну если напишешь крутое регулярное выражение, прошу поделись!!! Можешь воспользоваться всей темой и поднять ее там же.

P.S. работая тоталом и переименовывать иногда не требуется :) Работаю по столбцу или копирую значения в mPDM.wdx и работаю уже с этим столбцом, туда же ты можешь портировать данные найдены любыми регулярными выражениями и обычным поиском какого то слова или текста.

Edited by Maik812
Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...