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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Сквозная нумерация листов через поля

Сквозная нумерация листов через поля

Ответ
Поиск в этой теме
Непрочитано 08.11.2012, 01:43 #1
Сквозная нумерация листов через поля
Sta1917
 
геодезист
 
Санкт-Петербург
Регистрация: 21.03.2009
Сообщений: 67

Здравствуйте, поиском подобного решения не нашел: в свойствах dwg файла забито число сквозной нумерации с которого начинаются графические приложения в записке, нужна функция (пользовательская переменная), которая брала бы его и записывала в поле прибавляя порядковый номер листа в файле.
Просмотров: 14565
 
Непрочитано 08.11.2012, 02:39
#2
perpetule


 
Регистрация: 23.09.2008
Волгоград
Сообщений: 805
<phrase 1= Отправить сообщение для perpetule с помощью Skype™


подшивка позволяет вставлять поле = номеру сквозной, перенумерация руками (через инт. подшивки), поле должно быть вставлено поверх лайаута/в_листе.
номер листа в файле = имени вкладки лайаута?
perpetule вне форума  
 
Непрочитано 08.11.2012, 10:05
#3
bargool


 
Регистрация: 16.08.2006
Санкт-Петербург
Сообщений: 508
<phrase 1=


Изначальное число записано в Custom properties файла? Если так - добраться легко. В нужном месте вставляете поле, там в категории "Document" есть ваше свойство. Если скопировать его "Field expression", у меня оно получилось вида
Код:
[Выделить все]
%<\AcVar CustomDP.Page \f "%tc1">%
, то можно использовать в формуле (опять же, поле -> формула, в качестве одного из аргументов используете искомое Field expression). Это как направление для размышлений.
bargool вне форума  
 
Непрочитано 08.11.2012, 12:12 Sta1917
#4
perpetule


 
Регистрация: 23.09.2008
Волгоград
Сообщений: 805
<phrase 1= Отправить сообщение для perpetule с помощью Skype™


Держи,
Цитата:
поле должно быть вставлено поверх лайаута/в_листе
Вложения
Тип файла: dwg
DWG 2010
СКВОЗНАЯ НУМЕРАЦИЯ + СМЕЩЕНИЕ.dwg (565.9 Кб, 5044 просмотров)
perpetule вне форума  
 
Автор темы   Непрочитано 08.11.2012, 20:19
#5
Sta1917

геодезист
 
Регистрация: 21.03.2009
Санкт-Петербург
Сообщений: 67


Спасибо, то что нужно. Если лист имеет цифро-буквенное имя "КЖ 1" то можно использовать формулу только через подшивку (номер листа в подшивке+сквозной номер из свойств)?
Sta1917 вне форума  
 
Непрочитано 08.11.2012, 22:03 Sta1917
#6
perpetule


 
Регистрация: 23.09.2008
Волгоград
Сообщений: 805
<phrase 1= Отправить сообщение для perpetule с помощью Skype™


Мой вариант организации через подшивку полями- (сквозная, номер листа, название листа)
http://forum.dwg.ru/showpost.php?p=986910&postcount=62 , что - через что в подшивке, "как" не затрагивается.

с использованием формул от VVA, спасибо ему огромное


Вариант 1)
ДО 4ого символа
http://forum.dwg.ru/showpost.php?p=250224&postcount=34
Цитата:
Категория полей Diesel Expression
$(substr,$(getvar,CTAB),1,4)
или
%<\AcDiesel $(substr,$(getvar,CTAB),1,4)>%

Формулой берутся первые четыре символа из названия текущей вкладки лайаута (будет работать и без подшивки, пустые позиции пробелы)
4симв.(номер листа)+ 60симв.(текст) = имени вкладки лайаута
например для номера 73
73 JeM.2_hnja_odnolinejnaja_WR23_
Использовать как сквозную или как нумерацию листов решайте сами

-------------------

Вариант 2)
последние четыре символа
http://forum.dwg.ru/showpost.php?p=237373&postcount=23
Цитата:
Поле: %<\AcDiesel $(substr,$(getvar,CTAB),4)>%
Из имени листа (переменная CTAB) берется строка, начиная с 4 символа
Листы должны иметь формат TTTNNN, где TTT - текстовая часть, NNN - числовая часть. Примеры: КМ-1, КМ-1.1

Теоретически можно в разные тексты вставить оба вариант этой формулы на лист вида -
(сквозная_из4симв.+смещение)___имя-погоняло___(номер_листа_из4симв.)
номер_листа_ вида 15.12 уже не влезет, ну такой вариант и не пробовал, все же видимо 5-6-7 симв. надо, все равно - частный случай
, подшивка универсальней....

частный случай
Цитата:
+сквозной номер из свойств
файла.dwg, опять таки под конкретные задачи конкретному человеку.

(номер листа в подшивке+сквозной номер из свойств) - неоптимально (*.dwg скажем надцать.. в работе)
оптимальней (номер листа в подшивке+смещение сквозного номера из пользовательского свойства подшивки/доп. определяемые пользователем св-ва, имя такого св-ва задавать как можно проще/).

+смещение сквозного номера вообще говоря лишний наворот, перенумерация 100 листов при использовании прямого поля на номер листа подшивки, займет минут 7-10.

Последний раз редактировалось perpetule, 08.11.2012 в 23:22.
perpetule вне форума  
 
Автор темы   Непрочитано 13.11.2012, 00:27
#7
Sta1917

геодезист
 
Регистрация: 21.03.2009
Санкт-Петербург
Сообщений: 67


Цитата:
Сообщение от perpetule Посмотреть сообщение
(номер листа в подшивке+сквозной номер из свойств) - неоптимально (*.dwg скажем надцать.. в работе)
оптимальней (номер листа в подшивке+смещение сквозного номера из пользовательского свойства подшивки
есть макрос связи word-exel, при сохранении записки перебрасывает номер страницы "графические приложения" в указанную книгу excel, а оттуда в поля *.dwg, можно сделать подобный чтобы напрямую в свойства подшивки закидывал?
Код:
[Выделить все]
Private Sub Document_Close()
 
    'Здесь нужно указать заголовок, у которого нужно узнать номер страницы.
    Const sHeader As String = "ГРАФИЧЕСКИЕ ПРИЛОЖЕНИЯ"
    
    'Здесь нужно указать, какое имя должно быть у переменной
    'документа, в которой будет храниться путь и имя книги Excel.
    Const sExcelBookPathVariable As String = "Путь к книге Excel"
    
    Dim sHeaderText As String
    Dim lPageNumber As Long
    Dim oVariable As Word.Variable
    Dim bSaved As Boolean
    
    'Для работы этого кода нужно подключить библиотеку:
    'Tools - References... - Microsoft Excel Object Library.
    'Эту библиотеку нужно подключать для каждого документа Word.
    'Если это неудобно, то нужно внести изменения в код.
    Dim oExcel As New Excel.Application
    Dim oWorkbook As Excel.Workbook
 
    'Смотрим, сохранил ли пользователь документ перед закрытием документа.
    'Это нужно для того, чтобы лишний раз не выскакивало
    'диалоговое окно, предлагающее сохранить документ.
    'Если пользователь перед закрытием документа нажал сохранить, то
    'второй раз не будет появляться сообщение, связанное с сохранением документа.
    bSaved = Me.Saved
 
    'В программе Word есть переменные. Не путайте переменные документа
    'Word с переменными языка программирования VBA.
    'Доступ к переменным можно получить через поля и из VBA.
    'Будем хранить пути к файлам Excel в этих переменных.
    'Смотрим, есть ли переменная в документе с нужным именем.
    For Each oVariable In Me.Variables
        If oVariable.Name = sExcelBookPathVariable Then
            'Выходим из цикла.
            Exit For
        End If
    Next oVariable
 
    'Если переменная с нужным именем есть в документе,
    'то переменная oVariable не будет содержать слово Nothing.
    If oVariable Is Nothing Then
        'Создаём в документе переменную с нужным именем.
        Me.Variables.Add sExcelBookPathVariable
    End If
    
    'Смотрим, что содержится в переменной с нужным именем.
    'Там не должно быть пусто.
    If Me.Variables(sExcelBookPathVariable).Value = " " Then
    
        'Пользователь выбирает книгу Excel, куда перенести данные
        'из документа Word.
        With Application.FileDialog(msoFileDialogFilePicker)
            'Чтобы можно было выбрать только один файл.
            .AllowMultiSelect = False
            .ButtonName = "OK"
            'Очищаем поле "Тип файлов", которое сохраняется свои
            'значения при каждом вызове процедуры.
            .Filters.Clear
            'Формируем поле "Тип файлов".
            .Filters.Add Description:="Файлы Excel", Extensions:="*.xls;*.xlsx"
            .Title = "Выберите книгу Excel, в которую нужно внести данные из оглавления."
            'Если пользователь отказался от выбора книги.
            If .Show = 0 Then
                MsgBox "Данные в книге Excel не будут обновлены.", vbCritical
                'Закрываем программу Excel.
                oExcel.Quit
                'Выходим из кода.
                Exit Sub
            End If
            
            'Берём путь и имя книги Excel в переменную.
            Me.Variables(sExcelBookPathVariable).Value = .SelectedItems(1)
            
        End With
        
    End If
 
    'Полное обновление оглавления (есть ещё обновление только страниц).
    Me.TablesOfContents(1).Update
    
    'Me - означает, что код находится в модуле документа.
    With Me.TablesOfContents(1).Range.Find
        
        .Text = sHeader
        'Не учитываем регистр букв (большие или маленькие буквы).
        .MatchCase = False
        'Чтобы поиск не вёлся в остальной части документа,
        'если не будет найдено текста в оглавлении.
        .Wrap = wdFindStop
        
        If .Execute = True Then
            
            'Берём в переменную абзац, содержащий искомый текст,
            'чтобы проанализировать.
            
            'Parent - это фрагмент документа, содержащий искомый текст.
            sHeaderText = .Parent.Paragraphs(1).Range.Text
            
        End If
        
    End With
    
    'Анализируем переменную.
    '1. Убираем знак абзаца.
    sHeaderText = Left(sHeaderText, Len(sHeaderText) - 1)
    
    '2. Берём номер страницы, на основе знака табуляции.
    lPageNumber = Split(sHeaderText, Chr(9))(1)
 
    'Открываем книгу Excel, чтобы внести в неё изменения.
    'Обращаться к этой книге будем через переменную oWorkbook.
    Set oWorkbook = oExcel.Workbooks.Open(FileName:=Me.Variables(sExcelBookPathVariable).Value)
    
    'Вносим изменения на первый лист книги Excel.
    oWorkbook.Worksheets(1).Range("B7").Value = lPageNumber
    
    'Закрываем книгу Excel, с сохранением изменений.
    oWorkbook.Close SaveChanges:=True
    
    'Закрываем программу Excel. Она запущена, просто её не видно на мониторе.
    'Чтобы отобразить программу Excel:
    'oExcel.Visible = True
    'Одновременно может быть открыто несколько программ Excel.
    'Закроется именно та, которую мы запускали вот здесь:
    'Dim oExcel As New Excel.Application
    oExcel.Quit
    
    'Чтобы не появлялось диалоговое окно, связанное с сохранением документа.
    'Диалоговое окно будет всегда появляться при использовании этого кода,
    'т.к. происходит обновление оглавления, а это связано с изменением документа.
    If bSaved = True Then
        Me.Save
    End If
    
End Sub
Условия работы кода:
  1. Разделителем между текстом и номером страницы в оглавлении должен быть знак табуляции;
  2. Макрос нужно поместить в модуль документа Word, при закрытии которого данные из оглавления должны попадать в книгу Excel.
  3. В VBA Word нужно подключить библиотеку объектов программы Excel: Tools - References... - Microsoft Excel Object Library.
За макрос спасибо пользователю Скрипт

Последний раз редактировалось Sta1917, 13.11.2012 в 03:57.
Sta1917 вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Сквозная нумерация листов через поля



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
LISP. Вставка в таблицу поля, соотвествующего площади примитива Profan Готовые программы 272 06.06.2021 23:12
Публикация листов подшивки с разными параметрами печати Vildar AutoCAD 23 28.01.2018 05:31
Поля AutoCAD + Windows vanfil AutoCAD 6 07.04.2010 10:37
Как настроить выход в интернет с комуникатора через блютуз и ПК KonGo Разное 15 01.04.2010 18:46
Управление параметром видимости дин. блока через sheetset custom properties Red Nova AutoCAD 12 25.06.2008 13:44