diff options
author | Caolán McNamara <caolanm@redhat.com> | 2021-07-13 12:38:07 +0100 |
---|---|---|
committer | Eike Rathke <erack@redhat.com> | 2021-07-14 20:37:33 +0200 |
commit | b8903bc106dad036acb3d117e5c4fc955697fe02 (patch) | |
tree | 32bdf93bee8da8e876f02932968fb17e4c92c079 /desktop | |
parent | 6c94eeb92fa0ea14814175276f35a25512cc6f2b (diff) |
rhbz#1980800 allow --convert-to csv to write each sheet to a separate file
Related: tdf#135762 except only currently implemented for command line use
sample usage:
soffice --convert-to csv:"Text - txt - csv (StarCalc)":44,34,UTF8,1,,0,false,true,false,false,false,-1 sample.ods
where the new (11th!) final token ("-1") enables writing each sheet to a
new file based on the suggested target name so output in this example
is files sample-Sheet1.csv and sample-Sheet2.csv
Only -1 for 'all sheets' vs 0 for existing 'current sheet only' (which
is always sheet 0 from the command line) are currently options but the
token could be expanded in the future to select specific sheets to
export.
Change-Id: Ib99a120f1a2c8d1008a7a3c59a6b39f572fb346e
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/118850
Tested-by: Jenkins
Reviewed-by: Eike Rathke <erack@redhat.com>
Diffstat (limited to 'desktop')
-rw-r--r-- | desktop/source/app/dispatchwatcher.cxx | 26 |
1 files changed, 22 insertions, 4 deletions
diff --git a/desktop/source/app/dispatchwatcher.cxx b/desktop/source/app/dispatchwatcher.cxx index a2e79d8283ae..8541c273cc83 100644 --- a/desktop/source/app/dispatchwatcher.cxx +++ b/desktop/source/app/dispatchwatcher.cxx @@ -30,6 +30,7 @@ #include "officeipcthread.hxx" #include <rtl/ustring.hxx> #include <comphelper/processfactory.hxx> +#include <comphelper/string.hxx> #include <comphelper/synchronousdispatch.hxx> #include <com/sun/star/io/IOException.hpp> #include <com/sun/star/util/XCloseable.hpp> @@ -598,6 +599,8 @@ bool DispatchWatcher::executeDispatchRequests( const std::vector<DispatchRequest aFilter = impl_GuessFilter( aOutFile, aDocService ); } + bool bMultiFileTarget = false; + if (aFilter.isEmpty()) { std::cerr << "Error: no export filter" << std::endl; @@ -616,10 +619,23 @@ bool DispatchWatcher::executeDispatchRequests( const std::vector<DispatchRequest conversionProperties[1].Name = "FilterName"; if( 0 < nFilterOptionsIndex ) { - conversionProperties[1].Value <<= aFilter.copy(0, nFilterOptionsIndex); + OUString sFilterName = aFilter.copy(0, nFilterOptionsIndex); + OUString sFilterOptions = aFilter.copy(nFilterOptionsIndex + 1); + + if (sFilterName == "Text - txt - csv (StarCalc)") + { + sal_Int32 nIdx(0); + // If the 11th token token is '-1' then we export a file + // per sheet where the file name is based on the suggested + // output filename concatenated with the sheet name, so adjust + // the output and overwrite messages + bMultiFileTarget = sFilterOptions.getToken(11, ',', nIdx) == "-1"; + } + + conversionProperties[1].Value <<= sFilterName; conversionProperties[2].Name = "FilterOptions"; - conversionProperties[2].Value <<= aFilter.copy(nFilterOptionsIndex + 1); + conversionProperties[2].Value <<= sFilterOptions; } else { @@ -639,9 +655,11 @@ bool DispatchWatcher::executeDispatchRequests( const std::vector<DispatchRequest OString aTargetURL8 = OUStringToOString(aTempName, osl_getThreadTextEncoding()); if (aDispatchRequest.aRequestType != REQUEST_CAT) { - std::cout << "convert " << aSource8 << " -> " << aTargetURL8; + std::cout << "convert " << aSource8; + if (!bMultiFileTarget) + std::cout << " -> " << aTargetURL8; std::cout << " using filter : " << OUStringToOString(aFilter, osl_getThreadTextEncoding()) << std::endl; - if (FStatHelper::IsDocument(aOutFile)) + if (!bMultiFileTarget && FStatHelper::IsDocument(aOutFile)) std::cout << "Overwriting: " << OUStringToOString(aTempName, osl_getThreadTextEncoding()) << std::endl ; } try |