summaryrefslogtreecommitdiff
path: root/sc
diff options
context:
space:
mode:
authorLaurent BP <laurent.balland-poirier@laposte.net>2017-12-17 17:14:55 +0100
committerEike Rathke <erack@redhat.com>2017-12-21 23:16:23 +0100
commit3bd4957191f12457c17404645bab0794639c95f8 (patch)
treebecaaebd679efe51a4803b428896e9f79863ff83 /sc
parent4eaeb8058d75d03e782d37b430b68890aa374f2c (diff)
tdf#113979 Add option to Skip empty cells
During "Txt to column", empty cells should erase previous content (see tdf#69981) But during paste, user may want to keep previous content. This option makes all users happy. During import of CSV file, this option is hidden. In the same time, I've tried to remove some duplicate code. Update: properties offsets are now enum and replace define const Change-Id: I88be2d0432ff804033cff050422e666fa2882efd Reviewed-on: https://gerrit.libreoffice.org/46651 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Eike Rathke <erack@redhat.com>
Diffstat (limited to 'sc')
-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
5 files changed, 171 insertions, 107 deletions
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>