mit calc geöffnetes .txt file as als sxc speichern
Moderator: Moderatoren
mit calc geöffnetes .txt file as als sxc speichern
Hallo,
ich habe ein Programm geschrieben, bei dem eine txt Datei mit calc aufgerufen wird. Danach möchte ich das die Datei über einen "speichern unter" Dialog speichern und zwar als .sxc. Dabei soll .sxc beim aufgehen der Dialogbox angewählt sein.
Soweit funktioniert alles. Nur wenn die "speichern unter" box aufgeht, ist immer .csv, .txt angewählt.
Mit welcher Einstellung kann ich die Dialogbox dazu bekommen, daß *.sxc voreingestellt ist?
Wie heisst der FilterName?
Oder muß ich etwas anders einstellen?
Doc = thisComponent
DocUrl = doc.URL
DocUrl = Left(DocUrl,Len(DocUrl)-4) & ".sxc"
document = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
rem ----------------------------------------------------------------------
dim args51(2) as new com.sun.star.beans.PropertyValue
args51(0).Name = "url"
args51(0).Value = docurl
args51(1).Name = "FilterName"
args51(1).Value = "????????? "
args51(2).Name = "InteractionHandler"
args51(2).Value = ""
dispatcher.executeDispatch(document, ".uno:Saveas", "", 0, args51())
Danke für eure Hilfe
Gruß Linus
ich habe ein Programm geschrieben, bei dem eine txt Datei mit calc aufgerufen wird. Danach möchte ich das die Datei über einen "speichern unter" Dialog speichern und zwar als .sxc. Dabei soll .sxc beim aufgehen der Dialogbox angewählt sein.
Soweit funktioniert alles. Nur wenn die "speichern unter" box aufgeht, ist immer .csv, .txt angewählt.
Mit welcher Einstellung kann ich die Dialogbox dazu bekommen, daß *.sxc voreingestellt ist?
Wie heisst der FilterName?
Oder muß ich etwas anders einstellen?
Doc = thisComponent
DocUrl = doc.URL
DocUrl = Left(DocUrl,Len(DocUrl)-4) & ".sxc"
document = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
rem ----------------------------------------------------------------------
dim args51(2) as new com.sun.star.beans.PropertyValue
args51(0).Name = "url"
args51(0).Value = docurl
args51(1).Name = "FilterName"
args51(1).Value = "????????? "
args51(2).Name = "InteractionHandler"
args51(2).Value = ""
dispatcher.executeDispatch(document, ".uno:Saveas", "", 0, args51())
Danke für eure Hilfe
Gruß Linus
Indem Du an der Stelle in Deinem Code wo .AppendFilter(...) steht entweder nur *.sxc angibst oder, da Du offensichtlich mehrere Filter willst, den Filter für *.sxw als default festlegst mit .SetCurrentFilter("...", "*.sxc")ich habe ein Programm geschrieben, bei dem eine txt Datei mit calc aufgerufen wird. Danach möchte ich das die Datei über einen "speichern unter" Dialog speichern und zwar als .sxc. Dabei soll .sxc beim aufgehen der Dialogbox angewählt sein.
Soweit funktioniert alles. Nur wenn die "speichern unter" box aufgeht, ist immer .csv, .txt angewählt.
Mit welcher Einstellung kann ich die Dialogbox dazu bekommen, daß *.sxc voreingestellt ist?
Wie heisst der FilterName?
So sich das auf das Speichern der Datei bezieht, sollte der für ein OpenOffice-Tabellendokument lauten: "StarOffice XML (Calc)".
Du kannst Dir mit diesem Code alle Filter in ein Writer-Dokument schreiben lassen:
Code: Alles auswählen
Sub Main
filter = createUnoService( "com.sun.star.document.FilterFactory" )
oFilterNames = filter.getElementNames()
' Create a Writer doc and save the filter names to it.
oDoc = StarDesktop.loadComponentFromURL( "private:factory/swriter", "_blank", 0, Array() )
oText = oDoc.getText()
oCursor = oText.createTextCursor()
oCursor.gotoEnd( False )
' Print the filter names into a Writer document.
For i = LBound( oFilterNames ) To UBound( oFilterNames )
oText.insertString( oCursor, oFilterNames(i), False )
oText.insertControlCharacter( oCursor, com.sun.star.text.ControlCharacter.PARAGRAPH_BREAK, False )
Next
End Sub
Gruß
Stephan
Wo sollte append oder setcurrentfilter stehen
Hallo,
leider komme ich nicht ganz zurecht. Hier ist mein Testprogramm:
an welcher stelle im Programm muss ich append oder setcurrentfilter setzen. damit zum die .sxc zum speichern default gesetzt wird?
Bei der Funktion getafile wäre es auch schön, wenn nur Textfiles zur Auswahl stehen. Kann ich da auch irgendwie den Filter setzen?
Sub testprogramm
Dim mFileProperties(1) As New com.sun.star.beans.PropertyValue
Dim sUrl As String
dim sheet as object
dim doc as object
dim cell as object
mFileProperties(0).Name = "FilterName"
mFileProperties(0).Value = "scalc: Text - txt - csv (StarCalc)"
mFileProperties(1).Name = "FilterFlags"
mFileProperties(1).Value = "9,34,SYSTEM,1,1/1/1/1/1/1/1/1"
oDesktop = createUNOService("com.sun.star.frame.Desktop")
oDocument = oDesktop.loadComponentFromURL(getafilename,"_blank",0, mFileProperties())
Doc = thisComponent
DocUrl = doc.URL
DocUrl = Left(DocUrl,Len(DocUrl)-4) & ".sxc"
document = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
rem ----------------------------------------------------------------------
dim args51(2) as new com.sun.star.beans.PropertyValue
args51(0).Name = "url"
args51(0).Value = docurl
args51(1).Name = "FilterName"
args51(1).Value = "StarOffice XML (Calc)"
args51(2).Name = "InteractionHandler"
args51(2).Value = ""
dispatcher.executeDispatch(document, ".uno:Saveas", "", 0, args51())
end sub
Function GetAFileName(Filternames()) As String
Dim oFileDialog as Object
Dim iAccept as Integer
Dim sPath as String
Dim InitPath as String
Dim RefControlName as String
Dim oUcb as object
Dim ListAny(0)
oFileDialog = CreateUnoService("com.sun.star.ui.dialogs.FilePicker")
oUcb = createUnoService("com.sun.star.ucb.SimpleFileAccess")
ListAny(0) = com.sun.star.ui.dialogs.TemplateDescription.FILEOPEN_SIMPLE
oFileDialog.initialize(ListAny())
initpath = "file:///d:/"
If InitPath = "" Then
InitPath = GetPathSettings ("file:///d:/")
End If
If oUcb.Exists(InitPath) Then
oFileDialog.SetDisplayDirectory(InitPath)
End If
iAccept = oFileDialog.Execute()
If iAccept = 1 Then
sPath = oFileDialog.Files(0)
GetAFileName = sPath
End If
oFileDialog.Dispose()
End Function
leider komme ich nicht ganz zurecht. Hier ist mein Testprogramm:
an welcher stelle im Programm muss ich append oder setcurrentfilter setzen. damit zum die .sxc zum speichern default gesetzt wird?
Bei der Funktion getafile wäre es auch schön, wenn nur Textfiles zur Auswahl stehen. Kann ich da auch irgendwie den Filter setzen?
Sub testprogramm
Dim mFileProperties(1) As New com.sun.star.beans.PropertyValue
Dim sUrl As String
dim sheet as object
dim doc as object
dim cell as object
mFileProperties(0).Name = "FilterName"
mFileProperties(0).Value = "scalc: Text - txt - csv (StarCalc)"
mFileProperties(1).Name = "FilterFlags"
mFileProperties(1).Value = "9,34,SYSTEM,1,1/1/1/1/1/1/1/1"
oDesktop = createUNOService("com.sun.star.frame.Desktop")
oDocument = oDesktop.loadComponentFromURL(getafilename,"_blank",0, mFileProperties())
Doc = thisComponent
DocUrl = doc.URL
DocUrl = Left(DocUrl,Len(DocUrl)-4) & ".sxc"
document = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
rem ----------------------------------------------------------------------
dim args51(2) as new com.sun.star.beans.PropertyValue
args51(0).Name = "url"
args51(0).Value = docurl
args51(1).Name = "FilterName"
args51(1).Value = "StarOffice XML (Calc)"
args51(2).Name = "InteractionHandler"
args51(2).Value = ""
dispatcher.executeDispatch(document, ".uno:Saveas", "", 0, args51())
end sub
Function GetAFileName(Filternames()) As String
Dim oFileDialog as Object
Dim iAccept as Integer
Dim sPath as String
Dim InitPath as String
Dim RefControlName as String
Dim oUcb as object
Dim ListAny(0)
oFileDialog = CreateUnoService("com.sun.star.ui.dialogs.FilePicker")
oUcb = createUnoService("com.sun.star.ucb.SimpleFileAccess")
ListAny(0) = com.sun.star.ui.dialogs.TemplateDescription.FILEOPEN_SIMPLE
oFileDialog.initialize(ListAny())
initpath = "file:///d:/"
If InitPath = "" Then
InitPath = GetPathSettings ("file:///d:/")
End If
If oUcb.Exists(InitPath) Then
oFileDialog.SetDisplayDirectory(InitPath)
End If
iAccept = oFileDialog.Execute()
If iAccept = 1 Then
sPath = oFileDialog.Files(0)
GetAFileName = sPath
End If
oFileDialog.Dispose()
End Function
Da habe ich Dich falsch verstanden (ich dachte der Dialog und das Speichern wären separate Makros).
Dein Code mit:
Liefert das "Speichern unter"-Fenster NUR weil Deine Parameter falsch sind(*), sind Deine Parameter richtig erscheint das Fenster garnicht (ich kann mich irren, aber so sehe ich das). Du bist also auf dem falschen Weg.
(*) ich habe mir Deinen Code nicht genau angesehen, aber wenn alles richtig wäre würde kein Fenster erscheinen
Um stets den Dialog einzublenden mußt Du äquivalent zum Öffnen verfahren und statt .FILEOPEN_SIMPLE z.B. .FILESAVE_SIMPLE verwenden (ich habe jetzt Deinen Code nicht geprüft). Ich hoffe das Du zurecht kommst, wenn Du in die STarBasicFAQ schaust(Link unter: viewtopic.php?t=1553 ) und ich Dir folgenden Codeschnipsel gebe (gilt unter Beachtung der StarBasicFAQ sowohl für Öffnen als auch Speichern):
Ich denke außerdem das ein Filter (i.S. "Konvertierungsfilter, ich meine nicht den .AppendFilter im obenstehenden Code) beim Speichern entbehrlich ist, da Du ja schon beim Öffnen in das Calc-Format konvertiert hast, es sollte also völlig reichen normal zu speichern.
Stephan
Dein Code mit:
Code: Alles auswählen
dispatcher.executeDispatch(document, ".uno:Saveas", "", 0, args51())
(*) ich habe mir Deinen Code nicht genau angesehen, aber wenn alles richtig wäre würde kein Fenster erscheinen
Um stets den Dialog einzublenden mußt Du äquivalent zum Öffnen verfahren und statt .FILEOPEN_SIMPLE z.B. .FILESAVE_SIMPLE verwenden (ich habe jetzt Deinen Code nicht geprüft). Ich hoffe das Du zurecht kommst, wenn Du in die STarBasicFAQ schaust(Link unter: viewtopic.php?t=1553 ) und ich Dir folgenden Codeschnipsel gebe (gilt unter Beachtung der StarBasicFAQ sowohl für Öffnen als auch Speichern):
Code: Alles auswählen
Sub dateiauswahl
Dim auswahl as Object
Dim dateiname As String
auswahl = createunoservice("com.sun.star.ui.dialogs.FilePicker")
'je nach Bedarf
With auswahl
'mehrere Dateien ja/nein
.SetMultiselectionMode(False)
'Dateitypen vorauswählen
'.appendFilter("Textdateien (txt)", "*.txt")
'.appendFilter("CSV-Datei (csv)", "*.csv")
'.setcurrentfilter("Textdateien (txt)", "*.txt")
'Titel festlegen
'.SetTitle("Wählen Sie eine Datei")
'Startverzeichnis
'.setDisplayDirectory(ConvertToURL("c:\"))
'Vorschaufenster (nur sinnvoll für Grafikdateien)
'.setShowState(True)
End With
antwort = auswahl.execute
'wurde Datei gewählt ist antwort 1 sonst 0
if antwort = 1 then
'Benutzer hat ausgewählt
Datei = auswahl.Files(0)
'in "normale" Schreibweise umwandeln
'Datei = ConvertFromURL (Datei)
MsgBox Datei
end if
End Sub
Stephan
Klappt gut für Datei öffnen
Hallo,
die Filter klappen gut zum Öffnen der Datei.
Speichern habe ich nun mit
StoreToUrl realisiert, nachdem ich mit dem Speichern unter Dialog und voreingestelltem Filter nicht zurecht komme.
Allerdings hätte ich gerne eine Abfrage, ob eine Datei mit gleichen Namen bereits existiert und eine Möglichkeit, einen neuen Dateinamen zu vergeben, falls der Dateiname schon existiert.
Danke für die Unterstützung.
Gruß Linus
die Filter klappen gut zum Öffnen der Datei.
Speichern habe ich nun mit
StoreToUrl realisiert, nachdem ich mit dem Speichern unter Dialog und voreingestelltem Filter nicht zurecht komme.
Allerdings hätte ich gerne eine Abfrage, ob eine Datei mit gleichen Namen bereits existiert und eine Möglichkeit, einen neuen Dateinamen zu vergeben, falls der Dateiname schon existiert.
Danke für die Unterstützung.
Gruß Linus
Allerdings hätte ich gerne eine Abfrage, ob eine Datei mit gleichen Namen bereits existiert und eine Möglichkeit, einen neuen Dateinamen zu vergeben, falls der Dateiname schon existiert.
Code: Alles auswählen
Sub Existenz_Datei_pruefen_kompakt()
DeineDatei = "C:\Bla.Bla"
neu:
if FileExists (DeineDatei) then
eingabe = inputbox("Bitte geben Sie einen Pfad+Namen ein ","Datei schon vorhanden")
if eingabe = "" then exit sub
Goto neu
else
MsgBox "Datei existiert noch nicht"
end if
End Sub
Was hat denn das Beides miteinander zu tun? Außerdem: Ist denn StoreToURL erwünscht und nicht StoreAsURL?Speichern habe ich nun mit
StoreToUrl realisiert, nachdem ich mit dem Speichern unter Dialog und voreingestelltem Filter nicht zurecht komme.
Wenn Du so vorgegangen wärst wie ich angedeutet habe, sollte doch alles laufen. Folgendes habe ich nur kurz getestet (unter Windows), gibt es Fehler frage nochmal nach:
Code: Alles auswählen
Sub Speichern_txt_als_sxw()
arg = Array(com.sun.star.ui.dialogs.TemplateDescription.FILESAVE_AUTOEXTENSION)
dialog = CreateUnoService("com.sun.star.ui.dialogs.FilePicker")
dialog.Initialize(arg())
dialog.appendFilter( "SO/OOo Tabellendokument (*.sxc)", "*.sxc" )
dialog.SetMultiselectionMode(False)
ok = dialog.execute()
if ok = 1 Then
datei = dialog.getFiles()
URL = datei(0)
document = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
dim args1(1) as new com.sun.star.beans.PropertyValue
args1(0).Name = "URL"
args1(0).Value = URL
args1(1).Name = "FilterName"
args1(1).Value = "StarOffice XML (Calc)"
dispatcher.executeDispatch(document, ".uno:SaveAs", "", 0, args1())
end if
End Sub
Das geht, falls gewünscht, im Prinzip auch mit StoreToURL/StoreAsURL.
Gruß
Stephan
danke
Hallo,
Ich denke die Sache mit dem saveas könnte doch noch klappen.
Sieht gut aus so. Leider fehlt mir bei vielen Dingen in OOO_Basic noch das grundlegende Verständnis. Drum bin ich da nicht weitergekommen.
Storetourl ist nur eine Ausweichlösung gewesen.
Storeasurl kannte ich gar nicht.
Gibt es irgendwo eine Liste, wo einfach alle möglichen Befehle aufgelistet sind?
Vielen Dank für die Unterstützung.
Gruß Linus
Ich denke die Sache mit dem saveas könnte doch noch klappen.
Sieht gut aus so. Leider fehlt mir bei vielen Dingen in OOO_Basic noch das grundlegende Verständnis. Drum bin ich da nicht weitergekommen.
Storetourl ist nur eine Ausweichlösung gewesen.
Storeasurl kannte ich gar nicht.
Gibt es irgendwo eine Liste, wo einfach alle möglichen Befehle aufgelistet sind?
Vielen Dank für die Unterstützung.
Gruß Linus
StoreToURL bewirkt, das das Dokument gespeichert wird und im aktiven Fenster von Calc weiterhin das ursprüngliche Dokument (also die Textdatei) angezeigt wird. StoreAsURL speichert und zeigt das gespeicherte Dokument im aktiven Fenster an (also die *.sxc).Storetourl ist nur eine Ausweichlösung gewesen.
Storeasurl kannte ich gar nicht.
In Deinem Fall macht das optisch nur in der Titelzeile einen Unterschied, verwendest Du jedoch StoreToURL und willst gleich darauf weiter an der Datei arbeiten, bearbeitest Du die ursprüngliche Textdatei und nicht die neue *.sxc.
Nein, ist mir nicht bekannt. Aber beachte doch meinen post im Forum viewtopic.php?t=1553.Gibt es irgendwo eine Liste, wo einfach alle möglichen Befehle aufgelistet sind?
Gruß
Stephan