OpenOffice-LibreOffice Tabellenblatt umbenennen (Batch?)
Guten Tag,
ich stehe gerade vor einem Sachverhalt, bei dem ich einmal Eure Hilfe benötige.
Ich habe eine Open-Office - Liste mit nur einem Tabellen-Blatt (Sheet 1) - ich würde gerne über eine Batch das Tabellen-Blatt in Standard umbenennen. Ist das möglich?
Ich freue mich auf eine Rückmeldung.
ich stehe gerade vor einem Sachverhalt, bei dem ich einmal Eure Hilfe benötige.
Ich habe eine Open-Office - Liste mit nur einem Tabellen-Blatt (Sheet 1) - ich würde gerne über eine Batch das Tabellen-Blatt in Standard umbenennen. Ist das möglich?
Ich freue mich auf eine Rückmeldung.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 2371027184
Url: https://administrator.de/contentid/2371027184
Ausgedruckt am: 24.11.2024 um 15:11 Uhr
6 Kommentare
Neuester Kommentar
Ich habe eine Open-Office - Liste mit nur einem Tabellen-Blatt (Sheet 1)
Dort war es noch Libre Office und eine .xls Datei.Über was reden wir nun genau?
ich würde gerne über eine Batch das Tabellen-Blatt in Standard umbenennen. Ist das möglich?
Nein mit Batch ist so etwas nicht möglich. Libre-/OpenOffice lassen sich nur sehr umständlich automatisieren. Hier, um mal eine "Idee" davon zu bekommen, ein Beispiel mit VBScript.Ich hab aktuell aber weder Libre- noch OpenOffice um irgendetwas testen zu können.
Steffen
Mal mit VBS geschrieben, tut hier im Test das was es soll
dim args(), objServiceManager, objDesktop, doc, file
file = "file:///c:/users/maxmuster/desktop/test.ods"
Set objServiceManager = CreateObject("com.sun.star.ServiceManager")
Set objDesktop = objServiceManager.createInstance("com.sun.star.frame.Desktop")
Set doc = objDesktop.loadComponentFromURL(pfad, "_blank", 0, args)
doc.sheets.getByIndex(0).Name = "Standard"
doc.storeAsURL pfad,Array()
doc.close true
Hab ich jetzt nicht geprüft, mache das zum ersten mal mit OpenOffice. Kann also gut sein, muss der TO dann halt mal selbst ausprobieren.
Die Doku ist ja ehrlich gesagt ein Graus im Vergleich zu Office da sucht man sich oft nen Wolf ...
Die Doku ist ja ehrlich gesagt ein Graus im Vergleich zu Office da sucht man sich oft nen Wolf ...
Die Doku ist ja ehrlich gesagt ein Graus im Vergleich zu Office da sucht man sich oft nen Wolf ...
Ich weiß. Und wenn man dann noch mit Windows Pfadangaben statt File URLs arbeiten will, muss man selbst was zusammenbauen, wobei OO/LO auch nur ein spezifisches URL Encoding versteht. Und wer so eine Automation wirklich sicher im Hintergrund ausführen will, muss noch mal 50 Zeilen Workaround basteln. Aber das hatte ich ja verlinkt ...Steffen
Ich hab die Kiste mit meinem LibreOffice mal angeworfen und kurz ein paar unterschiedliche Scripte geschrieben. Voraussetzung für Automation ist, dass bei der Installation von Open-/LibreOffice die ActiveX Komponenten mit installiert wurden.
Steffen
- Batch mit eingebettetem JScript:
@if (0)==(0) echo off
:: ^^^^ Batch/JScript Hybridzeile, muss immer die erste Zeile im Script sein
:: Codepage updaten, damit wenigstens Umlaute unterstützt werden.
>nul chcp 1252
:: Macrodefinition, verbessert später etwas die Lesbarkeit.
set ^"rename_sheet=cscript //nologo //e:jscript "%~fs0" ^"
:: Aufruf des JScript Codes. Es werden 3 Argumente übergeben:
::
:: Arbeits- | Dateiname oder | neuer Name
:: verzeichnis | relativer / absoluter | der ersten
:: | Pfad | Tabelle
::
%rename_sheet% "%cd%" "test.ods" "Standard"
pause
:: die nachfolgenden Zeilen müssen immer am Ende des gesamten Scripts stehen
goto :eof @end
new ActiveXObject('WScript.Shell').CurrentDirectory = WScript.Arguments(0);
var objSrvMgr = new ActiveXObject('com.sun.star.ServiceManager'),
objDesktop = objSrvMgr.createInstance('com.sun.star.frame.Desktop');
try {
var objTransl = objSrvMgr.createInstance('com.sun.star.uri.ExternalUriReferenceTranslator'),
props = [objSrvMgr.Bridge_GetStruct('com.sun.star.beans.PropertyValue')],
url = new ActiveXObject('Scripting.FileSystemObject').GetAbsolutePathName(WScript.Arguments(1)).replace(/\\/g, '/');
url = objTransl.translateToInternal((url.substr(0, 2) == '//' ? 'file:' : 'file:///') + url);
props.Name = 'Hidden';
props.Value = true;
var objDoc = objDesktop.loadComponentFromURL(url, '_blank', 0, props);
try {
objDoc.sheets.getByIndex(0).Name = WScript.Arguments(2);
objDoc.storeAsURL(url, new Array());
} catch(e) {
WScript.Echo('failed to update the document');
}
objDoc.close(true);
} catch(e) {
WScript.Echo('failed to open the document');
}
objDesktop.terminate();
- JScript
var file = 'test.ods',
sheetName = 'Standard';
var objSrvMgr = new ActiveXObject('com.sun.star.ServiceManager'),
objDesktop = objSrvMgr.createInstance('com.sun.star.frame.Desktop');
try {
var objTransl = objSrvMgr.createInstance('com.sun.star.uri.ExternalUriReferenceTranslator'),
props = [objSrvMgr.Bridge_GetStruct('com.sun.star.beans.PropertyValue')],
url = new ActiveXObject('Scripting.FileSystemObject').GetAbsolutePathName(file).replace(/\\/g, '/');
url = objTransl.translateToInternal((url.substr(0, 2) == '//' ? 'file:' : 'file:///') + url);
props.Name = 'Hidden';
props.Value = true;
var objDoc = objDesktop.loadComponentFromURL(url, '_blank', 0, props);
try {
objDoc.sheets.getByIndex(0).Name = sheetName;
objDoc.storeAsURL(url, new Array());
} catch(e) {
WScript.Echo('failed to update the document');
}
objDoc.close(true);
} catch(e) {
WScript.Echo('failed to open the document');
}
objDesktop.terminate();
- VBScript
Option Explicit
Const file = "test.ods"
Const sheetName = "Standard"
Dim objSrvMgr, objDesktop, objDoc, objTransl, url, props(1)
Set objSrvMgr = CreateObject("com.sun.star.ServiceManager")
Set objDesktop = objSrvMgr.createInstance("com.sun.star.frame.Desktop")
Set objDoc = Nothing
Err.Clear
On Error Resume Next
Set objTransl = objSrvMgr.createInstance("com.sun.star.uri.ExternalUriReferenceTranslator")
url = Replace(CreateObject("Scripting.FileSystemObject").GetAbsolutePathName(file), "\", "/")
IF Left(url, 2) = "//" Then : url = "file:" & url : Else : url = "file:///" & url : End If
url = objTransl.translateToInternal(url)
Set props(0) = objSrvMgr.Bridge_GetStruct("com.sun.star.beans.PropertyValue")
props.Name = "Hidden"
props.Value = True
Set objDoc = objDesktop.loadComponentFromURL(url, "_blank", 0, props)
On Error Goto 0
If objDoc Is Nothing Then
objDesktop.terminate
WScript.Echo "failed to open the document"
WScript.Quit
End If
Err.Clear
On Error Resume Next
objDoc.sheets.getByIndex(0).Name = sheetName
objDoc.storeAsURL url, Array()
If Err.Number Then
objDoc.close True
objDesktop.terminate
WScript.Echo "failed to update the document"
WScript.Quit
End If
objDoc.close True
On Error Goto 0
objDesktop.terminate
- PowerShell
using namespace System.Reflection
[Assembly]::LoadWithPartialName('cli_cppuhelper') | Out-Null
[Assembly]::LoadWithPartialName('cli_oootypes') | Out-Null
[Assembly]::LoadWithPartialName('cli_ure') | Out-Null
[Assembly]::LoadWithPartialName('cli_uretypes') | Out-Null
$file = 'test.ods'
$sheetName = 'Standard'
$objContext = [uno.util.Bootstrap]::bootstrap()
$objSrvMgr = [unoidl.com.sun.star.uno.XComponentContext].getMethod('getServiceManager').invoke($objContext, @())
$objDesktop = [unoidl.com.sun.star.lang.XMultiComponentFactory].getMethod('createInstanceWithContext').invoke($objSrvMgr, @('com.sun.star.frame.Desktop', $objContext))
try {
$objTransl = [unoidl.com.sun.star.lang.XMultiComponentFactory].getMethod('createInstanceWithContext').invoke($objSrvMgr, @('com.sun.star.uri.ExternalUriReferenceTranslator', $objContext))
$url = Get-Item $file | select -Expand FullName | %{$_ -replace '\\', '/'}
$url = [unoidl.com.sun.star.uri.XExternalUriReferenceTranslator].getMethod('translateToInternal').invoke($objTransl, @($(if ($url.SubString(0, 2) -eq '//') {'file:'} else {'file:///'}) + $url))
$props = [unoidl.com.sun.star.beans.PropertyValue[]] @([unoidl.com.sun.star.beans.PropertyValue]::new())
$props.Name = "Hidden"
$props.Value = $true
$objDoc = [unoidl.com.sun.star.frame.XComponentLoader].getMethod('loadComponentFromURL').invoke($objDesktop, @($url, '_blank', 0, $props))
try {
$objSheets = [unoidl.com.sun.star.sheet.XSpreadsheetDocument].getMethod('getSheets').invoke($objDoc, @())
$objSheet = [unoidl.com.sun.star.container.XIndexAccess].getMethod('getByIndex').invoke($objSheets, @(0))
[unoidl.com.sun.star.container.XNamed].getMethod('setName').invoke($objSheet.Value, @($sheetName))
[unoidl.com.sun.star.frame.XStorable].GetMethod('storeAsURL').Invoke($objDoc, @($url, [unoidl.com.sun.star.beans.PropertyValue[]] @()));
} catch {
'failed to update the document'
}
[unoidl.com.sun.star.util.XCloseable].GetMethod('close').Invoke($objDoc, @($true))
} catch {
'failed to open the document'
}
[unoidl.com.sun.star.frame.XDesktop].GetMethod('terminate').Invoke($objDesktop, @()) | Out-Null
Steffen