Закрытие файла через меню Сохранить как...

Автор dimmon777, 17 февраля 2016, 20:17

0 Пользователи и 1 гость просматривают эту тему.

dimmon777

Помогите дописать макрос, сохраняющий книгу через диалоговое окно Сохранить как...


Dim args(0) As New com.sun.star.beans.PropertyValue

args(0).Name = "FilterName"
args(0).Value = "MS Excel 97"
ThisComponent.storeToURL("file:///c:/1/1.xls", args())


JohnSUN

Или почти полностью "слижи" код функции StoreDocument() из Tools.ModuleControls - сможешь записывать не только в фиксированный 1.xls, а и любое другое имя выбрать.
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне

dimmon777


JohnSUN

А как ругается? "Свойство или метод не найдены: storeAsURL"?
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне

dimmon777

Цитата: JohnSUN от 17 февраля 2016, 21:37
А как ругается? "Свойство или метод не найдены: storeAsURL"?
Именно не ругается storeAsURL и storeToURL, похоже одно и тоже...

Можно след код использовать, выдрал от сюда https://forum.openoffice.org/en/forum/viewtopic.php?f=25&t=36441

Function fSaveFile() as String

'Set the Dialog Arguments to a Template for FILESAVE

sFilePickerArgs = Array(_
com.sun.star.ui.dialogs.TemplateDescription.FILESAVE_AUTOEXTENSION )

'register the Service for Filepicker

oFilePicker = CreateUnoService( "com.sun.star.ui.dialogs.FilePicker" )

'Pass some arguments to it

With oFilePicker
.Initialize( sFilePickerArgs() )
.setDisplayDirectory( "C:/1/" )
.appendFilter("Xls Files (.xls)", "*.xls" )
.setTitle( "Save As ..." )
End With

'If the savepath is selected return the complete path and display it in an messagebox

If oFilePicker.execute() Then
sFiles = oFilePicker.getFiles()
fSaveFile = sFiles(0)
' MsgBox( sFileURL )

End If

' Close the Dialog
oFilePicker.Dispose()

End Function

JohnSUN

Цитата: dimmon777 от 17 февраля 2016, 23:04
storeAsURL и storeToURL, похоже одно и тоже...
Да нет, разные они. Раз уж ты в названии темы упомянул "...меню Сохранить как...", то, как и написал rami, нужно употреблять As, а не To. Оба эти метода пишут указанный документ в файл, но после As продолжаешь работать с новым документом, а после To просто создается копия, а работать продолжаешь со старым.
Дело в том, что код из твоего первого сообщения работает нормально - в корне диска C: создаётся папка "1" (если её ещё не было) и в ней файл 1.xls. Разумеется, если ThisComponent - книга Calc. Для других документов возникнет ошибка "Фильтр не найден", а если макрос запускать прямо из IDE Basic'а, то "метод не найден".

Так что если файл не создаётся, то возможные причины:
1. Ты не там ищешь результат работы макроса (Ещё раз - в папке "1" в корне диска C:)
2. В твоём пользовательском профиле появилась какая-то ошибка (Очистить/Удалить профиль)
3. Операционная система решила, что у тебя нет прав на запись чего-либо в корень диска C: (но тогда офис выдавал бы сообщение об ошибке записи)
4. Твоя Windows решила, что она главнее тебя - просто перезагрузи машину, пусть знает кто в доме хозяин
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне

dimmon777

Цитата: JohnSUN от 18 февраля 2016, 08:08JohnSUN

Спасибо!
Но в данном примере, мне нужно было сохранить книгу через диалог сохранить как....

JohnSUN

А что в таком случае насчет функции StoreDocument() из моего первого ответа?
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне