mirror of
https://github.com/HeidiSQL/HeidiSQL.git
synced 2025-08-26 11:17:57 +08:00
Add preference option to use locale number format for CSV+XML+HTML exports. Mainly to work around an Excel bug, which expects float values to be formatted with locale decimal separator when pasting. Fixes issue #1459.
This commit is contained in:
@ -140,6 +140,8 @@ const
|
||||
REGNAME_CSV_TERMINATOR = 'CSVTerminator';
|
||||
DEFAULT_CSV_TERMINATOR = '\r\n';
|
||||
REGNAME_CSV_ESCAPER = 'CSVImportFieldEscaperV2';
|
||||
REGNAME_EXPORT_LOCALENUMBERS = 'ExportLocaleNumberFormats';
|
||||
DEFAULT_EXPORT_LOCALENUMBERS = False;
|
||||
REGNAME_CSV_FILENAME = 'loadfilename';
|
||||
REGNAME_CSV_ENCLOPTION = 'CSVImportFieldsEnclosedOptionallyV2';
|
||||
REGNAME_CSV_IGNORELINES = 'CSVImportIgnoreLines';
|
||||
|
@ -902,6 +902,9 @@ begin
|
||||
Data := Grid.Text[Node, i];
|
||||
// Handle nulls.
|
||||
if GridData.Rows[Node.Index].Cells[i].IsNull then Data := TEXT_NULL;
|
||||
// Unformat numeric values
|
||||
if (GridData.Columns[i].DatatypeCat in [dtcInteger, dtcReal]) and (not Mainform.prefExportLocaleNumbers) then
|
||||
Data := UnformatNumber(Data);
|
||||
// Escape HTML control characters in data.
|
||||
Data := htmlentities(Data);
|
||||
tmp := tmp + ' <td class="col' + IntToStr(i) + '">' + Data + '</td>' + CRLF;
|
||||
@ -997,8 +1000,9 @@ begin
|
||||
Data := Grid.Text[Node, i];
|
||||
// Remove 0x.
|
||||
if GridData.Columns[i].DatatypeCat = dtcBinary then Delete(Data, 1, 2);
|
||||
// Unformat float values
|
||||
if GridData.Columns[i].DatatypeCat in [dtcInteger, dtcReal] then Data := UnformatNumber(Data);
|
||||
// Unformat numeric values
|
||||
if (GridData.Columns[i].DatatypeCat in [dtcInteger, dtcReal]) and (not Mainform.prefExportLocaleNumbers) then
|
||||
Data := UnformatNumber(Data);
|
||||
// Escape encloser characters inside data per de-facto CSV.
|
||||
Data := WideStringReplace(Data, Encloser, Encloser + Encloser, [rfReplaceAll]);
|
||||
// Special handling for NULL (MySQL-ism, not de-facto CSV: unquote value)
|
||||
@ -1075,8 +1079,9 @@ begin
|
||||
Data := Grid.Text[Node, i];
|
||||
// Remove 0x.
|
||||
if GridData.Columns[i].DatatypeCat = dtcBinary then Delete(Data, 1, 2);
|
||||
// Unformat float values
|
||||
if GridData.Columns[i].DatatypeCat in [dtcInteger, dtcReal] then Data := UnformatNumber(Data);
|
||||
// Unformat numeric values
|
||||
if (GridData.Columns[i].DatatypeCat in [dtcInteger, dtcReal]) and (not Mainform.prefExportLocaleNumbers) then
|
||||
Data := UnformatNumber(Data);
|
||||
// Escape XML control characters in data.
|
||||
Data := htmlentities(Data);
|
||||
// Add data and cell end tag.
|
||||
@ -1153,7 +1158,7 @@ begin
|
||||
Data := Grid.Text[Node, i];
|
||||
// Remove 0x.
|
||||
if GridData.Columns[i].DatatypeCat = dtcBinary then Delete(Data, 1, 2);
|
||||
// Unformat float values
|
||||
// Unformat numeric values
|
||||
if GridData.Columns[i].DatatypeCat in [dtcInteger, dtcReal] then Data := UnformatNumber(Data);
|
||||
// Add data and cell end tag.
|
||||
tmp := tmp + esc(Data);
|
||||
|
@ -778,7 +778,8 @@ type
|
||||
prefEnableDatetimeEditor,
|
||||
prefEnableEnumEditor,
|
||||
prefEnableSetEditor,
|
||||
prefEnableNullBG : Boolean;
|
||||
prefEnableNullBG,
|
||||
prefExportLocaleNumbers : Boolean;
|
||||
prefNullColorDefault,
|
||||
prefNullBG : TColor;
|
||||
CreateDatabaseForm : TCreateDatabaseForm;
|
||||
@ -1225,6 +1226,7 @@ begin
|
||||
prefCSVSeparator := GetRegValue(REGNAME_CSV_SEPARATOR, DEFAULT_CSV_SEPARATOR);
|
||||
prefCSVEncloser := GetRegValue(REGNAME_CSV_ENCLOSER, DEFAULT_CSV_ENCLOSER);
|
||||
prefCSVTerminator := GetRegValue(REGNAME_CSV_TERMINATOR, DEFAULT_CSV_TERMINATOR);
|
||||
prefExportLocaleNumbers := GetRegValue(REGNAME_EXPORT_LOCALENUMBERS, DEFAULT_EXPORT_LOCALENUMBERS);
|
||||
prefRememberFilters := GetRegValue(REGNAME_REMEMBERFILTERS, DEFAULT_REMEMBERFILTERS);
|
||||
|
||||
// Data-Font:
|
||||
|
@ -785,6 +785,17 @@ object optionsform: Toptionsform
|
||||
Wrap = True
|
||||
OnChanging = anyUpDownLimitChanging
|
||||
end
|
||||
object chkExportLocaleNumbers: TCheckBox
|
||||
Left = 8
|
||||
Top = 232
|
||||
Width = 385
|
||||
Height = 17
|
||||
Anchors = [akLeft, akTop, akRight]
|
||||
Caption =
|
||||
'Use locale number format in grid exports (MS Excel paste compati' +
|
||||
'bility)'
|
||||
TabOrder = 3
|
||||
end
|
||||
end
|
||||
object tabShortcuts: TTabSheet
|
||||
Caption = 'Shortcuts'
|
||||
|
@ -118,6 +118,7 @@ type
|
||||
grpSQLTabWidth: TGroupBox;
|
||||
editSQLTabWidth: TEdit;
|
||||
updownSQLTabWidth: TUpDown;
|
||||
chkExportLocaleNumbers: TCheckBox;
|
||||
procedure FormShow(Sender: TObject);
|
||||
procedure Modified(Sender: TObject);
|
||||
procedure Apply(Sender: TObject);
|
||||
@ -222,6 +223,7 @@ begin
|
||||
MainReg.WriteString(REGNAME_CSV_ENCLOSER, editCSVEncloser.Text);
|
||||
MainReg.WriteString(REGNAME_CSV_TERMINATOR, editCSVTerminator.Text);
|
||||
MainReg.WriteInteger(REGNAME_COPYMAXSIZE, updownCopyDataMaxSize.Position);
|
||||
MainReg.WriteBool(REGNAME_EXPORT_LOCALENUMBERS, chkExportLocaleNumbers.Checked);
|
||||
|
||||
MainReg.WriteInteger(REGNAME_MAXCOLWIDTH, updownMaxColWidth.Position);
|
||||
maxrows := StrToIntDef(editMaxTotalRows.Text, DEFAULT_MAXTOTALROWS);
|
||||
@ -297,6 +299,7 @@ begin
|
||||
Mainform.prefCSVSeparator := editCSVSeparator.Text;
|
||||
Mainform.prefCSVEncloser := editCSVEncloser.Text;
|
||||
Mainform.prefCSVTerminator := editCSVTerminator.Text;
|
||||
Mainform.prefExportLocaleNumbers := chkExportLocaleNumbers.Checked;
|
||||
DatatypeCategories[Integer(dtcInteger)].Color := cboxNumeric.Selected;
|
||||
DatatypeCategories[Integer(dtcReal)].Color := cboxNumeric.Selected;
|
||||
DatatypeCategories[Integer(dtcText)].Color := cboxText.Selected;
|
||||
@ -385,6 +388,7 @@ begin
|
||||
editCSVEncloser.Text := GetRegValue(REGNAME_CSV_ENCLOSER, DEFAULT_CSV_ENCLOSER);
|
||||
editCSVTerminator.Text := GetRegValue(REGNAME_CSV_TERMINATOR, DEFAULT_CSV_TERMINATOR);
|
||||
updownCopyDataMaxSize.Position := GetRegValue(REGNAME_COPYMAXSIZE, DEFAULT_COPYMAXSIZE);
|
||||
chkExportLocaleNumbers.Checked := GetRegValue(REGNAME_EXPORT_LOCALENUMBERS, DEFAULT_EXPORT_LOCALENUMBERS);
|
||||
|
||||
// Log to file
|
||||
chkLogToFile.Checked := GetRegValue(REGNAME_LOGTOFILE, DEFAULT_LOGTOFILE);
|
||||
|
Reference in New Issue
Block a user