Перезаписать файл

Автор sw_and, 20 февраля 2012, 15:09

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

sw_and

Сохранение документов в формате Excel 97/2003

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

sub Main
rem ----------------------------------------------------------------------
rem define variables
dim document as object
dim dispatcher as object

rem ----------------------------------------------------------------------
rem get access to the document
document = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

rem ----------------------------------------------------------------------
dim args1(1) as new com.sun.star.beans.PropertyValue
args1(0).Name = "URL"
args1(0).Value = "file:///home/user/Documents/cant_save_russiansaved.xls"
args1(1).Name = "FilterName"
args1(1).Value = "MS Excel 97"

dispatcher.executeDispatch(document, ".uno:SaveAs", "", 0, args1())

end sub

Рыбка Рио

Вот такой макрос:
Sub Main2
Doc = ThisComponent
'If Doc.URL="" then msgbox ("Документ не сохранён",64, "Информация") : Exit Sub
Dim Ar(0) As new com.sun.star.beans.PropertyValue
Ar(0).Name="FilterName"
Ar(0).Value="MS Excel 97"
If Doc.URL="" then
Doc.storeToURL(ConvertToURL("/home/user/Documents/cant_save_russiansaved2.xls"), Ar())
Elseif Right(Doc.URL,3)<>"xls" then
Doc.storeToURL(Doc.URL+".xls", Ar())
Else
Doc.store()
Endif
End Sub


Он если файл не сохранён, то сохранит его как xls по жестко заданному пути. Если файл сохранён не как xls, то сохранит его как xls под тем же именем, но добавит ".xls" в конец. И если файл уже сохранён как xls, то пересохранит его под тем же именем.
ubuntu 12.04 + LibO3.6.0

sw_and

должно было работать именно без фиксированного пути и имени
рабочий вариант взят отсюда http://user.services.openoffice.org/en/forum/viewtopic.php?f=20&t=48133
ЦитироватьSub SaveAsXLS
' Run this from an open spreadsheet which has been saved
'On Error goto ErrorMsg

Dim oDoc as Object, sUrl as String, sDot as String, i as Integer, _
   sPath as String
oDoc = ThisComponent : sUrl = oDoc.url : sDot = "."
If NOT oDoc.hasLocation Then
Exit Sub : End If
i = InStr ( sUrl, sDot )
sPath = ConvertToUrl ( Left ( sUrl, i ) & "xls" )

Dim aProps(2) as new com.sun.star.beans.PropertyValue
aProps(0).Name = "Overwrite"
aProps(0).Value = "True" ' existing xls version overwritten either way
aProps(1).Name = "URL"
aProps(1).Value = sPath
aProps(2).Name = "FilterName"
aProps(2).Value = "MS Excel 97"

oDoc.storeAsURL ( sPath, aProps() ) ' The xls file is open
'oDoc.storeToURL ( sPath, aProps() ) ' The ods file is open
' - an alternative to storeAsURL

'ErrorMsg:
'Msgbox "This script failed to run"

End Sub


ALexey7ov

Методом store не пробовали? Метод сохраняет все сделанные в документе изменения. Если, конечно, я правильно понял задачу. (Файл *.xls открыт --> сделаны изменения --> Файл сохранён (перезаписан) под тем же именем, что и был открыт.). ThisComponent.store()