ExportExFrm.pas 7.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302
  1. unit ExportExFrm;
  2. interface
  3. uses
  4. Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  5. Dialogs, ExtCtrls, StdCtrls, CheckLst, ImgList, dximctrl, ActnList,
  6. ComCtrls, ToolWin;
  7. type
  8. TExportExForm = class(TForm)
  9. Panel1: TPanel;
  10. btnOK: TButton;
  11. btnCancel: TButton;
  12. Panel2: TPanel;
  13. Label1: TLabel;
  14. Splitter1: TSplitter;
  15. Panel3: TPanel;
  16. Label2: TLabel;
  17. clbProjectBills: TCheckListBox;
  18. lbBidLot: TListBox;
  19. imgsSmall: TImageList;
  20. ActionList: TActionList;
  21. actnUpMove: TAction;
  22. actnDownMove: TAction;
  23. ToolBar1: TToolBar;
  24. ToolButton3: TToolButton;
  25. ToolButton1: TToolButton;
  26. ToolButton2: TToolButton;
  27. labMergeOptions: TLabel;
  28. rbMergeOptions: TGroupBox;
  29. rdbtnCodeName: TRadioButton;
  30. rdbtnCode: TRadioButton;
  31. procedure FormCreate(Sender: TObject);
  32. procedure FormDestroy(Sender: TObject);
  33. procedure clbProjectBillsClick(Sender: TObject);
  34. procedure btnCancelClick(Sender: TObject);
  35. procedure actnUpMoveExecute(Sender: TObject);
  36. procedure actnDownMoveExecute(Sender: TObject);
  37. procedure actnUpMoveUpdate(Sender: TObject);
  38. procedure actnDownMoveUpdate(Sender: TObject);
  39. private
  40. { Private declarations }
  41. FStrings: TStrings;
  42. FExportEx: Boolean;
  43. function GetStringsIdx(aIdx: Integer): Integer;
  44. function IsMergeByCode: Boolean;
  45. public
  46. { Public declarations }
  47. procedure InitForMergeProject(const aBuildProject: string);
  48. procedure InitForSelectExcel;
  49. end;
  50. { Export Excel }
  51. function ExportExForm(aBidLots, aProjectBills: TStrings): Boolean;
  52. { Gather Project }
  53. function SelectProjectForm(aProjectList: TStrings; const aBuildProject: string; var MergeByCode: Boolean): Boolean;
  54. { TODO : 导入Excel }
  55. function SelectExcelSheet(aCaptions: TStrings): Boolean;
  56. implementation
  57. {$R *.dfm}
  58. function ExportExForm(aBidLots, aProjectBills: TStrings): Boolean;
  59. var
  60. I, J: Integer;
  61. sFullName: string;
  62. ExportExForm: TExportExForm;
  63. begin
  64. ExportExForm := TExportExForm.Create(nil);
  65. try
  66. for I := 0 to aBidLots.Count - 1 do
  67. begin
  68. sFullName := string(aBidLots.Objects[I]);
  69. ExportExForm.lbBidLot.Items.AddObject(aBidLots[I], Pointer(sFullName){aBidLots.Objects[I]});
  70. Integer(sFullName) := 0;
  71. end;
  72. for I := 0 to aProjectBills.Count - 1 do
  73. begin
  74. sFullName := string(aProjectBills.Objects[I]);
  75. ExportExForm.clbProjectBills.Items.AddObject(aProjectBills[I], Pointer(sFullName){aProjectBills.Objects[I]});
  76. Integer(sFullName) := 0;
  77. end;
  78. ExportExForm.FExportEx := True;
  79. ExportExForm.lbBidLot.ItemIndex := 0;
  80. if ExportExForm.ShowModal = mrOk then
  81. begin
  82. for I := 0 to aBidLots.Count - 1 do
  83. begin
  84. aBidLots[I] := '1';
  85. end;
  86. J := 1;
  87. for I := 0 to ExportExForm.FStrings.Count - 1 do
  88. begin
  89. if ExportExForm.FStrings[I] <> '' then
  90. begin
  91. aBidLots.InsertObject(J, '2', Pointer(ExportExForm.FStrings[I]));
  92. Inc(J, 2);
  93. end
  94. else
  95. Inc(J, 3);
  96. end;
  97. Result := True;
  98. end
  99. else Result := False;
  100. finally
  101. ExportExForm.Free;
  102. end;
  103. end;
  104. function SelectProjectForm(aProjectList: TStrings; const aBuildProject: string;
  105. var MergeByCode: Boolean): Boolean;
  106. var
  107. I: Integer;
  108. sProject: string;
  109. ProjectsForm: TExportExForm;
  110. begin
  111. Result := False;
  112. ProjectsForm := TExportExForm.Create(nil);
  113. try
  114. ProjectsForm.InitForMergeProject(aBuildProject);
  115. for I := 0 to aProjectList.Count - 1 do
  116. begin
  117. sProject := string(aProjectList.Objects[I]);
  118. ProjectsForm.clbProjectBills.Items.AddObject(aProjectList[I], Pointer(sProject));
  119. Integer(sProject) := 0;
  120. end;
  121. if ProjectsForm.ShowModal = mrOK then
  122. begin
  123. aProjectList.Clear;
  124. MergeByCode := ProjectsForm.IsMergeByCode;
  125. for I := 0 to ProjectsForm.clbProjectBills.Count - 1 do
  126. begin
  127. if ProjectsForm.clbProjectBills.Checked[I] then
  128. begin
  129. sProject := string(ProjectsForm.clbProjectBills.Items.Objects[I]);
  130. aProjectList.Add(sProject);
  131. Integer(sProject) := 0;
  132. end;
  133. end;
  134. Result := True;
  135. end;
  136. finally
  137. ProjectsForm.Free;
  138. end;
  139. end;
  140. function SelectExcelSheet(aCaptions: TStrings): Boolean;
  141. var
  142. I: Integer;
  143. sProject: string;
  144. ProjectsForm: TExportExForm;
  145. begin
  146. Result := False;
  147. ProjectsForm := TExportExForm.Create(nil);
  148. try
  149. ProjectsForm.InitForSelectExcel;
  150. for I := 0 to aCaptions.Count - 1 do
  151. ProjectsForm.clbProjectBills.Items.AddObject(aCaptions[I], aCaptions.Objects[I]);
  152. if ProjectsForm.ShowModal = mrOK then
  153. begin
  154. aCaptions.Clear;
  155. for I := 0 to ProjectsForm.clbProjectBills.Count - 1 do
  156. begin
  157. if ProjectsForm.clbProjectBills.Checked[I] then
  158. aCaptions.AddObject(ProjectsForm.clbProjectBills.Items[I], ProjectsForm.clbProjectBills.Items.Objects[I]);
  159. end;
  160. Result := True;
  161. end;
  162. finally
  163. ProjectsForm.Free;
  164. end;
  165. end;
  166. procedure TExportExForm.FormCreate(Sender: TObject);
  167. begin
  168. FStrings := TStringList.Create;
  169. end;
  170. procedure TExportExForm.FormDestroy(Sender: TObject);
  171. begin
  172. FStrings.Free;
  173. end;
  174. function TExportExForm.GetStringsIdx(aIdx: Integer): Integer;
  175. var
  176. I, iBidIdx: Integer;
  177. begin
  178. Result := -1;
  179. for I := 0 to FStrings.Count - 1 do
  180. begin
  181. iBidIdx := Integer(FStrings.Objects[I]);
  182. if iBidIdx = aIdx then
  183. begin
  184. Result := I;
  185. Break;
  186. end;
  187. end;
  188. end;
  189. procedure TExportExForm.clbProjectBillsClick(Sender: TObject);
  190. var
  191. I, iIdx: Integer;
  192. begin
  193. if not FExportEx then Exit;
  194. iIdx := GetStringsIdx(lbBidLot.ItemIndex);
  195. if clbProjectBills.Checked[clbProjectBills.ItemIndex] then
  196. begin
  197. if iIdx = -1 then
  198. begin
  199. FStrings.AddObject(string(clbProjectBills.Items.Objects[clbProjectBills.ItemIndex]),
  200. Pointer(lbBidLot.ItemIndex));
  201. end
  202. else
  203. begin
  204. FStrings[iIdx] := string(clbProjectBills.Items.Objects[clbProjectBills.ItemIndex]);
  205. end;
  206. for I := 0 to clbProjectBills.Count - 1 do
  207. begin
  208. if I <> clbProjectBills.ItemIndex then
  209. clbProjectBills.Checked[I] := False;
  210. end;
  211. end
  212. else
  213. begin
  214. if iIdx <> -1 then
  215. FStrings[iIdx] := '';
  216. end;
  217. end;
  218. procedure TExportExForm.btnCancelClick(Sender: TObject);
  219. begin
  220. Close;
  221. end;
  222. procedure TExportExForm.InitForMergeProject(const aBuildProject: string);
  223. begin
  224. Caption := '建设项目 - [' + aBuildProject + ']';
  225. Width := 450;
  226. Height := 380;
  227. Panel2.Visible := False;
  228. Label2.Caption := '标段分项清单:';
  229. FExportEx := False;
  230. rbMergeOptions.Visible := True;
  231. labMergeOptions.Visible := True;
  232. end;
  233. procedure TExportExForm.InitForSelectExcel;
  234. begin
  235. Caption := '导入Excel文件';
  236. Width := 450;
  237. Height := 380;
  238. Panel2.Visible := False;
  239. Label2.Caption := '选择工作表:';
  240. FExportEx := False;
  241. end;
  242. procedure TExportExForm.actnUpMoveExecute(Sender: TObject);
  243. var
  244. iIndex: Integer;
  245. begin
  246. iIndex := clbProjectBills.ItemIndex;
  247. clbProjectBills.Items.Exchange(iIndex, iIndex - 1);
  248. end;
  249. procedure TExportExForm.actnDownMoveExecute(Sender: TObject);
  250. var
  251. iIndex: Integer;
  252. begin
  253. iIndex := clbProjectBills.ItemIndex;
  254. clbProjectBills.Items.Exchange(iIndex, iIndex + 1);
  255. end;
  256. procedure TExportExForm.actnUpMoveUpdate(Sender: TObject);
  257. begin
  258. actnUpMove.Enabled := clbProjectBills.ItemIndex > 0;
  259. end;
  260. procedure TExportExForm.actnDownMoveUpdate(Sender: TObject);
  261. begin
  262. actnDownMove.Enabled := (clbProjectBills.Items.Count > 1) and
  263. (clbProjectBills.ItemIndex < clbProjectBills.Items.Count - 1);
  264. end;
  265. function TExportExForm.IsMergeByCode: Boolean;
  266. begin
  267. if rdbtnCodeName.Checked then
  268. Result := False
  269. else
  270. Result := True;
  271. end;
  272. end.