mit calc geöffnetes .txt file as als sxc speichern

Programmierung unter AOO/LO (StarBasic, Python, Java, ...)

Moderator: Moderatoren

linus
*
Beiträge: 13
Registriert: So, 15.08.2004 10:50

mit calc geöffnetes .txt file as als sxc speichern

Beitrag von linus »

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
Stephan
********
Beiträge: 12369
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Beitrag von Stephan »

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?
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")
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
linus
*
Beiträge: 13
Registriert: So, 15.08.2004 10:50

Wo sollte append oder setcurrentfilter stehen

Beitrag von linus »

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
Stephan
********
Beiträge: 12369
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Beitrag von Stephan »

Da habe ich Dich falsch verstanden (ich dachte der Dialog und das Speichern wären separate Makros).
Dein Code mit:

Code: Alles auswählen

dispatcher.executeDispatch(document, ".uno:Saveas", "", 0, args51())
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):

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
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
linus
*
Beiträge: 13
Registriert: So, 15.08.2004 10:50

Klappt gut für Datei öffnen

Beitrag von linus »

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
Stephan
********
Beiträge: 12369
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Beitrag von Stephan »

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
Statt der InputBox kannst Du natürlich auch den FileDialog anzeigen, wobei dann die Prüfung automatisch erfolgt und das Ganze hier im Prinzip überflüssig ist.
Speichern habe ich nun mit
StoreToUrl realisiert, nachdem ich mit dem Speichern unter Dialog und voreingestelltem Filter nicht zurecht komme.
Was hat denn das Beides miteinander zu tun? Außerdem: Ist denn StoreToURL erwünscht und nicht StoreAsURL?
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
linus
*
Beiträge: 13
Registriert: So, 15.08.2004 10:50

danke

Beitrag von linus »

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
Stephan
********
Beiträge: 12369
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Beitrag von Stephan »

Storetourl ist nur eine Ausweichlösung gewesen.
Storeasurl kannte ich gar nicht.
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).
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.
Gibt es irgendwo eine Liste, wo einfach alle möglichen Befehle aufgelistet sind?
Nein, ist mir nicht bekannt. Aber beachte doch meinen post im Forum viewtopic.php?t=1553.

Gruß
Stephan
Antworten