summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--officecfg/registry/schema/org/openoffice/Office/Calc.xcs14
-rw-r--r--sc/source/ui/dbgui/scuiasciiopt.cxx235
-rw-r--r--sc/source/ui/docshell/impex.cxx21
-rw-r--r--sc/source/ui/inc/asciiopt.hxx3
-rw-r--r--sc/source/ui/inc/scuiasciiopt.hxx1
-rw-r--r--sc/uiconfig/scalc/ui/textimportcsv.ui18
6 files changed, 185 insertions, 107 deletions
diff --git a/officecfg/registry/schema/org/openoffice/Office/Calc.xcs b/officecfg/registry/schema/org/openoffice/Office/Calc.xcs
index 42d535a6a795..2d5e7a8696e0 100644
--- a/officecfg/registry/schema/org/openoffice/Office/Calc.xcs
+++ b/officecfg/registry/schema/org/openoffice/Office/Calc.xcs
@@ -1177,6 +1177,13 @@
</info>
<value>true</value>
</prop>
+ <prop oor:name="SkipEmptyCells" oor:type="xs:boolean" oor:nillable="false">
+ <info>
+ <desc>If true, Calc preserves previous content of cells when pasting empty ones. If false, Calc delete content of previous cells.</desc>
+ <label>SkipEmptyCells</label>
+ </info>
+ <value>true</value>
+ </prop>
<prop oor:name="Language" oor:type="xs:int" oor:nillable="false">
<info>
<desc>Language to use for CSV import. This determines how the numbers are parsed.</desc>
@@ -1245,6 +1252,13 @@
</info>
<value> </value>
</prop>
+ <prop oor:name="SkipEmptyCells" oor:type="xs:boolean" oor:nillable="false">
+ <info>
+ <desc>If true, Calc preserves previous content of cells when pasting empty ones. If false, Calc delete content of previous cells.</desc>
+ <label>SkipEmptyCells</label>
+ </info>
+ <value>false</value>
+ </prop>
<prop oor:name="TextSeparators" oor:type="xs:string" oor:nillable="false">
<info>
<desc>Text Separators</desc>
diff --git a/sc/source/ui/dbgui/scuiasciiopt.cxx b/sc/source/ui/dbgui/scuiasciiopt.cxx
index ec3604fde5c7..69cfdc65324a 100644
--- a/sc/source/ui/dbgui/scuiasciiopt.cxx
+++ b/sc/source/ui/dbgui/scuiasciiopt.cxx
@@ -52,18 +52,37 @@ const SCSIZE ASCIIDLG_MAXROWS = MAXROWCOUNT;
using namespace com::sun::star::uno;
// Defines - CSV Import Preserve Options
-#define FIXED_WIDTH "FixedWidth"
-#define FROM_ROW "FromRow"
-#define CHAR_SET "CharSet"
-#define SEPARATORS "Separators"
-#define TEXT_SEPARATORS "TextSeparators"
-#define MERGE_DELIMITERS "MergeDelimiters"
-#define QUOTED_AS_TEXT "QuotedFieldAsText"
-#define DETECT_SPECIAL_NUM "DetectSpecialNumbers"
-#define LANGUAGE "Language"
-#define SEP_PATH "Office.Calc/Dialogs/CSVImport"
-#define SEP_PATH_CLPBRD "Office.Calc/Dialogs/ClipboardTextImport"
-#define SEP_PATH_TEXT2COL "Office.Calc/Dialogs/TextToColumnsImport"
+enum CSVImportOptionsIndex
+{
+ CSVIO_MergeDelimiters = 0,
+ CSVIO_Separators,
+ CSVIO_TextSeparators,
+ CSVIO_FixedWidth,
+ CSVIO_FromRow,
+ CSVIO_Text2ColSkipEmptyCells = CSVIO_FromRow,
+ CSVIO_CharSet,
+ CSVIO_QuotedAsText,
+ CSVIO_DetectSpecialNum,
+ CSVIO_Language,
+ CSVIO_PasteSkipEmptyCells
+};
+
+const ::std::vector<OUString> CSVImportOptionNames =
+{
+ "MergeDelimiters",
+ "Separators",
+ "TextSeparators",
+ "FixedWidth",
+ "FromRow",
+ "CharSet",
+ "QuotedFieldAsText",
+ "DetectSpecialNumbers",
+ "Language",
+ "SkipEmptyCells"
+};
+const OUString aSep_Path = "Office.Calc/Dialogs/CSVImport";
+const OUString aSep_Path_Clpbrd = "Office.Calc/Dialogs/ClipboardTextImport";
+const OUString aSep_Path_Text2Col = "Office.Calc/Dialogs/TextToColumnsImport";
static void lcl_FillCombo( ComboBox& rCombo, const OUString& rList, sal_Unicode cSelect )
{
@@ -110,129 +129,134 @@ static sal_Unicode lcl_CharFromCombo( const ComboBox& rCombo, const OUString& rL
return c;
}
-static void load_Separators( OUString &sFieldSeparators, OUString &sTextSeparators,
- bool &bMergeDelimiters, bool& bQuotedAsText, bool& bDetectSpecialNum,
- bool &bFixedWidth, sal_Int32 &nFromRow, sal_Int32 &nCharSet,
- sal_Int32& nLanguage, ScImportAsciiCall eCall )
+void lcl_CreatePropertiesNames ( OUString& rSepPath, Sequence<OUString>& rNames, ScImportAsciiCall eCall )
{
- Sequence<Any>aValues;
- const Any *pProperties;
- Sequence<OUString> aNames( eCall == SC_TEXTTOCOLUMNS ? 4 : 9 );
- OUString* pNames = aNames.getArray();
- OUString aSepPath;
+ sal_Int32 nProperties = 0;
+
switch(eCall)
{
case SC_IMPORTFILE:
- aSepPath = SEP_PATH;
+ rSepPath = aSep_Path;
+ nProperties = 9;
break;
case SC_PASTETEXT:
- aSepPath = SEP_PATH_CLPBRD;
+ rSepPath = aSep_Path_Clpbrd;
+ nProperties = 10;
break;
case SC_TEXTTOCOLUMNS:
default:
- aSepPath = SEP_PATH_TEXT2COL;
+ rSepPath = aSep_Path_Text2Col;
+ nProperties = 5;
break;
}
- ScLinkConfigItem aItem( aSepPath );
-
- pNames[0] = MERGE_DELIMITERS;
- pNames[1] = SEPARATORS;
- pNames[2] = TEXT_SEPARATORS;
- pNames[3] = FIXED_WIDTH;
+ rNames.realloc( nProperties );
+ OUString* pNames = rNames.getArray();
+ pNames[ CSVIO_MergeDelimiters ] = CSVImportOptionNames[ CSVIO_MergeDelimiters ];
+ pNames[ CSVIO_Separators ] = CSVImportOptionNames[ CSVIO_Separators ];
+ pNames[ CSVIO_TextSeparators ] = CSVImportOptionNames[ CSVIO_TextSeparators ];
+ pNames[ CSVIO_FixedWidth ] = CSVImportOptionNames[ CSVIO_FixedWidth ];
if (eCall != SC_TEXTTOCOLUMNS)
{
- pNames[4] = FROM_ROW;
- pNames[5] = CHAR_SET;
- pNames[6] = QUOTED_AS_TEXT;
- pNames[7] = DETECT_SPECIAL_NUM;
- pNames[8] = LANGUAGE;
+ pNames[ CSVIO_FromRow ] = CSVImportOptionNames[ CSVIO_FromRow ];
+ pNames[ CSVIO_CharSet ] = CSVImportOptionNames[ CSVIO_CharSet ];
+ pNames[ CSVIO_QuotedAsText ] = CSVImportOptionNames[ CSVIO_QuotedAsText ];
+ pNames[ CSVIO_DetectSpecialNum ] = CSVImportOptionNames[ CSVIO_DetectSpecialNum ];
+ pNames[ CSVIO_Language ] = CSVImportOptionNames[ CSVIO_Language ];
+ }
+ if (eCall != SC_IMPORTFILE)
+ {
+ pNames[ eCall == SC_TEXTTOCOLUMNS ?
+ CSVIO_Text2ColSkipEmptyCells :
+ CSVIO_PasteSkipEmptyCells ] = CSVImportOptionNames[ CSVIO_PasteSkipEmptyCells ];
}
+}
+
+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 )
+{
+ Sequence<Any>aValues;
+ const Any *pProperties;
+ Sequence<OUString> aNames;
+ OUString aSepPath;
+ lcl_CreatePropertiesNames ( aSepPath, aNames, eCall);
+ ScLinkConfigItem aItem( aSepPath );
aValues = aItem.GetProperties( aNames );
pProperties = aValues.getConstArray();
- if( pProperties[0].hasValue() )
- bMergeDelimiters = ScUnoHelpFunctions::GetBoolFromAny( pProperties[0] );
+ if( pProperties[ CSVIO_MergeDelimiters ].hasValue() )
+ rMergeDelimiters = ScUnoHelpFunctions::GetBoolFromAny( pProperties[ CSVIO_MergeDelimiters ] );
- if( pProperties[1].hasValue() )
- pProperties[1] >>= sFieldSeparators;
+ if( pProperties[ CSVIO_Separators ].hasValue() )
+ pProperties[ CSVIO_Separators ] >>= rFieldSeparators;
- if( pProperties[2].hasValue() )
- pProperties[2] >>= sTextSeparators;
+ if( pProperties[ CSVIO_TextSeparators ].hasValue() )
+ pProperties[ CSVIO_TextSeparators ] >>= rTextSeparators;
- if( pProperties[3].hasValue() )
- bFixedWidth = ScUnoHelpFunctions::GetBoolFromAny( pProperties[3] );
+ if( pProperties[ CSVIO_FixedWidth ].hasValue() )
+ rFixedWidth = ScUnoHelpFunctions::GetBoolFromAny( pProperties[ CSVIO_FixedWidth ] );
if (eCall != SC_TEXTTOCOLUMNS)
{
- if( pProperties[4].hasValue() )
- pProperties[4] >>= nFromRow;
+ if( pProperties[ CSVIO_FromRow ].hasValue() )
+ pProperties[ CSVIO_FromRow ] >>= rFromRow;
- if( pProperties[5].hasValue() )
- pProperties[5] >>= nCharSet;
+ if( pProperties[ CSVIO_CharSet ].hasValue() )
+ pProperties[ CSVIO_CharSet ] >>= rCharSet;
- if ( pProperties[6].hasValue() )
- pProperties[6] >>= bQuotedAsText;
+ if ( pProperties[ CSVIO_QuotedAsText ].hasValue() )
+ pProperties[ CSVIO_QuotedAsText ] >>= rQuotedAsText;
- if ( pProperties[7].hasValue() )
- pProperties[7] >>= bDetectSpecialNum;
+ if ( pProperties[ CSVIO_DetectSpecialNum ].hasValue() )
+ pProperties[ CSVIO_DetectSpecialNum ] >>= rDetectSpecialNum;
- if ( pProperties[8].hasValue() )
- pProperties[8] >>= nLanguage;
+ if ( pProperties[ CSVIO_Language ].hasValue() )
+ pProperties[ CSVIO_Language ] >>= rLanguage;
+ }
+ if (eCall != SC_IMPORTFILE)
+ {
+ sal_Int32 nSkipEmptyCells = eCall == SC_TEXTTOCOLUMNS ?
+ CSVIO_Text2ColSkipEmptyCells :
+ CSVIO_PasteSkipEmptyCells;
+ if( pProperties[nSkipEmptyCells].hasValue() )
+ rSkipEmptyCells = ScUnoHelpFunctions::GetBoolFromAny( pProperties[nSkipEmptyCells] );
}
}
-static void save_Separators(
- const OUString& maSeparators, const OUString& maTxtSep, bool bMergeDelimiters, bool bQuotedAsText,
+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, ScImportAsciiCall eCall )
+ sal_Int32 nCharSet, sal_Int32 nLanguage, bool bSkipEmptyCells, ScImportAsciiCall eCall )
{
- OUString sFieldSeparators = maSeparators;
- OUString sTextSeparators = maTxtSep;
+ OUString sFieldSeparators = rSeparators;
+ OUString sTextSeparators = rTxtSep;
Sequence<Any> aValues;
Any *pProperties;
- Sequence<OUString> aNames( eCall == SC_TEXTTOCOLUMNS ? 4 : 9 );
- OUString* pNames = aNames.getArray();
+ Sequence<OUString> aNames;
OUString aSepPath;
- switch(eCall)
- {
- case SC_IMPORTFILE:
- aSepPath = SEP_PATH;
- break;
- case SC_PASTETEXT:
- aSepPath = SEP_PATH_CLPBRD;
- break;
- case SC_TEXTTOCOLUMNS:
- default:
- aSepPath = SEP_PATH_TEXT2COL;
- break;
- }
+ lcl_CreatePropertiesNames ( aSepPath, aNames, eCall );
ScLinkConfigItem aItem( aSepPath );
+ aValues = aItem.GetProperties( aNames );
+ pProperties = aValues.getArray();
- pNames[0] = MERGE_DELIMITERS;
- pNames[1] = SEPARATORS;
- pNames[2] = TEXT_SEPARATORS;
- pNames[3] = FIXED_WIDTH;
+ pProperties[ CSVIO_MergeDelimiters ] <<= bMergeDelimiters;
+ pProperties[ CSVIO_Separators ] <<= sFieldSeparators;
+ pProperties[ CSVIO_TextSeparators ] <<= sTextSeparators;
+ pProperties[ CSVIO_FixedWidth ] <<= bFixedWidth;
if (eCall != SC_TEXTTOCOLUMNS)
{
- pNames[4] = FROM_ROW;
- pNames[5] = CHAR_SET;
- pNames[6] = QUOTED_AS_TEXT;
- pNames[7] = DETECT_SPECIAL_NUM;
- pNames[8] = LANGUAGE;
+ pProperties[ CSVIO_FromRow ] <<= nFromRow;
+ pProperties[ CSVIO_CharSet ] <<= nCharSet;
+ pProperties[ CSVIO_QuotedAsText ] <<= bQuotedAsText;
+ pProperties[ CSVIO_DetectSpecialNum ] <<= bDetectSpecialNum;
+ pProperties[ CSVIO_Language ] <<= nLanguage;
}
- aValues = aItem.GetProperties( aNames );
- pProperties = aValues.getArray();
- pProperties[0] <<= bMergeDelimiters;
- pProperties[1] <<= sFieldSeparators;
- pProperties[2] <<= sTextSeparators;
- pProperties[3] <<= bFixedWidth;
- if (eCall != SC_TEXTTOCOLUMNS)
+ if (eCall != SC_IMPORTFILE)
{
- pProperties[4] <<= nFromRow;
- pProperties[5] <<= nCharSet;
- pProperties[6] <<= bQuotedAsText;
- pProperties[7] <<= bDetectSpecialNum;
- pProperties[8] <<= nLanguage;
+ pProperties[ eCall == SC_TEXTTOCOLUMNS ?
+ CSVIO_Text2ColSkipEmptyCells :
+ CSVIO_PasteSkipEmptyCells ] <<= bSkipEmptyCells;
}
aItem.PutProperties(aNames, aValues);
@@ -275,6 +299,7 @@ ScImportAsciiDlg::ScImportAsciiDlg( vcl::Window* pParent, const OUString& aDatNa
get(pCbTextSep, "textdelimiter");
get(pCkbQuotedAsText, "quotedfieldastext");
get(pCkbDetectNumber, "detectspecialnumbers");
+ get(pCkbSkipEmptyCells, "skipemptycells");
get(pFtType, "textcolumntype");
get(pLbType, "columntype");
get(mpTableBox, "scrolledwindowcolumntype");
@@ -303,11 +328,13 @@ ScImportAsciiDlg::ScImportAsciiDlg( vcl::Window* pParent, const OUString& aDatNa
bool bFixedWidth = false;
bool bQuotedFieldAsText = false;
bool bDetectSpecialNum = true;
+ bool bSkipEmptyCells = true;
sal_Int32 nFromRow = 1;
sal_Int32 nCharSet = -1;
sal_Int32 nLanguage = 0;
- load_Separators (sFieldSeparators, sTextSeparators, bMergeDelimiters,
- bQuotedFieldAsText, bDetectSpecialNum, bFixedWidth, nFromRow, nCharSet, nLanguage, meCall);
+ lcl_LoadSeparators (sFieldSeparators, sTextSeparators, bMergeDelimiters,
+ bQuotedFieldAsText, bDetectSpecialNum, bFixedWidth, nFromRow,
+ nCharSet, nLanguage, bSkipEmptyCells, meCall);
// load from saved settings
maFieldSeparators = sFieldSeparators;
@@ -317,6 +344,8 @@ ScImportAsciiDlg::ScImportAsciiDlg( vcl::Window* pParent, const OUString& aDatNa
pCkbQuotedAsText->Check();
if (bDetectSpecialNum)
pCkbDetectNumber->Check();
+ if (bSkipEmptyCells)
+ pCkbSkipEmptyCells->Check();
if( bFixedWidth && !bIsTSV )
pRbFixed->Check();
if( nFromRow != 1 )
@@ -390,6 +419,7 @@ ScImportAsciiDlg::ScImportAsciiDlg( vcl::Window* pParent, const OUString& aDatNa
pCkbAsOnce->SetClickHdl( aSeparatorClickHdl );
pCkbQuotedAsText->SetClickHdl( aSeparatorClickHdl );
pCkbDetectNumber->SetClickHdl( aSeparatorClickHdl );
+ pCkbSkipEmptyCells->SetClickHdl( aSeparatorClickHdl );
pCkbSpace->SetClickHdl( aSeparatorClickHdl );
pCkbOther->SetClickHdl( aSeparatorClickHdl );
pEdOther->SetModifyHdl( aSeparatorHdl );
@@ -468,6 +498,12 @@ ScImportAsciiDlg::ScImportAsciiDlg( vcl::Window* pParent, const OUString& aDatNa
pCkbDetectNumber->Check();
pCkbDetectNumber->Disable();
}
+ if (meCall == SC_IMPORTFILE)
+ {
+ //Empty cells in imported file are empty
+ pCkbSkipEmptyCells->Check(false);
+ pCkbSkipEmptyCells->Hide();
+ }
}
ScImportAsciiDlg::~ScImportAsciiDlg()
@@ -497,6 +533,7 @@ void ScImportAsciiDlg::dispose()
pCbTextSep.clear();
pCkbQuotedAsText.clear();
pCkbDetectNumber.clear();
+ pCkbSkipEmptyCells.clear();
pFtType.clear();
pLbType.clear();
mpTableBox.clear();
@@ -584,16 +621,18 @@ void ScImportAsciiDlg::GetOptions( ScAsciiOptions& rOpt )
rOpt.SetQuotedAsText(pCkbQuotedAsText->IsChecked());
rOpt.SetDetectSpecialNumber(pCkbDetectNumber->IsChecked());
+ rOpt.SetSkipEmptyCells(pCkbSkipEmptyCells->IsChecked());
}
void ScImportAsciiDlg::SaveParameters()
{
- save_Separators( maFieldSeparators, pCbTextSep->GetText(), pCkbAsOnce->IsChecked(),
+ lcl_SaveSeparators( maFieldSeparators, pCbTextSep->GetText(), pCkbAsOnce->IsChecked(),
pCkbQuotedAsText->IsChecked(), pCkbDetectNumber->IsChecked(),
pRbFixed->IsChecked(),
static_cast<sal_Int32>(pNfRow->GetValue()),
pLbCharSet->GetSelectedEntryPos(),
- static_cast<sal_uInt16>(pLbCustomLang->GetSelectLanguage()), meCall );
+ static_cast<sal_uInt16>(pLbCustomLang->GetSelectLanguage()),
+ pCkbSkipEmptyCells->IsChecked(), meCall );
}
void ScImportAsciiDlg::SetSeparators()
diff --git a/sc/source/ui/docshell/impex.cxx b/sc/source/ui/docshell/impex.cxx
index e11fb4eec704..175f3a6b3a07 100644
--- a/sc/source/ui/docshell/impex.cxx
+++ b/sc/source/ui/docshell/impex.cxx
@@ -932,7 +932,7 @@ bool ScImportExport::Text2Doc( SvStream& rStrm )
static bool lcl_PutString(
ScDocumentImport& rDocImport, bool bUseDocImport,
SCCOL nCol, SCROW nRow, SCTAB nTab, const OUString& rStr, sal_uInt8 nColFormat,
- SvNumberFormatter* pFormatter, bool bDetectNumFormat,
+ SvNumberFormatter* pFormatter, bool bDetectNumFormat, bool bSkipEmptyCells,
const ::utl::TransliterationWrapper& rTransliteration, CalendarWrapper& rCalendar,
const ::utl::TransliterationWrapper* pSecondTransliteration, CalendarWrapper* pSecondCalendar )
{
@@ -940,11 +940,15 @@ static bool lcl_PutString(
bool bMultiLine = false;
if ( nColFormat == SC_COL_SKIP || !ValidCol(nCol) || !ValidRow(nRow) )
return bMultiLine;
- if ( rStr.isEmpty() ) {
- if ( bUseDocImport )
- rDocImport.setAutoInput(ScAddress(nCol, nRow, nTab), rStr );
- else
- pDoc->SetString( nCol, nRow, nTab, rStr );
+ if ( rStr.isEmpty() )
+ {
+ if ( !bSkipEmptyCells )
+ { // delete destination cell
+ if ( bUseDocImport )
+ rDocImport.setAutoInput(ScAddress(nCol, nRow, nTab), rStr );
+ else
+ pDoc->SetString( nCol, nRow, nTab, rStr );
+ }
return false;
}
@@ -1292,6 +1296,7 @@ bool ScImportExport::ExtText2Doc( SvStream& rStrm )
LanguageType eDocLang = pExtOptions->GetLanguage();
SvNumberFormatter aNumFormatter( comphelper::getProcessComponentContext(), eDocLang);
bool bDetectNumFormat = pExtOptions->IsDetectSpecialNumber();
+ bool bSkipEmptyCells = pExtOptions->IsSkipEmptyCells();
// For date recognition
::utl::TransliterationWrapper aTransliteration(
@@ -1381,7 +1386,7 @@ bool ScImportExport::ExtText2Doc( SvStream& rStrm )
bMultiLine |= lcl_PutString(
aDocImport, !mbOverwriting, nCol, nRow, nTab, aCell, nFmt,
- &aNumFormatter, bDetectNumFormat, aTransliteration, aCalendar,
+ &aNumFormatter, bDetectNumFormat, bSkipEmptyCells, aTransliteration, aCalendar,
pEnglishTransliteration.get(), pEnglishCalendar.get());
}
++nCol;
@@ -1424,7 +1429,7 @@ bool ScImportExport::ExtText2Doc( SvStream& rStrm )
bMultiLine |= lcl_PutString(
aDocImport, !mbOverwriting, nCol, nRow, nTab, aCell, nFmt,
- &aNumFormatter, bDetectNumFormat, aTransliteration,
+ &aNumFormatter, bDetectNumFormat, bSkipEmptyCells, aTransliteration,
aCalendar, pEnglishTransliteration.get(), pEnglishCalendar.get());
}
++nCol;
diff --git a/sc/source/ui/inc/asciiopt.hxx b/sc/source/ui/inc/asciiopt.hxx
index 5f1bfda2f4ff..cfb2a20660ed 100644
--- a/sc/source/ui/inc/asciiopt.hxx
+++ b/sc/source/ui/inc/asciiopt.hxx
@@ -33,6 +33,7 @@ private:
bool bMergeFieldSeps;
bool bQuotedFieldAsText;
bool bDetectSpecialNumber;
+ bool bSkipEmptyCells;
sal_Unicode cTextSep;
rtl_TextEncoding eCharSet;
LanguageType eLang;
@@ -57,6 +58,7 @@ public:
bool IsMergeSeps() const { return bMergeFieldSeps; }
bool IsQuotedAsText() const { return bQuotedFieldAsText; }
bool IsDetectSpecialNumber() const { return bDetectSpecialNumber; }
+ bool IsSkipEmptyCells() const { return bSkipEmptyCells; }
sal_Unicode GetTextSep() const { return cTextSep; }
bool IsFixedLen() const { return bFixedLen; }
sal_uInt16 GetInfoCount() const { return mvColStart.size(); }
@@ -72,6 +74,7 @@ public:
void SetMergeSeps( bool bSet ) { bMergeFieldSeps = bSet; }
void SetQuotedAsText(bool bSet) { bQuotedFieldAsText = bSet; }
void SetDetectSpecialNumber(bool bSet) { bDetectSpecialNumber = bSet; }
+ void SetSkipEmptyCells(bool bSet) { bSkipEmptyCells = bSet; }
void SetTextSep( sal_Unicode c ) { cTextSep = c; }
void SetStartRow( long nRow) { nStartRow= nRow; }
void SetLanguage(LanguageType e) { eLang = e; }
diff --git a/sc/source/ui/inc/scuiasciiopt.hxx b/sc/source/ui/inc/scuiasciiopt.hxx
index e25904e51569..67f87d523eb0 100644
--- a/sc/source/ui/inc/scuiasciiopt.hxx
+++ b/sc/source/ui/inc/scuiasciiopt.hxx
@@ -73,6 +73,7 @@ class ScImportAsciiDlg : public ModalDialog
VclPtr<CheckBox> pCkbQuotedAsText;
VclPtr<CheckBox> pCkbDetectNumber;
+ VclPtr<CheckBox> pCkbSkipEmptyCells;
VclPtr<FixedText> pFtType;
VclPtr<ListBox> pLbType;
diff --git a/sc/uiconfig/scalc/ui/textimportcsv.ui b/sc/uiconfig/scalc/ui/textimportcsv.ui
index 91b6a962938c..6605b1974471 100644
--- a/sc/uiconfig/scalc/ui/textimportcsv.ui
+++ b/sc/uiconfig/scalc/ui/textimportcsv.ui
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
-<!-- Generated with glade 3.20.0 -->
+<!-- Generated with glade 3.18.3 -->
<interface domain="sc">
<requires lib="gtk+" version="3.0"/>
<requires lib="LibreOffice" version="1.0"/>
@@ -540,6 +540,22 @@
<property name="position">1</property>
</packing>
</child>
+ <child>
+ <object class="GtkCheckButton" id="skipemptycells">
+ <property name="label" translatable="yes" context="textimportcsv|skipemtycells">S_kip empty cells</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="use_underline">True</property>
+ <property name="xalign">0</property>
+ <property name="draw_indicator">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">2</property>
+ </packing>
+ </child>
</object>
</child>
</object>