You've already forked lazarus-ccr
fpspreadsheet: Major re-write of fpspreadsheetgrid:
- persistent storage of workbook - inherits from TCustomDrawGrid instead of from TCustomStringGrid - use FixedRow/Col for row/column headers - displays cell borders as read from the file - uses column widths as read from the file (approximate only) - numbers are right-aligned by default. - demo extended to display worksheets in tabs - some visual improvements of demo - saving not yet working in demo More to follow... git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@2951 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
@ -7,7 +7,7 @@ uses
|
||||
Forms, mainform, LResources, laz_fpspreadsheet_visual
|
||||
{ you can add units after this };
|
||||
|
||||
//{$IFDEF WINDOWS}{$R fpsvisual.rc}{$ENDIF}
|
||||
{$R *.res}
|
||||
|
||||
begin
|
||||
Application.Initialize;
|
||||
|
@ -3,58 +3,270 @@ object Form1: TForm1
|
||||
Height = 339
|
||||
Top = 177
|
||||
Width = 400
|
||||
Caption = 'FPSVisual'
|
||||
Caption = 'fpsGrid'
|
||||
ClientHeight = 319
|
||||
ClientWidth = 400
|
||||
Menu = MainMenu1
|
||||
ShowHint = True
|
||||
LCLVersion = '1.3'
|
||||
object sWorksheetGrid1: TsWorksheetGrid
|
||||
Left = 8
|
||||
Height = 192
|
||||
Top = 48
|
||||
Width = 384
|
||||
TabOrder = 0
|
||||
end
|
||||
object buttonPopulateGrid: TButton
|
||||
Left = 136
|
||||
Height = 25
|
||||
object Panel1: TPanel
|
||||
Left = 0
|
||||
Height = 55
|
||||
Top = 264
|
||||
Width = 112
|
||||
Caption = 'Populate Grid'
|
||||
OnClick = buttonPopulateGridClick
|
||||
Width = 400
|
||||
Align = alBottom
|
||||
BevelOuter = bvNone
|
||||
ClientHeight = 55
|
||||
ClientWidth = 400
|
||||
TabOrder = 0
|
||||
object btnPopulateGrid: TButton
|
||||
Left = 280
|
||||
Height = 25
|
||||
Top = 8
|
||||
Width = 112
|
||||
Caption = 'Populate Grid'
|
||||
OnClick = btnPopulateGridClick
|
||||
TabOrder = 0
|
||||
Visible = False
|
||||
end
|
||||
object CbDisplayFixedColRow: TCheckBox
|
||||
Left = 8
|
||||
Height = 19
|
||||
Top = 8
|
||||
Width = 130
|
||||
Caption = 'Display fixed col/row'
|
||||
Checked = True
|
||||
OnClick = CbDisplayFixedColRowClick
|
||||
State = cbChecked
|
||||
TabOrder = 1
|
||||
end
|
||||
object CbDisplayGrid: TCheckBox
|
||||
Left = 8
|
||||
Height = 19
|
||||
Top = 29
|
||||
Width = 82
|
||||
Caption = 'Display grid'
|
||||
Checked = True
|
||||
OnClick = CbDisplayGridClick
|
||||
State = cbChecked
|
||||
TabOrder = 2
|
||||
end
|
||||
end
|
||||
object PageControl1: TPageControl
|
||||
Left = 0
|
||||
Height = 238
|
||||
Top = 26
|
||||
Width = 400
|
||||
ActivePage = TabSheet1
|
||||
Align = alClient
|
||||
TabIndex = 0
|
||||
TabOrder = 1
|
||||
OnChange = PageControl1Change
|
||||
object TabSheet1: TTabSheet
|
||||
Caption = 'Sheet1'
|
||||
ClientHeight = 210
|
||||
ClientWidth = 392
|
||||
object sWorksheetGrid1: TsWorksheetGrid
|
||||
Left = 0
|
||||
Height = 210
|
||||
Top = 0
|
||||
Width = 392
|
||||
Align = alClient
|
||||
Options = [goFixedVertLine, goFixedHorzLine, goVertLine, goHorzLine, goRangeSelect, goColSizing, goThumbTracking, goSmoothScroll, goCellEllipsis]
|
||||
TabOrder = 0
|
||||
TitleStyle = tsNative
|
||||
end
|
||||
end
|
||||
end
|
||||
object ToolBar1: TToolBar
|
||||
Left = 0
|
||||
Height = 26
|
||||
Top = 0
|
||||
Width = 400
|
||||
Caption = 'ToolBar1'
|
||||
EdgeBorders = []
|
||||
Images = ImageList1
|
||||
TabOrder = 2
|
||||
object ToolButton1: TToolButton
|
||||
Left = 1
|
||||
Top = 0
|
||||
Action = AcOpen
|
||||
end
|
||||
object ToolButton2: TToolButton
|
||||
Left = 24
|
||||
Top = 0
|
||||
Action = AcSaveAs
|
||||
end
|
||||
object ToolButton3: TToolButton
|
||||
Left = 52
|
||||
Top = 0
|
||||
Action = AcQuit
|
||||
end
|
||||
object ToolButton5: TToolButton
|
||||
Left = 47
|
||||
Top = 0
|
||||
Width = 5
|
||||
Caption = 'ToolButton5'
|
||||
Style = tbsDivider
|
||||
end
|
||||
end
|
||||
object OpenDialog1: TOpenDialog
|
||||
DefaultExt = '.xls'
|
||||
Filter = 'Excel spreadsheet (*.xls)|*.xls|Excel XML spreadsheet (*.xlsx)|*.xlxs|LibreOffice/OpenOffice spreadsheet (*.ods)|*.ods|Wikitable (pipes) (.wikitable_pipes)|.wikitable_pipes|All files (*.*)|*.*'
|
||||
Options = [ofExtensionDifferent, ofEnableSizing, ofViewDetail]
|
||||
left = 8
|
||||
top = 264
|
||||
left = 64
|
||||
top = 176
|
||||
end
|
||||
object SaveDialog1: TSaveDialog
|
||||
DefaultExt = '.xls'
|
||||
Filter = 'Excel spreadsheet (*.xls)|*.xls|Excel XML spreadsheet (*.xlsx)|*.xlsx|LibreOffice/OpenOffice spreadsheet (*.ods)|*.ods|Wikitable (wikimedia) (.wikitable_wikimedia)|*.wikitable_wikimedia'
|
||||
Options = [ofExtensionDifferent, ofEnableSizing, ofViewDetail]
|
||||
left = 72
|
||||
top = 264
|
||||
left = 176
|
||||
top = 176
|
||||
end
|
||||
object MainMenu1: TMainMenu
|
||||
left = 296
|
||||
top = 264
|
||||
Images = ImageList1
|
||||
left = 288
|
||||
top = 176
|
||||
object mnuFile: TMenuItem
|
||||
Caption = '&File'
|
||||
object mnuOpen: TMenuItem
|
||||
Caption = '&Open...'
|
||||
OnClick = mnuOpenClick
|
||||
Action = AcOpen
|
||||
OnClick = acOpenExecute
|
||||
end
|
||||
object mnuSaveAs: TMenuItem
|
||||
Caption = '&Save as...'
|
||||
OnClick = mnuSaveAsClick
|
||||
Action = AcSaveAs
|
||||
OnClick = acSaveAsExecute
|
||||
end
|
||||
object MenuItem1: TMenuItem
|
||||
Caption = '-'
|
||||
end
|
||||
object mnuQuit: TMenuItem
|
||||
Caption = '&Quit'
|
||||
OnClick = mnuQuitClick
|
||||
Action = AcQuit
|
||||
OnClick = acQuitExecute
|
||||
end
|
||||
end
|
||||
end
|
||||
object ImageList1: TImageList
|
||||
left = 176
|
||||
top = 120
|
||||
Bitmap = {
|
||||
4C69030000001000000010000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00FFFFFF00EAC39DFFE6BF96FFE4BB92FFE4BB92FFD1A06CF5D09E6DF6CC96
|
||||
5FDAC479427EB2673C09FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00FFFFFF00E5BE96FFFFFFFEFFFDF3E9FFFDF3EAFFFCF2E8FFFAEFE3FFFAF2
|
||||
E7FFEABB88FFCF8555B3B4693D0CFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00FFFFFF00E4BB93FFFEF5EDFFFCDEC5FFFBE0C7FFF9DCC2FFF5D3B4FFFEF9
|
||||
F3FFFAE2C4FFECC193FFC37D4893FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00FFFFFF00E4BB92FFFEF6F0FFFCE2CDFFFCE3CDFFFADFC8FFF7D9BCFFF5E9
|
||||
DDFFFAF3EBFFFBF8F3FFCA8353FEFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00FFFFFF00E4BB92FFFEF7F1FFFCE5D2FFFCE4D1FFFBE2CCFFF9DDC4FFF6D7
|
||||
BBFFF3D1AFFFFAEFE4FFCC8758FE34B4D9D05EC2E1FA60C3E2FA60C3E2FA60C3
|
||||
E2FA5FC3E2FAE4BB91FFFFF7F2FFFEE7D5FFFEE7D5FFFDE5D1FFFAE0CAFFF9DE
|
||||
C4FFF7D9BCFFFDF2E7FFCC8757FE36B3DAF8FDFEFEFFFEFFFFFFFEFEFFFFFDFE
|
||||
FFFFFEFFFFFFE4BA91FFFFF7F0FFFFE7D5FFFDE7D6FFFDE6D4FFFCE4D0FFFBE3
|
||||
CBFFFADCC2FFFEF3E8FFCC8656FE35AFDAF0F7FCFEFF8EE4F8FF91DEF5FF9FE0
|
||||
F5FFACE1F6FFCA8452FFFFF7F1FFFFE9D9FFFFEADBFFFFE9D9FFFFE7D7FFFFE5
|
||||
D2FFFFE2CBFFFFF7F1FFCB8555FE36AADAF2F1FAFDFF94DEF5FF93DCF4FF64BC
|
||||
E9FF3594DAFF3594DAFF3594DAFF3594DAFF3594DAFF3594DAFF3594DAFF3594
|
||||
DAFF3594DAFFFBF6EFFFCC8355FE35ABDAFAE8F6FBFF70BCE7FF55AAE2FF4DA5
|
||||
E0FF91C9EBFFFAF3EFFFFDFEFDFFFFFDFCFFFFFDFCFFFEFDFCFFFEFCFBFFFEFE
|
||||
FDFF3594DAFFEFF2E8FFCE8156FF37A6DAFAFEFFFFFFF8FDFFFFF6FDFFFFF5FC
|
||||
FFFFF3FCFEFF9AE4F4FF9AE6F7FF9BE6F6FF9DE5F5FF9EE5F5FF9FE5F4FFDAF3
|
||||
F8FF3594DAFFFDF4EEFFCA8054F936A1DAF9F6FCFEFF94E5F8FF93E5F8FF93E5
|
||||
F8FF91E5F8FF93DBE9FF93D7E3FF93D2DCFF90CED7FF8CC8CFFF86C1C6FFC9D8
|
||||
D6FF3594DAFFC57444E8CA7F53F1369ADAF8F2FAFDFF94E6F8FF92E5F8FF90E5
|
||||
F8FF8BE3F8FF86E2F7FF7FE1F7FF77DEF6FF6CDCF6FF5ED9F4FF4FD5F3FFCCF2
|
||||
FBFF3594DAFFFFFFFF00FFFFFF003594DAF7EFFAFEFF93E5F8FF8FE4F8FF89E3
|
||||
F8FF82E1F7FF7ADFF7FF71DEF6FF67DBF5FF5BD8F4FF4DD4F3FF40D1F2FFCAF2
|
||||
FBFF3594DAFFFFFFFF00FFFFFF00338ED9FBDCF0FAFF98E1F6FF95E0F6FF92DF
|
||||
F6FF8EDEF5FF89DCF5FF85DAF4FF80D9F4FF7AD7F3FF74D5F3FF70D3F2FFC2EA
|
||||
F8FF3594DAFFFFFFFF00FFFFFF002C86D8002D88D8F72D87D8F72D88D8F72D88
|
||||
D8F72D88D8F72D88D8F72D88D8F72D88D8F72D88D8F72D88D8F72D87D8F72D88
|
||||
D8F72C86D800FFFFFF00FFFFFF00BC6B3671BC6B3690BC6B36CCBC6B36EEBC6B
|
||||
36FABB6B36FEBB6B36FFBB6A36FFBB6A36FFBC6C39FFBD6E3BFFBB6D3AFFBB6B
|
||||
38EFBB703ECBB6693554FFFFFF00BC6B369BF6E0D1FFF7E0D1FFFEFBF8FFFEFB
|
||||
F7FFFDF9F6FFFCF5F0FFFAF0EAFFFBF2EDFFFDF9F6FFFDFAF7FFFBF1EBFFF8E9
|
||||
DFFEECD0BDFBC9895EECB5693563BC6B36D8F6DFD1FFE9AA80FFFEFAF6FFFDFA
|
||||
F6FFC88C64FFFBF3EEFFFBF1EAFFFCF6F2FFFEFBF8FFFCF6F1FFF9ECE2FFF8E7
|
||||
DBFFEED0BAFFECD0BDFFBB703EF8BC6B36F0F6DFD0FFE8A87EFFFCF6F1FFFCF6
|
||||
F1FFC88C64FFFAF1E9FFFBF4EEFFFDFAF7FFFDF9F6FFFAF0E8FFF8E8DDFFF7E6
|
||||
DBFFE1A37AFFEFD5C3FFB76935FEBC6B36FAF5DDCCFFE7A87EFFFAF0E8FFFAF0
|
||||
E8FFC98D66FFFAF0E9FFFDF8F3FFFEFAF8FFFCF4EFFFF9E9DFFFF7E7DBFFF7E5
|
||||
D9FFE0A278FFE7C2A9FFB66835FFBB6B36FEF4DCC9FFE7A77DFFF9ECE1FFF9EC
|
||||
E1FFF9EDE3FFFCF4EEFFFDFAF7FFFDF7F3FFFAEDE5FFF7E7DBFFF7E5D9FFF6E5
|
||||
D8FFDEA077FFE4BEA4FFB46734FFBB6B36FFF4D9C7FFE6A67DFFC88C64FFC98D
|
||||
65FFC98E67FFCB926CFFCB926DFFCA9069FFC88C65FFC88C64FFC88C64FFC88C
|
||||
64FFDA9C74FFE1BA9FFFB36634FFBB6A36FFF2D8C5FFE3A47BFFE3A37AFFE3A4
|
||||
7AFFE2A47BFFE2A37BFFE1A37BFFE1A279FFDFA077FFDE9F76FFDD9E74FFDB9C
|
||||
72FFDC9D74FFDDB59AFFB16534FFBB6A36FFF2D5C2FFE3A37AFFE3A37AFFE2A3
|
||||
7BFFE2A37BFFE2A47BFFE1A279FFE0A178FFDEA077FFDE9E75FFDC9D74FFDA9B
|
||||
73FFD99B73FFDAB095FFAF6433FFBB6A36FFF0D2BEFFE2A37AFFE2A37AFFE1A3
|
||||
7AFFE2A37BFFE1A37BFFE0A178FFDE9F77FFDD9F76FFDC9D74FFD99B72FFD899
|
||||
71FFD69970FFD5AB8EFFAD6333FFBA6A36FFEFD0BBFFE2A27AFFFEFBF8FFFEFB
|
||||
F8FFFEFBF8FFFEFBF8FFFEFBF8FFFEFBF8FFFEFBF8FFFEFBF8FFFEFBF8FFFEFB
|
||||
F8FFD3966DFFD2A78AFFAB6232FFBB6B38FFEFCEB8FFE1A279FFFEFAF7FF62C0
|
||||
88FF62C088FF62C088FF62C088FF62C088FF62C088FF62C088FF62C088FFFDF9
|
||||
F6FFCF936AFFCEA384FFAA6132FFBB6C38FFEECCB6FFE1A27AFFFEFAF7FFBFDC
|
||||
C2FFBFDCC2FFBFDCC2FFBFDCC2FFBFDCC2FFBFDCC2FFBFDCC2FFBFDCC2FFFDF9
|
||||
F6FFCD9068FFCC9E81FFA86132FFBA6B37FEEDCAB3FFE0A27AFFFEFAF7FF62C0
|
||||
88FF62C088FF62C088FF62C088FF62C088FF62C088FF62C088FF62C088FFFDF9
|
||||
F6FFCA8D65FFC99B7CFFA76031FEBA6A35DEEBC6ADFFEAC5ADFFFEFBF8FFFEFB
|
||||
F8FFFEFBF8FFFEFBF8FFFEFBF8FFFEFBF8FFFEFBF8FFFEFBF8FFFEFBF8FFFEFB
|
||||
F8FFC89A7CFFC79879FFA76031EDBA6A3600B96935B5B86935EEB76835FFB568
|
||||
35FFB46734FFB26634FFB06533FFAE6433FFAC6332FFAA6232FFA96132FFA860
|
||||
31FFA76031FEA66031F1A86131C4FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF006D9CD4896A9AD2FB6697CFEEFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00709ED6DB6D9C
|
||||
D4FF85B1DAFF5A91B9FF6093CBEAFFFFFF00FFFFFF00808080FF7E7E7EFF7C7C
|
||||
7CFF7A7A7AFF777777FF757575FF727272FF719ED4FF6F9ED6FF87B2DCFFABD3
|
||||
E8FFA9D0E6FF5890B8FF598EC6EAFFFFFF00FFFFFF007D7D7DFF999999FF9999
|
||||
99FF9A9A9AFF9A9A9AFF9B9B9BFF9B9B9BFF6F9DD3FFAAD1E7FFABD1E7FF98C7
|
||||
E1FF91C2DEFF568FB7FF5289C1EAFFFFFF00FFFFFF007A7A7AFF999999FF5291
|
||||
59FF999A99FF9B9B9BFF9C9C9CFF9C9C9CFF6C9AD0FFA7CEE5FF8FC1DFFF89BD
|
||||
DCFF8BBDDCFF538DB6FF4B84BCEAFFFFFF00FFFFFF00777777FF9A9A9AFF3D8A
|
||||
45FF498A4FFF9C9C9CFF9D9D9DFF9D9D9DFF6696CCFFA2CBE3FF89BDDCFF83B9
|
||||
DAFF84B9DAFF518BB5FF437EB6EA44944DFF42914BFF3F8D48FF3D8945FF5DA4
|
||||
65FF5AA061FF45834BFF9E9E9EFF9E9E9EFF6092C9FF9EC7E2FF83B8DAFF7DB4
|
||||
D7FF7EB3D7FF4F89B4FF3B79B1EA41904AFF94D29FFF91D09AFF8DCD96FF89CB
|
||||
92FF84C88DFF519858FF417C46FF9F9F9FFF5A8EC4FF98C3E0FF7CB3D7FF74AF
|
||||
D6FF5EC4EDFF4B88B3FF3473ABEA3E8B46FF8FCE99FF7DC687FF78C381FF73C0
|
||||
7CFF74C07CFF79C281FF49904FFF547F57FF5489BFFF94BFDDFF75ADD4FF63B8
|
||||
E1FF4BD4FFFF428BB8FF2C6EA6EA3B8742FF89CB92FF84C88DFF80C688FF7BC3
|
||||
83FF77C17FFF478F4DFF3B743FFFA1A1A1FF4C84BAFF8DBBDBFF6EA8D1FF66A6
|
||||
D1FF5FB4DFFF4785B1FF2569A1EA37823EFF347E3BFF317937FF2E7534FF4991
|
||||
50FF468F4CFF39733DFFA1A1A1FFA2A2A2FF457EB4FF88B7D9FF67A3CFFF619E
|
||||
CCFF639FCCFF4583B1FF1F649CEAFFFFFF00FFFFFF00606060FFA0A0A0FF3D76
|
||||
41FF367139FFA2A2A2FFA2A2A2FFA3A3A3FF3D79B0FF82B3D7FF629FCCFF5A9A
|
||||
C9FF5E9BCAFF4381AFFF196098EAFFFFFF00FFFFFF005C5C5CFFA1A1A1FF3C73
|
||||
40FFA0A1A1FFA3A3A3FFA3A3A3FFA4A4A4FF3674AAFF7DAFD4FF5B9AC9FF5495
|
||||
C7FF5896C8FF4180AEFF135C94EAFFFFFF00FFFFFF00585858FFA2A2A2FFA2A2
|
||||
A2FFA3A3A3FFA4A4A4FFA4A4A4FFA5A5A5FF2F6FA5FF78ABD2FF78ABD3FF73A7
|
||||
D1FF69A0CDFF407FAEFF0F5991EA999999FF717171FF545454FF515151FF4F4F
|
||||
4FFF4C4C4CFF4A4A4AFF474747FF454545FF25679DFF3274A8FF3D7CAFFF4784
|
||||
B5FF4E8ABAFF3E7EADFF0C578FEAFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF001D639B1619609839145D9562105A
|
||||
92880D5890A4135C92FC0C578FED
|
||||
}
|
||||
end
|
||||
object ActionList1: TActionList
|
||||
left = 176
|
||||
top = 64
|
||||
object AcOpen: TAction
|
||||
Caption = 'Open...'
|
||||
ImageIndex = 0
|
||||
OnExecute = acOpenExecute
|
||||
end
|
||||
object AcSaveAs: TAction
|
||||
Caption = 'Save as...'
|
||||
ImageIndex = 1
|
||||
OnExecute = acSaveAsExecute
|
||||
end
|
||||
object AcQuit: TAction
|
||||
Caption = 'Quit'
|
||||
ImageIndex = 2
|
||||
OnExecute = acQuitExecute
|
||||
end
|
||||
end
|
||||
end
|
||||
|
@ -2,25 +2,205 @@
|
||||
|
||||
LazarusResources.Add('TForm1','FORMDATA',[
|
||||
'TPF0'#6'TForm1'#5'Form1'#4'Left'#3' '#1#6'Height'#3'S'#1#3'Top'#3#177#0#5'Wi'
|
||||
+'dth'#3#144#1#7'Caption'#6#9'FPSVisual'#12'ClientHeight'#3'?'#1#11'ClientWid'
|
||||
+'th'#3#144#1#4'Menu'#7#9'MainMenu1'#10'LCLVersion'#6#3'1.3'#0#15'TsWorksheet'
|
||||
+'Grid'#15'sWorksheetGrid1'#4'Left'#2#8#6'Height'#3#192#0#3'Top'#2'0'#5'Width'
|
||||
+#3#128#1#8'TabOrder'#2#0#0#0#7'TButton'#18'buttonPopulateGrid'#4'Left'#3#136
|
||||
+#0#6'Height'#2#25#3'Top'#3#8#1#5'Width'#2'p'#7'Caption'#6#13'Populate Grid'#7
|
||||
+'OnClick'#7#23'buttonPopulateGridClick'#8'TabOrder'#2#1#0#0#11'TOpenDialog'
|
||||
+#11'OpenDialog1'#10'DefaultExt'#6#4'.xls'#6'Filter'#6#192'Excel spreadsheet '
|
||||
+'(*.xls)|*.xls|Excel XML spreadsheet (*.xlsx)|*.xlxs|LibreOffice/OpenOffice '
|
||||
+'spreadsheet (*.ods)|*.ods|Wikitable (pipes) (.wikitable_pipes)|.wikitable_p'
|
||||
+'ipes|All files (*.*)|*.*'#7'Options'#11#20'ofExtensionDifferent'#14'ofEnabl'
|
||||
+'eSizing'#12'ofViewDetail'#0#4'left'#2#8#3'top'#3#8#1#0#0#11'TSaveDialog'#11
|
||||
+'SaveDialog1'#10'DefaultExt'#6#4'.xls'#6'Filter'#6#185'Excel spreadsheet (*.'
|
||||
+'xls)|*.xls|Excel XML spreadsheet (*.xlsx)|*.xlsx|LibreOffice/OpenOffice spr'
|
||||
+'eadsheet (*.ods)|*.ods|Wikitable (wikimedia) (.wikitable_wikimedia)|*.wikit'
|
||||
+'able_wikimedia'#7'Options'#11#20'ofExtensionDifferent'#14'ofEnableSizing'#12
|
||||
+'ofViewDetail'#0#4'left'#2'H'#3'top'#3#8#1#0#0#9'TMainMenu'#9'MainMenu1'#4'l'
|
||||
+'eft'#3'('#1#3'top'#3#8#1#0#9'TMenuItem'#7'mnuFile'#7'Caption'#6#5'&File'#0#9
|
||||
+'TMenuItem'#7'mnuOpen'#7'Caption'#6#8'&Open...'#7'OnClick'#7#12'mnuOpenClick'
|
||||
+#0#0#9'TMenuItem'#9'mnuSaveAs'#7'Caption'#6#11'&Save as...'#7'OnClick'#7#14
|
||||
+'mnuSaveAsClick'#0#0#9'TMenuItem'#7'mnuQuit'#7'Caption'#6#5'&Quit'#7'OnClick'
|
||||
+#7#12'mnuQuitClick'#0#0#0#0#0
|
||||
+'dth'#3#144#1#7'Caption'#6#7'fpsGrid'#12'ClientHeight'#3'?'#1#11'ClientWidth'
|
||||
+#3#144#1#4'Menu'#7#9'MainMenu1'#8'ShowHint'#9#10'LCLVersion'#6#3'1.3'#0#6'TP'
|
||||
+'anel'#6'Panel1'#4'Left'#2#0#6'Height'#2'7'#3'Top'#3#8#1#5'Width'#3#144#1#5
|
||||
+'Align'#7#8'alBottom'#10'BevelOuter'#7#6'bvNone'#12'ClientHeight'#2'7'#11'Cl'
|
||||
+'ientWidth'#3#144#1#8'TabOrder'#2#0#0#7'TButton'#15'btnPopulateGrid'#4'Left'
|
||||
+#3#24#1#6'Height'#2#25#3'Top'#2#8#5'Width'#2'p'#7'Caption'#6#13'Populate Gri'
|
||||
+'d'#7'OnClick'#7#20'btnPopulateGridClick'#8'TabOrder'#2#0#7'Visible'#8#0#0#9
|
||||
+'TCheckBox'#20'CbDisplayFixedColRow'#4'Left'#2#8#6'Height'#2#19#3'Top'#2#8#5
|
||||
+'Width'#3#130#0#7'Caption'#6#21'Display fixed col/row'#7'Checked'#9#7'OnClic'
|
||||
+'k'#7#25'CbDisplayFixedColRowClick'#5'State'#7#9'cbChecked'#8'TabOrder'#2#1#0
|
||||
+#0#9'TCheckBox'#13'CbDisplayGrid'#4'Left'#2#8#6'Height'#2#19#3'Top'#2#29#5'W'
|
||||
+'idth'#2'R'#7'Caption'#6#12'Display grid'#7'Checked'#9#7'OnClick'#7#18'CbDis'
|
||||
+'playGridClick'#5'State'#7#9'cbChecked'#8'TabOrder'#2#2#0#0#0#12'TPageContro'
|
||||
+'l'#12'PageControl1'#4'Left'#2#0#6'Height'#3#238#0#3'Top'#2#26#5'Width'#3#144
|
||||
+#1#10'ActivePage'#7#9'TabSheet1'#5'Align'#7#8'alClient'#8'TabIndex'#2#0#8'Ta'
|
||||
+'bOrder'#2#1#8'OnChange'#7#18'PageControl1Change'#0#9'TTabSheet'#9'TabSheet1'
|
||||
+#7'Caption'#6#6'Sheet1'#12'ClientHeight'#3#210#0#11'ClientWidth'#3#136#1#0#15
|
||||
+'TsWorksheetGrid'#15'sWorksheetGrid1'#4'Left'#2#0#6'Height'#3#210#0#3'Top'#2
|
||||
+#0#5'Width'#3#136#1#5'Align'#7#8'alClient'#7'Options'#11#15'goFixedVertLine'
|
||||
+#15'goFixedHorzLine'#10'goVertLine'#10'goHorzLine'#13'goRangeSelect'#11'goCo'
|
||||
+'lSizing'#15'goThumbTracking'#14'goSmoothScroll'#14'goCellEllipsis'#0#8'TabO'
|
||||
+'rder'#2#0#10'TitleStyle'#7#8'tsNative'#0#0#0#0#8'TToolBar'#8'ToolBar1'#4'Le'
|
||||
+'ft'#2#0#6'Height'#2#26#3'Top'#2#0#5'Width'#3#144#1#7'Caption'#6#8'ToolBar1'
|
||||
+#11'EdgeBorders'#11#0#6'Images'#7#10'ImageList1'#8'TabOrder'#2#2#0#11'TToolB'
|
||||
+'utton'#11'ToolButton1'#4'Left'#2#1#3'Top'#2#0#6'Action'#7#6'AcOpen'#0#0#11
|
||||
+'TToolButton'#11'ToolButton2'#4'Left'#2#24#3'Top'#2#0#6'Action'#7#8'AcSaveAs'
|
||||
+#0#0#11'TToolButton'#11'ToolButton3'#4'Left'#2'4'#3'Top'#2#0#6'Action'#7#6'A'
|
||||
+'cQuit'#0#0#11'TToolButton'#11'ToolButton5'#4'Left'#2'/'#3'Top'#2#0#5'Width'
|
||||
+#2#5#7'Caption'#6#11'ToolButton5'#5'Style'#7#10'tbsDivider'#0#0#0#11'TOpenDi'
|
||||
+'alog'#11'OpenDialog1'#10'DefaultExt'#6#4'.xls'#6'Filter'#6#192'Excel spread'
|
||||
+'sheet (*.xls)|*.xls|Excel XML spreadsheet (*.xlsx)|*.xlxs|LibreOffice/OpenO'
|
||||
+'ffice spreadsheet (*.ods)|*.ods|Wikitable (pipes) (.wikitable_pipes)|.wikit'
|
||||
+'able_pipes|All files (*.*)|*.*'#7'Options'#11#20'ofExtensionDifferent'#14'o'
|
||||
+'fEnableSizing'#12'ofViewDetail'#0#4'left'#2'@'#3'top'#3#176#0#0#0#11'TSaveD'
|
||||
+'ialog'#11'SaveDialog1'#10'DefaultExt'#6#4'.xls'#6'Filter'#6#185'Excel sprea'
|
||||
+'dsheet (*.xls)|*.xls|Excel XML spreadsheet (*.xlsx)|*.xlsx|LibreOffice/Open'
|
||||
+'Office spreadsheet (*.ods)|*.ods|Wikitable (wikimedia) (.wikitable_wikimedi'
|
||||
+'a)|*.wikitable_wikimedia'#7'Options'#11#20'ofExtensionDifferent'#14'ofEnabl'
|
||||
+'eSizing'#12'ofViewDetail'#0#4'left'#3#176#0#3'top'#3#176#0#0#0#9'TMainMenu'
|
||||
+#9'MainMenu1'#6'Images'#7#10'ImageList1'#4'left'#3' '#1#3'top'#3#176#0#0#9'T'
|
||||
+'MenuItem'#7'mnuFile'#7'Caption'#6#5'&File'#0#9'TMenuItem'#7'mnuOpen'#6'Acti'
|
||||
+'on'#7#6'AcOpen'#7'OnClick'#7#13'acOpenExecute'#0#0#9'TMenuItem'#9'mnuSaveAs'
|
||||
+#6'Action'#7#8'AcSaveAs'#7'OnClick'#7#15'acSaveAsExecute'#0#0#9'TMenuItem'#9
|
||||
+'MenuItem1'#7'Caption'#6#1'-'#0#0#9'TMenuItem'#7'mnuQuit'#6'Action'#7#6'AcQu'
|
||||
+'it'#7'OnClick'#7#13'acQuitExecute'#0#0#0#0#10'TImageList'#10'ImageList1'#4
|
||||
+'left'#3#176#0#3'top'#2'x'#6'Bitmap'#10#14#12#0#0'Li'#3#0#0#0#16#0#0#0#16#0#0
|
||||
+#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
|
||||
+#255#255#0#234#195#157#255#230#191#150#255#228#187#146#255#228#187#146#255
|
||||
+#209#160'l'#245#208#158'm'#246#204#150'_'#218#196'yB~'#178'g<'#9#255#255#255
|
||||
+#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
|
||||
+#255#255#0#229#190#150#255#255#255#254#255#253#243#233#255#253#243#234#255
|
||||
+#252#242#232#255#250#239#227#255#250#242#231#255#234#187#136#255#207#133'U'
|
||||
+#179#180'i='#12#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
|
||||
+#255#255#0#255#255#255#0#228#187#147#255#254#245#237#255#252#222#197#255#251
|
||||
+#224#199#255#249#220#194#255#245#211#180#255#254#249#243#255#250#226#196#255
|
||||
+#236#193#147#255#195'}H'#147#255#255#255#0#255#255#255#0#255#255#255#0#255
|
||||
+#255#255#0#255#255#255#0#255#255#255#0#228#187#146#255#254#246#240#255#252
|
||||
+#226#205#255#252#227#205#255#250#223#200#255#247#217#188#255#245#233#221#255
|
||||
+#250#243#235#255#251#248#243#255#202#131'S'#254#255#255#255#0#255#255#255#0
|
||||
+#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#228#187#146#255#254
|
||||
+#247#241#255#252#229#210#255#252#228#209#255#251#226#204#255#249#221#196#255
|
||||
+#246#215#187#255#243#209#175#255#250#239#228#255#204#135'X'#254'4'#180#217
|
||||
+#208'^'#194#225#250'`'#195#226#250'`'#195#226#250'`'#195#226#250'_'#195#226
|
||||
,#250#228#187#145#255#255#247#242#255#254#231#213#255#254#231#213#255#253#229
|
||||
+#209#255#250#224#202#255#249#222#196#255#247#217#188#255#253#242#231#255#204
|
||||
+#135'W'#254'6'#179#218#248#253#254#254#255#254#255#255#255#254#254#255#255
|
||||
+#253#254#255#255#254#255#255#255#228#186#145#255#255#247#240#255#255#231#213
|
||||
+#255#253#231#214#255#253#230#212#255#252#228#208#255#251#227#203#255#250#220
|
||||
+#194#255#254#243#232#255#204#134'V'#254'5'#175#218#240#247#252#254#255#142
|
||||
+#228#248#255#145#222#245#255#159#224#245#255#172#225#246#255#202#132'R'#255
|
||||
+#255#247#241#255#255#233#217#255#255#234#219#255#255#233#217#255#255#231#215
|
||||
+#255#255#229#210#255#255#226#203#255#255#247#241#255#203#133'U'#254'6'#170
|
||||
+#218#242#241#250#253#255#148#222#245#255#147#220#244#255'd'#188#233#255'5'
|
||||
+#148#218#255'5'#148#218#255'5'#148#218#255'5'#148#218#255'5'#148#218#255'5'
|
||||
+#148#218#255'5'#148#218#255'5'#148#218#255'5'#148#218#255#251#246#239#255#204
|
||||
+#131'U'#254'5'#171#218#250#232#246#251#255'p'#188#231#255'U'#170#226#255'M'
|
||||
+#165#224#255#145#201#235#255#250#243#239#255#253#254#253#255#255#253#252#255
|
||||
+#255#253#252#255#254#253#252#255#254#252#251#255#254#254#253#255'5'#148#218
|
||||
+#255#239#242#232#255#206#129'V'#255'7'#166#218#250#254#255#255#255#248#253
|
||||
+#255#255#246#253#255#255#245#252#255#255#243#252#254#255#154#228#244#255#154
|
||||
+#230#247#255#155#230#246#255#157#229#245#255#158#229#245#255#159#229#244#255
|
||||
+#218#243#248#255'5'#148#218#255#253#244#238#255#202#128'T'#249'6'#161#218#249
|
||||
+#246#252#254#255#148#229#248#255#147#229#248#255#147#229#248#255#145#229#248
|
||||
+#255#147#219#233#255#147#215#227#255#147#210#220#255#144#206#215#255#140#200
|
||||
+#207#255#134#193#198#255#201#216#214#255'5'#148#218#255#197'tD'#232#202#127
|
||||
+'S'#241'6'#154#218#248#242#250#253#255#148#230#248#255#146#229#248#255#144
|
||||
+#229#248#255#139#227#248#255#134#226#247#255#127#225#247#255'w'#222#246#255
|
||||
+'l'#220#246#255'^'#217#244#255'O'#213#243#255#204#242#251#255'5'#148#218#255
|
||||
+#255#255#255#0#255#255#255#0'5'#148#218#247#239#250#254#255#147#229#248#255
|
||||
+#143#228#248#255#137#227#248#255#130#225#247#255'z'#223#247#255'q'#222#246
|
||||
+#255'g'#219#245#255'['#216#244#255'M'#212#243#255'@'#209#242#255#202#242#251
|
||||
+#255'5'#148#218#255#255#255#255#0#255#255#255#0'3'#142#217#251#220#240#250
|
||||
+#255#152#225#246#255#149#224#246#255#146#223#246#255#142#222#245#255#137#220
|
||||
+#245#255#133#218#244#255#128#217#244#255'z'#215#243#255't'#213#243#255'p'#211
|
||||
+#242#255#194#234#248#255'5'#148#218#255#255#255#255#0#255#255#255#0','#134
|
||||
+#216#0'-'#136#216#247'-'#135#216#247'-'#136#216#247'-'#136#216#247'-'#136#216
|
||||
+#247'-'#136#216#247'-'#136#216#247'-'#136#216#247'-'#136#216#247'-'#136#216
|
||||
+#247'-'#135#216#247'-'#136#216#247','#134#216#0#255#255#255#0#255#255#255#0
|
||||
+#188'k6q'#188'k6'#144#188'k6'#204#188'k6'#238#188'k6'#250#187'k6'#254#187'k6'
|
||||
+#255#187'j6'#255#187'j6'#255#188'l9'#255#189'n;'#255#187'm:'#255#187'k8'#239
|
||||
+#187'p>'#203#182'i5T'#255#255#255#0#188'k6'#155#246#224#209#255#247#224#209
|
||||
+#255#254#251#248#255#254#251#247#255#253#249#246#255#252#245#240#255#250#240
|
||||
+#234#255#251#242#237#255#253#249#246#255#253#250#247#255#251#241#235#255#248
|
||||
+#233#223#254#236#208#189#251#201#137'^'#236#181'i5c'#188'k6'#216#246#223#209
|
||||
+#255#233#170#128#255#254#250#246#255#253#250#246#255#200#140'd'#255#251#243
|
||||
+#238#255#251#241#234#255#252#246#242#255#254#251#248#255#252#246#241#255#249
|
||||
+#236#226#255#248#231#219#255#238#208#186#255#236#208#189#255#187'p>'#248#188
|
||||
+'k6'#240#246#223#208#255#232#168'~'#255#252#246#241#255#252#246#241#255#200
|
||||
+#140'd'#255#250#241#233#255#251#244#238#255#253#250#247#255#253#249#246#255
|
||||
+#250#240#232#255#248#232#221#255#247#230#219#255#225#163'z'#255#239#213#195
|
||||
+#255#183'i5'#254#188'k6'#250#245#221#204#255#231#168'~'#255#250#240#232#255
|
||||
+#250#240#232#255#201#141'f'#255#250#240#233#255#253#248#243#255#254#250#248
|
||||
+#255#252#244#239#255#249#233#223#255#247#231#219#255#247#229#217#255#224#162
|
||||
+'x'#255#231#194#169#255#182'h5'#255#187'k6'#254#244#220#201#255#231#167'}'
|
||||
+#255#249#236#225#255#249#236#225#255#249#237#227#255#252#244#238#255#253#250
|
||||
+#247#255#253#247#243#255#250#237#229#255#247#231#219#255#247#229#217#255#246
|
||||
+#229#216#255#222#160'w'#255#228#190#164#255#180'g4'#255#187'k6'#255#244#217
|
||||
+#199#255#230#166'}'#255#200#140'd'#255#201#141'e'#255#201#142'g'#255#203#146
|
||||
+'l'#255#203#146'm'#255#202#144'i'#255#200#140'e'#255#200#140'd'#255#200#140
|
||||
+'d'#255#200#140'd'#255#218#156't'#255#225#186#159#255#179'f4'#255#187'j6'#255
|
||||
+#242#216#197#255#227#164'{'#255#227#163'z'#255#227#164'z'#255#226#164'{'#255
|
||||
+#226#163'{'#255#225#163'{'#255#225#162'y'#255#223#160'w'#255#222#159'v'#255
|
||||
+#221#158't'#255#219#156'r'#255#220#157't'#255#221#181#154#255#177'e4'#255#187
|
||||
+'j6'#255#242#213#194#255#227#163'z'#255#227#163'z'#255#226#163'{'#255#226#163
|
||||
+'{'#255#226#164'{'#255#225#162'y'#255#224#161'x'#255#222#160'w'#255#222#158
|
||||
+'u'#255#220#157't'#255#218#155's'#255#217#155's'#255#218#176#149#255#175'd3'
|
||||
+#255#187'j6'#255#240#210#190#255#226#163'z'#255#226#163'z'#255#225#163'z'#255
|
||||
,#226#163'{'#255#225#163'{'#255#224#161'x'#255#222#159'w'#255#221#159'v'#255
|
||||
+#220#157't'#255#217#155'r'#255#216#153'q'#255#214#153'p'#255#213#171#142#255
|
||||
+#173'c3'#255#186'j6'#255#239#208#187#255#226#162'z'#255#254#251#248#255#254
|
||||
+#251#248#255#254#251#248#255#254#251#248#255#254#251#248#255#254#251#248#255
|
||||
+#254#251#248#255#254#251#248#255#254#251#248#255#254#251#248#255#211#150'm'
|
||||
+#255#210#167#138#255#171'b2'#255#187'k8'#255#239#206#184#255#225#162'y'#255
|
||||
+#254#250#247#255'b'#192#136#255'b'#192#136#255'b'#192#136#255'b'#192#136#255
|
||||
+'b'#192#136#255'b'#192#136#255'b'#192#136#255'b'#192#136#255#253#249#246#255
|
||||
+#207#147'j'#255#206#163#132#255#170'a2'#255#187'l8'#255#238#204#182#255#225
|
||||
+#162'z'#255#254#250#247#255#191#220#194#255#191#220#194#255#191#220#194#255
|
||||
+#191#220#194#255#191#220#194#255#191#220#194#255#191#220#194#255#191#220#194
|
||||
+#255#253#249#246#255#205#144'h'#255#204#158#129#255#168'a2'#255#186'k7'#254
|
||||
+#237#202#179#255#224#162'z'#255#254#250#247#255'b'#192#136#255'b'#192#136#255
|
||||
+'b'#192#136#255'b'#192#136#255'b'#192#136#255'b'#192#136#255'b'#192#136#255
|
||||
+'b'#192#136#255#253#249#246#255#202#141'e'#255#201#155'|'#255#167'`1'#254#186
|
||||
+'j5'#222#235#198#173#255#234#197#173#255#254#251#248#255#254#251#248#255#254
|
||||
+#251#248#255#254#251#248#255#254#251#248#255#254#251#248#255#254#251#248#255
|
||||
+#254#251#248#255#254#251#248#255#254#251#248#255#200#154'|'#255#199#152'y'
|
||||
+#255#167'`1'#237#186'j6'#0#185'i5'#181#184'i5'#238#183'h5'#255#181'h5'#255
|
||||
+#180'g4'#255#178'f4'#255#176'e3'#255#174'd3'#255#172'c2'#255#170'b2'#255#169
|
||||
+'a2'#255#168'`1'#255#167'`1'#254#166'`1'#241#168'a1'#196#255#255#255#0#255
|
||||
+#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
|
||||
+#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0
|
||||
+#255#255#255#0'm'#156#212#137'j'#154#210#251'f'#151#207#238#255#255#255#0#255
|
||||
+#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255
|
||||
+#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0'p'#158#214#219
|
||||
+'m'#156#212#255#133#177#218#255'Z'#145#185#255'`'#147#203#234#255#255#255#0
|
||||
+#255#255#255#0#128#128#128#255'~~~'#255'|||'#255'zzz'#255'www'#255'uuu'#255
|
||||
+'rrr'#255'q'#158#212#255'o'#158#214#255#135#178#220#255#171#211#232#255#169
|
||||
+#208#230#255'X'#144#184#255'Y'#142#198#234#255#255#255#0#255#255#255#0'}}}'
|
||||
+#255#153#153#153#255#153#153#153#255#154#154#154#255#154#154#154#255#155#155
|
||||
+#155#255#155#155#155#255'o'#157#211#255#170#209#231#255#171#209#231#255#152
|
||||
+#199#225#255#145#194#222#255'V'#143#183#255'R'#137#193#234#255#255#255#0#255
|
||||
+#255#255#0'zzz'#255#153#153#153#255'R'#145'Y'#255#153#154#153#255#155#155#155
|
||||
+#255#156#156#156#255#156#156#156#255'l'#154#208#255#167#206#229#255#143#193
|
||||
+#223#255#137#189#220#255#139#189#220#255'S'#141#182#255'K'#132#188#234#255
|
||||
+#255#255#0#255#255#255#0'www'#255#154#154#154#255'='#138'E'#255'I'#138'O'#255
|
||||
+#156#156#156#255#157#157#157#255#157#157#157#255'f'#150#204#255#162#203#227
|
||||
+#255#137#189#220#255#131#185#218#255#132#185#218#255'Q'#139#181#255'C~'#182
|
||||
+#234'D'#148'M'#255'B'#145'K'#255'?'#141'H'#255'='#137'E'#255']'#164'e'#255'Z'
|
||||
+#160'a'#255'E'#131'K'#255#158#158#158#255#158#158#158#255'`'#146#201#255#158
|
||||
+#199#226#255#131#184#218#255'}'#180#215#255'~'#179#215#255'O'#137#180#255';y'
|
||||
+#177#234'A'#144'J'#255#148#210#159#255#145#208#154#255#141#205#150#255#137
|
||||
+#203#146#255#132#200#141#255'Q'#152'X'#255'A|F'#255#159#159#159#255'Z'#142
|
||||
+#196#255#152#195#224#255'|'#179#215#255't'#175#214#255'^'#196#237#255'K'#136
|
||||
+#179#255'4s'#171#234'>'#139'F'#255#143#206#153#255'}'#198#135#255'x'#195#129
|
||||
+#255's'#192'|'#255't'#192'|'#255'y'#194#129#255'I'#144'O'#255'T'#127'W'#255
|
||||
+'T'#137#191#255#148#191#221#255'u'#173#212#255'c'#184#225#255'K'#212#255#255
|
||||
+'B'#139#184#255',n'#166#234';'#135'B'#255#137#203#146#255#132#200#141#255#128
|
||||
+#198#136#255'{'#195#131#255'w'#193#127#255'G'#143'M'#255';t?'#255#161#161#161
|
||||
+#255'L'#132#186#255#141#187#219#255'n'#168#209#255'f'#166#209#255'_'#180#223
|
||||
+#255'G'#133#177#255'%i'#161#234'7'#130'>'#255'4~;'#255'1y7'#255'.u4'#255'I'
|
||||
+#145'P'#255'F'#143'L'#255'9s='#255#161#161#161#255#162#162#162#255'E~'#180
|
||||
+#255#136#183#217#255'g'#163#207#255'a'#158#204#255'c'#159#204#255'E'#131#177
|
||||
+#255#31'd'#156#234#255#255#255#0#255#255#255#0'```'#255#160#160#160#255'=vA'
|
||||
+#255'6q9'#255#162#162#162#255#162#162#162#255#163#163#163#255'=y'#176#255#130
|
||||
+#179#215#255'b'#159#204#255'Z'#154#201#255'^'#155#202#255'C'#129#175#255#25
|
||||
+'`'#152#234#255#255#255#0#255#255#255#0'\\\'#255#161#161#161#255'<s@'#255#160
|
||||
+#161#161#255#163#163#163#255#163#163#163#255#164#164#164#255'6t'#170#255'}'
|
||||
+#175#212#255'['#154#201#255'T'#149#199#255'X'#150#200#255'A'#128#174#255#19
|
||||
+'\'#148#234#255#255#255#0#255#255#255#0'XXX'#255#162#162#162#255#162#162#162
|
||||
+#255#163#163#163#255#164#164#164#255#164#164#164#255#165#165#165#255'/o'#165
|
||||
+#255'x'#171#210#255'x'#171#211#255's'#167#209#255'i'#160#205#255'@'#127#174
|
||||
+#255#15'Y'#145#234#153#153#153#255'qqq'#255'TTT'#255'QQQ'#255'OOO'#255'LLL'
|
||||
,#255'JJJ'#255'GGG'#255'EEE'#255'%g'#157#255'2t'#168#255'=|'#175#255'G'#132
|
||||
+#181#255'N'#138#186#255'>~'#173#255#12'W'#143#234#255#255#255#0#255#255#255#0
|
||||
+#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255#255#255#0#255
|
||||
+#255#255#0#255#255#255#0#29'c'#155#22#25'`'#152'9'#20']'#149'b'#16'Z'#146#136
|
||||
+#13'X'#144#164#19'\'#146#252#12'W'#143#237#0#0#11'TActionList'#11'ActionList'
|
||||
+'1'#4'left'#3#176#0#3'top'#2'@'#0#7'TAction'#6'AcOpen'#7'Caption'#6#7'Open..'
|
||||
+'.'#10'ImageIndex'#2#0#9'OnExecute'#7#13'acOpenExecute'#0#0#7'TAction'#8'AcS'
|
||||
+'aveAs'#7'Caption'#6#10'Save as...'#10'ImageIndex'#2#1#9'OnExecute'#7#15'acS'
|
||||
+'aveAsExecute'#0#0#7'TAction'#6'AcQuit'#7'Caption'#6#4'Quit'#10'ImageIndex'#2
|
||||
+#2#9'OnExecute'#7#13'acQuitExecute'#0#0#0#0
|
||||
]);
|
||||
|
@ -6,7 +6,7 @@ interface
|
||||
|
||||
uses
|
||||
Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs,
|
||||
StdCtrls, Menus,
|
||||
StdCtrls, Menus, ExtCtrls, ComCtrls, ActnList,
|
||||
fpspreadsheetgrid, fpspreadsheet, fpsallformats;
|
||||
|
||||
type
|
||||
@ -14,19 +14,38 @@ type
|
||||
{ TForm1 }
|
||||
|
||||
TForm1 = class(TForm)
|
||||
buttonPopulateGrid: TButton;
|
||||
AcOpen: TAction;
|
||||
AcSaveAs: TAction;
|
||||
AcQuit: TAction;
|
||||
ActionList1: TActionList;
|
||||
btnPopulateGrid: TButton;
|
||||
CbDisplayFixedColRow: TCheckBox;
|
||||
CbDisplayGrid: TCheckBox;
|
||||
ImageList1: TImageList;
|
||||
MainMenu1: TMainMenu;
|
||||
MenuItem1: TMenuItem;
|
||||
mnuFile: TMenuItem;
|
||||
mnuOpen: TMenuItem;
|
||||
mnuQuit: TMenuItem;
|
||||
mnuSaveAs: TMenuItem;
|
||||
OpenDialog1: TOpenDialog;
|
||||
PageControl1: TPageControl;
|
||||
Panel1: TPanel;
|
||||
SaveDialog1: TSaveDialog;
|
||||
sWorksheetGrid1: TsWorksheetGrid;
|
||||
procedure buttonPopulateGridClick(Sender: TObject);
|
||||
procedure mnuOpenClick(Sender: TObject);
|
||||
procedure mnuQuitClick(Sender: TObject);
|
||||
procedure mnuSaveAsClick(Sender: TObject);
|
||||
TabSheet1: TTabSheet;
|
||||
ToolBar1: TToolBar;
|
||||
ToolButton1: TToolButton;
|
||||
ToolButton2: TToolButton;
|
||||
ToolButton3: TToolButton;
|
||||
ToolButton5: TToolButton;
|
||||
procedure btnPopulateGridClick(Sender: TObject);
|
||||
procedure CbDisplayFixedColRowClick(Sender: TObject);
|
||||
procedure CbDisplayGridClick(Sender: TObject);
|
||||
procedure acOpenExecute(Sender: TObject);
|
||||
procedure acQuitExecute(Sender: TObject);
|
||||
procedure acSaveAsExecute(Sender: TObject);
|
||||
procedure PageControl1Change(Sender: TObject);
|
||||
private
|
||||
{ private declarations }
|
||||
public
|
||||
@ -38,42 +57,76 @@ var
|
||||
|
||||
implementation
|
||||
|
||||
uses
|
||||
Grids;
|
||||
|
||||
{ TForm1 }
|
||||
|
||||
procedure TForm1.buttonPopulateGridClick(Sender: TObject);
|
||||
procedure TForm1.btnPopulateGridClick(Sender: TObject);
|
||||
// Populate grid with some demo data
|
||||
var
|
||||
lWorksheet: TsWorksheet;
|
||||
lCell: PCell;
|
||||
begin
|
||||
lWorksheet := TsWorksheet.Create;
|
||||
try
|
||||
lWorksheet.WriteUTF8Text(2, 2, 'Algo');
|
||||
sWorksheetGrid1.LoadFromWorksheet(lWorksheet);
|
||||
finally
|
||||
lWorksheet.Free;
|
||||
end;
|
||||
// create a cell (2,2) if not yet available
|
||||
lCell := sWorksheetGrid1.Worksheet.GetCell(2, 2);
|
||||
sWorksheetGrid1.Worksheet.WriteUTF8Text(2, 2, 'Algo');
|
||||
sWorksheetGrid1.Invalidate;
|
||||
end;
|
||||
|
||||
procedure TForm1.mnuOpenClick(Sender: TObject);
|
||||
procedure TForm1.CbDisplayFixedColRowClick(Sender: TObject);
|
||||
begin
|
||||
sWorksheetGrid1.DisplayFixedColRow := CbDisplayFixedColRow.Checked;
|
||||
end;
|
||||
|
||||
procedure TForm1.CbDisplayGridClick(Sender: TObject);
|
||||
begin
|
||||
if CbDisplayGrid.Checked then
|
||||
sWorksheetGrid1.Options := sWorksheetGrid1.Options + [goHorzLine, goVertLine]
|
||||
else
|
||||
sWorksheetGrid1.Options := sWorksheetGrid1.Options - [goHorzLine, goVertLine];
|
||||
end;
|
||||
|
||||
procedure TForm1.acOpenExecute(Sender: TObject);
|
||||
// Loads first worksheet from file into grid
|
||||
var
|
||||
pages: TStrings;
|
||||
i: Integer;
|
||||
begin
|
||||
if OpenDialog1.Execute then
|
||||
begin
|
||||
sWorksheetGrid1.LoadFromSpreadsheetFile(OpenDialog1.FileName);
|
||||
Caption := Format('fpsGrid - %s', [OpenDialog1.Filename]);
|
||||
|
||||
// Create a tab in the pagecontrol for each worksheet contained in the workbook
|
||||
// This would be easer with a TTabControl. This has display issues, though.
|
||||
pages := TStringList.Create;
|
||||
try
|
||||
sWorksheetGrid1.GetSheets(pages);
|
||||
sWorksheetGrid1.Parent := PageControl1.Pages[0];
|
||||
while PageControl1.PageCount > pages.Count do PageControl1.Pages[1].Free;
|
||||
while PageControl1.PageCount < pages.Count do PageControl1.AddTabSheet;
|
||||
for i:=0 to PageControl1.PageCount-1 do
|
||||
PageControl1.Pages[i].Caption := pages[i];
|
||||
finally
|
||||
pages.Free;
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TForm1.mnuQuitClick(Sender: TObject);
|
||||
procedure TForm1.acQuitExecute(Sender: TObject);
|
||||
begin
|
||||
Close;
|
||||
end;
|
||||
|
||||
procedure TForm1.mnuSaveAsClick(Sender: TObject);
|
||||
procedure TForm1.acSaveAsExecute(Sender: TObject);
|
||||
// Saves sheet in grid to file, overwriting existing file
|
||||
var
|
||||
lWorkBook: TsWorkbook;
|
||||
lWorkSheet:TsWorksheet;
|
||||
begin
|
||||
ShowMessage('Not implemented...');
|
||||
exit;
|
||||
|
||||
if SaveDialog1.Execute then
|
||||
begin
|
||||
lWorkBook := TsWorkBook.Create;
|
||||
@ -87,6 +140,12 @@ begin
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TForm1.PageControl1Change(Sender: TObject);
|
||||
begin
|
||||
sWorksheetGrid1.Parent := PageControl1.Pages[PageControl1.ActivePageIndex];
|
||||
sWorksheetGrid1.SelectSheetByIndex(PageControl1.ActivePageIndex);
|
||||
end;
|
||||
|
||||
|
||||
initialization
|
||||
{$I mainform.lrs}
|
||||
|
@ -216,7 +216,7 @@ type
|
||||
}
|
||||
|
||||
TCell = record
|
||||
Col: Byte; // zero-based
|
||||
Col: Cardinal; // zero-based
|
||||
Row: Cardinal; // zero-based
|
||||
ContentType: TCellContentType;
|
||||
{ Possible values for the cells }
|
||||
|
@ -19,22 +19,35 @@ type
|
||||
|
||||
{ TsCustomWorksheetGrid }
|
||||
|
||||
TsCustomWorksheetGrid = class(TCustomStringGrid)
|
||||
TsCustomWorksheetGrid = class(TCustomDrawGrid)
|
||||
private
|
||||
FWorkbook: TsWorkbook;
|
||||
FWorksheet: TsWorksheet;
|
||||
FDisplayFixedColRow: Boolean;
|
||||
function CalcColWidth(AWidth: Single): Integer;
|
||||
procedure SetDisplayFixedColRow(const AValue: Boolean);
|
||||
{ Private declarations }
|
||||
protected
|
||||
{ Protected declarations }
|
||||
procedure DoPrepareCanvas(ACol, ARow: Integer; AState: TGridDrawState); override;
|
||||
procedure DrawCellGrid(aCol,aRow: Integer; aRect: TRect; aState: TGridDrawState); override;
|
||||
procedure DrawTextInCell(ACol, ARow: Integer; ARect: TRect; AState: TGridDrawState); override;
|
||||
function GetCellText(ACol, ARow: Integer): String;
|
||||
procedure Loaded; override;
|
||||
procedure Setup;
|
||||
public
|
||||
{ methods }
|
||||
constructor Create(AOwner: TComponent); override;
|
||||
destructor Destroy; override;
|
||||
procedure GetSheets(const ASheets: TStrings);
|
||||
procedure LoadFromWorksheet(AWorksheet: TsWorksheet);
|
||||
procedure LoadFromSpreadsheetFile(AFileName: string; AFormat: TsSpreadsheetFormat; AWorksheetIndex: Integer = 0); overload;
|
||||
procedure LoadFromSpreadsheetFile(AFileName: string; AWorksheetIndex: Integer = 0); overload;
|
||||
procedure SaveToWorksheet(AWorksheet: TsWorksheet);
|
||||
procedure SelectSheetByIndex(AIndex: Integer);
|
||||
property DisplayFixedColRow: Boolean read FDisplayFixedColRow write SetDisplayFixedColRow;
|
||||
property Worksheet: TsWorksheet read FWorksheet;
|
||||
property Workbook: TsWorkbook read FWorkbook;
|
||||
end;
|
||||
|
||||
{ TsWorksheetGrid }
|
||||
@ -52,7 +65,7 @@ type
|
||||
property BorderStyle;
|
||||
property Color;
|
||||
property ColCount;
|
||||
property Columns;
|
||||
//property Columns;
|
||||
property Constraints;
|
||||
property DefaultColWidth;
|
||||
property DefaultDrawing;
|
||||
@ -88,7 +101,6 @@ type
|
||||
property VisibleColCount;
|
||||
property VisibleRowCount;
|
||||
|
||||
|
||||
property OnBeforeSelection;
|
||||
property OnChangeBounds;
|
||||
property OnClick;
|
||||
@ -140,115 +152,230 @@ procedure Register;
|
||||
|
||||
implementation
|
||||
|
||||
uses
|
||||
fpsUtils;
|
||||
|
||||
procedure Register;
|
||||
begin
|
||||
RegisterComponents('Additional',[TsWorksheetGrid]);
|
||||
end;
|
||||
|
||||
const
|
||||
INT_FPSCOLROW_TO_GRIDCOLROW_WITH_FIXEDCOLROW = 2;
|
||||
INT_FPSCOLROW_TO_GRIDCOLROW = 1;
|
||||
|
||||
{ TsCustomWorksheetGrid }
|
||||
|
||||
procedure TsCustomWorksheetGrid.SetDisplayFixedColRow(const AValue: Boolean);
|
||||
var
|
||||
x: Integer;
|
||||
begin
|
||||
if AValue = FDisplayFixedColRow then Exit;
|
||||
|
||||
FDisplayFixedColRow := AValue;
|
||||
|
||||
if AValue then
|
||||
begin
|
||||
for x := 1 to ColCount - 1 do
|
||||
SetCells(x, 0, 'A');
|
||||
for x := 1 to RowCount - 1 do
|
||||
SetCells(0, x, IntToStr(x));
|
||||
end;
|
||||
end;
|
||||
|
||||
constructor TsCustomWorksheetGrid.Create(AOwner: TComponent);
|
||||
begin
|
||||
inherited Create(AOwner);
|
||||
|
||||
FDisplayFixedColRow := False;
|
||||
FixedCols := 0;
|
||||
FixedRows := 0;
|
||||
FDisplayFixedColRow := true;
|
||||
end;
|
||||
|
||||
procedure TsCustomWorksheetGrid.LoadFromWorksheet(AWorksheet: TsWorksheet);
|
||||
var
|
||||
x, lRow, lCol: Integer;
|
||||
lStr: string;
|
||||
lCell: PCell;
|
||||
destructor TsCustomWorksheetGrid.Destroy;
|
||||
begin
|
||||
FWorksheet := AWorksheet;
|
||||
FreeAndNil(FWorkbook);
|
||||
inherited Destroy;
|
||||
end;
|
||||
|
||||
{ First get the size of the table }
|
||||
if FWorksheet.GetCellCount = 0 then
|
||||
begin
|
||||
ColCount := 0;
|
||||
RowCount := 0;
|
||||
end
|
||||
else
|
||||
begin
|
||||
if DisplayFixedColRow then
|
||||
begin
|
||||
ColCount := FWorksheet.GetLastColNumber() + INT_FPSCOLROW_TO_GRIDCOLROW_WITH_FIXEDCOLROW;
|
||||
RowCount := FWorksheet.GetLastRowNumber() + INT_FPSCOLROW_TO_GRIDCOLROW_WITH_FIXEDCOLROW;
|
||||
function TsCustomWorksheetGrid.CalcColWidth(AWidth: Single): Integer;
|
||||
var
|
||||
w0: Integer;
|
||||
begin
|
||||
w0 := Canvas.TextWidth('0');
|
||||
Result := Round(AWidth * w0);
|
||||
end;
|
||||
|
||||
procedure TsCustomWorksheetGrid.DoPrepareCanvas(ACol, ARow: Integer;
|
||||
AState: TGridDrawState);
|
||||
var
|
||||
ts: TTextStyle;
|
||||
lCell: PCell;
|
||||
r, c: Integer;
|
||||
begin
|
||||
ts := Canvas.TextStyle;
|
||||
if FDisplayFixedColRow then begin
|
||||
// Formatting of row and column headers
|
||||
if ARow = 0 then
|
||||
ts.Alignment := taCenter
|
||||
else
|
||||
if ACol = 0 then
|
||||
ts.Alignment := taRightJustify;
|
||||
end;
|
||||
if FWorksheet <> nil then begin
|
||||
r := ARow - FixedRows;
|
||||
c := ACol - FixedCols;
|
||||
lCell := FWorksheet.FindCell(r, c);
|
||||
if lCell <> nil then begin
|
||||
// Default alignment of number is right-justify
|
||||
if lCell^.ContentType = cctNumber then
|
||||
ts.Alignment := taRightJustify;
|
||||
end;
|
||||
end;
|
||||
Canvas.TextStyle := ts;
|
||||
|
||||
inherited DoPrepareCanvas(ACol, ARow, AState);
|
||||
end;
|
||||
|
||||
procedure TsCustomWorksheetGrid.DrawCellGrid(ACol, ARow: Integer; ARect: TRect;
|
||||
AState: TGridDrawState);
|
||||
var
|
||||
lCell: PCell;
|
||||
r, c: Integer;
|
||||
begin
|
||||
inherited;
|
||||
|
||||
if FWorksheet = nil then exit;
|
||||
|
||||
r := ARow - FixedRows;
|
||||
c := ACol - FixedCols;
|
||||
lCell := FWorksheet.FindCell(r, c);
|
||||
if (lCell <> nil) and (uffBorder in lCell^.UsedFormattingFields) then begin
|
||||
Canvas.Pen.Style := psSolid;
|
||||
Canvas.Pen.Color := clBlack;
|
||||
if (cbNorth in lCell^.Border) then
|
||||
Canvas.Line(ARect.Left, ARect.Top, ARect.Right, ARect.Top)
|
||||
else
|
||||
if (cbWest in lCell^.Border) then
|
||||
Canvas.Line(ARect.Left, ARect.Top, ARect.Left, ARect.Bottom)
|
||||
else
|
||||
if (cbEast in lCell^.Border) then
|
||||
Canvas.Line(ARect.Right-1, ARect.Top, ARect.Right-1, ARect.Bottom)
|
||||
else
|
||||
if (cbSouth in lCell^.Border) then
|
||||
Canvas.Line(ARect.Left, ARect.Bottom-1, ARect.Right, ARect.Bottom-1)
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TsCustomWorksheetGrid.DrawTextInCell(ACol, ARow: Integer; ARect: TRect;
|
||||
AState: TGridDrawState);
|
||||
begin
|
||||
DrawCellText(aCol, aRow, aRect, aState, GetCellText(ACol,ARow));
|
||||
end;
|
||||
|
||||
function TsCustomWorksheetGrid.GetCellText(ACol, ARow: Integer): String;
|
||||
var
|
||||
lCell: PCell;
|
||||
r, c: Integer;
|
||||
begin
|
||||
Result := '';
|
||||
|
||||
if FDisplayFixedColRow then begin
|
||||
// Titles
|
||||
if (ARow = 0) and (ACol = 0) then
|
||||
exit;
|
||||
if (ARow = 0) then begin
|
||||
Result := GetColString(ACol-FixedCols);
|
||||
exit;
|
||||
end
|
||||
else
|
||||
begin
|
||||
ColCount := FWorksheet.GetLastColNumber() + INT_FPSCOLROW_TO_GRIDCOLROW;
|
||||
RowCount := FWorksheet.GetLastRowNumber() + INT_FPSCOLROW_TO_GRIDCOLROW;
|
||||
if (ACol = 0) then begin
|
||||
Result := IntToStr(ARow);
|
||||
exit;
|
||||
end;
|
||||
end;
|
||||
|
||||
{ Now copy the contents }
|
||||
|
||||
lCell := FWorksheet.GetFirstCell();
|
||||
for x := 0 to FWorksheet.GetCellCount() - 1 do
|
||||
begin
|
||||
lCol := lCell^.Col;
|
||||
lRow := lCell^.Row;
|
||||
lStr := FWorksheet.ReadAsUTF8Text(lRow, lCol);
|
||||
|
||||
if DisplayFixedColRow then
|
||||
SetCells(lCol + 1, lRow + 1, lStr)
|
||||
else
|
||||
SetCells(lCol, lRow, lStr);
|
||||
|
||||
lCell := FWorksheet.GetNextCell();
|
||||
if FWorksheet <> nil then begin
|
||||
r := ARow - FixedRows;
|
||||
c := ACol - FixedCols;
|
||||
lCell := FWorksheet.FindCell(r, c);
|
||||
if lCell <> nil then
|
||||
Result := FWorksheet.ReadAsUTF8Text(r, c);
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TsCustomWorksheetGrid.GetSheets(const ASheets: TStrings);
|
||||
var
|
||||
i: Integer;
|
||||
begin
|
||||
ASheets.Clear;
|
||||
if Assigned(FWorkbook) then
|
||||
for i:=0 to FWorkbook.GetWorksheetCount-1 do
|
||||
ASheets.Add(FWorkbook.GetWorksheetByIndex(i).Name);
|
||||
end;
|
||||
|
||||
procedure TsCustomWorksheetGrid.Loaded;
|
||||
begin
|
||||
inherited;
|
||||
Setup;
|
||||
end;
|
||||
|
||||
procedure TsCustomWorksheetGrid.SetDisplayFixedColRow(const AValue: Boolean);
|
||||
begin
|
||||
if AValue = FDisplayFixedColRow then Exit;
|
||||
|
||||
FDisplayFixedColRow := AValue;
|
||||
Setup;
|
||||
end;
|
||||
|
||||
procedure TsCustomWorksheetGrid.Setup;
|
||||
var
|
||||
i: Integer;
|
||||
lCol: PCol;
|
||||
begin
|
||||
if (FWorksheet = nil) or (FWorksheet.GetCellCount = 0) then begin
|
||||
if FDisplayFixedColRow then begin
|
||||
ColCount := 2;
|
||||
RowCount := 2;
|
||||
FixedCols := 1;
|
||||
FixedRows := 1;
|
||||
ColWidths[0] := Canvas.TextWidth(' 999999 ');
|
||||
end else begin
|
||||
FixedCols := 0;
|
||||
FixedRows := 0;
|
||||
ColCount := 0;
|
||||
RowCount := 0;
|
||||
end;
|
||||
end else
|
||||
if FDisplayFixedColRow then begin
|
||||
ColCount := FWorksheet.GetLastColNumber + 2;
|
||||
RowCount := FWorksheet.GetLastRowNumber + 2;
|
||||
FixedCols := 1;
|
||||
FixedRows := 1;
|
||||
ColWidths[0] := Canvas.TextWidth(' 999999 ');
|
||||
// Setup column widths
|
||||
for i := FixedCols to ColCount-1 do begin
|
||||
lCol := FWorksheet.FindCol(i - FixedCols);
|
||||
if (lCol <> nil) then
|
||||
ColWidths[i] := CalcColWidth(lCol^.Width)
|
||||
else
|
||||
ColWidths[i] := DefaultColWidth;
|
||||
end;
|
||||
end else begin
|
||||
ColCount := FWorksheet.GetLastColNumber + 1;
|
||||
RowCount := FWorksheet.GetLastRowNumber + 1;
|
||||
FixedCols := 0;
|
||||
FixedRows := 0;
|
||||
for i := 0 to ColCount-1 do begin
|
||||
lCol := FWorksheet.FindCol(i);
|
||||
if (lCol <> nil) then
|
||||
ColWidths[i] := CalcColWidth(lCol^.Width)
|
||||
else
|
||||
ColWidths[i] := DefaultColWidth;
|
||||
end;
|
||||
end;
|
||||
Invalidate;
|
||||
end;
|
||||
|
||||
procedure TsCustomWorksheetGrid.LoadFromWorksheet(AWorksheet: TsWorksheet);
|
||||
begin
|
||||
FWorksheet := AWorksheet;
|
||||
Setup;
|
||||
end;
|
||||
|
||||
procedure TsCustomWorksheetGrid.LoadFromSpreadsheetFile(AFileName: string;
|
||||
AFormat: TsSpreadsheetFormat; AWorksheetIndex: Integer);
|
||||
var
|
||||
lWorkbook: TsWorkbook;
|
||||
begin
|
||||
lWorkbook := TsWorkbook.Create;
|
||||
try
|
||||
lWorkbook.ReadFromFile(AFileName, AFormat);
|
||||
LoadFromWorksheet(lWorkbook.GetWorksheetByIndex(AWorksheetIndex));
|
||||
finally
|
||||
lWorkbook.Free;
|
||||
end;
|
||||
FreeAndNil(FWorkbook);
|
||||
FWorkbook := TsWorkbook.Create;
|
||||
FWorkbook.ReadFromFile(AFileName, AFormat);
|
||||
LoadFromWorksheet(FWorkbook.GetWorksheetByIndex(AWorksheetIndex));
|
||||
end;
|
||||
|
||||
procedure TsCustomWorksheetGrid.LoadFromSpreadsheetFile(AFileName: string;
|
||||
AWorksheetIndex: Integer);
|
||||
var
|
||||
lWorkbook: TsWorkbook;
|
||||
begin
|
||||
lWorkbook := TsWorkbook.Create;
|
||||
try
|
||||
lWorkbook.ReadFromFile(AFileName);
|
||||
LoadFromWorksheet(lWorkbook.GetWorksheetByIndex(AWorksheetIndex));
|
||||
finally
|
||||
lWorkbook.Free;
|
||||
end;
|
||||
FreeAndNil(FWorkbook);
|
||||
FWorkbook := TsWorkbook.Create;
|
||||
FWorkbook.ReadFromFile(AFilename);
|
||||
LoadFromWorksheet(FWorkbook.GetWorksheetByIndex(AWorksheetIndex));
|
||||
end;
|
||||
|
||||
procedure TsCustomWorksheetGrid.SaveToWorksheet(AWorksheet: TsWorksheet);
|
||||
@ -268,4 +395,9 @@ begin
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TsCustomWorksheetGrid.SelectSheetByIndex(AIndex: Integer);
|
||||
begin
|
||||
LoadFromWorksheet(FWorkbook.GetWorksheetByIndex(AIndex));
|
||||
end;
|
||||
|
||||
end.
|
||||
|
@ -49,6 +49,9 @@ function ParseCellRowString(const AStr: string;
|
||||
var AResult: Integer): Boolean;
|
||||
function ParseCellColString(const AStr: string;
|
||||
var AResult: Integer): Boolean;
|
||||
|
||||
function GetColString(AColIndex: Integer): String;
|
||||
|
||||
function UTF8TextToXMLText(AText: ansistring): ansistring;
|
||||
|
||||
implementation
|
||||
@ -371,6 +374,26 @@ begin
|
||||
Result := True;
|
||||
end;
|
||||
|
||||
function Letter(AValue: Integer): char;
|
||||
begin
|
||||
Result := Char(AValue + ord('A'));
|
||||
end;
|
||||
|
||||
function GetColString(AColIndex: Integer): String;
|
||||
begin
|
||||
if AColIndex < 26 then
|
||||
Result := Letter(AColIndex)
|
||||
else
|
||||
if AColIndex < 26*26 then
|
||||
Result := Letter(AColIndex div 26) + Letter(AColIndex mod 26)
|
||||
else
|
||||
if AColIndex < 26*26*26 then
|
||||
Result := Letter(AColIndex div (26*26)) + Letter((AColIndex mod (26*26)) div 26)
|
||||
+ Letter(AColIndex mod (26*26*26))
|
||||
else
|
||||
Result := 'too big';
|
||||
end;
|
||||
|
||||
{In XML files some chars must be translated}
|
||||
function UTF8TextToXMLText(AText: ansistring): ansistring;
|
||||
var
|
||||
|
@ -2382,18 +2382,17 @@ var
|
||||
xf: TXFRecord;
|
||||
begin
|
||||
AStream.ReadBuffer(xf, SizeOf(xf));
|
||||
{ xf.FormatIndex := WordLEToN(xf.FormatIndex);
|
||||
xf.XFType_CellProt_ParentStyleXF := WordLEToN(xf.XFType_CellProt_ParentStyleXF);
|
||||
}
|
||||
|
||||
lData := TXFRecordData.Create;
|
||||
|
||||
// Format index
|
||||
lData.FormatIndex := WordLEToN(xf.FormatIndex);
|
||||
|
||||
// Cell borders
|
||||
xf.Border_Background_1 := DWordLEToN(xf.Border_Background_1);
|
||||
xf.Border_Background_2 := DWordLEToN(xf.Border_Background_2);
|
||||
xf.Border_Background_3 := WordLEToN(xf.Border_Background_3);
|
||||
lData.Borders := [];
|
||||
// the 4 masked bits encode the line style of the border line. 0 = no line
|
||||
// We ignore the line style here. --> check against "no line"
|
||||
if xf.Border_Background_1 and $0000000F <> 0 then
|
||||
Include(lData.Borders, cbWest);
|
||||
if xf.Border_Background_1 and $000000F0 <> 0 then
|
||||
@ -2403,53 +2402,6 @@ begin
|
||||
if xf.Border_Background_1 and $0000F000 <> 0 then
|
||||
Include(lData.Borders, cbSouth);
|
||||
|
||||
(*
|
||||
// Record XF, BIFF8:
|
||||
// Offset Size Contents
|
||||
// 0 2 Index to FONT record (➜5.45))
|
||||
WordLEtoN(AStream.ReadWord);
|
||||
|
||||
// 2 2 Index to FORMAT record (➜5.49))
|
||||
lData.FormatIndex := WordLEtoN(AStream.ReadWord);
|
||||
|
||||
// 4 2 XF type, cell protection, and parent style XF
|
||||
// Bit Mask Contents
|
||||
// 2-0 0007H XF_TYPE_PROT – XF type, cell protection (see above)
|
||||
// 15-4 FFF0H Index to parent style XF (always FFFH in style XFs)
|
||||
WordLEtoN(AStream.ReadWord);
|
||||
|
||||
// 6 1 Alignment and text break:
|
||||
// Bit Mask Contents
|
||||
// 2-0 07H XF_HOR_ALIGN – Horizontal alignment (see above)
|
||||
// 3 08H 1 = Text is wrapped at right border
|
||||
// 6-4 70H XF_VERT_ALIGN – Vertical alignment (see above)
|
||||
// 7 80H 1 = Justify last line in justified or distibuted text
|
||||
b
|
||||
|
||||
{ Offset Size Contents
|
||||
4 2 XF type, cell protection, and parent style XF:
|
||||
Bit Mask Contents
|
||||
2-0 0007H XF_TYPE_PROT – XF type, cell protection (see above)
|
||||
15-4 FFF0H Index to parent style XF (always FFFH in style XFs)
|
||||
|
||||
6 1 Alignment and text break:
|
||||
Bit Mask Contents
|
||||
2-0 07H XF_HOR_ALIGN – Horizontal alignment (see above)
|
||||
3 08H 1 = Text is wrapped at right border
|
||||
6-4 70H XF_VERT_ALIGN – Vertical alignment (see above)
|
||||
7 80H 1 = Justify last line in justified or distibuted text
|
||||
7 1 XF_ROTATION: Text rotation angle (see above)
|
||||
8 1 Indentation, shrink to cell size, and text direction:
|
||||
Bit Mask Contents
|
||||
3-0 0FH Indent level
|
||||
4 10H 1 = Shrink content to fit into cell
|
||||
7-6 C0H Text direction:
|
||||
0 = According to context
|
||||
35
|
||||
; 1 = Left-to-right; 2 = Right-to-left
|
||||
9 1 Flags for used attribute groups:
|
||||
....}
|
||||
*)
|
||||
// Add the XF to the list
|
||||
FXFList.Add(lData);
|
||||
end;
|
||||
|
Reference in New Issue
Block a user