Kaydet (Commit) 513eadd4 authored tarafından Eike Rathke's avatar Eike Rathke

resolved fdo#53103 actually use the external data filter options

ScDocShell::ConvertFrom() queries the filter options from the SfxItemSet
at SfxMedium, which is fine when loading the data into the table
selector first, but the final load via ScAreaLink created a bare
SfxMedium without options set. Do so.

Additionally it may now even work that ScDocShell sets options at
SfxMedium, which the ScAreaLink code prepared for but previously the
SfxMedium did not have an SfxItemSet.

Change-Id: I45d6a24906dc3ba41654b8c0951dd84939d8af5e
üst 2fde7645
......@@ -72,6 +72,7 @@ public:
class ScDocument;
class SfxMedium;
class SfxFilter;
class SC_DLLPUBLIC ScDocumentLoader
{
......@@ -92,7 +93,12 @@ public:
void ReleaseDocRef(); // without calling DoClose
static OUString GetOptions( SfxMedium& rMedium );
/** Create SfxMedium for stream read with SfxFilter and filter options set
at the medium's SfxItemSet.
*/
static SfxMedium* CreateMedium( const OUString& rFileName, const SfxFilter* pFilter, const OUString& rOptions );
static OUString GetOptions( SfxMedium& rMedium );
/** Returns the filter name and options from a file name.
@param bWithContent
......
......@@ -253,7 +253,7 @@ sal_Bool ScAreaLink::Refresh( const OUString& rNewFile, const OUString& rNewFilt
if ( rNewFilter != aFilterName )
aOptions = "";
SfxMedium* pMed = new SfxMedium(aNewUrl, STREAM_STD_READ, pFilter);
SfxMedium* pMed = ScDocumentLoader::CreateMedium( aNewUrl, pFilter, aOptions);
// aRef->DoClose() will be closed explicitly, but it is still more safe to use SfxObjectShellLock here
ScDocShell* pSrcShell = new ScDocShell(SFX_CREATE_MODE_INTERNAL);
......
......@@ -506,6 +506,17 @@ void ScDocumentLoader::RemoveAppPrefix( OUString& rFilterName )
rFilterName = rFilterName.copy( aAppPrefix.getLength());
}
SfxMedium* ScDocumentLoader::CreateMedium( const OUString& rFileName, const SfxFilter* pFilter,
const OUString& rOptions )
{
// Always create SfxItemSet so ScDocShell can set options.
SfxItemSet* pSet = new SfxAllItemSet( SFX_APP()->GetPool() );
if ( !rOptions.isEmpty() )
pSet->Put( SfxStringItem( SID_FILE_FILTEROPTIONS, rOptions ) );
return new SfxMedium( rFileName, STREAM_STD_READ, pFilter, pSet );
}
ScDocumentLoader::ScDocumentLoader( const OUString& rFileName,
OUString& rFilterName, OUString& rOptions,
sal_uInt32 nRekCnt, bool bWithInteraction ) :
......@@ -517,12 +528,7 @@ ScDocumentLoader::ScDocumentLoader( const OUString& rFileName,
const SfxFilter* pFilter = ScDocShell::Factory().GetFilterContainer()->GetFilter4FilterName( rFilterName );
// ItemSet immer anlegen, damit die DocShell die Optionen setzen kann
SfxItemSet* pSet = new SfxAllItemSet( SFX_APP()->GetPool() );
if ( !rOptions.isEmpty() )
pSet->Put( SfxStringItem( SID_FILE_FILTEROPTIONS, rOptions ) );
pMedium = new SfxMedium( rFileName, STREAM_STD_READ, pFilter, pSet );
pMedium = CreateMedium( rFileName, pFilter, rOptions);
if ( pMedium->GetError() != ERRCODE_NONE )
return ;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment