DynamicReport.cpp 40 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340
  1. /**************************************************************************************************
  2. 版本所有(C), 2020-2022, 北京普达迪泰
  3. ***************************************************************************************************
  4. 文 件 名: DynamicReport.cpp
  5. 功能描述: 动态测量报告
  6. 版 本 号: 1.00初版
  7. 作 者: HYF
  8. 生成日期; 2021-12-20
  9. 最近修改:
  10. 函数列表:
  11. 修改历史:
  12. 1.日 期 :2021-12-20
  13. 作 者 : HYF
  14. 修改内容 : 创建文件
  15. **************************************************************************************************/
  16. #include "pch.h"
  17. #include "DMS.h"
  18. #include "DynamicReport.h"
  19. #include "afxdialogex.h"
  20. #include "DmsDoc.h"
  21. #include "LABEL.H"
  22. #include "DmsDoc.h"
  23. #include "CppSQLite3.h"
  24. #include "TaskManager.h"
  25. #include "PostureDataAngleManager.h"
  26. #include "PostureDataPointManager.h"
  27. #include "GridCtrl.h"
  28. #include "Excel.h"
  29. #include "resource.h"
  30. // DynamicReport 对话框
  31. IMPLEMENT_DYNAMIC(DynamicReport, CDialogEx)
  32. DynamicReport::DynamicReport(CWnd* pParent /*=nullptr*/)
  33. : CDialogEx(IDD_DLG_DYNAMIC_REPORT, pParent)
  34. {
  35. }
  36. DynamicReport::DynamicReport(CWnd* pParent, DWORD taskId)
  37. : CDialogEx(IDD_DLG_DYNAMIC_REPORT, pParent)
  38. , m_taskId(taskId)
  39. {
  40. }
  41. DynamicReport::~DynamicReport()
  42. {
  43. }
  44. void DynamicReport::DoDataExchange(CDataExchange* pDX)
  45. {
  46. CDialogEx::DoDataExchange(pDX);
  47. DDX_Control(pDX, IDC_STATIC_DYNAMIC_REPORT_TITLE, m_Static_Title);
  48. DDX_Control(pDX, IDC_CUSTOM_GRIDCTRL, m_GridCtrl);
  49. }
  50. BEGIN_MESSAGE_MAP(DynamicReport, CDialogEx)
  51. ON_BN_CLICKED(IDC_BTN_EXPORT_EXCEL, &DynamicReport::OnBnClickedBtnExportExcel)
  52. ON_BN_CLICKED(IDC_BTN_EXPORT_PDF, &DynamicReport::OnBnClickedBtnExportPdf)
  53. ON_BN_CLICKED(IDC_BTN_PRINT, &DynamicReport::OnBnClickedBtnPrint)
  54. ON_WM_SIZE()
  55. END_MESSAGE_MAP()
  56. /**************************************************************************************************
  57. 函 数 名 :GetDocument
  58. 功能描述 :获取文档对象
  59. 输入参数 :无
  60. 输出参数 :无
  61. 返 回 值 :void
  62. **************************************************************************************************/
  63. CDmsDoc *DynamicReport::GetDocument()
  64. {
  65. CFrameWnd *pFrm = (CFrameWnd *)(AfxGetApp()->m_pMainWnd);
  66. ASSERT(pFrm);
  67. CView *pView = pFrm->GetActiveView();
  68. CDmsDoc *pDoc = (CDmsDoc *)(pView->GetDocument());
  69. ASSERT(pDoc->IsKindOf(RUNTIME_CLASS(CDmsDoc)));
  70. return pDoc;
  71. }
  72. // DynamicReport 消息处理程序
  73. /**************************************************************************************************
  74. 函 数 名 :OnBnClickedBtnExportPdf
  75. 功能描述 :导出PDF
  76. 输入参数 :无
  77. 输出参数 :无
  78. 返 回 值 :void
  79. **************************************************************************************************/
  80. void DynamicReport::OnBnClickedBtnExportPdf()
  81. {
  82. }
  83. /**************************************************************************************************
  84. 函 数 名 :OnBnClickedBtnPrint
  85. 功能描述 :直接打印
  86. 输入参数 :无
  87. 输出参数 :无
  88. 返 回 值 :void
  89. **************************************************************************************************/
  90. void DynamicReport::OnBnClickedBtnPrint()
  91. {
  92. m_GridCtrl.Print();
  93. }
  94. // 初始化
  95. BOOL DynamicReport::OnInitDialog()
  96. {
  97. CDialogEx::OnInitDialog();
  98. //创建图标
  99. HICON icon;
  100. //加载图标
  101. icon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
  102. SetIcon(icon, true);
  103. SetIcon(icon, false);
  104. m_Static_Title.SetFontSize(16);
  105. m_Static_Title.SetFontBold(TRUE);
  106. // 初始化数据
  107. CDmsDoc *pDoc = GetDocument();
  108. TaskManager *pTaskManager = pDoc->GetTaskManager();
  109. ASSERT(pTaskManager != NULL);
  110. CppSQLite3Query q = pTaskManager->Query(m_taskId);
  111. if (!q.eof()) {
  112. CString szTitle;
  113. szTitle.Format("%s-测量报告", q.getStringField("task_title"));
  114. m_Static_Title.SetWindowText(szTitle);
  115. }
  116. q.finalize();
  117. // 初始化Grid数据
  118. InitGridReportData();
  119. return TRUE;
  120. }
  121. /**************************************************************************************************
  122. 函 数 名 :InitGridReportData
  123. 功能描述 :展示点云数据
  124. 输入参数 :略
  125. 输出参数 :略
  126. 返 回 值 :略
  127. **************************************************************************************************/
  128. void DynamicReport::InitGridReportData()
  129. {
  130. // 初始化数据
  131. TaskManager *pTaskManager = GetDocument()->GetTaskManager();
  132. ASSERT(pTaskManager != NULL);
  133. // POINT数据访问入口
  134. PostureDataPointManager *pPointManager = GetDocument()->GetPostureDataPointManager();
  135. ASSERT(pPointManager != NULL);
  136. // Thrust Line数据访问入口
  137. PostureDataAngleManager *pAngleManager = GetDocument()->GetPostureDataAngleManager();
  138. ASSERT(pAngleManager != NULL);
  139. int iPointCount = pPointManager->CountOfReport(m_taskId);
  140. int iAngleCount = pAngleManager->Count(m_taskId);
  141. int iRowCount = iPointCount + iAngleCount + 15;
  142. m_GridCtrl.DeleteAllItems();
  143. m_GridCtrl.SetGridLines(GVL_NONE);
  144. m_GridCtrl.SetEditable(FALSE);
  145. m_GridCtrl.GetDefaultCell(FALSE, FALSE)->SetBackClr(RGB(0xFF, 0xFF, 0xFF));
  146. m_GridCtrl.SetSingleRowSelection(FALSE);
  147. m_GridCtrl.SetSingleColSelection(FALSE);
  148. m_GridCtrl.EnableSelection(FALSE);
  149. m_GridCtrl.SetFrameFocusCell(FALSE);
  150. TRY
  151. {
  152. m_GridCtrl.SetRowCount(iRowCount);
  153. m_GridCtrl.SetColumnCount(20);
  154. m_GridCtrl.SetFixedRowCount(0);
  155. m_GridCtrl.SetFixedColumnCount(0);
  156. m_GridCtrl.SetColumnWidth(0, 40);
  157. m_GridCtrl.SetColumnWidth(1, 40);
  158. m_GridCtrl.SetColumnWidth(2, 100);
  159. m_GridCtrl.SetColumnWidth(3, 100);
  160. m_GridCtrl.SetColumnWidth(4, 80);
  161. m_GridCtrl.SetColumnWidth(5, 80);
  162. m_GridCtrl.SetColumnWidth(6, 80);
  163. m_GridCtrl.SetColumnWidth(7, 80);
  164. m_GridCtrl.SetColumnWidth(8, 80);
  165. m_GridCtrl.SetColumnWidth(9, 80);
  166. m_GridCtrl.SetColumnWidth(10, 80);
  167. m_GridCtrl.SetColumnWidth(11, 80);
  168. m_GridCtrl.SetColumnWidth(12, 80);
  169. m_GridCtrl.SetColumnWidth(13, 80);
  170. m_GridCtrl.SetColumnWidth(14, 80);
  171. m_GridCtrl.SetColumnWidth(15, 80);
  172. m_GridCtrl.SetColumnWidth(16, 80);
  173. m_GridCtrl.SetColumnWidth(17, 80);
  174. m_GridCtrl.SetColumnWidth(18, 80);
  175. m_GridCtrl.SetColumnWidth(19, 40);
  176. }
  177. CATCH(CMemoryException, e)
  178. {
  179. e->ReportError();
  180. return;
  181. }
  182. END_CATCH
  183. // Get the font
  184. CFont* pFont = m_GridCtrl.GetFont();
  185. int iRow = 1;
  186. int iCol = 1;
  187. COLORREF bkClrHeader = RGB(128, 128, 128);
  188. COLORREF bkClrData = RGB(255, 255, 255);
  189. CppSQLite3Query q = pTaskManager->Query(m_taskId);
  190. if (!q.eof()) {
  191. CString szTaskTime = q.getStringField("task_time");
  192. CString szTaskTitle = q.getStringField("task_title");
  193. CString szEquipCode = q.getStringField("equip_code");
  194. CString szEquipTypeCode = q.getStringField("equip_type_code");
  195. GV_ITEM ItemTitle;
  196. ItemTitle.mask = (GVIF_TEXT | GVIF_BORDER | GVIF_FONT);
  197. ItemTitle.crBkClr = bkClrHeader; // or - m_Grid.SetItemBkColour(row, col, clr);
  198. ItemTitle.nBorder = GVIS_BDR_BOTTOM;
  199. ItemTitle.row = iRow;
  200. ItemTitle.col = iCol;
  201. ItemTitle.strText = szTaskTitle;
  202. LOGFONT lfTitle;
  203. pFont->GetLogFont(&lfTitle);
  204. // Make it true-type
  205. memcpy(lfTitle.lfFaceName, _T("Arial"), 6);
  206. lfTitle.lfHeight = -18;
  207. lfTitle.lfWeight = FW_BOLD;
  208. memcpy(&(ItemTitle.lfFont), &lfTitle, sizeof(LOGFONT));
  209. //Item.lfFont = lf;
  210. m_GridCtrl.SetItem(&ItemTitle);
  211. m_GridCtrl.MergeCells(iRow, iCol, iRow, 18);
  212. /*********************************************************************************************/
  213. iRow += 1;
  214. CString strTaskInfo;
  215. strTaskInfo.Format("型号:%s 编号:%s 测量时间:%s", szEquipTypeCode, szEquipCode, szTaskTime);
  216. GV_ITEM Item;
  217. Item.row = iRow;
  218. Item.col = 1;
  219. Item.mask = (GVIF_TEXT);
  220. Item.nFormat = DT_SINGLELINE | DT_VCENTER | DT_LEFT;
  221. Item.crBkClr = bkClrHeader; // or - m_Grid.SetItemBkColour(row, col, clr);
  222. Item.strText = strTaskInfo;
  223. m_GridCtrl.SetItem(&Item);
  224. m_GridCtrl.MergeCells(iRow, iCol, iRow, 18);
  225. iRow += 1;
  226. /********************************************************************************************/
  227. iRow = PrintPointData(m_taskId, iRow);
  228. iRow = PrintAngleData(m_taskId, iRow);
  229. }
  230. return;
  231. }
  232. /**************************************************************************************************
  233. 函 数 名 :PrintPointData
  234. 功能描述 :显示数据-点
  235. 输出参数 :略
  236. 返 回 值 :略
  237. **************************************************************************************************/
  238. int DynamicReport::PrintPointData(DWORD dwTaskId, int iStartRow)
  239. {
  240. // Get the font
  241. CFont* pFont = m_GridCtrl.GetFont();
  242. CString str;
  243. int iRow = iStartRow + 1;
  244. int iCol = 1;
  245. GV_ITEM ItemCat;
  246. ItemCat.row = iRow;
  247. ItemCat.col = iCol;
  248. ItemCat.mask = (GVIF_TEXT | GVIF_BORDER | GVIF_FONT | GVIF_FORMAT);
  249. ItemCat.nFormat = DT_SINGLELINE | DT_VCENTER | DT_LEFT;
  250. ItemCat.nBorder = GVIS_BDR_BOTTOM;
  251. ItemCat.strText = _T("点");
  252. LOGFONT lfTitle;
  253. pFont->GetLogFont(&lfTitle);
  254. // Make it true-type
  255. memcpy(lfTitle.lfFaceName, _T("Arial"), 6);
  256. lfTitle.lfWeight = FW_BOLD;
  257. memcpy(&(ItemCat.lfFont), &lfTitle, sizeof(LOGFONT));
  258. //Item.lfFont = lf;
  259. m_GridCtrl.SetItem(&ItemCat);
  260. m_GridCtrl.MergeCells(iRow, iCol, iRow, 18);
  261. /*******************************************************************************************/
  262. iRow += 1;
  263. GV_ITEM ItemTitle;
  264. ItemTitle.mask = GVIF_TEXT | GVIF_FORMAT | GVIF_BORDER;
  265. ItemTitle.nBorder = GVIS_BDR_BOTTOM;
  266. ItemTitle.nFormat = DT_SINGLELINE | DT_VCENTER;
  267. ItemTitle.row = iRow;
  268. ItemTitle.col = iCol;
  269. ItemTitle.nFormat = DT_CENTER;
  270. ItemTitle.strText = _T("序号");
  271. m_GridCtrl.SetItem(&ItemTitle);
  272. m_GridCtrl.MergeCells(iRow, iCol, iRow + 1, iCol);
  273. ItemTitle.row = iRow;
  274. ItemTitle.col = iCol+1;
  275. ItemTitle.nFormat = DT_CENTER;
  276. ItemTitle.strText = _T("名称");
  277. m_GridCtrl.SetItem(&ItemTitle);
  278. m_GridCtrl.MergeCells(iRow, iCol+1, iRow + 1, iCol+1);
  279. ItemTitle.row = iRow;
  280. ItemTitle.col = iCol+2;
  281. ItemTitle.nFormat = DT_CENTER;
  282. ItemTitle.strText = _T("编码");
  283. m_GridCtrl.SetItem(&ItemTitle);
  284. m_GridCtrl.MergeCells(iRow, iCol + 2, iRow + 1, iCol + 2);
  285. ItemTitle.row = iRow;
  286. ItemTitle.col = iCol + 3;
  287. ItemTitle.nFormat = DT_CENTER;
  288. ItemTitle.strText = _T("理论值");
  289. m_GridCtrl.SetItem(&ItemTitle);
  290. m_GridCtrl.MergeCells(iRow, iCol + 3, iRow, iCol + 5);
  291. ItemTitle.row = iRow + 1;
  292. ItemTitle.col = iCol + 3;
  293. ItemTitle.nFormat = DT_RIGHT;
  294. ItemTitle.strText = _T("X");
  295. m_GridCtrl.SetItem(&ItemTitle);
  296. ItemTitle.row = iRow + 1;
  297. ItemTitle.col = iCol + 4;
  298. ItemTitle.nFormat = DT_RIGHT;
  299. ItemTitle.strText = _T("Y");
  300. m_GridCtrl.SetItem(&ItemTitle);
  301. ItemTitle.row = iRow + 1;
  302. ItemTitle.col = iCol + 5;
  303. ItemTitle.nFormat = DT_RIGHT;
  304. ItemTitle.strText = _T("Z");
  305. m_GridCtrl.SetItem(&ItemTitle);
  306. ItemTitle.row = iRow;
  307. ItemTitle.col = iCol + 6;
  308. ItemTitle.nFormat = DT_CENTER;
  309. ItemTitle.strText = _T("实测值");
  310. m_GridCtrl.SetItem(&ItemTitle);
  311. m_GridCtrl.MergeCells(iRow, iCol + 6, iRow, iCol + 8);
  312. ItemTitle.row = iRow + 1;
  313. ItemTitle.col = iCol + 6;
  314. ItemTitle.nFormat = DT_RIGHT;
  315. ItemTitle.strText = _T("X");
  316. m_GridCtrl.SetItem(&ItemTitle);
  317. ItemTitle.row = iRow + 1;
  318. ItemTitle.col = iCol + 7;
  319. ItemTitle.nFormat = DT_RIGHT;
  320. ItemTitle.strText = _T("Y");
  321. m_GridCtrl.SetItem(&ItemTitle);
  322. ItemTitle.row = iRow + 1;
  323. ItemTitle.col = iCol + 8;
  324. ItemTitle.nFormat = DT_RIGHT;
  325. ItemTitle.strText = _T("Z");
  326. m_GridCtrl.SetItem(&ItemTitle);
  327. ItemTitle.row = iRow;
  328. ItemTitle.col = iCol + 9;
  329. ItemTitle.nFormat = DT_CENTER;
  330. ItemTitle.strText = _T("说明");
  331. m_GridCtrl.SetItem(&ItemTitle);
  332. m_GridCtrl.MergeCells(iRow, iCol + 9, iRow + 1, iCol + 9);
  333. // POINT数据访问入口
  334. PostureDataPointManager *pPointManager = GetDocument()->GetPostureDataPointManager();
  335. ASSERT(pPointManager != NULL);
  336. GV_ITEM Item;
  337. Item.mask = GVIF_TEXT | GVIF_FORMAT;
  338. Item.nFormat = DT_SINGLELINE | DT_VCENTER;
  339. iRow += 1;
  340. CppSQLite3Query q = pPointManager->QueryOfReport(dwTaskId);
  341. int iIndex = 0;
  342. while (!q.eof()) {
  343. iRow += 1;
  344. iIndex++;
  345. // 序号
  346. Item.row = iRow;
  347. Item.col = iCol;
  348. Item.nFormat = DT_CENTER;
  349. str.Format("%d", iIndex);
  350. Item.strText = str;
  351. m_GridCtrl.SetItem(&Item);
  352. // 名称
  353. Item.row = iRow;
  354. Item.col = iCol + 1;
  355. Item.nFormat = DT_CENTER;
  356. str.Format("%s", q.getStringField("point_title"));
  357. Item.strText = str;
  358. m_GridCtrl.SetItem(&Item);
  359. // CODE
  360. Item.row = iRow;
  361. Item.col = iCol + 2;
  362. Item.nFormat = DT_CENTER;
  363. str.Format("%s", q.getStringField("point_code"));
  364. Item.strText = str;
  365. m_GridCtrl.SetItem(&Item);
  366. // 理论 - X
  367. Item.row = iRow;
  368. Item.col = iCol + 3;
  369. Item.nFormat = DT_RIGHT;
  370. str.Format("%.3f", q.getFloatField("point_e_x"));
  371. Item.strText = str;
  372. m_GridCtrl.SetItem(&Item);
  373. // 理论 - Y
  374. Item.row = iRow;
  375. Item.col = iCol + 4;
  376. Item.nFormat = DT_RIGHT;
  377. str.Format("%.3f", q.getFloatField("point_e_y"));
  378. Item.strText = str;
  379. m_GridCtrl.SetItem(&Item);
  380. // 理论 - Z
  381. Item.row = iRow;
  382. Item.col = iCol + 5;
  383. Item.nFormat = DT_RIGHT;
  384. str.Format("%.3f", q.getFloatField("point_e_z"));
  385. Item.strText = str;
  386. m_GridCtrl.SetItem(&Item);
  387. // 实测 - X
  388. Item.row = iRow;
  389. Item.col = iCol + 6;
  390. Item.nFormat = DT_RIGHT;
  391. str.Format("%.3f", q.getFloatField("point_a_x"));
  392. Item.strText = str;
  393. m_GridCtrl.SetItem(&Item);
  394. // 实测 - Y
  395. Item.row = iRow;
  396. Item.col = iCol + 7;
  397. Item.nFormat = DT_RIGHT;
  398. str.Format("%.3f", q.getFloatField("point_a_y"));
  399. Item.strText = str;
  400. m_GridCtrl.SetItem(&Item);
  401. // 实测 - Z
  402. Item.row = iRow;
  403. Item.col = iCol + 8;
  404. Item.nFormat = DT_RIGHT;
  405. str.Format("%.3f", q.getFloatField("point_a_z"));
  406. Item.strText = str;
  407. m_GridCtrl.SetItem(&Item);
  408. // 说明
  409. Item.row = iRow;
  410. Item.col = iCol + 9;
  411. Item.nFormat = DT_LEFT;
  412. str.Format("%s", q.getStringField("point_desc"));
  413. Item.strText = str;
  414. m_GridCtrl.SetItem(&Item);
  415. q.nextRow();
  416. }
  417. q.finalize();
  418. return iRow + 1;
  419. }
  420. /**************************************************************************************************
  421. 函 数 名 :PrintAngleData
  422. 功能描述 :显示数据-偏角
  423. 输出参数 :略
  424. 返 回 值 :略
  425. **************************************************************************************************/
  426. int DynamicReport::PrintAngleData(DWORD dwTaskId, int iStartRow)
  427. {
  428. // Get the font
  429. CFont* pFont = m_GridCtrl.GetFont();
  430. CString str;
  431. int iRow = iStartRow + 1;
  432. int iCol = 1;
  433. GV_ITEM ItemCat;
  434. ItemCat.row = iRow;
  435. ItemCat.col = iCol;
  436. ItemCat.mask = (GVIF_TEXT | GVIF_BORDER | GVIF_FONT | GVIF_FORMAT);
  437. ItemCat.nFormat = DT_SINGLELINE | DT_VCENTER | DT_LEFT;
  438. ItemCat.nBorder = GVIS_BDR_BOTTOM;
  439. ItemCat.strText = _T("推力线");
  440. LOGFONT lfTitle;
  441. pFont->GetLogFont(&lfTitle);
  442. // Make it true-type
  443. memcpy(lfTitle.lfFaceName, _T("Arial"), 6);
  444. lfTitle.lfWeight = FW_BOLD;
  445. memcpy(&(ItemCat.lfFont), &lfTitle, sizeof(LOGFONT));
  446. //Item.lfFont = lf;
  447. m_GridCtrl.SetItem(&ItemCat);
  448. m_GridCtrl.MergeCells(iRow, iCol, iRow, 17);
  449. /*******************************************************************************************/
  450. iRow += 1;
  451. GV_ITEM ItemTitle;
  452. ItemTitle.mask = GVIF_TEXT | GVIF_FORMAT | GVIF_BORDER;
  453. ItemTitle.nBorder = GVIS_BDR_BOTTOM;
  454. ItemTitle.nFormat = DT_SINGLELINE | DT_VCENTER;
  455. ItemTitle.row = iRow;
  456. ItemTitle.col = iCol;
  457. ItemTitle.nFormat = DT_CENTER;
  458. ItemTitle.strText = _T("序号");
  459. m_GridCtrl.SetItem(&ItemTitle);
  460. m_GridCtrl.MergeCells(iRow, iCol, iRow + 1, iCol);
  461. ItemTitle.row = iRow;
  462. ItemTitle.col = iCol + 1;
  463. ItemTitle.nFormat = DT_CENTER;
  464. ItemTitle.strText = _T("分机");
  465. m_GridCtrl.SetItem(&ItemTitle);
  466. m_GridCtrl.MergeCells(iRow, iCol + 1, iRow + 1, iCol + 1);
  467. // 偏移量
  468. ItemTitle.row = iRow;
  469. ItemTitle.col = iCol + 2;
  470. ItemTitle.nFormat = DT_CENTER;
  471. ItemTitle.strText = _T("偏移量");
  472. m_GridCtrl.SetItem(&ItemTitle);
  473. m_GridCtrl.MergeCells(iRow, iCol + 2, iRow, iCol + 4);
  474. ItemTitle.row = iRow + 1;
  475. ItemTitle.col = iCol + 2;
  476. ItemTitle.nFormat = DT_RIGHT;
  477. ItemTitle.strText = _T("X");
  478. m_GridCtrl.SetItem(&ItemTitle);
  479. ItemTitle.row = iRow + 1;
  480. ItemTitle.col = iCol + 3;
  481. ItemTitle.nFormat = DT_RIGHT;
  482. ItemTitle.strText = _T("Y");
  483. m_GridCtrl.SetItem(&ItemTitle);
  484. ItemTitle.row = iRow + 1;
  485. ItemTitle.col = iCol + 4;
  486. ItemTitle.nFormat = DT_RIGHT;
  487. ItemTitle.strText = _T("Z");
  488. m_GridCtrl.SetItem(&ItemTitle);
  489. // 调校量
  490. ItemTitle.row = iRow;
  491. ItemTitle.col = iCol + 5;
  492. ItemTitle.nFormat = DT_CENTER;
  493. ItemTitle.strText = _T("调校量");
  494. m_GridCtrl.SetItem(&ItemTitle);
  495. m_GridCtrl.MergeCells(iRow, iCol + 5, iRow, iCol + 7);
  496. ItemTitle.row = iRow + 1;
  497. ItemTitle.col = iCol + 5;
  498. ItemTitle.nFormat = DT_RIGHT;
  499. ItemTitle.strText = _T("X");
  500. m_GridCtrl.SetItem(&ItemTitle);
  501. ItemTitle.row = iRow + 1;
  502. ItemTitle.col = iCol + 6;
  503. ItemTitle.nFormat = DT_RIGHT;
  504. ItemTitle.strText = _T("Y");
  505. m_GridCtrl.SetItem(&ItemTitle);
  506. ItemTitle.row = iRow + 1;
  507. ItemTitle.col = iCol + 7;
  508. ItemTitle.nFormat = DT_RIGHT;
  509. ItemTitle.strText = _T("Z");
  510. m_GridCtrl.SetItem(&ItemTitle);
  511. // 向量
  512. ItemTitle.row = iRow;
  513. ItemTitle.col = iCol + 8;
  514. ItemTitle.nFormat = DT_CENTER;
  515. ItemTitle.strText = _T("向量");
  516. m_GridCtrl.SetItem(&ItemTitle);
  517. m_GridCtrl.MergeCells(iRow, iCol + 8, iRow, iCol + 10);
  518. ItemTitle.row = iRow + 1;
  519. ItemTitle.col = iCol + 8;
  520. ItemTitle.nFormat = DT_RIGHT;
  521. ItemTitle.strText = _T("X");
  522. m_GridCtrl.SetItem(&ItemTitle);
  523. ItemTitle.row = iRow + 1;
  524. ItemTitle.col = iCol + 9;
  525. ItemTitle.nFormat = DT_RIGHT;
  526. ItemTitle.strText = _T("Y");
  527. m_GridCtrl.SetItem(&ItemTitle);
  528. ItemTitle.row = iRow + 1;
  529. ItemTitle.col = iCol + 10;
  530. ItemTitle.nFormat = DT_RIGHT;
  531. ItemTitle.strText = _T("Z");
  532. m_GridCtrl.SetItem(&ItemTitle);
  533. // 起点
  534. ItemTitle.row = iRow;
  535. ItemTitle.col = iCol + 11;
  536. ItemTitle.nFormat = DT_CENTER;
  537. ItemTitle.strText = _T("起点");
  538. m_GridCtrl.SetItem(&ItemTitle);
  539. m_GridCtrl.MergeCells(iRow, iCol + 11, iRow, iCol + 13);
  540. ItemTitle.row = iRow + 1;
  541. ItemTitle.col = iCol + 11;
  542. ItemTitle.nFormat = DT_RIGHT;
  543. ItemTitle.strText = _T("X");
  544. m_GridCtrl.SetItem(&ItemTitle);
  545. ItemTitle.row = iRow + 1;
  546. ItemTitle.col = iCol + 12;
  547. ItemTitle.nFormat = DT_RIGHT;
  548. ItemTitle.strText = _T("Y");
  549. m_GridCtrl.SetItem(&ItemTitle);
  550. ItemTitle.row = iRow + 1;
  551. ItemTitle.col = iCol + 13;
  552. ItemTitle.nFormat = DT_RIGHT;
  553. ItemTitle.strText = _T("Z");
  554. m_GridCtrl.SetItem(&ItemTitle);
  555. // 终点
  556. ItemTitle.row = iRow;
  557. ItemTitle.col = iCol + 14;
  558. ItemTitle.nFormat = DT_CENTER;
  559. ItemTitle.strText = _T("终点");
  560. m_GridCtrl.SetItem(&ItemTitle);
  561. m_GridCtrl.MergeCells(iRow, iCol + 14, iRow, iCol + 16);
  562. ItemTitle.row = iRow + 1;
  563. ItemTitle.col = iCol + 14;
  564. ItemTitle.nFormat = DT_RIGHT;
  565. ItemTitle.strText = _T("X");
  566. m_GridCtrl.SetItem(&ItemTitle);
  567. ItemTitle.row = iRow + 1;
  568. ItemTitle.col = iCol + 15;
  569. ItemTitle.nFormat = DT_RIGHT;
  570. ItemTitle.strText = _T("Y");
  571. m_GridCtrl.SetItem(&ItemTitle);
  572. ItemTitle.row = iRow + 1;
  573. ItemTitle.col = iCol + 16;
  574. ItemTitle.nFormat = DT_RIGHT;
  575. ItemTitle.strText = _T("Z");
  576. m_GridCtrl.SetItem(&ItemTitle);
  577. /**********************************************************************************/
  578. // Thrust Line数据访问入口
  579. PostureDataAngleManager *pAngleManager = GetDocument()->GetPostureDataAngleManager();
  580. ASSERT(pAngleManager != NULL);
  581. GV_ITEM Item;
  582. Item.mask = GVIF_TEXT | GVIF_FORMAT;
  583. Item.nFormat = DT_SINGLELINE | DT_VCENTER;
  584. iRow += 1;
  585. CppSQLite3Query q = pAngleManager->Query(dwTaskId);
  586. int iIndex = 0;
  587. while (!q.eof()) {
  588. iRow += 1;
  589. iIndex++;
  590. Item.row = iRow;
  591. // 序号
  592. Item.col = iCol;
  593. Item.nFormat = DT_CENTER;
  594. str.Format("%d", iIndex);
  595. Item.strText = str;
  596. m_GridCtrl.SetItem(&Item);
  597. // 名称
  598. Item.col = iCol + 1;
  599. Item.nFormat = DT_CENTER;
  600. str.Format("%s", q.getStringField("equip_place"));
  601. Item.strText = str;
  602. m_GridCtrl.SetItem(&Item);
  603. // 偏移量 - X
  604. Item.col = iCol + 2;
  605. Item.nFormat = DT_RIGHT;
  606. str.Format("%.2f'", q.getFloatField("angle_a_x"));
  607. Item.strText = str;
  608. m_GridCtrl.SetItem(&Item);
  609. // 偏移量 - Y
  610. Item.row = iRow;
  611. Item.col = iCol + 3;
  612. Item.nFormat = DT_RIGHT;
  613. str.Format("%.2f'", q.getFloatField("angle_a_y"));
  614. Item.strText = str;
  615. m_GridCtrl.SetItem(&Item);
  616. // 偏移量 - Z
  617. Item.col = iCol + 4;
  618. Item.nFormat = DT_RIGHT;
  619. str.Format("%.2f'", q.getFloatField("angle_a_z"));
  620. Item.strText = str;
  621. m_GridCtrl.SetItem(&Item);
  622. // 调校量 - X
  623. Item.col = iCol + 5;
  624. Item.nFormat = DT_RIGHT;
  625. str.Format("%.2f'", q.getFloatField("angle_e_x"));
  626. Item.strText = str;
  627. m_GridCtrl.SetItem(&Item);
  628. // 调校量 - Y
  629. Item.col = iCol + 6;
  630. Item.nFormat = DT_RIGHT;
  631. str.Format("%.2f'", q.getFloatField("angle_e_y"));
  632. Item.strText = str;
  633. m_GridCtrl.SetItem(&Item);
  634. // 调校量 - Z
  635. Item.col = iCol + 7;
  636. Item.nFormat = DT_RIGHT;
  637. str.Format("%.2f'", q.getFloatField("angle_e_z"));
  638. Item.strText = str;
  639. m_GridCtrl.SetItem(&Item);
  640. DOUBLE x1 = q.getFloatField("line_start_x");
  641. DOUBLE y1 = q.getFloatField("line_start_y");
  642. DOUBLE z1 = q.getFloatField("line_start_z");
  643. DOUBLE x2 = q.getFloatField("line_end_x");
  644. DOUBLE y2 = q.getFloatField("line_end_y");
  645. DOUBLE z2 = q.getFloatField("line_end_z");
  646. DOUBLE vx1 = x2 - x1;
  647. DOUBLE vy1 = y2 - y1;
  648. DOUBLE vz1 = z2 - z1;
  649. // 向量 - X
  650. Item.col = iCol + 8;
  651. Item.nFormat = DT_RIGHT;
  652. str.Format("%.3f", vx1);
  653. Item.strText = str;
  654. m_GridCtrl.SetItem(&Item);
  655. // 向量 - Y
  656. Item.col = iCol + 9;
  657. Item.nFormat = DT_RIGHT;
  658. str.Format("%.3f", vy1);
  659. Item.strText = str;
  660. m_GridCtrl.SetItem(&Item);
  661. // 向量 - Z
  662. Item.col = iCol + 10;
  663. Item.nFormat = DT_RIGHT;
  664. str.Format("%.3f", vz1);
  665. Item.strText = str;
  666. m_GridCtrl.SetItem(&Item);
  667. // 起点 - X
  668. Item.col = iCol + 11;
  669. Item.nFormat = DT_RIGHT;
  670. str.Format("%.3f", x1);
  671. Item.strText = str;
  672. m_GridCtrl.SetItem(&Item);
  673. // 起点 - Y
  674. Item.col = iCol + 12;
  675. Item.nFormat = DT_RIGHT;
  676. str.Format("%.3f", y1);
  677. Item.strText = str;
  678. m_GridCtrl.SetItem(&Item);
  679. // 起点 - Z
  680. Item.col = iCol + 13;
  681. Item.nFormat = DT_RIGHT;
  682. str.Format("%.3f", z1);
  683. Item.strText = str;
  684. m_GridCtrl.SetItem(&Item);
  685. // 终点 - X
  686. Item.col = iCol + 14;
  687. Item.nFormat = DT_RIGHT;
  688. str.Format("%.3f", x2);
  689. Item.strText = str;
  690. m_GridCtrl.SetItem(&Item);
  691. // 终点 - Y
  692. Item.col = iCol + 15;
  693. Item.nFormat = DT_RIGHT;
  694. str.Format("%.3f", y2);
  695. Item.strText = str;
  696. m_GridCtrl.SetItem(&Item);
  697. // 终点 - Z
  698. Item.col = iCol + 16;
  699. Item.nFormat = DT_RIGHT;
  700. str.Format("%.3f", z2);
  701. Item.strText = str;
  702. m_GridCtrl.SetItem(&Item);
  703. q.nextRow();
  704. }
  705. q.finalize();
  706. return iRow + 1;
  707. }
  708. /**************************************************************************************************
  709. 函 数 名 :OnBnClickedBtnExportExcel
  710. 功能描述 :导出EXCEL
  711. 输入参数 :无
  712. 输出参数 :无
  713. 返 回 值 :void
  714. **************************************************************************************************/
  715. void DynamicReport::OnBnClickedBtnExportExcel()
  716. {
  717. BOOL isOpen = FALSE;
  718. CFileDialog dlg(isOpen, 0, 0, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, "Excel Files(*.xlsx)|*.xlsx");
  719. if (IDOK != dlg.DoModal())
  720. {
  721. return;
  722. }
  723. CString szFilePath = dlg.GetPathName();
  724. // 初始化数据
  725. TaskManager *pTaskManager = GetDocument()->GetTaskManager();
  726. ASSERT(pTaskManager != NULL);
  727. CppSQLite3Query q = pTaskManager->Query(m_taskId);
  728. if (q.eof()) {
  729. MessageBox(_T("没有数据"));
  730. q.finalize();
  731. return;
  732. }
  733. CString szTaskTime = q.getStringField("task_time");
  734. CString szTaskTitle = q.getStringField("task_title");
  735. CString szEquipCode = q.getStringField("equip_code");
  736. CString szEquipTypeCode = q.getStringField("equip_type_code");
  737. CString szReportTitle;
  738. szReportTitle.Format("测量报告-%s", szTaskTitle);
  739. CExport2Excel excelApp;
  740. bool bRet = excelApp.CreateExcel(szFilePath);
  741. if (!bRet) {
  742. MessageBox(_T("本机的Excel未安装或安装不完整,请重新安装Office Excel"));
  743. return;
  744. }
  745. excelApp.CreateSheet(szReportTitle);
  746. excelApp.SetFont(1, _T("宋体"), 16, true);
  747. excelApp.SetColWidth(1, 5);
  748. excelApp.SetColWidth(2, 10);
  749. excelApp.SetColWidth(3, 10);
  750. excelApp.SetColWidth(4, 10);
  751. excelApp.SetColWidth(5, 10);
  752. excelApp.SetColWidth(6, 10);
  753. excelApp.SetColWidth(7, 10);
  754. excelApp.SetColWidth(8, 10);
  755. excelApp.SetColWidth(9, 10);
  756. excelApp.SetColWidth(10, 10);
  757. excelApp.SetColWidth(11, 10);
  758. excelApp.SetColWidth(12, 10);
  759. excelApp.SetColWidth(13, 10);
  760. excelApp.SetColWidth(14, 10);
  761. excelApp.SetColWidth(15, 10);
  762. int iRow = 1;
  763. // 标题: 第1行
  764. excelApp.SetFont(iRow, _T("宋体"), 16, true);
  765. excelApp.MergeCells(iRow, 1, iRow, 16);
  766. excelApp.SetHorizontalAlignment(iRow, 1, xlCenter);
  767. excelApp.WriteData(1, 1, szTaskTitle);
  768. // 任务内容:第2行
  769. iRow += 1;
  770. CString strTaskInfo;
  771. strTaskInfo.Format("型号:%s 编号:%s 测量时间:%s", szEquipTypeCode, szEquipCode, szTaskTime);
  772. excelApp.MergeCells(iRow, 1, iRow, 16);
  773. excelApp.SetHorizontalAlignment(iRow, 1, xlLeft);
  774. excelApp.WriteData(2, 1, strTaskInfo);
  775. // 详情: 1. 点 2.推力线偏角
  776. iRow = ExcelPointData(&excelApp, m_taskId, iRow);
  777. iRow = ExcelAngleData(&excelApp, m_taskId, iRow);
  778. q.finalize();
  779. excelApp.Save();
  780. excelApp.Close();
  781. CString szMsg;
  782. szMsg.Format("导出文件成功,保存在%s", szFilePath);
  783. MessageBox(szMsg);
  784. }
  785. /**************************************************************************************************
  786. 函 数 名 :ExcelPointsData
  787. 功能描述 :Excel数据-点
  788. 输出参数 :略
  789. 返 回 值 :略
  790. **************************************************************************************************/
  791. int DynamicReport::ExcelPointData(CExport2Excel *pExcel, DWORD dwTaskId, int iStartRow)
  792. {
  793. CString str;
  794. int iRow = iStartRow + 2;
  795. // 标题: 第1行
  796. pExcel->SetFont(iRow, _T("宋体"), 14, true);
  797. pExcel->MergeCells(iRow, 1, iRow, 10);
  798. pExcel->SetHorizontalAlignment(iRow, 1, xlLeft);
  799. pExcel->WriteData(iRow, 1, _T("点"));
  800. // Header
  801. iRow += 1;
  802. str.Format(_T("序号"));
  803. pExcel->WriteData(iRow, 1, (LPCTSTR)str);
  804. pExcel->SetHorizontalAlignment(iRow, 1, xlCenter);
  805. pExcel->MergeCells(iRow, 1, iRow + 1, 1);
  806. str.Format(_T("名称"));
  807. pExcel->WriteData(iRow, 2, (LPCTSTR)str);
  808. pExcel->SetHorizontalAlignment(iRow, 2, xlCenter);
  809. pExcel->MergeCells(iRow, 2, iRow + 1, 2);
  810. str.Format(_T("编码"));
  811. pExcel->WriteData(iRow, 3, (LPCTSTR)str);
  812. pExcel->SetHorizontalAlignment(iRow, 3, xlCenter);
  813. pExcel->MergeCells(iRow, 3, iRow + 1, 3);
  814. str.Format(_T("理论值"));
  815. pExcel->WriteData(iRow, 4, (LPCTSTR)str);
  816. pExcel->SetHorizontalAlignment(iRow, 4, xlCenter);
  817. pExcel->MergeCells(iRow, 4, iRow, 6);
  818. str.Format(_T("X"));
  819. pExcel->WriteData(iRow + 1, 4, (LPCTSTR)str);
  820. pExcel->SetHorizontalAlignment(iRow + 1, 4, xlRight);
  821. str.Format(_T("Y"));
  822. pExcel->WriteData(iRow + 1, 5, (LPCTSTR)str);
  823. pExcel->SetHorizontalAlignment(iRow + 1, 5, xlRight);
  824. str.Format(_T("Z"));
  825. pExcel->WriteData(iRow + 1, 6, (LPCTSTR)str);
  826. pExcel->SetHorizontalAlignment(iRow + 1, 6, xlRight);
  827. str.Format(_T("实测值"));
  828. pExcel->WriteData(iRow, 7, (LPCTSTR)str);
  829. pExcel->SetHorizontalAlignment(iRow, 7, xlCenter);
  830. pExcel->MergeCells(iRow, 7, iRow, 9);
  831. str.Format(_T("X"));
  832. pExcel->WriteData(iRow + 1, 7, (LPCTSTR)str);
  833. pExcel->SetHorizontalAlignment(iRow + 1, 7, xlRight);
  834. str.Format(_T("Y"));
  835. pExcel->WriteData(iRow + 1, 8, (LPCTSTR)str);
  836. pExcel->SetHorizontalAlignment(iRow + 1, 8, xlRight);
  837. str.Format(_T("Z"));
  838. pExcel->WriteData(iRow + 1, 9, (LPCTSTR)str);
  839. pExcel->SetHorizontalAlignment(iRow + 1, 9, xlRight);
  840. str.Format(_T("说明"));
  841. pExcel->WriteData(iRow, 10, (LPCTSTR)str);
  842. pExcel->SetHorizontalAlignment(iRow, 10, xlLeft);
  843. pExcel->MergeCells(iRow, 10, iRow + 1, 10);
  844. // POINT数据访问入口
  845. PostureDataPointManager *pPointManager = GetDocument()->GetPostureDataPointManager();
  846. ASSERT(pPointManager != NULL);
  847. iRow++;
  848. CppSQLite3Query q = pPointManager->QueryOfReport(dwTaskId);
  849. int iIndex = 0;
  850. while (!q.eof()) {
  851. iRow++;
  852. iIndex += 1;
  853. // 序号
  854. str.Format("%d", iIndex);
  855. pExcel->WriteData(iRow, 1, (LPCTSTR)str);
  856. pExcel->SetHorizontalAlignment(iRow, 1, xlCenter);
  857. // 名称
  858. str.Format("%s", q.getStringField("point_title"));
  859. pExcel->WriteData(iRow, 2, (LPCTSTR)str);
  860. pExcel->SetHorizontalAlignment(iRow, 2, xlCenter);
  861. // CODE
  862. str.Format("%s", q.getStringField("point_code"));
  863. pExcel->WriteData(iRow, 3, (LPCTSTR)str);
  864. pExcel->SetHorizontalAlignment(iRow, 3, xlCenter);
  865. // 理论 - X
  866. str.Format("%f", q.getFloatField("point_e_x"));
  867. pExcel->WriteData(iRow, 4, (LPCTSTR)str);
  868. pExcel->SetHorizontalAlignment(iRow, 4, xlRight);
  869. pExcel->SetNumberFormatLocal(iRow, 4, "0.000");
  870. // 理论 - Y
  871. str.Format("%f", q.getFloatField("point_e_y"));
  872. pExcel->WriteData(iRow, 5, (LPCTSTR)str);
  873. pExcel->SetHorizontalAlignment(iRow, 5, xlRight);
  874. pExcel->SetNumberFormatLocal(iRow, 5, "0.000");
  875. // 理论 - Z
  876. str.Format("%f", q.getFloatField("point_e_z"));
  877. pExcel->WriteData(iRow, 6, (LPCTSTR)str);
  878. pExcel->SetHorizontalAlignment(iRow, 6, xlRight);
  879. pExcel->SetNumberFormatLocal(iRow, 6, "0.000");
  880. // 实测 - X
  881. str.Format("%f", q.getFloatField("point_a_x"));
  882. pExcel->WriteData(iRow, 7, (LPCTSTR)str);
  883. pExcel->SetHorizontalAlignment(iRow, 7, xlRight);
  884. pExcel->SetNumberFormatLocal(iRow, 7, "0.000");
  885. // 实测 - Y
  886. str.Format("%f", q.getFloatField("point_a_y"));
  887. pExcel->WriteData(iRow, 8, (LPCTSTR)str);
  888. pExcel->SetHorizontalAlignment(iRow, 8, xlRight);
  889. pExcel->SetNumberFormatLocal(iRow, 8, "0.000");
  890. // 实测 - Z
  891. str.Format("%f", q.getFloatField("point_a_z"));
  892. pExcel->WriteData(iRow, 9, (LPCTSTR)str);
  893. pExcel->SetHorizontalAlignment(iRow, 9, xlRight);
  894. pExcel->SetNumberFormatLocal(iRow, 9, "0.000");
  895. // 说明
  896. str.Format("%s", q.getStringField("point_desc"));
  897. pExcel->WriteData(iRow, 10, (LPCTSTR)str);
  898. pExcel->SetHorizontalAlignment(iRow, 10, xlLeft);
  899. q.nextRow();
  900. }
  901. q.finalize();
  902. pExcel->SetBorders(iStartRow + 2, 1, iRow, 10, true, true, true, true, true, true, xlThin, xlThin, xlThin, xlThin, xlThin, xlThin);
  903. return iRow;
  904. }
  905. /**************************************************************************************************
  906. 函 数 名 :ExcelAngleData
  907. 功能描述 :显示数据-点
  908. 输出参数 :略
  909. 返 回 值 :略
  910. **************************************************************************************************/
  911. int DynamicReport::ExcelAngleData(CExport2Excel *pExcel, DWORD dwTaskId, int iStartRow)
  912. {
  913. CString str;
  914. int iRow = iStartRow + 2;
  915. // 标题: 第1行
  916. pExcel->SetFont(iRow, _T("宋体"), 14, true);
  917. pExcel->MergeCells(iRow, 1, iRow, 17);
  918. pExcel->SetHorizontalAlignment(iRow, 1, xlLeft);
  919. pExcel->WriteData(iRow, 1, _T("推力线偏角"));
  920. // Header
  921. iRow += 1;
  922. str.Format(_T("序号"));
  923. pExcel->WriteData(iRow, 1, (LPCTSTR)str);
  924. pExcel->SetHorizontalAlignment(iRow, 1, xlCenter);
  925. pExcel->MergeCells(iRow, 1, iRow + 1, 1);
  926. str.Format(_T("分机"));
  927. pExcel->WriteData(iRow, 2, (LPCTSTR)str);
  928. pExcel->SetHorizontalAlignment(iRow, 2, xlCenter);
  929. pExcel->MergeCells(iRow, 2, iRow + 1, 2);
  930. str.Format(_T("偏移量"));
  931. pExcel->WriteData(iRow, 3, (LPCTSTR)str);
  932. pExcel->SetHorizontalAlignment(iRow, 3, xlCenter);
  933. pExcel->MergeCells(iRow, 3, iRow, 5);
  934. str.Format(_T("X"));
  935. pExcel->WriteData(iRow + 1, 3, (LPCTSTR)str);
  936. pExcel->SetHorizontalAlignment(iRow + 1, 3, xlRight);
  937. str.Format(_T("Y"));
  938. pExcel->WriteData(iRow + 1, 4, (LPCTSTR)str);
  939. pExcel->SetHorizontalAlignment(iRow + 1, 4, xlRight);
  940. str.Format(_T("Z"));
  941. pExcel->WriteData(iRow + 1, 5, (LPCTSTR)str);
  942. pExcel->SetHorizontalAlignment(iRow + 1, 5, xlRight);
  943. str.Format(_T("调校量"));
  944. pExcel->WriteData(iRow, 6, (LPCTSTR)str);
  945. pExcel->SetHorizontalAlignment(iRow, 6, xlCenter);
  946. pExcel->MergeCells(iRow, 6, iRow, 8);
  947. str.Format(_T("X"));
  948. pExcel->WriteData(iRow + 1, 6, (LPCTSTR)str);
  949. pExcel->SetHorizontalAlignment(iRow + 1, 6, xlRight);
  950. str.Format(_T("Y"));
  951. pExcel->WriteData(iRow + 1, 7, (LPCTSTR)str);
  952. pExcel->SetHorizontalAlignment(iRow + 1, 7, xlRight);
  953. str.Format(_T("Z"));
  954. pExcel->WriteData(iRow + 1, 8, (LPCTSTR)str);
  955. pExcel->SetHorizontalAlignment(iRow + 1, 8, xlRight);
  956. str.Format(_T("向量"));
  957. pExcel->WriteData(iRow, 9, (LPCTSTR)str);
  958. pExcel->SetHorizontalAlignment(iRow, 9, xlCenter);
  959. pExcel->MergeCells(iRow, 9, iRow, 11);
  960. str.Format(_T("X"));
  961. pExcel->WriteData(iRow + 1, 9, (LPCTSTR)str);
  962. pExcel->SetHorizontalAlignment(iRow + 1, 9, xlRight);
  963. str.Format(_T("Y"));
  964. pExcel->WriteData(iRow + 1, 10, (LPCTSTR)str);
  965. pExcel->SetHorizontalAlignment(iRow + 1, 10, xlRight);
  966. str.Format(_T("Z"));
  967. pExcel->WriteData(iRow + 1, 11, (LPCTSTR)str);
  968. pExcel->SetHorizontalAlignment(iRow + 1, 11, xlRight);
  969. str.Format(_T("起点"));
  970. pExcel->WriteData(iRow, 12, (LPCTSTR)str);
  971. pExcel->SetHorizontalAlignment(iRow, 12, xlCenter);
  972. pExcel->MergeCells(iRow, 12, iRow, 14);
  973. str.Format(_T("X"));
  974. pExcel->WriteData(iRow + 1, 12, (LPCTSTR)str);
  975. pExcel->SetHorizontalAlignment(iRow + 1, 12, xlRight);
  976. str.Format(_T("Y"));
  977. pExcel->WriteData(iRow + 1, 13, (LPCTSTR)str);
  978. pExcel->SetHorizontalAlignment(iRow + 1, 13, xlRight);
  979. str.Format(_T("Z"));
  980. pExcel->WriteData(iRow + 1, 14, (LPCTSTR)str);
  981. pExcel->SetHorizontalAlignment(iRow + 1, 14, xlRight);
  982. str.Format(_T("终点"));
  983. pExcel->WriteData(iRow, 15, (LPCTSTR)str);
  984. pExcel->SetHorizontalAlignment(iRow, 15, xlCenter);
  985. pExcel->MergeCells(iRow, 15, iRow, 17);
  986. str.Format(_T("X"));
  987. pExcel->WriteData(iRow + 1, 15, (LPCTSTR)str);
  988. pExcel->SetHorizontalAlignment(iRow + 1, 15, xlRight);
  989. str.Format(_T("Y"));
  990. pExcel->WriteData(iRow + 1, 16, (LPCTSTR)str);
  991. pExcel->SetHorizontalAlignment(iRow + 1, 16, xlRight);
  992. str.Format(_T("Z"));
  993. pExcel->WriteData(iRow + 1, 17, (LPCTSTR)str);
  994. pExcel->SetHorizontalAlignment(iRow + 1, 17, xlRight);
  995. // LINE数据访问入口
  996. PostureDataAngleManager *pAngleManager = GetDocument()->GetPostureDataAngleManager();
  997. ASSERT(pAngleManager != NULL);
  998. iRow++;
  999. int iIndex = 0;
  1000. CppSQLite3Query q = pAngleManager->Query(dwTaskId);
  1001. while (!q.eof()) {
  1002. iRow += 1;
  1003. iIndex += 1;
  1004. // 序号
  1005. str.Format("%d", iIndex);
  1006. pExcel->WriteData(iRow, 1, (LPCTSTR)str);
  1007. pExcel->SetHorizontalAlignment(iRow, 1, xlCenter);
  1008. // 名称
  1009. str.Format("%s", q.getStringField("equip_place"));
  1010. pExcel->WriteData(iRow, 2, (LPCTSTR)str);
  1011. pExcel->SetHorizontalAlignment(iRow, 2, xlCenter);
  1012. // 偏移量 - X
  1013. str.Format("%.3f'", q.getFloatField("angle_a_x"));
  1014. pExcel->WriteData(iRow, 3, (LPCTSTR)str);
  1015. pExcel->SetHorizontalAlignment(iRow, 3, xlRight);
  1016. // 偏移量 - Y
  1017. str.Format("%.3f'", q.getFloatField("angle_a_y"));
  1018. pExcel->WriteData(iRow, 4, (LPCTSTR)str);
  1019. pExcel->SetHorizontalAlignment(iRow, 4, xlRight);
  1020. // 偏移量 - Z
  1021. str.Format("%.3f'", q.getFloatField("angle_a_z"));
  1022. pExcel->WriteData(iRow, 5, (LPCTSTR)str);
  1023. pExcel->SetHorizontalAlignment(iRow, 5, xlRight);
  1024. // 调校量 - X
  1025. str.Format("%.3f'", q.getFloatField("angle_e_x"));
  1026. pExcel->WriteData(iRow, 6, (LPCTSTR)str);
  1027. pExcel->SetHorizontalAlignment(iRow, 6, xlRight);
  1028. pExcel->SetNumberFormatLocal(iRow, 6, _T("0.00"));
  1029. // 调校量 - Y
  1030. str.Format("%.3f'", q.getFloatField("angle_e_y"));
  1031. pExcel->WriteData(iRow, 7, (LPCTSTR)str);
  1032. pExcel->SetHorizontalAlignment(iRow, 7, xlRight);
  1033. pExcel->SetNumberFormatLocal(iRow, 7, _T("0.00"));
  1034. // 调校量 - Z
  1035. str.Format("%.3f'", q.getFloatField("angle_e_z"));
  1036. pExcel->WriteData(iRow, 8, (LPCTSTR)str);
  1037. pExcel->SetHorizontalAlignment(iRow, 8, xlRight);
  1038. DOUBLE x1 = q.getFloatField("line_start_x");
  1039. DOUBLE y1 = q.getFloatField("line_start_y");
  1040. DOUBLE z1 = q.getFloatField("line_start_z");
  1041. DOUBLE x2 = q.getFloatField("line_end_x");
  1042. DOUBLE y2 = q.getFloatField("line_end_y");
  1043. DOUBLE z2 = q.getFloatField("line_end_z");
  1044. DOUBLE vx1 = x2 - x1;
  1045. DOUBLE vy1 = y2 - y1;
  1046. DOUBLE vz1 = z2 - z1;
  1047. // 向量 - X
  1048. str.Format("%.3f", vx1);
  1049. pExcel->WriteData(iRow, 9, (LPCTSTR)str);
  1050. pExcel->SetHorizontalAlignment(iRow, 9, xlRight);
  1051. pExcel->SetNumberFormatLocal(iRow, 9, "0.000");
  1052. // 向量 - Y
  1053. str.Format("%.3f", vy1);
  1054. pExcel->WriteData(iRow, 10, (LPCTSTR)str);
  1055. pExcel->SetHorizontalAlignment(iRow, 10, xlRight);
  1056. pExcel->SetNumberFormatLocal(iRow, 101, "0.000");
  1057. // 向量 - Z
  1058. str.Format("%.3f", vz1);
  1059. pExcel->WriteData(iRow, 11, (LPCTSTR)str);
  1060. pExcel->SetHorizontalAlignment(iRow, 11, xlRight);
  1061. pExcel->SetNumberFormatLocal(iRow, 11, "0.000");
  1062. // 起点 - X
  1063. str.Format("%.3f", x1);
  1064. pExcel->WriteData(iRow, 12, (LPCTSTR)str);
  1065. pExcel->SetHorizontalAlignment(iRow, 12, xlRight);
  1066. pExcel->SetNumberFormatLocal(iRow, 12, "0.000");
  1067. // 起点 - Y
  1068. str.Format("%.3f", y1);
  1069. pExcel->WriteData(iRow, 13, (LPCTSTR)str);
  1070. pExcel->SetHorizontalAlignment(iRow, 13, xlRight);
  1071. pExcel->SetNumberFormatLocal(iRow, 13, "0.000");
  1072. // 起点 - Z
  1073. str.Format("%.3f", z1);
  1074. pExcel->WriteData(iRow, 14, (LPCTSTR)str);
  1075. pExcel->SetHorizontalAlignment(iRow, 14, xlRight);
  1076. pExcel->SetNumberFormatLocal(iRow, 14, "0.000");
  1077. // 终点 - X
  1078. str.Format("%.3f", x2);
  1079. pExcel->WriteData(iRow, 15, (LPCTSTR)str);
  1080. pExcel->SetHorizontalAlignment(iRow, 15, xlRight);
  1081. pExcel->SetNumberFormatLocal(iRow, 15, "0.000");
  1082. // 终点 - Y
  1083. str.Format("%.3f", y2);
  1084. pExcel->WriteData(iRow, 16, (LPCTSTR)str);
  1085. pExcel->SetHorizontalAlignment(iRow, 16, xlRight);
  1086. pExcel->SetNumberFormatLocal(iRow, 16, "0.000");
  1087. // 终点 - Z
  1088. str.Format("%.3f" ,z2);
  1089. pExcel->WriteData(iRow, 17, (LPCTSTR)str);
  1090. pExcel->SetHorizontalAlignment(iRow, 17, xlRight);
  1091. pExcel->SetNumberFormatLocal(iRow, 17, "0.000");
  1092. q.nextRow();
  1093. }
  1094. q.finalize();
  1095. pExcel->SetBorders(iStartRow + 2, 1, iRow, 17, true, true, true, true, true, true, xlThin, xlThin, xlThin, xlThin, xlThin, xlThin);
  1096. return iRow;
  1097. }
  1098. void DynamicReport::OnSize(UINT nType, int cx, int cy)
  1099. {
  1100. CDialogEx::OnSize(nType, cx, cy);
  1101. }