Optionally export all fields (unselected items as empty)

This commit is contained in:
Florian Wolters 2021-03-22 23:02:06 +01:00
parent 85589d9209
commit 070a28bd96
No known key found for this signature in database
GPG Key ID: 48EA1E640798CA9A
4 changed files with 202 additions and 57 deletions

View File

@ -109,6 +109,14 @@ For LoTW operations see <a href=h7.html><strong>here</strong></a>.
</div>
<br>
<div align="justify">In order to keep the structure of the exported csv file you can check
checkbox 'Keep csv structure'. This the number of columns will always be the same and not
depend on whether specific export items are selected or not. Thus the number for each
column will stay the same and you do not need to re-design your glabels template upon
(un-)selecting items to export. Not selected items are simply exported as empty values.
</div>
<br>
<div align="justify">For both methods, the filtering potential can be utilized.
For example, you can filter out all QSOs with DJ3 stations and print QSL labels for them.
You will get such output:

Binary file not shown.

Before

Width:  |  Height:  |  Size: 35 KiB

After

Width:  |  Height:  |  Size: 50 KiB

View File

@ -1,7 +1,7 @@
object frmExLabelPrint: TfrmExLabelPrint
Left = 709
Left = 2485
Height = 522
Top = 11
Top = 248
Width = 424
HelpType = htKeyword
HelpKeyword = 'help/h22.html#bh4'
@ -14,15 +14,15 @@ object frmExLabelPrint: TfrmExLabelPrint
OnClose = FormClose
OnShow = FormShow
Position = poMainFormCenter
LCLVersion = '2.0.4.0'
LCLVersion = '2.0.10.0'
object Label1: TLabel
AnchorSideLeft.Control = gchkExport
AnchorSideTop.Control = edtQSOsToLabel
AnchorSideTop.Side = asrCenter
Left = 5
Height = 17
Height = 15
Top = 139
Width = 34
Width = 36
BorderSpacing.Top = 11
Caption = 'Print '
ParentColor = False
@ -32,21 +32,21 @@ object frmExLabelPrint: TfrmExLabelPrint
AnchorSideLeft.Side = asrBottom
AnchorSideTop.Control = edtQSOsToLabel
AnchorSideTop.Side = asrCenter
Left = 94
Height = 17
Left = 96
Height = 15
Top = 139
Width = 119
Width = 121
BorderSpacing.Left = 4
Caption = 'QSOs on one label'
ParentColor = False
end
object lblProgress: TLabel
AnchorSideLeft.Control = chkMarkSent
AnchorSideTop.Control = chkMarkSent
AnchorSideTop.Control = chkKeepCsvStructure
AnchorSideTop.Side = asrBottom
Left = 5
Height = 20
Top = 431
Top = 456
Width = 412
Alignment = taCenter
AutoSize = False
@ -93,7 +93,7 @@ object frmExLabelPrint: TfrmExLabelPrint
AnchorSideTop.Side = asrBottom
Left = 5
Height = 97
Top = 303
Top = 302
Width = 412
Caption = ' Export to '
ClientHeight = 79
@ -106,7 +106,7 @@ object frmExLabelPrint: TfrmExLabelPrint
AnchorSideRight.Side = asrBottom
Left = 320
Height = 25
Top = 43
Top = 42
Width = 75
Anchors = [akTop, akRight]
BorderSpacing.Top = 3
@ -119,7 +119,7 @@ object frmExLabelPrint: TfrmExLabelPrint
AnchorSideLeft.Side = asrCenter
AnchorSideTop.Control = GroupBox1
Left = 16
Height = 34
Height = 33
Top = 6
Width = 379
BorderSpacing.Top = 6
@ -131,8 +131,8 @@ object frmExLabelPrint: TfrmExLabelPrint
AnchorSideLeft.Side = asrBottom
AnchorSideTop.Control = gchkExport
AnchorSideTop.Side = asrBottom
Left = 42
Height = 34
Left = 44
Height = 33
Top = 130
Width = 48
BorderSpacing.Left = 3
@ -147,7 +147,7 @@ object frmExLabelPrint: TfrmExLabelPrint
AnchorSideTop.Side = asrBottom
Left = 5
Height = 136
Top = 167
Top = 166
Width = 412
BorderSpacing.Top = 3
Caption = ' Remarks '
@ -160,7 +160,7 @@ object frmExLabelPrint: TfrmExLabelPrint
Left = 9
Height = 23
Top = 3
Width = 198
Width = 203
BorderSpacing.Left = 9
BorderSpacing.Top = 3
Caption = 'Print ''Comment(s) to QSO'''
@ -185,7 +185,7 @@ object frmExLabelPrint: TfrmExLabelPrint
AnchorSideTop.Control = rbOwnRemarks
AnchorSideTop.Side = asrBottom
Left = 17
Height = 34
Height = 33
Top = 52
Width = 376
BorderSpacing.Top = 3
@ -198,8 +198,8 @@ object frmExLabelPrint: TfrmExLabelPrint
AnchorSideTop.Side = asrBottom
Left = 9
Height = 23
Top = 87
Width = 256
Top = 86
Width = 262
BorderSpacing.Top = 1
Caption = 'Remove separator (;) from remarks'
TabOrder = 3
@ -211,8 +211,8 @@ object frmExLabelPrint: TfrmExLabelPrint
AnchorSideTop.Side = asrBottom
Left = 5
Height = 23
Top = 403
Width = 208
Top = 402
Width = 215
BorderSpacing.Top = 3
Caption = 'Mark QSLs sent after export'
TabOrder = 4
@ -223,7 +223,7 @@ object frmExLabelPrint: TfrmExLabelPrint
AnchorSideTop.Side = asrBottom
Left = 11
Height = 25
Top = 463
Top = 488
Width = 75
BorderSpacing.Left = 6
BorderSpacing.Top = 12
@ -238,7 +238,7 @@ object frmExLabelPrint: TfrmExLabelPrint
AnchorSideTop.Side = asrBottom
Left = 174
Height = 25
Top = 463
Top = 488
Width = 75
BorderSpacing.Top = 12
Caption = 'Help'
@ -252,7 +252,7 @@ object frmExLabelPrint: TfrmExLabelPrint
AnchorSideRight.Side = asrBottom
Left = 336
Height = 25
Top = 463
Top = 488
Width = 75
Anchors = [akTop, akRight]
BorderSpacing.Top = 12
@ -268,7 +268,7 @@ object frmExLabelPrint: TfrmExLabelPrint
Left = 5
Height = 23
Top = 3
Width = 127
Width = 131
BorderSpacing.Left = 5
BorderSpacing.Top = 3
Caption = 'Export all QSOs'
@ -280,19 +280,31 @@ object frmExLabelPrint: TfrmExLabelPrint
AnchorSideLeft.Side = asrBottom
AnchorSideTop.Control = edtQSOsToLabel
AnchorSideTop.Side = asrCenter
Left = 229
Left = 233
Height = 25
Top = 135
Top = 134
Width = 184
BorderSpacing.Left = 16
Caption = 'Choose fields for export'
OnClick = btnExportFieldsPrefClick
TabOrder = 9
end
object chkKeepCsvStructure: TCheckBox
AnchorSideLeft.Control = GroupBox1
AnchorSideTop.Control = chkMarkSent
AnchorSideTop.Side = asrBottom
Left = 5
Height = 23
Top = 428
Width = 149
BorderSpacing.Top = 3
Caption = 'Keep csv structure'
TabOrder = 10
end
object dlgSave: TSaveDialog
DefaultExt = '.csv'
Filter = 'CSV files|*.csv'
left = 360
top = 192
Left = 360
Top = 192
end
end

View File

@ -22,6 +22,7 @@ type
btnHelp: TButton;
btnExportFieldsPref : TButton;
Cancel: TButton;
chkKeepCsvStructure: TCheckBox;
chkRemoveSep: TCheckBox;
chkAllQSOs: TCheckBox;
chkMarkSent: TCheckBox;
@ -87,6 +88,8 @@ begin
edtQSOsToLabel.Text := cqrini.ReadString('QslExport','QSOs','6');
edtRemarks.Text := cqrini.ReadString('QslExport','Remarks','');
chkRemoveSep.Checked := cqrini.ReadBool('QslExport','RemoveSep',True);
chkKeepCsvStructure.Checked := cqrini.ReadBool('QSLExport', 'KeepCsvStructure', False);
if edtRemarks.Text <> '' then
rbOwnRemarks.Checked
end;
@ -327,17 +330,36 @@ var
Write(f,FormatDateTime('mm/dd/yyyy',dmData.Q.FieldByName('qsodate').AsDateTime),C_SEP);
FormatSettings.DateSeparator:=sep;
end;
end
else begin
if chkKeepCsvStructure.Checked then
Write(f,C_SEP);
end;
if cqrini.ReadBool('QSLExport', 'time_on', True) then
Write(f,dmData.Q.FieldByName('time_on').AsString,C_SEP);
Write(f,dmData.Q.FieldByName('time_on').AsString,C_SEP)
else
if chkKeepCsvStructure.Checked then
Write(f,C_SEP);
if cqrini.ReadBool('QSLExport', 'time_off', True) then
Write(f,dmData.Q.FieldByName('time_off').AsString,C_SEP);
Write(f,dmData.Q.FieldByName('time_off').AsString,C_SEP)
else
if chkKeepCsvStructure.Checked then
Write(f,C_SEP);
if cqrini.ReadBool('QSLExport', 'CallSign', True) then
Write(f,dmData.Q.FieldByName('callsign').AsString,C_SEP);
Write(f,dmData.Q.FieldByName('callsign').AsString,C_SEP)
else
if chkKeepCsvStructure.Checked then
Write(f,C_SEP);
if cqrini.ReadBool('QSLExport', 'Mode', True) then
Write(f,dmData.Q.FieldByName('mode').AsString,C_SEP);
Write(f,dmData.Q.FieldByName('mode').AsString,C_SEP)
else
if chkKeepCsvStructure.Checked then
Write(f,C_SEP);
if cqrini.ReadBool('QSLExport', 'Freq', True) then
Write(f,FloatToStr(dmData.Q.FieldByName('freq').AsFloat),C_SEP);
Write(f,FloatToStr(dmData.Q.FieldByName('freq').AsFloat),C_SEP)
else
if chkKeepCsvStructure.Checked then
Write(f,C_SEP);
if cqrini.ReadBool('QSLExport', 'RST_S', True) then
begin
@ -351,6 +373,15 @@ var
Write(f,rst_tmp[2],C_SEP);
Write(f,rst_tmp[3],C_SEP);
end;
end
else begin
if chkKeepCsvStructure.Checked then
begin
if not cqrini.ReadBool('QSLExport','SplitRST_R',False) then
Write(f,C_SEP)
else
Write(f,C_SEP,C_SEP,C_SEP);
end;
end;
if cqrini.ReadBool('QSLExport', 'RST_R', True) then
begin
@ -364,49 +395,142 @@ var
Write(f,rst_tmp[2],C_SEP);
Write(f,rst_tmp[3],C_SEP);
end;
end
else begin
if chkKeepCsvStructure.Checked then
begin
if not cqrini.ReadBool('QSLExport','SplitRST_R',False) then
Write(f,C_SEP)
else
Write(f,C_SEP,C_SEP,C_SEP);
end;
end;
if cqrini.ReadBool('QSLExport', 'Name', True) then
Write(f,dmData.Q.FieldByName('name').AsString,C_SEP);
Write(f,dmData.Q.FieldByName('name').AsString,C_SEP)
else begin
if chkKeepCsvStructure.Checked then
Write(f,C_SEP);
end;
if cqrini.ReadBool('QSLExport', 'QTH', True) then
Write(f,dmData.Q.FieldByName('qth').AsString,C_SEP);
Write(f,dmData.Q.FieldByName('qth').AsString,C_SEP)
else begin
if chkKeepCsvStructure.Checked then
Write(f,C_SEP);
end;
if cqrini.ReadBool('QSLExport', 'band', True) then
Write(f,dmData.Q.FieldByName('band').AsString,C_SEP);
Write(f,dmData.Q.FieldByName('band').AsString,C_SEP)
else begin
if chkKeepCsvStructure.Checked then
Write(f,C_SEP);
end;
if cqrini.ReadBool('QSLExport', 'Propagation', True) then
Write(f,dmData.Q.FieldByName('prop_mode').AsString,C_SEP);
Write(f,dmData.Q.FieldByName('prop_mode').AsString,C_SEP)
else begin
if chkKeepCsvStructure.Checked then
Write(f,C_SEP);
end;
if cqrini.ReadBool('QSLExport', 'Satellite', True) then
Write(f,dmData.Q.FieldByName('satellite').AsString,C_SEP);
Write(f,dmData.Q.FieldByName('satellite').AsString,C_SEP)
else begin
if chkKeepCsvStructure.Checked then
Write(f,C_SEP);
end;
if cqrini.ReadBool('QSLExport', 'ContestName', True) then
Write(f, dmData.Q.FieldByName('contestname').AsString,C_SEP);
Write(f, dmData.Q.FieldByName('contestname').AsString,C_SEP)
else begin
if chkKeepCsvStructure.Checked then
Write(f,C_SEP);
end;
if cqrini.ReadBool('QSLExport', 'QSL_S', True) then
Write(f,dmData.Q.FieldByName('qsl_s').AsString,C_SEP);
Write(f,dmData.Q.FieldByName('qsl_s').AsString,C_SEP)
else begin
if chkKeepCsvStructure.Checked then
Write(f,C_SEP);
end;
if cqrini.ReadBool('QSLExport', 'QSL_R', True) then
Write(f,dmData.Q.FieldByName('qsl_r').AsString,C_SEP);
Write(f,dmData.Q.FieldByName('qsl_r').AsString,C_SEP)
else begin
if chkKeepCsvStructure.Checked then
Write(f,C_SEP);
end;
if cqrini.ReadBool('QSLExport', 'QSL_VIA', True) then
Write(f,dmData.Q.FieldByName('qsl_via').AsString,C_SEP);
Write(f,dmData.Q.FieldByName('qsl_via').AsString,C_SEP)
else begin
if chkKeepCsvStructure.Checked then
Write(f,C_SEP);
end;
if cqrini.ReadBool('QSLExport', 'locator', True) then
Write(f,dmData.Q.FieldByName('loc').AsString,C_SEP);
Write(f,dmData.Q.FieldByName('loc').AsString,C_SEP)
else begin
if chkKeepCsvStructure.Checked then
Write(f,C_SEP);
end;
if cqrini.ReadBool('QSLExport', 'MyLoc', True) then
Write(f,dmData.Q.FieldByName('my_loc').AsString,C_SEP);
Write(f,dmData.Q.FieldByName('my_loc').AsString,C_SEP)
else begin
if chkKeepCsvStructure.Checked then
Write(f,C_SEP);
end;
if cqrini.ReadBool('QSLExport', 'Distance', True) then
Write(f,frmMain.CalcQrb(dmData.Q.FieldByName('my_loc').AsString,dmData.Q.FieldByName('loc').AsString,False),C_SEP);
Write(f,frmMain.CalcQrb(dmData.Q.FieldByName('my_loc').AsString,dmData.Q.FieldByName('loc').AsString,False),C_SEP)
else begin
if chkKeepCsvStructure.Checked then
Write(f,C_SEP);
end;
if cqrini.ReadBool('QSLExport', 'IOTA', True) then
Write(f,dmData.Q.FieldByName('iota').AsString,C_SEP);
Write(f,dmData.Q.FieldByName('iota').AsString,C_SEP)
else begin
if chkKeepCsvStructure.Checked then
Write(f,C_SEP);
end;
if cqrini.ReadBool('QSLExport', 'award', True) then
Write(f,dmData.Q.FieldByName('award').AsString,C_SEP);
Write(f,dmData.Q.FieldByName('award').AsString,C_SEP)
else begin
if chkKeepCsvStructure.Checked then
Write(f,C_SEP);
end;
if cqrini.ReadBool('QSLExport', 'power', True) then
Write(f,dmData.Q.FieldByName('pwr').AsString,C_SEP);
Write(f,dmData.Q.FieldByName('pwr').AsString,C_SEP)
else begin
if chkKeepCsvStructure.Checked then
Write(f,C_SEP);
end;
if cqrini.ReadBool('QSLExport', 'Remarks', True) then
Write(f,dmData.Q.FieldByName('remarks').AsString,C_SEP);
Write(f,dmData.Q.FieldByName('remarks').AsString,C_SEP)
else begin
if chkKeepCsvStructure.Checked then
Write(f,C_SEP);
end;
if cqrini.ReadBool('QSLExport', 'QSLMsg', True) then
Write(f,dmData.Q.FieldByName('qslmsg').AsString,C_SEP);
Write(f,dmData.Q.FieldByName('qslmsg').AsString,C_SEP)
else begin
if chkKeepCsvStructure.Checked then
Write(f,C_SEP);
end;
if cqrini.ReadBool('QSLExport', 'ContestNrS', True) then
Write(f,dmData.Q.FieldByName('stx').AsString ,C_SEP);
Write(f,dmData.Q.FieldByName('stx').AsString ,C_SEP)
else begin
if chkKeepCsvStructure.Checked then
Write(f,C_SEP);
end;
if cqrini.ReadBool('QSLExport', 'ContestMsgS', True) then
Write(f,dmData.Q.FieldByName('stx_string').AsString,C_SEP);
Write(f,dmData.Q.FieldByName('stx_string').AsString,C_SEP)
else begin
if chkKeepCsvStructure.Checked then
Write(f,C_SEP);
end;
if cqrini.ReadBool('QSLExport', 'ContestNrR', True) then
Write(f,dmData.Q.FieldByName('srx').AsString ,C_SEP);
Write(f,dmData.Q.FieldByName('srx').AsString ,C_SEP)
else begin
if chkKeepCsvStructure.Checked then
Write(f,C_SEP);
end;
if cqrini.ReadBool('QSLExport', 'ContestMsgR', True) then
Write(f,dmData.Q.FieldByName('srx_string').AsString ,C_SEP);
Write(f,dmData.Q.FieldByName('srx_string').AsString ,C_SEP)
else begin
if chkKeepCsvStructure.Checked then
Write(f,C_SEP);
end;
end;
@ -540,7 +664,8 @@ begin
cqrini.WriteString('QslExport','Path',edtFile.Text);
cqrini.WriteString('QslExport','QSOs',edtQSOsToLabel.Text);
cqrini.WriteString('QslExport','Remarks',edtRemarks.Text);
cqrini.ReadBool('QslExport','RemoveSep',chkRemoveSep.Checked)
cqrini.WriteBool('QSLExport', 'KeepCsvStructure', chkKeepCsvStructure.Checked);
cqrini.WriteBool('QslExport','RemoveSep',chkRemoveSep.Checked)
end;
procedure TfrmExLabelPrint.btnExportFieldsPrefClick(Sender : TObject);