tdf#114200 : added 'Trim space' feature in 'Text Import'
made a checkbox to Trim extra white spaces from both ends while using seperators in 'Text Imort' Change-Id: Ib05d9b17525e3ebec380ec8b7eebfa35fff78f01 Reviewed-on: https://gerrit.libreoffice.org/46177 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Manuj Vashist <manujvashist@gmail.com> Reviewed-by: Heiko Tietze <tietze.heiko@gmail.com> Tested-by: Heiko Tietze <tietze.heiko@gmail.com>
This commit is contained in:
committed by
Heiko Tietze
parent
32b2a1831d
commit
d999b55e28
@@ -1088,6 +1088,13 @@
|
||||
</info>
|
||||
<value>false</value>
|
||||
</prop>
|
||||
<prop oor:name="RemoveSpace" oor:type="xs:boolean" oor:nillable="false">
|
||||
<info>
|
||||
<desc>If true, leading and trailing white spaces are trimmed off.</desc>
|
||||
<label>RemoveSpace</label>
|
||||
</info>
|
||||
<value>false</value>
|
||||
</prop>
|
||||
<prop oor:name="QuotedFieldAsText" oor:type="xs:boolean" oor:nillable="false">
|
||||
<info>
|
||||
<desc>If true, quoted field is always imported as text with no exception.</desc>
|
||||
@@ -1163,6 +1170,13 @@
|
||||
</info>
|
||||
<value>false</value>
|
||||
</prop>
|
||||
<prop oor:name="RemoveSpace" oor:type="xs:boolean" oor:nillable="false">
|
||||
<info>
|
||||
<desc>If true, leading and trailing white spaces are trimmed off.</desc>
|
||||
<label>RemoveSpace</label>
|
||||
</info>
|
||||
<value>false</value>
|
||||
</prop>
|
||||
<prop oor:name="QuotedFieldAsText" oor:type="xs:boolean" oor:nillable="false">
|
||||
<info>
|
||||
<desc>If true, quoted field is always imported as text with no exception.</desc>
|
||||
@@ -1245,6 +1259,13 @@
|
||||
</info>
|
||||
<value>false</value>
|
||||
</prop>
|
||||
<prop oor:name="RemoveSpace" oor:type="xs:boolean" oor:nillable="false">
|
||||
<info>
|
||||
<desc>If true, leading and trailing white spaces are trimmed off.</desc>
|
||||
<label>RemoveSpace</label>
|
||||
</info>
|
||||
<value>false</value>
|
||||
</prop>
|
||||
<prop oor:name="Separators" oor:type="xs:string" oor:nillable="false">
|
||||
<info>
|
||||
<desc>List of Separators - as a String</desc>
|
||||
|
@@ -29,9 +29,12 @@ ScAsciiOptions::ScAsciiOptions() :
|
||||
bFixedLen ( false ),
|
||||
aFieldSeps ( OUString(';') ),
|
||||
bMergeFieldSeps ( false ),
|
||||
bRemoveSpace ( false ),
|
||||
bQuotedFieldAsText(false),
|
||||
bDetectSpecialNumber(false),
|
||||
bSkipEmptyCells(false),
|
||||
bSaveAsShown(true),
|
||||
bSaveFormulas(false),
|
||||
cTextSep ( cDefaultTextSep ),
|
||||
eCharSet ( osl_getThreadTextEncoding() ),
|
||||
eLang ( LANGUAGE_SYSTEM ),
|
||||
@@ -74,7 +77,12 @@ ScAsciiOptions& ScAsciiOptions::operator=( const ScAsciiOptions& rCpy )
|
||||
bFixedLen = rCpy.bFixedLen;
|
||||
aFieldSeps = rCpy.aFieldSeps;
|
||||
bMergeFieldSeps = rCpy.bMergeFieldSeps;
|
||||
bRemoveSpace = rCpy.bRemoveSpace;
|
||||
bQuotedFieldAsText = rCpy.bQuotedFieldAsText;
|
||||
bDetectSpecialNumber = rCpy.bDetectSpecialNumber;
|
||||
bSkipEmptyCells = rCpy.bSkipEmptyCells;
|
||||
bSaveAsShown = rCpy.bSaveAsShown;
|
||||
bSaveFormulas = rCpy.bSaveFormulas;
|
||||
cTextSep = rCpy.cTextSep;
|
||||
eCharSet = rCpy.eCharSet;
|
||||
bCharSetSystem = rCpy.bCharSetSystem;
|
||||
@@ -180,15 +188,34 @@ void ScAsciiOptions::ReadFromString( const OUString& rString )
|
||||
else
|
||||
bDetectSpecialNumber = true; // default of versions that didn't add the parameter
|
||||
|
||||
// 9th token is used for "Save as shown" in export options
|
||||
// 10th token is used for "Save cell formulas" in export options
|
||||
// Token 8: used for "Save as shown" in export options
|
||||
if ( nPos >= 0 )
|
||||
{
|
||||
bSaveAsShown = rString.getToken(0, ',', nPos) == "true";
|
||||
}
|
||||
else
|
||||
bSaveAsShown = true; //default value
|
||||
// Token 9: used for "Save cell formulas" in export options
|
||||
if ( nPos >= 0 )
|
||||
{
|
||||
bSaveFormulas = rString.getToken(0, ',', nPos) == "true";
|
||||
}
|
||||
else
|
||||
bSaveFormulas = false;
|
||||
// Token 10: Boolean for Trim spaces.
|
||||
if (nPos >= 0)
|
||||
{
|
||||
bRemoveSpace = rString.getToken(0, ',', nPos) == "true";
|
||||
}
|
||||
else
|
||||
bRemoveSpace = false;
|
||||
}
|
||||
|
||||
OUString ScAsciiOptions::WriteToString() const
|
||||
{
|
||||
OUString aOutStr;
|
||||
|
||||
// Field separator.
|
||||
// Token 0: Field separator.
|
||||
if ( bFixedLen )
|
||||
aOutStr += pStrFix;
|
||||
else if ( aFieldSeps.isEmpty() )
|
||||
@@ -209,19 +236,19 @@ OUString ScAsciiOptions::WriteToString() const
|
||||
}
|
||||
}
|
||||
|
||||
// Text delimiter.
|
||||
// Token 1: Text Quote character.
|
||||
aOutStr += "," + OUString::number(cTextSep) + ",";
|
||||
|
||||
// Text encoding.
|
||||
//Token 2: Text encoding.
|
||||
if ( bCharSetSystem ) // force "SYSTEM"
|
||||
aOutStr += ScGlobal::GetCharsetString( RTL_TEXTENCODING_DONTKNOW );
|
||||
else
|
||||
aOutStr += ScGlobal::GetCharsetString( eCharSet );
|
||||
|
||||
// Number of start row.
|
||||
//Token 3: Number of start row.
|
||||
aOutStr += "," + OUString::number(nStartRow) + ",";
|
||||
|
||||
// Column info.
|
||||
//Token 4: Column info.
|
||||
for (size_t nInfo=0; nInfo<mvColStart.size(); nInfo++)
|
||||
{
|
||||
if (nInfo)
|
||||
@@ -235,16 +262,18 @@ OUString ScAsciiOptions::WriteToString() const
|
||||
// so new options must be added at the end, to remain compatible
|
||||
|
||||
aOutStr += "," +
|
||||
// Language
|
||||
//Token 5: Language
|
||||
OUString::number(static_cast<sal_uInt16>(eLang)) + "," +
|
||||
// Import quoted field as text.
|
||||
//Token 6: Import quoted field as text.
|
||||
OUString::boolean( bQuotedFieldAsText ) + "," +
|
||||
// Detect special numbers.
|
||||
OUString::boolean( bDetectSpecialNumber );
|
||||
|
||||
// 9th token is used for "Save as shown" in export options
|
||||
// 10th token is used for "Save cell formulas" in export options
|
||||
|
||||
//Token 7: Detect special numbers.
|
||||
OUString::boolean( bDetectSpecialNumber ) + "," +
|
||||
// Token 8: used for "Save as shown" in export options
|
||||
OUString::boolean( bSaveAsShown ) + "," +
|
||||
// Token 9: used for "Save cell formulas" in export options
|
||||
OUString::boolean( bSaveFormulas ) + "," +
|
||||
//Token 10: Trim Space
|
||||
OUString::boolean( bRemoveSpace );
|
||||
return aOutStr;
|
||||
}
|
||||
|
||||
|
@@ -734,7 +734,7 @@ void ScCsvGrid::DoSelectAction( sal_uInt32 nColIndex, sal_uInt16 nModifier )
|
||||
|
||||
void ScCsvGrid::ImplSetTextLineSep(
|
||||
sal_Int32 nLine, const OUString& rTextLine,
|
||||
const OUString& rSepChars, sal_Unicode cTextSep, bool bMergeSep )
|
||||
const OUString& rSepChars, sal_Unicode cTextSep, bool bMergeSep, bool bRemoveSpace )
|
||||
{
|
||||
if( nLine < GetFirstVisLine() ) return;
|
||||
|
||||
@@ -756,7 +756,7 @@ void ScCsvGrid::ImplSetTextLineSep(
|
||||
bool bIsQuoted = false;
|
||||
bool bOverflowCell = false;
|
||||
pChar = ScImportExport::ScanNextFieldFromString( pChar, aCellText,
|
||||
cTextSep, pSepChars, bMergeSep, bIsQuoted, bOverflowCell );
|
||||
cTextSep, pSepChars, bMergeSep, bIsQuoted, bOverflowCell, bRemoveSpace );
|
||||
/* TODO: signal overflow somewhere in UI */
|
||||
|
||||
// update column width
|
||||
|
@@ -200,7 +200,7 @@ void ScCsvTableBox::MakePosVisible( sal_Int32 nPos )
|
||||
|
||||
void ScCsvTableBox::SetUniStrings(
|
||||
const OUString* pTextLines, const OUString& rSepChars,
|
||||
sal_Unicode cTextSep, bool bMergeSep )
|
||||
sal_Unicode cTextSep, bool bMergeSep, bool bRemoveSpace )
|
||||
{
|
||||
// assuming that pTextLines is a string array with size CSV_PREVIEW_LINES
|
||||
// -> will be dynamic sometime
|
||||
@@ -212,7 +212,7 @@ void ScCsvTableBox::SetUniStrings(
|
||||
if( mbFixedMode )
|
||||
maGrid->ImplSetTextLineFix( nLine, *pString );
|
||||
else
|
||||
maGrid->ImplSetTextLineSep( nLine, *pString, rSepChars, cTextSep, bMergeSep );
|
||||
maGrid->ImplSetTextLineSep( nLine, *pString, rSepChars, cTextSep, bMergeSep, bRemoveSpace );
|
||||
}
|
||||
EnableRepaint();
|
||||
}
|
||||
|
@@ -42,6 +42,7 @@ ScImportOptions::ScImportOptions( const OUString& rStr )
|
||||
bSaveAsShown = true; // "true" if not in string (after CSV import)
|
||||
bQuoteAllText = false;
|
||||
bSaveFormulas = false;
|
||||
bRemoveSpace = false;
|
||||
sal_Int32 nTokenCount = comphelper::string::getTokenCount(rStr, ',');
|
||||
if ( nTokenCount >= 3 )
|
||||
{
|
||||
@@ -70,6 +71,8 @@ ScImportOptions::ScImportOptions( const OUString& rStr )
|
||||
bSaveAsShown = rStr.getToken(8, ',') == "true";
|
||||
if ( nTokenCount >= 10 )
|
||||
bSaveFormulas = rStr.getToken(9, ',') == "true";
|
||||
if ( nTokenCount >= 11 )
|
||||
bRemoveSpace = rStr.getToken(10, ',') == "true";
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -89,7 +92,9 @@ OUString ScImportOptions::BuildString() const
|
||||
",true," + // "detect special numbers"
|
||||
OUString::boolean( bSaveAsShown ) + // "save as shown": not in ScAsciiOptions
|
||||
"," +
|
||||
OUString::boolean( bSaveFormulas ); // "save formulas": not in ScAsciiOptions
|
||||
OUString::boolean( bSaveFormulas ) + // "save formulas": not in ScAsciiOptions
|
||||
"," +
|
||||
OUString::boolean( bRemoveSpace ); // same as "Remove space" in ScAsciiOptions
|
||||
|
||||
return aResult;
|
||||
}
|
||||
|
@@ -58,6 +58,7 @@ enum CSVImportOptionsIndex
|
||||
CSVIO_Separators,
|
||||
CSVIO_TextSeparators,
|
||||
CSVIO_FixedWidth,
|
||||
CSVIO_RemoveSpace,
|
||||
CSVIO_FromRow,
|
||||
CSVIO_Text2ColSkipEmptyCells = CSVIO_FromRow,
|
||||
CSVIO_CharSet,
|
||||
@@ -73,6 +74,7 @@ const ::std::vector<OUString> CSVImportOptionNames =
|
||||
"Separators",
|
||||
"TextSeparators",
|
||||
"FixedWidth",
|
||||
"RemoveSpace",
|
||||
"FromRow",
|
||||
"CharSet",
|
||||
"QuotedFieldAsText",
|
||||
@@ -144,16 +146,16 @@ void lcl_CreatePropertiesNames ( OUString& rSepPath, Sequence<OUString>& rNames,
|
||||
{
|
||||
case SC_IMPORTFILE:
|
||||
rSepPath = aSep_Path;
|
||||
nProperties = 9;
|
||||
nProperties = 10;
|
||||
break;
|
||||
case SC_PASTETEXT:
|
||||
rSepPath = aSep_Path_Clpbrd;
|
||||
nProperties = 10;
|
||||
nProperties = 11;
|
||||
break;
|
||||
case SC_TEXTTOCOLUMNS:
|
||||
default:
|
||||
rSepPath = aSep_Path_Text2Col;
|
||||
nProperties = 5;
|
||||
nProperties = 6;
|
||||
break;
|
||||
}
|
||||
rNames.realloc( nProperties );
|
||||
@@ -162,6 +164,7 @@ void lcl_CreatePropertiesNames ( OUString& rSepPath, Sequence<OUString>& rNames,
|
||||
pNames[ CSVIO_Separators ] = CSVImportOptionNames[ CSVIO_Separators ];
|
||||
pNames[ CSVIO_TextSeparators ] = CSVImportOptionNames[ CSVIO_TextSeparators ];
|
||||
pNames[ CSVIO_FixedWidth ] = CSVImportOptionNames[ CSVIO_FixedWidth ];
|
||||
pNames[ CSVIO_RemoveSpace ] = CSVImportOptionNames[ CSVIO_RemoveSpace ];
|
||||
if (eCall != SC_TEXTTOCOLUMNS)
|
||||
{
|
||||
pNames[ CSVIO_FromRow ] = CSVImportOptionNames[ CSVIO_FromRow ];
|
||||
@@ -181,7 +184,7 @@ void lcl_CreatePropertiesNames ( OUString& rSepPath, Sequence<OUString>& rNames,
|
||||
static void lcl_LoadSeparators( OUString& rFieldSeparators, OUString& rTextSeparators,
|
||||
bool& rMergeDelimiters, bool& rQuotedAsText, bool& rDetectSpecialNum,
|
||||
bool& rFixedWidth, sal_Int32& rFromRow, sal_Int32& rCharSet,
|
||||
sal_Int32& rLanguage, bool& rSkipEmptyCells, ScImportAsciiCall eCall )
|
||||
sal_Int32& rLanguage, bool& rSkipEmptyCells, bool& rRemoveSpace, ScImportAsciiCall eCall )
|
||||
{
|
||||
Sequence<Any>aValues;
|
||||
const Any *pProperties;
|
||||
@@ -195,6 +198,9 @@ static void lcl_LoadSeparators( OUString& rFieldSeparators, OUString& rTextSepar
|
||||
if( pProperties[ CSVIO_MergeDelimiters ].hasValue() )
|
||||
rMergeDelimiters = ScUnoHelpFunctions::GetBoolFromAny( pProperties[ CSVIO_MergeDelimiters ] );
|
||||
|
||||
if( pProperties[ CSVIO_RemoveSpace ].hasValue() )
|
||||
rRemoveSpace = ScUnoHelpFunctions::GetBoolFromAny( pProperties[ CSVIO_RemoveSpace ] );
|
||||
|
||||
if( pProperties[ CSVIO_Separators ].hasValue() )
|
||||
pProperties[ CSVIO_Separators ] >>= rFieldSeparators;
|
||||
|
||||
@@ -233,7 +239,7 @@ static void lcl_LoadSeparators( OUString& rFieldSeparators, OUString& rTextSepar
|
||||
static void lcl_SaveSeparators(
|
||||
const OUString& rSeparators, const OUString& rTxtSep, bool bMergeDelimiters, bool bQuotedAsText,
|
||||
bool bDetectSpecialNum, bool bFixedWidth, sal_Int32 nFromRow,
|
||||
sal_Int32 nCharSet, sal_Int32 nLanguage, bool bSkipEmptyCells, ScImportAsciiCall eCall )
|
||||
sal_Int32 nCharSet, sal_Int32 nLanguage, bool bSkipEmptyCells, bool bRemoveSpace, ScImportAsciiCall eCall )
|
||||
{
|
||||
OUString sFieldSeparators = rSeparators;
|
||||
OUString sTextSeparators = rTxtSep;
|
||||
@@ -247,6 +253,7 @@ static void lcl_SaveSeparators(
|
||||
pProperties = aValues.getArray();
|
||||
|
||||
pProperties[ CSVIO_MergeDelimiters ] <<= bMergeDelimiters;
|
||||
pProperties[ CSVIO_RemoveSpace ] <<= bRemoveSpace;
|
||||
pProperties[ CSVIO_Separators ] <<= sFieldSeparators;
|
||||
pProperties[ CSVIO_TextSeparators ] <<= sTextSeparators;
|
||||
pProperties[ CSVIO_FixedWidth ] <<= bFixedWidth;
|
||||
@@ -298,6 +305,7 @@ ScImportAsciiDlg::ScImportAsciiDlg( vcl::Window* pParent, const OUString& aDatNa
|
||||
get(pCkbSemicolon, "semicolon");
|
||||
get(pCkbComma, "comma");
|
||||
get(pCkbSpace, "space");
|
||||
get(pCkbRemoveSpace, "removespace");
|
||||
get(pCkbOther, "other");
|
||||
get(pEdOther, "inputother");
|
||||
get(pCkbAsOnce, "mergedelimiters");
|
||||
@@ -335,12 +343,13 @@ ScImportAsciiDlg::ScImportAsciiDlg( vcl::Window* pParent, const OUString& aDatNa
|
||||
bool bQuotedFieldAsText = false;
|
||||
bool bDetectSpecialNum = true;
|
||||
bool bSkipEmptyCells = true;
|
||||
bool bRemoveSpace = false;
|
||||
sal_Int32 nFromRow = 1;
|
||||
sal_Int32 nCharSet = -1;
|
||||
sal_Int32 nLanguage = 0;
|
||||
lcl_LoadSeparators (sFieldSeparators, sTextSeparators, bMergeDelimiters,
|
||||
bQuotedFieldAsText, bDetectSpecialNum, bFixedWidth, nFromRow,
|
||||
nCharSet, nLanguage, bSkipEmptyCells, meCall);
|
||||
nCharSet, nLanguage, bSkipEmptyCells, bRemoveSpace, meCall);
|
||||
// load from saved settings
|
||||
maFieldSeparators = sFieldSeparators;
|
||||
|
||||
@@ -348,6 +357,8 @@ ScImportAsciiDlg::ScImportAsciiDlg( vcl::Window* pParent, const OUString& aDatNa
|
||||
pCkbAsOnce->Check();
|
||||
if (bQuotedFieldAsText)
|
||||
pCkbQuotedAsText->Check();
|
||||
if (bRemoveSpace)
|
||||
pCkbRemoveSpace->Check();
|
||||
if (bDetectSpecialNum)
|
||||
pCkbDetectNumber->Check();
|
||||
if (bSkipEmptyCells)
|
||||
@@ -427,6 +438,7 @@ ScImportAsciiDlg::ScImportAsciiDlg( vcl::Window* pParent, const OUString& aDatNa
|
||||
pCkbDetectNumber->SetClickHdl( aSeparatorClickHdl );
|
||||
pCkbSkipEmptyCells->SetClickHdl( aSeparatorClickHdl );
|
||||
pCkbSpace->SetClickHdl( aSeparatorClickHdl );
|
||||
pCkbRemoveSpace->SetClickHdl( aSeparatorClickHdl );
|
||||
pCkbOther->SetClickHdl( aSeparatorClickHdl );
|
||||
pEdOther->SetModifyHdl( aSeparatorHdl );
|
||||
|
||||
@@ -532,6 +544,7 @@ void ScImportAsciiDlg::dispose()
|
||||
pCkbSemicolon.clear();
|
||||
pCkbComma.clear();
|
||||
pCkbSpace.clear();
|
||||
pCkbRemoveSpace.clear();
|
||||
pCkbOther.clear();
|
||||
pEdOther.clear();
|
||||
pCkbAsOnce.clear();
|
||||
@@ -622,6 +635,7 @@ void ScImportAsciiDlg::GetOptions( ScAsciiOptions& rOpt )
|
||||
{
|
||||
rOpt.SetFieldSeps( GetSeparators() );
|
||||
rOpt.SetMergeSeps( pCkbAsOnce->IsChecked() );
|
||||
rOpt.SetRemoveSpace( pCkbRemoveSpace->IsChecked() );
|
||||
rOpt.SetTextSep( lcl_CharFromCombo( *pCbTextSep, aTextSepList ) );
|
||||
}
|
||||
|
||||
@@ -638,7 +652,7 @@ void ScImportAsciiDlg::SaveParameters()
|
||||
static_cast<sal_Int32>(pNfRow->GetValue()),
|
||||
pLbCharSet->GetSelectedEntryPos(),
|
||||
static_cast<sal_uInt16>(pLbCustomLang->GetSelectLanguage()),
|
||||
pCkbSkipEmptyCells->IsChecked(), meCall );
|
||||
pCkbSkipEmptyCells->IsChecked(), pCkbRemoveSpace->IsChecked(), meCall );
|
||||
}
|
||||
|
||||
void ScImportAsciiDlg::SetSeparators()
|
||||
@@ -693,6 +707,7 @@ void ScImportAsciiDlg::SetupSeparatorCtrls()
|
||||
pCkbSemicolon->Enable( bEnable );
|
||||
pCkbComma->Enable( bEnable );
|
||||
pCkbSpace->Enable( bEnable );
|
||||
pCkbRemoveSpace->Enable( bEnable );
|
||||
pCkbOther->Enable( bEnable );
|
||||
pEdOther->Enable( bEnable );
|
||||
pCkbAsOnce->Enable( bEnable );
|
||||
@@ -811,7 +826,8 @@ IMPL_LINK_NOARG(ScImportAsciiDlg, UpdateTextHdl, ScCsvTableBox&, void)
|
||||
|
||||
mpTableBox->Execute( CSVCMD_SETLINECOUNT, mnRowPosCount);
|
||||
bool bMergeSep = pCkbAsOnce->IsChecked();
|
||||
mpTableBox->SetUniStrings( maPreviewLine, maFieldSeparators, mcTextSep, bMergeSep);
|
||||
bool bRemoveSpace = pCkbRemoveSpace->IsChecked();
|
||||
mpTableBox->SetUniStrings( maPreviewLine, maFieldSeparators, mcTextSep, bMergeSep, bRemoveSpace );
|
||||
}
|
||||
|
||||
IMPL_LINK( ScImportAsciiDlg, ColTypeHdl, ScCsvTableBox&, rTableBox, void )
|
||||
|
@@ -1288,6 +1288,7 @@ bool ScImportExport::ExtText2Doc( SvStream& rStrm )
|
||||
const OUString& rSeps = pExtOptions->GetFieldSeps();
|
||||
const sal_Unicode* pSeps = rSeps.getStr();
|
||||
bool bMerge = pExtOptions->IsMergeSeps();
|
||||
bool bRemoveSpace = pExtOptions->IsRemoveSpace();
|
||||
sal_uInt16 nInfoCount = pExtOptions->GetInfoCount();
|
||||
const sal_Int32* pColStart = pExtOptions->GetColStart();
|
||||
const sal_uInt8* pColFormat = pExtOptions->GetColFormat();
|
||||
@@ -1406,7 +1407,7 @@ bool ScImportExport::ExtText2Doc( SvStream& rStrm )
|
||||
{
|
||||
bool bIsQuoted = false;
|
||||
p = ScImportExport::ScanNextFieldFromString( p, aCell,
|
||||
cStr, pSeps, bMerge, bIsQuoted, bOverflowCell );
|
||||
cStr, pSeps, bMerge, bIsQuoted, bOverflowCell, bRemoveSpace );
|
||||
|
||||
sal_uInt8 nFmt = SC_COL_STANDARD;
|
||||
for ( i=nInfoStart; i<nInfoCount; i++ )
|
||||
@@ -1514,7 +1515,7 @@ void ScImportExport::EmbeddedNullTreatment( OUString & rStr )
|
||||
|
||||
const sal_Unicode* ScImportExport::ScanNextFieldFromString( const sal_Unicode* p,
|
||||
OUString& rField, sal_Unicode cStr, const sal_Unicode* pSeps, bool bMergeSeps, bool& rbIsQuoted,
|
||||
bool& rbOverflowCell )
|
||||
bool& rbOverflowCell, bool bRemoveSpace )
|
||||
{
|
||||
rbIsQuoted = false;
|
||||
rField.clear();
|
||||
@@ -1541,7 +1542,13 @@ const sal_Unicode* ScImportExport::ScanNextFieldFromString( const sal_Unicode* p
|
||||
// this field.
|
||||
if (p > p1)
|
||||
{
|
||||
if (!lcl_appendLineData( rField, p1, p))
|
||||
const sal_Unicode* ptrim_f = p;
|
||||
if ( bRemoveSpace )
|
||||
{
|
||||
while ( ptrim_f > p1 && ( *(ptrim_f - 1) == cBlank ) )
|
||||
--ptrim_f;
|
||||
}
|
||||
if (!lcl_appendLineData( rField, p1, ptrim_f))
|
||||
rbOverflowCell = true;
|
||||
}
|
||||
if( *p )
|
||||
@@ -1552,7 +1559,16 @@ const sal_Unicode* ScImportExport::ScanNextFieldFromString( const sal_Unicode* p
|
||||
const sal_Unicode* p0 = p;
|
||||
while ( *p && !ScGlobal::UnicodeStrChr( pSeps, *p ) )
|
||||
p++;
|
||||
if (!lcl_appendLineData( rField, p0, p))
|
||||
const sal_Unicode* ptrim_i = p0;
|
||||
const sal_Unicode* ptrim_f = p; // [ptrim_i,ptrim_f) is cell data after trimming
|
||||
if ( bRemoveSpace )
|
||||
{
|
||||
while ( *ptrim_i == cBlank )
|
||||
++ptrim_i;
|
||||
while ( ptrim_f > ptrim_i && ( *(ptrim_f - 1) == cBlank ) )
|
||||
--ptrim_f;
|
||||
}
|
||||
if (!lcl_appendLineData( rField, ptrim_i, ptrim_f))
|
||||
rbOverflowCell = true;
|
||||
if( *p )
|
||||
p++;
|
||||
|
@@ -31,9 +31,12 @@ private:
|
||||
bool bFixedLen;
|
||||
OUString aFieldSeps;
|
||||
bool bMergeFieldSeps;
|
||||
bool bRemoveSpace;
|
||||
bool bQuotedFieldAsText;
|
||||
bool bDetectSpecialNumber;
|
||||
bool bSkipEmptyCells;
|
||||
bool bSaveAsShown;
|
||||
bool bSaveFormulas;
|
||||
sal_Unicode cTextSep;
|
||||
rtl_TextEncoding eCharSet;
|
||||
LanguageType eLang;
|
||||
@@ -56,6 +59,7 @@ public:
|
||||
rtl_TextEncoding GetCharSet() const { return eCharSet; }
|
||||
const OUString& GetFieldSeps() const { return aFieldSeps; }
|
||||
bool IsMergeSeps() const { return bMergeFieldSeps; }
|
||||
bool IsRemoveSpace() const { return bRemoveSpace; }
|
||||
bool IsQuotedAsText() const { return bQuotedFieldAsText; }
|
||||
bool IsDetectSpecialNumber() const { return bDetectSpecialNumber; }
|
||||
bool IsSkipEmptyCells() const { return bSkipEmptyCells; }
|
||||
@@ -72,6 +76,7 @@ public:
|
||||
void SetFixedLen( bool bSet ) { bFixedLen = bSet; }
|
||||
void SetFieldSeps( const OUString& rStr ) { aFieldSeps = rStr; }
|
||||
void SetMergeSeps( bool bSet ) { bMergeFieldSeps = bSet; }
|
||||
void SetRemoveSpace( bool bSet ) { bRemoveSpace = bSet; }
|
||||
void SetQuotedAsText(bool bSet) { bQuotedFieldAsText = bSet; }
|
||||
void SetDetectSpecialNumber(bool bSet) { bDetectSpecialNumber = bSet; }
|
||||
void SetSkipEmptyCells(bool bSet) { bSkipEmptyCells = bSet; }
|
||||
|
@@ -234,7 +234,7 @@ public:
|
||||
/** Fills all cells of a line with the passed text (separators mode). */
|
||||
void ImplSetTextLineSep(
|
||||
sal_Int32 nLine, const OUString& rTextLine,
|
||||
const OUString& rSepChars, sal_Unicode cTextSep, bool bMergeSep );
|
||||
const OUString& rSepChars, sal_Unicode cTextSep, bool bMergeSep, bool bRemoveSpace = false );
|
||||
/** Fills all cells of a line with the passed text (fixed width mode). */
|
||||
void ImplSetTextLineFix( sal_Int32 nLine, const OUString& rTextLine );
|
||||
|
||||
|
@@ -101,7 +101,7 @@ public:
|
||||
/** Fills all cells of all lines with the passed texts (Unicode strings). */
|
||||
void SetUniStrings(
|
||||
const OUString* pTextLines, const OUString& rSepChars,
|
||||
sal_Unicode cTextSep, bool bMergeSep );
|
||||
sal_Unicode cTextSep, bool bMergeSep, bool bRemoveSpace = false );
|
||||
|
||||
// column settings --------------------------------------------------------
|
||||
public:
|
||||
|
@@ -49,6 +49,7 @@ public:
|
||||
bSaveAsShown = rCpy.bSaveAsShown;
|
||||
bQuoteAllText = rCpy.bQuoteAllText;
|
||||
bSaveFormulas = rCpy.bSaveFormulas;
|
||||
bRemoveSpace = rCpy.bRemoveSpace;
|
||||
return *this;
|
||||
}
|
||||
|
||||
@@ -64,6 +65,7 @@ public:
|
||||
bool bSaveAsShown;
|
||||
bool bQuoteAllText;
|
||||
bool bSaveFormulas;
|
||||
bool bRemoveSpace;
|
||||
};
|
||||
|
||||
#endif // INCLUDED_SC_SOURCE_UI_INC_IMOPTDLG_HXX
|
||||
|
@@ -105,7 +105,7 @@ public:
|
||||
static bool IsFormatSupported( SotClipboardFormatId nFormat );
|
||||
static const sal_Unicode* ScanNextFieldFromString( const sal_Unicode* p,
|
||||
OUString& rField, sal_Unicode cStr, const sal_Unicode* pSeps,
|
||||
bool bMergeSeps, bool& rbIsQuoted, bool& rbOverflowCell );
|
||||
bool bMergeSeps, bool& rbIsQuoted, bool& rbOverflowCell, bool bRemoveSpace = false );
|
||||
static void WriteUnicodeOrByteString( SvStream& rStrm, const OUString& rString, bool bZero = false );
|
||||
static void WriteUnicodeOrByteEndl( SvStream& rStrm );
|
||||
|
||||
|
@@ -63,6 +63,7 @@ class ScImportAsciiDlg : public ModalDialog
|
||||
VclPtr<CheckBox> pCkbTab;
|
||||
VclPtr<CheckBox> pCkbSemicolon;
|
||||
VclPtr<CheckBox> pCkbComma;
|
||||
VclPtr<CheckBox> pCkbRemoveSpace;
|
||||
VclPtr<CheckBox> pCkbSpace;
|
||||
VclPtr<CheckBox> pCkbOther;
|
||||
VclPtr<Edit> pEdOther;
|
||||
|
@@ -315,6 +315,24 @@
|
||||
<property name="width">4</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkCheckButton" id="removespace">
|
||||
<property name="label" translatable="yes" context="textimportcsv|removespace">Tr_im spaces</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="receives_default">False</property>
|
||||
<property name="halign">start</property>
|
||||
<property name="hexpand">True</property>
|
||||
<property name="use_underline">True</property>
|
||||
<property name="xalign">0</property>
|
||||
<property name="draw_indicator">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">2</property>
|
||||
<property name="top_attach">1</property>
|
||||
<property name="width">4</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkCheckButton" id="comma">
|
||||
<property name="label" translatable="yes" context="textimportcsv|comma">_Comma</property>
|
||||
|
Reference in New Issue
Block a user