SheetSelectFrm.pas 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162
  1. unit SheetSelectFrm;
  2. interface
  3. uses
  4. SMXLS, ZjCells, SMCells,
  5. Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  6. Dialogs, StdCtrls, CheckLst, ZJGrid;
  7. type
  8. TSheetSelectForm = class(TForm)
  9. btnOK: TButton;
  10. btnCancel: TButton;
  11. zgExcelSheets: TZJGrid;
  12. procedure zgExcelSheetsCellCanEdit(Sender: TObject;
  13. const ACoord: TPoint; var Allow: Boolean);
  14. procedure zgExcelSheetsSetCellText(Sender: TObject;
  15. const ACoord: TPoint; var Value: String; DisplayText: Boolean);
  16. procedure zgExcelSheetsGetCellText(Sender: TObject;
  17. const ACoord: TPoint; var Value: String; DisplayText: Boolean);
  18. private
  19. FExcel: TMSExcel;
  20. FIsMulit: Boolean;
  21. FSelectRow: Integer;
  22. procedure InitGrid(AExcel: TMSExcel);
  23. procedure SetIsMulit(const Value: Boolean);
  24. public
  25. constructor Create(AExcel: TMSExcel);
  26. procedure AssignResult(ASelects: TList);
  27. function SelectResult: TSpreadSheet;
  28. // ¿É·ñ¶àÑ¡
  29. property IsMulti: Boolean read FIsMulit write SetIsMulit;
  30. end;
  31. function SelectSheets(AExcel: TMSExcel; ASelects: TList): Boolean;
  32. function SelectSheet(AExcel: TMSExcel; var ASheet: TSpreadSheet): Boolean;
  33. implementation
  34. {$R *.dfm}
  35. function SelectSheets(AExcel: TMSExcel; ASelects: TList): Boolean;
  36. var
  37. SelectForm: TSheetSelectForm;
  38. begin
  39. SelectForm := TSheetSelectForm.Create(AExcel);
  40. try
  41. SelectForm.IsMulti := True;
  42. Result := SelectForm.ShowModal = mrOk;
  43. if Result then
  44. SelectForm.AssignResult(ASelects);
  45. finally
  46. SelectForm.Free;
  47. end;
  48. end;
  49. function SelectSheet(AExcel: TMSExcel; var ASheet: TSpreadSheet): Boolean;
  50. var
  51. SelectForm: TSheetSelectForm;
  52. begin
  53. SelectForm := TSheetSelectForm.Create(AExcel);
  54. try
  55. SelectForm.IsMulti := False;
  56. Result := SelectForm.ShowModal = mrOk;
  57. if Result then
  58. ASheet := SelectForm.SelectResult;
  59. finally
  60. SelectForm.Free;
  61. end;
  62. end;
  63. { TSheetSelectForm }
  64. procedure TSheetSelectForm.AssignResult(ASelects: TList);
  65. var
  66. i: Integer;
  67. begin
  68. ASelects.Clear;
  69. for i := 1 to zgExcelSheets.RowCount - 1 do
  70. if zgExcelSheets.Cells[1, i].Text = 'True' then
  71. ASelects.Add(zgExcelSheets.Rows[i].Data);
  72. end;
  73. constructor TSheetSelectForm.Create(AExcel: TMSExcel);
  74. begin
  75. inherited Create(nil);
  76. InitGrid(AExcel);
  77. FSelectRow := 1;
  78. end;
  79. procedure TSheetSelectForm.InitGrid(AExcel: TMSExcel);
  80. var
  81. i: Integer;
  82. begin
  83. zgExcelSheets.RowCount := 1;
  84. zgExcelSheets.Cells[1, 0].Text := 'Ñ¡Ôñ';
  85. zgExcelSheets.CellClass.Cols[1] := TZjCheckBoxCell;
  86. zgExcelSheets.Cells[2, 0].Text := '¹¤×÷±í';
  87. zgExcelSheets.ColWidths[2] := 200;
  88. zgExcelSheets.RowCount := AExcel.Sheets.Count + 1;
  89. for i := 0 to AExcel.SheetNames.Count - 1 do
  90. begin
  91. zgExcelSheets.Cells[2, i+1].Text := AExcel.SheetNames.Strings[i];
  92. zgExcelSheets.Rows[i+1].Data := AExcel.Sheets.Spreadsheet(i);
  93. end;
  94. end;
  95. function TSheetSelectForm.SelectResult: TSpreadSheet;
  96. var
  97. i: Integer;
  98. begin
  99. for i := 1 to zgExcelSheets.RowCount - 1 do
  100. if zgExcelSheets.Cells[1, i].Text = 'True' then
  101. begin
  102. Result := TSpreadSheet(zgExcelSheets.Rows[i].Data);
  103. Break;
  104. end;
  105. end;
  106. procedure TSheetSelectForm.zgExcelSheetsCellCanEdit(Sender: TObject;
  107. const ACoord: TPoint; var Allow: Boolean);
  108. begin
  109. Allow := (ACoord.X = 1) and (ACoord.Y > 0);
  110. end;
  111. procedure TSheetSelectForm.zgExcelSheetsSetCellText(Sender: TObject;
  112. const ACoord: TPoint; var Value: String; DisplayText: Boolean);
  113. begin
  114. if Value = 'True' then
  115. FSelectRow := ACoord.Y
  116. else
  117. FSelectRow := -1;
  118. zgExcelSheets.Invalidate;
  119. end;
  120. procedure TSheetSelectForm.zgExcelSheetsGetCellText(Sender: TObject;
  121. const ACoord: TPoint; var Value: String; DisplayText: Boolean);
  122. begin
  123. if (ACoord.X = 1) and (ACoord.Y > 0) then
  124. begin
  125. if FSelectRow = ACoord.Y then
  126. Value := 'True'
  127. else
  128. Value := 'False';
  129. end;
  130. end;
  131. procedure TSheetSelectForm.SetIsMulit(const Value: Boolean);
  132. begin
  133. FIsMulit := Value;
  134. if not FIsMulit then
  135. begin
  136. zgExcelSheets.OnGetCellText := zgExcelSheetsGetCellText;
  137. zgExcelSheets.OnSetCellText := zgExcelSheetsSetCellText;
  138. end;
  139. end;
  140. end.