Войти

Показать полную графическую версию : [решено] свойства *.dwg файла в документ Word


Страниц : [1] 2

Sta1917
18-09-2012, 20:55
Здравствуйте, помогите пожалуйста с решением следующей задачи: в папке есть Паспорт.doc и Название_файла.dwg (единственный *.dwg в директории) , в паспорте нужно отобразить тремя полями: дату и время последнего изменения (до секунд), полный объем в байтах (размер, а не на "диске") и название файла *.dwg. Нашел макрос но только для экселя (http://www.planetaexcel.ru/tip.php?aid=290)
К сожалению связка word-exсel не подходит.

Iska
18-09-2012, 22:02
Sta1917, выложите образец файла «Паспорт.doc», в котором будет указано, куда конкретно нужно поместить:тремя полями: дату и время последнего изменения (до секунд), полный объем в байтах »
Как это должно работать — заполнять «поля» в момент открытия документа или как иначе?

Sta1917
18-09-2012, 22:09
В момент открытия, т.е. в word должны быть последние данные об изменениях.

Iska
18-09-2012, 23:44
Sta1917, не хотите выкладывать — дело Ваше.

Вот Вам код:
Option Explicit

Private Sub Document_Open()
Dim objRange As Range
Dim objFSO As Object
Dim objFile As Object

Set objFSO = CreateObject("Scripting.FileSystemObject")

With ThisDocument
If .Bookmarks.Exists("_DwgProp") Then
With .Bookmarks.Item("_DwgProp").Range
.Expand Unit:=wdTable
.Tables.Item(1).Delete
End With
End If

Set objRange = .Content
objRange.Collapse Direction:=wdCollapseStart

With .Tables.Add(Range:=objRange, NumRows:=3, NumColumns:=2)
.Cell(1, 1).Range.Text = "Название файла"
.Cell(2, 1).Range.Text = "Дата и время последнего изменения"
.Cell(3, 1).Range.Text = "Объем файла"

For Each objFile In objFSO.GetFolder(.Parent.Path).Files
If UCase(objFSO.GetExtensionName(objFile.Name)) = UCase("dwg") Then
.Cell(1, 2).Range.Text = objFile.Name
.Cell(2, 2).Range.Text = CStr(objFile.DateLastModified)
.Cell(3, 2).Range.Text = CStr(objFile.Size)

Exit For
End If
Next objFile

Set objRange = .Range
End With

.Bookmarks.Add Name:="_DwgProp", Range:=objRange

Set objRange = Nothing
End With

Set objFSO = Nothing
End Sub

Добавляйте его в модуль «ThisDocument» Вашего документа «Паспорт.doc» и правьте по собственному усмотрению.

Sta1917
19-09-2012, 00:36
Спасибо, за внимание к вопросу. Не думал что там все так сложно. Завтра с работы принесу - выложу.

Iska
19-09-2012, 01:39
Sta1917, опробовать можете и сейчас, создав рядом с документом, в который Вы поместите код, любой файл с расширением «.dwg».

Sta1917
19-09-2012, 22:58
Работает как надо, только:
1. можно чтобы данные оставались, если в папке нет dwg, или преобразовать макрос в текст;
2. убрать расширение файла (см. вложение)?

Iska
20-09-2012, 06:44
Sta1917, появился ряд вопросов:

1. Вы создаёте этот документ сами?
2. Если 1 — «да», то: этот документ основан на каком-то шаблоне или Вы просто создаёте новые копированием старого документа в новый?
3. Если 1 — «да», то: какова дальнейшая судьба документа: только распечатать или он как-то участвует в электронном документообороте и в дальнейшем?

4. Стоит ли сделать заполнение строк таблицы №2 данными по всем найденным файлам *.dwg в том же каталоге документа, а не только данными первого найденного файла *.dwg?

Судя по заголовку таблицы №2, мы делаем заполнение следующих столбцов:
Полное название формата
Директория
Файлы
Расширения
Дата и время последнего обновления
Размер (в байтах)

5. «Полное название формата» — скажите, какой текст у Вас отображается в Проводнике в режиме \Вид\Таблица в столбце «Тип» для файлов *.dwg?
6. «Директория» — что здесь должно быть? Имя родительской папки, в которой находится документ (без полного пути)?
7. Отчего в примере в «Размер (в байтах)» между разрядами мегабайт и килобайт использован неразрывный пробел, а между разрядами килобайт и байт — обычный пробел?

или преобразовать макрос в текст; »
Ваш Вопрос не понятен. Уточните.

Sta1917
22-09-2012, 19:23
1-3. Документ получается копированием старого, с последующей печатью и передачей заказчику (Папки с паспортом и *.dwg). В СЭД не участвует.
4. Стоит, оказывается мне всегда попадались частные случаи с одним файлом. В основном нужно как в прикрепленном файле (http://rusfolder.com/32766420), с вложенными папками.
5. Тип элементов "файл DWG", вы правы, не очень корректная формулировка, но пусть будет такой.
6. Да.
7. Это не принципиально, видимо чтобы не мегабайты не сползали.
Ваш Вопрос не понятен. Уточните. »
Вопрос снимается. Чтобы можно передать паспорт отдельно от *.dwg. Решил копированием текста.

Iska
23-09-2012, 09:35
1-3. Документ получается копированием старого, с последующей печатью и передачей заказчику (Папки с паспортом и *.dwg). В СЭД не участвует. »
1. Так сам документ дальше Вас куда-то идёт или после распечатки его дальнейшая судьба не важна?
2. Есть ли возможность перейти на использование шаблона?

4. Стоит, оказывается мне всегда попадались частные случаи с одним файлом. В основном нужно как в прикрепленном файле, с вложенными папками. »
Ищем только в папках первого уровня? Не ищем ни в каталоге документа, ни в папках второго и более уровней — так?

Вопрос снимается. Чтобы можно передать паспорт отдельно от *.dwg. Решил копированием текста. »
А всё-таки, что?

Попробуйте такой шаблон: 87881 (поместите его в «%AppData%\Microsoft\Шаблоны» или где у Вас хранятся личные шаблоны). После создания документа на его основе появится панель инструментов с единственной кнопкой.

Sta1917
24-09-2012, 19:38
1. Не важна, документ уходит на хранение, т.е. перед конечной сдачей удаляю все макросы, оставляя чистый *.doc
2. Да, раньше не пользовался шаблонами, благодаря Вам попробовал, это удобно. Спасибо.

Ищем только в папках первого уровня? Не ищем ни в каталоге документа, ни в папках второго и более уровней — так? » Да, только 1-го уровня. Можно сделать 2-ю кнопку, чтобы искал только в каталоге документа?

А всё-таки, что? »
Некорректно выразился, попробую еще раз: первый макрос работал только при наличии файла в директории, т.е. если ничего нет, поля незаполнены. Шаблон работает как надо.

Iska
24-09-2012, 20:01
Да, только 1-го уровня. Можно сделать 2-ю кнопку, чтобы искал только в каталоге документа? »
Можно. Но есть встречное предложение: попробовать обойтись одной кнопкой.

Сначала ищем *.dwg-файлы в текущем каталоге (кстати, что в этом случае помещать в колонку «Директория»?). Если таковые найдены — заполняем таблицу и останавливаемся. Если в текущем каталоге таковые файлы отсутствуют — ищем в подкаталогах первого уровня. Так устроит? Можно в обратном порядке.

Некорректно выразился, попробую еще раз: … Шаблон работает как надо. »
Спасибо, ясно.

Sta1917
24-09-2012, 20:13
Можно.. обойтись одной кнопкой. »
Можно.

Устроит, есть 1 из 2 случаев: либо в родительской папке, либо в подпапках 1-го уровня. Если *.dwg найден в текущем каталоге, в "Директория" писать название каталога. Порядок неважен.

Iska
24-09-2012, 21:12
Sta1917, пробуйте: 87930. Сначала ищем в каталоге документа, затем — во вложенных первого уровня.

Sta1917
24-09-2012, 23:44
Все работает. Буду тестировать на практике. Огромное спасибо.

Iska
25-09-2012, 01:35
Буду тестировать на практике. »
Отпишитесь по результатам практического применения: как показывает опыт, даже самые грандиозные воплощения резво рушатся под рутиной самых обычных дел. А уж про наше с Вами — и говорить нечего, наверняка найдутся упущенные моменты и неверно интерпретированные детали.

Sta1917
25-09-2012, 01:49
Хорошо, но это дело не быстрое, не каждый день выпуск объектов=)

Iska
25-09-2012, 02:31
Ничего страшного. Конференция помирать не собирается, а я подпишусь на эту тему.

Sta1917
25-09-2012, 02:43
Спасибо, там еще одна подобная задачка от меня появилась. В общем, это документы для сдачи в геослужбу. Когда разберусь с полной структурой отчета сделаю автоматическое заполнение верхних таблиц. После полного теста выложу на геодезическом форуме.

firstarey
05-06-2013, 09:13
Iska, подскажите, как добавить вывод автора последних изменений ?

.Item(7).Range.Text = CStr(objFile.DateLastModified)

что тут должно быть ?:)




© OSzone.net 2001-2012