/************************************************************************************************** 版本所有(C), 2020-2022, 北京普达迪泰 *************************************************************************************************** 文 件 名: StaticReport.cpp 功能描述: 静态测量-‘生成报告’对话框 版 本 号: 1.00初版 作 者: HYF 生成日期; 2021-12-20 最近修改: 函数列表: 修改历史: 1.日 期 :2021-12-20 作 者 : HYF 修改内容 : 创建文件 **************************************************************************************************/ #include "pch.h" #include "DMS.h" #include "StaticReport.h" #include "afxdialogex.h" #include "DmsDoc.h" #include "CppSQLite3.h" #include "TaskManager.h" #include "EquipDataManager.h" #include "EquipDataCircleManager.h" #include "EquipDataPlaneManager.h" #include "EquipDataLineManager.h" #include "EquipDataPointManager.h" #include "EquipDataCylinderManager.h" #include "EquipDataAngleManager.h" #include "GridCtrl.h" #include "Excel.h" // StaticReport 对话框 IMPLEMENT_DYNAMIC(StaticReport, CDialogEx) StaticReport::StaticReport(CWnd* pParent /*=nullptr*/) : CDialogEx(IDD_DLG_STATIC_REPORT, pParent) { } StaticReport::StaticReport(CWnd* pParent /*=nullptr*/, DWORD taskId) : CDialogEx(IDD_DLG_STATIC_REPORT, pParent) , m_taskId(taskId) { } StaticReport::~StaticReport() { } void StaticReport::DoDataExchange(CDataExchange* pDX) { CDialogEx::DoDataExchange(pDX); DDX_Control(pDX, IDC_STATIC_REPORT_TITLE, m_Static_Report_Title); DDX_Control(pDX, IDC_GRIDCTRL, m_GridCtrl); } BEGIN_MESSAGE_MAP(StaticReport, CDialogEx) ON_BN_CLICKED(IDC_BTN_STATIC_REPORT_TO_PDF, &StaticReport::OnBnClickedBtnStaticReportToPdf) ON_BN_CLICKED(IDC_BTN_STATIC_REPORT_TO_PRINT, &StaticReport::OnBnClickedBtnStaticReportToPrint) ON_BN_CLICKED(IDC_BTN_STATIC_REPORT_TO_EXCEL, &StaticReport::OnBnClickedBtnStaticReportToExcel) ON_WM_SIZE() END_MESSAGE_MAP() // 获取文档对象 CDmsDoc *StaticReport::GetDocument() { CFrameWnd *pFrm = (CFrameWnd *)(AfxGetApp()->m_pMainWnd); ASSERT(pFrm); CView *pView = pFrm->GetActiveView(); CDmsDoc *pDoc = (CDmsDoc *)(pView->GetDocument()); ASSERT(pDoc->IsKindOf(RUNTIME_CLASS(CDmsDoc))); return pDoc; } /************************************************************************************************** 函 数 名 :OnInitDialog 功能描述 :消息处理-初始化UI数据展示 输入参数 :略 输出参数 :略 返 回 值 :略 **************************************************************************************************/ BOOL StaticReport::OnInitDialog() { CDialogEx::OnInitDialog(); //创建图标 HICON icon; //加载图标 icon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); SetIcon(icon, true); SetIcon(icon, false); m_Static_Report_Title.SetFontSize(16); m_Static_Report_Title.SetFontBold(TRUE); // 初始化数据 CDmsDoc *pDoc = GetDocument(); TaskManager *pTaskManager = pDoc->GetTaskManager(); ASSERT(pTaskManager != NULL); CppSQLite3Query q = pTaskManager->Query(m_taskId); if (!q.eof()) { CString szTitle; szTitle.Format("%s-测量报告", q.getStringField("task_title")); m_Static_Report_Title.SetWindowText(szTitle); } q.finalize(); // 初始化Grid数据 InitGridReportData(); return TRUE; } /************************************************************************************************** 函 数 名 :InitGridReportData 功能描述 :展示点云数据 输入参数 :略 输出参数 :略 返 回 值 :略 **************************************************************************************************/ void StaticReport::InitGridReportData() { CString szTaskTime; CString szTaskTitle; CString szEquipCode; CString szEquipTypeCode; // 初始化数据 TaskManager *pTaskManager = GetDocument()->GetTaskManager(); ASSERT(pTaskManager != NULL); CppSQLite3Query q = pTaskManager->Query(m_taskId); if (!q.eof()) { szTaskTime.Format("%s", q.getStringField("task_time")); szTaskTitle.Format("%s", q.getStringField("task_title")); szEquipCode.Format("%s", q.getStringField("equip_code")); szEquipTypeCode.Format("%s", q.getStringField("equip_type_code")); } q.finalize(); // Point数据访问入口 EquipDataPointManager *pPointManager = GetDocument()->GetEquipDataPointManager(); ASSERT(pPointManager != NULL); // Plane数据访问入口 EquipDataPlaneManager *pPlaneManager = GetDocument()->GetEquipDataPlaneManager(); ASSERT(pPlaneManager != NULL); // Circle数据访问入口 EquipDataCircleManager *pCircleManager = GetDocument()->GetEquipDataCircleManager(); ASSERT(pCircleManager != NULL); // LINE数据访问入口 EquipDataLineManager *pLineManager = GetDocument()->GetEquipDataLineManager(); ASSERT(pLineManager != NULL); // Cylinder数据访问入口 EquipDataCylinderManager *pCylinderManager = GetDocument()->GetEquipDataCylinderManager(); ASSERT(pCylinderManager != NULL); // Angle数据访问入口 EquipDataAngleManager *pAngleManager = GetDocument()->GetEquipDataAngleManager(); ASSERT(pAngleManager != NULL); int iPointCount = pPointManager->CountOfReport(m_taskId); int iPlaneCount = pPlaneManager->Count(m_taskId); int iCirceCount = pCircleManager->Count(m_taskId); int iLineCount = pLineManager->Count(m_taskId); int iCylinderCount = pCylinderManager->Count(m_taskId); int iAngleCount = pAngleManager->Count(m_taskId); int iRowsCount = iPointCount + iPlaneCount + iCirceCount + iLineCount + iCylinderCount + iAngleCount + 30; m_GridCtrl.DeleteAllItems(); m_GridCtrl.SetGridLines(GVL_NONE); m_GridCtrl.SetEditable(FALSE); m_GridCtrl.GetDefaultCell(FALSE, FALSE)->SetBackClr(RGB(0xFF, 0xFF, 0xFF)); m_GridCtrl.SetSingleRowSelection(FALSE); m_GridCtrl.SetSingleColSelection(FALSE); m_GridCtrl.EnableSelection(FALSE); m_GridCtrl.SetFrameFocusCell(FALSE); TRY { m_GridCtrl.SetRowCount(iRowsCount); m_GridCtrl.SetColumnCount(17); m_GridCtrl.SetFixedRowCount(0); m_GridCtrl.SetFixedColumnCount(0); m_GridCtrl.SetColumnWidth(0, 20); m_GridCtrl.SetColumnWidth(1, 40); m_GridCtrl.SetColumnWidth(2, 110); m_GridCtrl.SetColumnWidth(3, 110); m_GridCtrl.SetColumnWidth(4, 80); m_GridCtrl.SetColumnWidth(5, 80); m_GridCtrl.SetColumnWidth(6, 80); m_GridCtrl.SetColumnWidth(7, 80); m_GridCtrl.SetColumnWidth(8, 80); m_GridCtrl.SetColumnWidth(9, 80); m_GridCtrl.SetColumnWidth(10, 80); m_GridCtrl.SetColumnWidth(11, 80); m_GridCtrl.SetColumnWidth(12, 80); m_GridCtrl.SetColumnWidth(13, 80); m_GridCtrl.SetColumnWidth(14, 80); m_GridCtrl.SetColumnWidth(15, 80); m_GridCtrl.SetColumnWidth(16, 20); } CATCH(CMemoryException, e) { e->ReportError(); return; } END_CATCH // Get the font CFont* pFont = m_GridCtrl.GetFont(); // Set the fixed row defaults as this new font // m_GridCtrl.GetDefaultCell(TRUE, FALSE)->SetFont(&lfTitle); int iRow = 1; int iCol = 1; COLORREF bkClrHeader = RGB(128, 128, 128); COLORREF bkClrData = RGB(255, 255, 255); GV_ITEM ItemTitle; ItemTitle.mask = (GVIF_TEXT | GVIF_BORDER | GVIF_FONT); ItemTitle.crBkClr = bkClrHeader; // or - m_Grid.SetItemBkColour(row, col, clr); ItemTitle.nBorder = GVIS_BDR_BOTTOM; ItemTitle.row = iRow; ItemTitle.col = iCol; ItemTitle.strText = szTaskTitle; LOGFONT lfTitle; pFont->GetLogFont(&lfTitle); // Make it true-type memcpy(lfTitle.lfFaceName, _T("Arial"), 6); lfTitle.lfHeight = -18; lfTitle.lfWeight = FW_BOLD; memcpy(&(ItemTitle.lfFont), &lfTitle, sizeof(LOGFONT)); //Item.lfFont = lf; m_GridCtrl.SetItem(&ItemTitle); m_GridCtrl.MergeCells(iRow, iCol, iRow, 15); /*********************************************************************************************/ iRow += 1; CString strTaskInfo; strTaskInfo.Format("型号:%s 编号:%s 测量时间:%s", szEquipTypeCode, szEquipCode, szTaskTime); GV_ITEM Item; Item.row = iRow; Item.col = 1; Item.mask = (GVIF_TEXT); Item.nFormat = DT_SINGLELINE | DT_VCENTER | DT_LEFT; Item.crBkClr = bkClrHeader; // or - m_Grid.SetItemBkColour(row, col, clr); Item.strText = strTaskInfo; m_GridCtrl.SetItem(&Item); m_GridCtrl.MergeCells(iRow, iCol, iRow, 15); iRow += 1; /********************************************************************************************/ iRow += 1; iRow = PrintPlaneData(szEquipCode, iRow); iRow = PrintCircleData(szEquipCode, iRow); iRow = PrintLineData(szEquipCode, iRow); iRow = PrintCylinderData(szEquipCode, iRow); iRow = PrintPointsData(szEquipCode, iRow); iRow = PrintAngleData(szEquipCode, iRow); } /************************************************************************************************** 函 数 名 :ShowPlaneData 功能描述 :显示数据-面 输出参数 :略 返 回 值 :略 **************************************************************************************************/ int StaticReport::PrintPlaneData(LPCTSTR szEquipCode, int iStartRow) { // Get the font CFont* pFont = m_GridCtrl.GetFont(); CString str; int iRow = iStartRow; int iCol = 1; GV_ITEM ItemCat; ItemCat.row = iRow; ItemCat.col = iCol; ItemCat.mask = (GVIF_TEXT | GVIF_BORDER | GVIF_FONT |GVIF_FORMAT); ItemCat.nFormat = DT_SINGLELINE | DT_VCENTER | DT_LEFT; ItemCat.nBorder = GVIS_BDR_BOTTOM; ItemCat.strText = _T("平面"); LOGFONT lfTitle; pFont->GetLogFont(&lfTitle); // Make it true-type memcpy(lfTitle.lfFaceName, _T("Arial"), 6); lfTitle.lfWeight = FW_BOLD; memcpy(&(ItemCat.lfFont), &lfTitle, sizeof(LOGFONT)); //Item.lfFont = lf; m_GridCtrl.SetItem(&ItemCat); m_GridCtrl.MergeCells(iRow, iCol, iRow, 15); /*******************************************************************************************/ iRow += 1; GV_ITEM ItemTitle; ItemTitle.mask = GVIF_TEXT | GVIF_FORMAT | GVIF_BORDER; ItemTitle.nBorder = GVIS_BDR_BOTTOM; ItemTitle.nFormat = DT_SINGLELINE | DT_VCENTER; ItemTitle.row = iRow; ItemTitle.col = iCol; ItemTitle.nFormat |= DT_CENTER; ItemTitle.nBorder = GVIS_BDR_BOTTOM; str.Format(_T("序号")); ItemTitle.strText = str; m_GridCtrl.SetItem(&ItemTitle); ItemTitle.col = iCol + 1; ItemTitle.nFormat |= DT_CENTER; str.Format(_T("名称")); ItemTitle.strText = str; m_GridCtrl.SetItem(&ItemTitle); ItemTitle.col = iCol + 2; ItemTitle.nFormat |= DT_CENTER; str.Format(_T("编码")); ItemTitle.strText = str; m_GridCtrl.SetItem(&ItemTitle); ItemTitle.col = iCol + 3; ItemTitle.nFormat |= DT_RIGHT; str.Format("A"); ItemTitle.strText = str; m_GridCtrl.SetItem(&ItemTitle); ItemTitle.col = iCol + 4; ItemTitle.nFormat |= DT_RIGHT; str.Format("B"); ItemTitle.strText = str; m_GridCtrl.SetItem(&ItemTitle); ItemTitle.col = iCol + 5; ItemTitle.nFormat |= DT_RIGHT; str.Format(_T("C")); ItemTitle.strText = str; m_GridCtrl.SetItem(&ItemTitle); ItemTitle.col = iCol + 6; ItemTitle.nFormat |= DT_RIGHT; str.Format("D"); ItemTitle.strText = str; m_GridCtrl.SetItem(&ItemTitle); ItemTitle.col = iCol + 7; ItemTitle.nFormat |= DT_RIGHT; str.Format("RMS"); ItemTitle.strText = str; m_GridCtrl.SetItem(&ItemTitle); ItemTitle.col = iCol + 8; ItemTitle.nFormat |= DT_RIGHT; str.Format(_T("平面度")); ItemTitle.strText = str; m_GridCtrl.SetItem(&ItemTitle); ItemTitle.col = iCol + 9; ItemTitle.nFormat |= DT_LEFT; str.Format("说明"); ItemTitle.strText = str; m_GridCtrl.SetItem(&ItemTitle); /*****************************************************************************************/ // Plane数据访问入口 EquipDataPlaneManager *pPlaneManager = GetDocument()->GetEquipDataPlaneManager(); ASSERT(pPlaneManager != NULL); GV_ITEM Item; Item.mask = GVIF_TEXT | GVIF_FORMAT; Item.nFormat = DT_SINGLELINE | DT_VCENTER; CppSQLite3Query q = pPlaneManager->Query(m_taskId); int iIndex = 0; while (!q.eof()) { iRow += 1; iIndex++; // 序号 Item.row = iRow; Item.col = iCol; Item.nFormat |= DT_CENTER; str.Format("%d", iIndex); Item.strText = str; m_GridCtrl.SetItem(&Item); // 名称 Item.row = iRow; Item.col = iCol + 1; Item.nFormat |= DT_CENTER; str.Format("%s", q.getStringField("plane_title")); Item.strText = str; m_GridCtrl.SetItem(&Item); // CODE Item.row = iRow; Item.col = iCol + 2; Item.nFormat |= DT_CENTER; str.Format("%s", q.getStringField("plane_code")); Item.strText = str; m_GridCtrl.SetItem(&Item); // A Item.row = iRow; Item.col = iCol + 3; Item.nFormat |= DT_RIGHT; str.Format("%.3f", q.getFloatField("plane_a")); Item.strText = str; m_GridCtrl.SetItem(&Item); // B Item.row = iRow; Item.col = iCol + 4; Item.nFormat |= DT_RIGHT; str.Format("%.3f", q.getFloatField("plane_b")); Item.strText = str; m_GridCtrl.SetItem(&Item); // C Item.row = iRow; Item.col = iCol + 5; Item.nFormat |= DT_RIGHT; str.Format("%.3f", q.getFloatField("plane_c")); Item.strText = str; m_GridCtrl.SetItem(&Item); // D Item.row = iRow; Item.col = iCol + 6; Item.nFormat |= DT_RIGHT; str.Format("%.3f", q.getFloatField("plane_d")); Item.strText = str; m_GridCtrl.SetItem(&Item); // RMS Item.row = iRow; Item.col = iCol + 7; Item.nFormat |= DT_RIGHT; str.Format("%.3f", q.getFloatField("plane_rms")); Item.strText = str; m_GridCtrl.SetItem(&Item); // 平面度 Item.row = iRow; Item.col = iCol + 8; Item.nFormat = DT_RIGHT; str.Format("%.3f", q.getFloatField("plane_flatness")); Item.strText = str; m_GridCtrl.SetItem(&Item); // DESC Item.row = iRow; Item.col = iCol + 9; Item.nFormat |= DT_LEFT; str.Format("%s", q.getStringField("plane_desc")); Item.strText = str; m_GridCtrl.SetItem(&Item); q.nextRow(); } q.finalize(); return iRow+1; } /************************************************************************************************** 函 数 名 :ShowCircleData 功能描述 :显示数据-圆 输出参数 :, 返 回 值 :略 **************************************************************************************************/ int StaticReport::PrintCircleData(LPCTSTR szEquipCode, int iStartRow) { // Get the font CFont* pFont = m_GridCtrl.GetFont(); CString str; int iRow = iStartRow + 1; int iCol = 1; GV_ITEM ItemCat; ItemCat.row = iRow; ItemCat.col = iCol; ItemCat.mask = (GVIF_TEXT | GVIF_BORDER | GVIF_FONT | GVIF_FORMAT); ItemCat.nFormat = DT_SINGLELINE | DT_VCENTER | DT_LEFT; ItemCat.nBorder = GVIS_BDR_BOTTOM; ItemCat.strText = _T("圆"); LOGFONT lfTitle; pFont->GetLogFont(&lfTitle); // Make it true-type memcpy(lfTitle.lfFaceName, _T("Arial"), 6); lfTitle.lfWeight = FW_BOLD; memcpy(&(ItemCat.lfFont), &lfTitle, sizeof(LOGFONT)); //Item.lfFont = lf; m_GridCtrl.SetItem(&ItemCat); m_GridCtrl.MergeCells(iRow, iCol, iRow, 15); /*****************************************************************************/ iRow += 1; GV_ITEM ItemTitle; ItemTitle.mask = GVIF_TEXT | GVIF_FORMAT | GVIF_BORDER; ItemTitle.nBorder = GVIS_BDR_BOTTOM; ItemTitle.nFormat = DT_SINGLELINE | DT_VCENTER; ItemTitle.row = iRow; ItemTitle.col = iCol; ItemTitle.nFormat = DT_CENTER; ItemTitle.strText = _T("序号"); m_GridCtrl.SetItem(&ItemTitle); m_GridCtrl.MergeCells(iRow, iCol, iRow + 1, iCol); ItemTitle.row = iRow; ItemTitle.col = iCol +1; ItemTitle.nFormat |= DT_CENTER; ItemTitle.strText = _T("名称"); m_GridCtrl.SetItem(&ItemTitle); m_GridCtrl.MergeCells(iRow, iCol + 1, iRow + 1, iCol + 1); ItemTitle.row = iRow; ItemTitle.col = iCol + 2; ItemTitle.nFormat |= DT_CENTER; ItemTitle.strText = _T("编码"); m_GridCtrl.SetItem(&ItemTitle); m_GridCtrl.MergeCells(iRow , iCol + 2, iRow + 1, iCol + 2); ItemTitle.row = iRow; ItemTitle.col = iCol + 3; ItemTitle.nFormat |= DT_CENTER; ItemTitle.strText = _T("圆心"); m_GridCtrl.SetItem(&ItemTitle); m_GridCtrl.MergeCells(iRow, iCol + 3, iRow, iCol + 5); ItemTitle.row = iRow + 1; ItemTitle.col = iCol+3; ItemTitle.nFormat |= DT_RIGHT; ItemTitle.strText = _T("X"); m_GridCtrl.SetItem(&ItemTitle); ItemTitle.row = iRow + 1; ItemTitle.col = iCol+4; ItemTitle.nFormat |= DT_RIGHT; ItemTitle.strText = _T("Y"); m_GridCtrl.SetItem(&ItemTitle); ItemTitle.row = iRow + 1; ItemTitle.col = iCol+5; ItemTitle.nFormat |= DT_RIGHT; ItemTitle.strText = _T("Z"); m_GridCtrl.SetItem(&ItemTitle); ItemTitle.row = iRow; ItemTitle.col = iCol+6; ItemTitle.nFormat |= DT_RIGHT; ItemTitle.strText = _T("半径"); m_GridCtrl.SetItem(&ItemTitle); m_GridCtrl.MergeCells(iRow, iCol + 6, iRow + 1, iCol + 6); ItemTitle.row = iRow; ItemTitle.col = iCol+7; ItemTitle.nFormat = DT_RIGHT; ItemTitle.strText = _T("RMS"); m_GridCtrl.SetItem(&ItemTitle); m_GridCtrl.MergeCells(iRow, iCol + 7, iRow + 1, iCol + 7); ItemTitle.row = iRow; ItemTitle.col = iCol + 8; ItemTitle.nFormat = DT_RIGHT; ItemTitle.strText = _T("圆度"); m_GridCtrl.SetItem(&ItemTitle); m_GridCtrl.MergeCells(iRow, iCol + 8, iRow + 1, iCol + 8); ItemTitle.row = iRow; ItemTitle.col = iCol+ 9; ItemTitle.nFormat |= DT_LEFT; ItemTitle.strText = _T("说明"); m_GridCtrl.SetItem(&ItemTitle); m_GridCtrl.MergeCells(iRow, iCol + 9, iRow + 1, iCol + 9); // Circle数据访问入口 EquipDataCircleManager *pCircleManager = GetDocument()->GetEquipDataCircleManager(); ASSERT(pCircleManager != NULL); GV_ITEM Item; Item.mask = GVIF_TEXT | GVIF_FORMAT; Item.nFormat = DT_SINGLELINE | DT_VCENTER; iRow += 1; CppSQLite3Query q = pCircleManager->Query(m_taskId); int iIndex = 0; while (!q.eof()) { iRow += 1; iIndex++; // 序号 Item.row = iRow; Item.col = iCol; Item.nFormat = DT_CENTER; str.Format("%d", iIndex); Item.strText = str; m_GridCtrl.SetItem(&Item); // 名称 Item.row = iRow; Item.col = iCol + 1; Item.nFormat = DT_CENTER; str.Format("%s", q.getStringField("circle_title")); Item.strText = str; m_GridCtrl.SetItem(&Item); // CODE Item.row = iRow; Item.col = iCol + 2; Item.nFormat = DT_CENTER; str.Format("%s", q.getStringField("circle_code")); Item.strText = str; m_GridCtrl.SetItem(&Item); // 圆心 - X Item.row = iRow; Item.col = iCol + 3; Item.nFormat = DT_RIGHT; str.Format("%.3f", q.getFloatField("circle_center_x")); Item.strText = str; m_GridCtrl.SetItem(&Item); // 圆心 - Y Item.row = iRow; Item.col = iCol + 4; Item.nFormat = DT_RIGHT; str.Format("%.3f", q.getFloatField("circle_center_y")); Item.strText = str; m_GridCtrl.SetItem(&Item); // 圆心 - Z Item.row = iRow; Item.col = iCol + 5; Item.nFormat = DT_RIGHT; str.Format("%.3f", q.getFloatField("circle_center_z")); Item.strText = str; m_GridCtrl.SetItem(&Item); // 半径 Item.row = iRow; Item.col = iCol + 6; Item.nFormat = DT_RIGHT; str.Format("%.3f", q.getFloatField("circle_radius")); Item.strText = str; m_GridCtrl.SetItem(&Item); // RMS Item.row = iRow; Item.col = iCol + 7; Item.nFormat = DT_RIGHT; str.Format("%.3f", q.getFloatField("circle_rms")); Item.strText = str; m_GridCtrl.SetItem(&Item); // 圆度 Item.row = iRow; Item.col = iCol + 8; Item.nFormat = DT_RIGHT; str.Format("%.3f", q.getFloatField("circle_roundness")); Item.strText = str; m_GridCtrl.SetItem(&Item); // DESC Item.row = iRow; Item.col = iCol + 9; Item.nFormat = DT_LEFT; str.Format("%s", q.getStringField("circle_desc")); Item.strText = str; m_GridCtrl.SetItem(&Item); q.nextRow(); } q.finalize(); return iRow+1; } /************************************************************************************************** 函 数 名 :ShowLineData 功能描述 :显示数据-直线 输出参数 :略 返 回 值 :略 **************************************************************************************************/ int StaticReport::PrintLineData(LPCTSTR szEquipCode, int iStartRow) { // Get the font CFont* pFont = m_GridCtrl.GetFont(); CString str; int iRow = iStartRow+1; int iCol = 1; GV_ITEM ItemCat; ItemCat.row = iRow; ItemCat.col = iCol; ItemCat.mask = (GVIF_TEXT | GVIF_BORDER | GVIF_FONT | GVIF_FORMAT); ItemCat.nFormat = DT_SINGLELINE | DT_VCENTER | DT_LEFT; ItemCat.nBorder = GVIS_BDR_BOTTOM; ItemCat.strText = _T("直线"); LOGFONT lfTitle; pFont->GetLogFont(&lfTitle); // Make it true-type memcpy(lfTitle.lfFaceName, _T("Arial"), 6); lfTitle.lfWeight = FW_BOLD; memcpy(&(ItemCat.lfFont), &lfTitle, sizeof(LOGFONT)); //Item.lfFont = lf; m_GridCtrl.SetItem(&ItemCat); m_GridCtrl.MergeCells(iRow, iCol, iRow, 15); /*****************************************************************************/ iRow += 1; GV_ITEM ItemTitle; ItemTitle.mask = GVIF_TEXT | GVIF_FORMAT | GVIF_BORDER; ItemTitle.nBorder = GVIS_BDR_BOTTOM; ItemTitle.nFormat = DT_SINGLELINE | DT_VCENTER; ItemTitle.row = iRow; ItemTitle.col = iCol; ItemTitle.nFormat = DT_CENTER; ItemTitle.strText = _T("序号"); m_GridCtrl.SetItem(&ItemTitle); m_GridCtrl.MergeCells(iRow, iCol, iRow+1, iCol); ItemTitle.row = iRow; ItemTitle.col = iCol+1; ItemTitle.nFormat = DT_CENTER; ItemTitle.strText = _T("名称"); m_GridCtrl.SetItem(&ItemTitle); m_GridCtrl.MergeCells(iRow, iCol + 1, iRow+1, iCol + 1); ItemTitle.row = iRow; ItemTitle.col = iCol + 2; ItemTitle.nFormat = DT_CENTER; str.Format(_T("编码")); ItemTitle.strText = str; m_GridCtrl.SetItem(&ItemTitle); m_GridCtrl.MergeCells(iRow, iCol + 2, iRow+1, iCol + 2); ItemTitle.row = iRow; ItemTitle.col = iCol + 3; ItemTitle.nFormat = DT_CENTER; ItemTitle.strText = _T("向量"); m_GridCtrl.SetItem(&ItemTitle); m_GridCtrl.MergeCells(iRow, iCol + 3, iRow, iCol + 5); ItemTitle.row = iRow+1; ItemTitle.col = iCol + 3; ItemTitle.nFormat = DT_RIGHT; ItemTitle.strText = _T("X"); m_GridCtrl.SetItem(&ItemTitle); ItemTitle.row = iRow+1; ItemTitle.col = iCol + 4; ItemTitle.nFormat = DT_RIGHT; ItemTitle.strText = _T("Y"); m_GridCtrl.SetItem(&ItemTitle); ItemTitle.row = iRow+1; ItemTitle.col = iCol + 5; ItemTitle.nFormat = DT_RIGHT; ItemTitle.strText = _T("Z"); m_GridCtrl.SetItem(&ItemTitle); ItemTitle.row = iRow; ItemTitle.col = iCol + 6; ItemTitle.nFormat = DT_CENTER; ItemTitle.strText = _T("起点"); m_GridCtrl.SetItem(&ItemTitle); m_GridCtrl.MergeCells(iRow, iCol + 6, iRow, iCol + 8); ItemTitle.row = iRow+1; ItemTitle.col = iCol + 6; ItemTitle.nFormat = DT_RIGHT; ItemTitle.strText = _T("X"); m_GridCtrl.SetItem(&ItemTitle); ItemTitle.row = iRow+1; ItemTitle.col = iCol + 7; ItemTitle.nFormat = DT_RIGHT; ItemTitle.strText = _T("Y"); m_GridCtrl.SetItem(&ItemTitle); ItemTitle.row = iRow+1; ItemTitle.col = iCol + 8; ItemTitle.nFormat = DT_RIGHT; ItemTitle.strText = _T("Z"); m_GridCtrl.SetItem(&ItemTitle); ItemTitle.row = iRow; ItemTitle.col = iCol + 9; ItemTitle.nFormat = DT_CENTER; ItemTitle.strText = _T("终点"); m_GridCtrl.SetItem(&ItemTitle); m_GridCtrl.MergeCells(iRow, iCol + 9, iRow, iCol + 11); ItemTitle.row = iRow+1; ItemTitle.col = iCol + 9; ItemTitle.nFormat = DT_RIGHT; ItemTitle.strText = _T("X"); m_GridCtrl.SetItem(&ItemTitle); ItemTitle.row = iRow+1; ItemTitle.col = iCol + 10; ItemTitle.nFormat = DT_RIGHT; ItemTitle.strText = _T("Y"); m_GridCtrl.SetItem(&ItemTitle); ItemTitle.row = iRow+1; ItemTitle.col = iCol + 11; ItemTitle.nFormat = DT_RIGHT; ItemTitle.strText = _T("Z"); m_GridCtrl.SetItem(&ItemTitle); ItemTitle.row = iRow; ItemTitle.col = iCol + 12; ItemTitle.nFormat = DT_RIGHT; ItemTitle.strText = _T("长度"); m_GridCtrl.SetItem(&ItemTitle); m_GridCtrl.MergeCells(iRow, iCol + 12, iRow+1, iCol + 12); ItemTitle.row = iRow; ItemTitle.col = iCol + 13; ItemTitle.nFormat = DT_LEFT; ItemTitle.strText = _T("说明"); m_GridCtrl.SetItem(&ItemTitle); m_GridCtrl.MergeCells(iRow, iCol + 13, iRow+1, iCol + 13); // LINE数据访问入口 EquipDataLineManager *pLineManager = GetDocument()->GetEquipDataLineManager(); ASSERT(pLineManager != NULL); GV_ITEM Item; Item.mask = GVIF_TEXT | GVIF_FORMAT; Item.nFormat = DT_SINGLELINE | DT_VCENTER; iRow += 1; CppSQLite3Query q = pLineManager->Query(m_taskId); int iIndex = 0; while (!q.eof()) { iRow += 1; iIndex++; // 序号 Item.row = iRow; Item.col = iCol; Item.nFormat = DT_CENTER; str.Format("%d", iIndex); Item.strText = str; m_GridCtrl.SetItem(&Item); // 名称 Item.row = iRow; Item.col = iCol + 1; Item.nFormat = DT_CENTER; str.Format("%s", q.getStringField("line_title")); Item.strText = str; m_GridCtrl.SetItem(&Item); // CODE Item.row = iRow; Item.col = iCol + 2; Item.nFormat = DT_CENTER; str.Format("%s", q.getStringField("line_code")); Item.strText = str; m_GridCtrl.SetItem(&Item); // 向量 - X Item.row = iRow; Item.col = iCol + 3; Item.nFormat = DT_RIGHT; str.Format("%.3f", q.getFloatField("line_vec_x")); Item.strText = str; m_GridCtrl.SetItem(&Item); // 向量 - Y Item.row = iRow; Item.col = iCol + 4; Item.nFormat = DT_RIGHT; str.Format("%.3f", q.getFloatField("line_vec_y")); Item.strText = str; m_GridCtrl.SetItem(&Item); // 向量 - Z Item.row = iRow; Item.col = iCol + 5; Item.nFormat = DT_RIGHT; str.Format("%.3f", q.getFloatField("line_vec_z")); Item.strText = str; m_GridCtrl.SetItem(&Item); // 起点 - X Item.row = iRow; Item.col = iCol + 6; Item.nFormat = DT_RIGHT; str.Format("%.3f", q.getFloatField("line_start_x")); Item.strText = str; m_GridCtrl.SetItem(&Item); // 起点 - Y Item.row = iRow; Item.col = iCol + 7; Item.nFormat = DT_RIGHT; str.Format("%.3f", q.getFloatField("line_start_y")); Item.strText = str; m_GridCtrl.SetItem(&Item); // 起点 - Z Item.row = iRow; Item.col = iCol + 8; Item.nFormat = DT_RIGHT; str.Format("%.3f", q.getFloatField("line_start_z")); Item.strText = str; m_GridCtrl.SetItem(&Item); // 终点 - X Item.row = iRow; Item.col = iCol + 9; Item.nFormat = DT_RIGHT; str.Format("%.3f", q.getFloatField("line_end_x")); Item.strText = str; m_GridCtrl.SetItem(&Item); // 终点 - Y Item.row = iRow; Item.col = iCol + 10; Item.nFormat = DT_RIGHT; str.Format("%.3f", q.getFloatField("line_end_y")); Item.strText = str; m_GridCtrl.SetItem(&Item); // 终点 - Z Item.row = iRow; Item.col = iCol + 11; Item.nFormat = DT_RIGHT; str.Format("%.3f", q.getFloatField("line_end_z")); Item.strText = str; m_GridCtrl.SetItem(&Item); // 长度 Item.row = iRow; Item.col = iCol + 12; Item.nFormat = DT_RIGHT; str.Format("%.3f", q.getFloatField("line_length")); Item.strText = str; m_GridCtrl.SetItem(&Item); // 说明 Item.row = iRow; Item.col = iCol + 13; Item.nFormat = DT_LEFT; str.Format("%s", q.getStringField("line_desc")); Item.strText = str; m_GridCtrl.SetItem(&Item); q.nextRow(); } q.finalize(); return iRow+1; } /************************************************************************************************** 函 数 名 :PrintCylinderData 功能描述 :显示数据-圆柱 输出参数 :, 返 回 值 :略 **************************************************************************************************/ int StaticReport::PrintCylinderData(LPCTSTR szEquipCode, int iStartRow) { // Get the font CFont* pFont = m_GridCtrl.GetFont(); CString str; int iRow = iStartRow + 1; int iCol = 1; GV_ITEM ItemCat; ItemCat.row = iRow; ItemCat.col = iCol; ItemCat.mask = (GVIF_TEXT | GVIF_BORDER | GVIF_FONT | GVIF_FORMAT); ItemCat.nFormat = DT_SINGLELINE | DT_VCENTER | DT_LEFT; ItemCat.nBorder = GVIS_BDR_BOTTOM; ItemCat.strText = _T("圆柱"); LOGFONT lfTitle; pFont->GetLogFont(&lfTitle); // Make it true-type memcpy(lfTitle.lfFaceName, _T("Arial"), 6); lfTitle.lfWeight = FW_BOLD; memcpy(&(ItemCat.lfFont), &lfTitle, sizeof(LOGFONT)); //Item.lfFont = lf; m_GridCtrl.SetItem(&ItemCat); m_GridCtrl.MergeCells(iRow, iCol, iRow, 15); /*****************************************************************************/ iRow += 1; GV_ITEM ItemTitle; ItemTitle.mask = GVIF_TEXT | GVIF_FORMAT | GVIF_BORDER; ItemTitle.nBorder = GVIS_BDR_BOTTOM; ItemTitle.nFormat = DT_SINGLELINE | DT_VCENTER; ItemTitle.row = iRow; ItemTitle.col = iCol; ItemTitle.nFormat = DT_CENTER; ItemTitle.strText = _T("序号"); m_GridCtrl.SetItem(&ItemTitle); m_GridCtrl.MergeCells(iRow, iCol, iRow + 1, iCol); ItemTitle.row = iRow; ItemTitle.col = iCol +1; ItemTitle.nFormat |= DT_CENTER; ItemTitle.strText = _T("名称"); m_GridCtrl.SetItem(&ItemTitle); m_GridCtrl.MergeCells(iRow, iCol + 1, iRow + 1, iCol + 1); ItemTitle.row = iRow; ItemTitle.col = iCol + 2; ItemTitle.nFormat |= DT_CENTER; ItemTitle.strText = _T("编码"); m_GridCtrl.SetItem(&ItemTitle); m_GridCtrl.MergeCells(iRow , iCol + 2, iRow + 1, iCol + 2); ItemTitle.row = iRow; ItemTitle.col = iCol + 3; ItemTitle.nFormat |= DT_CENTER; ItemTitle.strText = _T("终点1"); m_GridCtrl.SetItem(&ItemTitle); m_GridCtrl.MergeCells(iRow, iCol + 3, iRow, iCol + 5); ItemTitle.row = iRow + 1; ItemTitle.col = iCol + 3; ItemTitle.nFormat |= DT_RIGHT; ItemTitle.strText = _T("X"); m_GridCtrl.SetItem(&ItemTitle); ItemTitle.row = iRow + 1; ItemTitle.col = iCol+4; ItemTitle.nFormat |= DT_RIGHT; ItemTitle.strText = _T("Y"); m_GridCtrl.SetItem(&ItemTitle); ItemTitle.row = iRow + 1; ItemTitle.col = iCol+5; ItemTitle.nFormat |= DT_RIGHT; ItemTitle.strText = _T("Z"); m_GridCtrl.SetItem(&ItemTitle); ItemTitle.row = iRow; ItemTitle.col = iCol + 6; ItemTitle.nFormat |= DT_CENTER; ItemTitle.strText = _T("终点2"); m_GridCtrl.SetItem(&ItemTitle); m_GridCtrl.MergeCells(iRow, iCol + 6, iRow, iCol + 8); ItemTitle.row = iRow + 1; ItemTitle.col = iCol + 6; ItemTitle.nFormat |= DT_RIGHT; ItemTitle.strText = _T("X"); m_GridCtrl.SetItem(&ItemTitle); ItemTitle.row = iRow + 1; ItemTitle.col = iCol + 7; ItemTitle.nFormat |= DT_RIGHT; ItemTitle.strText = _T("Y"); m_GridCtrl.SetItem(&ItemTitle); ItemTitle.row = iRow + 1; ItemTitle.col = iCol + 8; ItemTitle.nFormat |= DT_RIGHT; ItemTitle.strText = _T("Z"); m_GridCtrl.SetItem(&ItemTitle); ItemTitle.row = iRow; ItemTitle.col = iCol + 9; ItemTitle.nFormat |= DT_RIGHT; ItemTitle.strText = _T("半径"); m_GridCtrl.SetItem(&ItemTitle); m_GridCtrl.MergeCells(iRow, iCol + 9, iRow + 1, iCol + 9); ItemTitle.row = iRow; ItemTitle.col = iCol+10; ItemTitle.nFormat = DT_RIGHT; ItemTitle.strText = _T("长度"); m_GridCtrl.SetItem(&ItemTitle); m_GridCtrl.MergeCells(iRow, iCol + 10, iRow + 1, iCol + 10); ItemTitle.row = iRow; ItemTitle.col = iCol+11; ItemTitle.nFormat |= DT_LEFT; ItemTitle.strText = _T("说明"); m_GridCtrl.SetItem(&ItemTitle); m_GridCtrl.MergeCells(iRow, iCol + 11, iRow + 1, iCol + 11); // Cylinder数据访问入口 EquipDataCylinderManager *pCylinderManager = GetDocument()->GetEquipDataCylinderManager(); ASSERT(pCylinderManager != NULL); GV_ITEM Item; Item.mask = GVIF_TEXT | GVIF_FORMAT; Item.nFormat = DT_SINGLELINE | DT_VCENTER; iRow += 1; CppSQLite3Query q = pCylinderManager->Query(m_taskId); int iIndex = 0; while (!q.eof()) { iRow += 1; iIndex++; // 序号 Item.row = iRow; Item.col = iCol; Item.nFormat = DT_CENTER; str.Format("%d", iIndex); Item.strText = str; m_GridCtrl.SetItem(&Item); // 名称 Item.row = iRow; Item.col = iCol + 1; Item.nFormat = DT_CENTER; str.Format("%s", q.getStringField("cylinder_title")); Item.strText = str; m_GridCtrl.SetItem(&Item); // CODE Item.row = iRow; Item.col = iCol + 2; Item.nFormat = DT_CENTER; str.Format("%s", q.getStringField("cylinder_code")); Item.strText = str; m_GridCtrl.SetItem(&Item); // 终点1 - X Item.row = iRow; Item.col = iCol + 3; Item.nFormat = DT_RIGHT; str.Format("%.3f", q.getFloatField("point1_x")); Item.strText = str; m_GridCtrl.SetItem(&Item); // 终点1 - Y Item.row = iRow; Item.col = iCol + 4; Item.nFormat = DT_RIGHT; str.Format("%.3f", q.getFloatField("point1_y")); Item.strText = str; m_GridCtrl.SetItem(&Item); // 终点1 - Z Item.row = iRow; Item.col = iCol + 5; Item.nFormat = DT_RIGHT; str.Format("%.3f", q.getFloatField("point1_z")); Item.strText = str; m_GridCtrl.SetItem(&Item); // 终点2 - X Item.row = iRow; Item.col = iCol + 6; Item.nFormat = DT_RIGHT; str.Format("%.3f", q.getFloatField("point2_x")); Item.strText = str; m_GridCtrl.SetItem(&Item); // 终点2 - Y Item.row = iRow; Item.col = iCol + 7; Item.nFormat = DT_RIGHT; str.Format("%.3f", q.getFloatField("point2_y")); Item.strText = str; m_GridCtrl.SetItem(&Item); // 终点2 - Z Item.row = iRow; Item.col = iCol + 8; Item.nFormat = DT_RIGHT; str.Format("%.3f", q.getFloatField("point2_z")); Item.strText = str; m_GridCtrl.SetItem(&Item); // 半径 Item.row = iRow; Item.col = iCol + 9; Item.nFormat = DT_RIGHT; str.Format("%.3f", q.getFloatField("cylinder_radius")); Item.strText = str; m_GridCtrl.SetItem(&Item); // 长度 Item.row = iRow; Item.col = iCol + 10; Item.nFormat = DT_RIGHT; str.Format("%.3f", q.getFloatField("cylinder_length")); Item.strText = str; m_GridCtrl.SetItem(&Item); // DESC Item.row = iRow; Item.col = iCol + 11; Item.nFormat = DT_LEFT; str.Format("%s", q.getStringField("cylinder_desc")); Item.strText = str; m_GridCtrl.SetItem(&Item); q.nextRow(); } q.finalize(); return iRow+1; } /************************************************************************************************** 函 数 名 :ShowPointsData 功能描述 :显示数据-点 输出参数 :略 返 回 值 :略 **************************************************************************************************/ int StaticReport::PrintPointsData(LPCTSTR szEquipCode, int iStartRow) { // Get the font CFont* pFont = m_GridCtrl.GetFont(); CString str; int iRow = iStartRow+1; int iCol = 1; GV_ITEM ItemCat; ItemCat.row = iRow; ItemCat.col = iCol; ItemCat.mask = (GVIF_TEXT | GVIF_BORDER | GVIF_FONT | GVIF_FORMAT); ItemCat.nFormat = DT_SINGLELINE | DT_VCENTER | DT_LEFT; ItemCat.nBorder = GVIS_BDR_BOTTOM; ItemCat.strText = _T("点"); LOGFONT lfTitle; pFont->GetLogFont(&lfTitle); // Make it true-type memcpy(lfTitle.lfFaceName, _T("Arial"), 6); lfTitle.lfWeight = FW_BOLD; memcpy(&(ItemCat.lfFont), &lfTitle, sizeof(LOGFONT)); //Item.lfFont = lf; m_GridCtrl.SetItem(&ItemCat); m_GridCtrl.MergeCells(iRow, iCol, iRow, 15); /*****************************************************************************/ iRow += 1; GV_ITEM ItemTitle; ItemTitle.mask = GVIF_TEXT | GVIF_FORMAT | GVIF_BORDER; ItemTitle.nBorder = GVIS_BDR_BOTTOM; ItemTitle.nFormat = DT_SINGLELINE | DT_VCENTER; ItemTitle.row = iRow; ItemTitle.col = iCol; ItemTitle.nFormat = DT_CENTER; ItemTitle.strText = _T("序号"); m_GridCtrl.SetItem(&ItemTitle); m_GridCtrl.MergeCells(iRow, iCol, iRow+1, iCol); ItemTitle.row = iRow; ItemTitle.col = iCol + 1; ItemTitle.nFormat = DT_CENTER; ItemTitle.strText = _T("名称"); m_GridCtrl.SetItem(&ItemTitle); m_GridCtrl.MergeCells(iRow, iCol + 1, iRow + 1, iCol + 1); ItemTitle.row = iRow; ItemTitle.col = iCol + 2; ItemTitle.nFormat = DT_CENTER; ItemTitle.strText = _T("编码"); m_GridCtrl.SetItem(&ItemTitle); m_GridCtrl.MergeCells(iRow, iCol + 2, iRow+1, iCol + 2); ItemTitle.row = iRow; ItemTitle.col = iCol + 3; ItemTitle.nFormat = DT_CENTER; ItemTitle.strText = _T("理论值"); m_GridCtrl.SetItem(&ItemTitle); m_GridCtrl.MergeCells(iRow, iCol + 3, iRow, iCol + 5); ItemTitle.row = iRow+1; ItemTitle.col = iCol + 3; ItemTitle.nFormat = DT_RIGHT; ItemTitle.strText = _T("X"); m_GridCtrl.SetItem(&ItemTitle); ItemTitle.row = iRow+1; ItemTitle.col = iCol + 4; ItemTitle.nFormat = DT_RIGHT; ItemTitle.strText = _T("Y"); m_GridCtrl.SetItem(&ItemTitle); ItemTitle.row = iRow+1; ItemTitle.col = iCol + 5; ItemTitle.nFormat = DT_RIGHT; ItemTitle.strText = _T("Z"); m_GridCtrl.SetItem(&ItemTitle); ItemTitle.row = iRow; ItemTitle.col = iCol + 6; ItemTitle.nFormat = DT_CENTER; ItemTitle.strText = _T("实测值"); m_GridCtrl.SetItem(&ItemTitle); m_GridCtrl.MergeCells(iRow, iCol + 6, iRow, iCol + 8); ItemTitle.row = iRow+1; ItemTitle.col = iCol + 6; ItemTitle.nFormat = DT_RIGHT; ItemTitle.strText = _T("X"); m_GridCtrl.SetItem(&ItemTitle); ItemTitle.row = iRow+1; ItemTitle.col = iCol + 7; ItemTitle.nFormat = DT_RIGHT; ItemTitle.strText = _T("Y"); m_GridCtrl.SetItem(&ItemTitle); ItemTitle.row = iRow+1; ItemTitle.col = iCol + 8; ItemTitle.strText = _T("Z"); m_GridCtrl.SetItem(&ItemTitle); ItemTitle.row = iRow; ItemTitle.col = iCol + 9; ItemTitle.nFormat = DT_LEFT; ItemTitle.strText = _T("说明"); m_GridCtrl.SetItem(&ItemTitle); m_GridCtrl.MergeCells(iRow, iCol + 9, iRow + 1, iCol + 9); // POINT数据访问入口 EquipDataPointManager *pPointManager = GetDocument()->GetEquipDataPointManager(); ASSERT(pPointManager != NULL); GV_ITEM Item; Item.mask = GVIF_TEXT | GVIF_FORMAT; Item.nFormat = DT_SINGLELINE | DT_VCENTER; iRow += 1; CppSQLite3Query q = pPointManager->QueryOfReport(m_taskId); int iIndex = 0; while (!q.eof()) { iRow += 1; iIndex++; // 序号 Item.row = iRow; Item.col = iCol; Item.nFormat = DT_CENTER; str.Format("%d", iIndex); Item.strText = str; m_GridCtrl.SetItem(&Item); // 名称 Item.row = iRow; Item.col = iCol + 1; Item.nFormat = DT_CENTER; str.Format("%s", q.getStringField("point_title")); Item.strText = str; m_GridCtrl.SetItem(&Item); // CODE Item.row = iRow; Item.col = iCol + 2; Item.nFormat = DT_CENTER; str.Format("%s", q.getStringField("point_code")); Item.strText = str; m_GridCtrl.SetItem(&Item); // 理论 - X Item.row = iRow; Item.col = iCol + 3; Item.nFormat = DT_RIGHT; str.Format("%.3f", q.getFloatField("point_e_x")); Item.strText = str; m_GridCtrl.SetItem(&Item); // 理论 - Y Item.row = iRow; Item.col = iCol + 4; Item.nFormat = DT_RIGHT; str.Format("%.3f", q.getFloatField("point_e_y")); Item.strText = str; m_GridCtrl.SetItem(&Item); // 理论 - Z Item.row = iRow; Item.col = iCol + 5; Item.nFormat = DT_RIGHT; str.Format("%.3f", q.getFloatField("point_e_z")); Item.strText = str; m_GridCtrl.SetItem(&Item); // 实测 - X Item.row = iRow; Item.col = iCol + 6; Item.nFormat = DT_RIGHT; str.Format("%.3f", q.getFloatField("point_a_x")); Item.strText = str; m_GridCtrl.SetItem(&Item); // 实测 - Y Item.row = iRow; Item.col = iCol + 7; Item.nFormat = DT_RIGHT; str.Format("%.3f", q.getFloatField("point_a_y")); Item.strText = str; m_GridCtrl.SetItem(&Item); // 实测 - Z Item.row = iRow; Item.col = iCol + 8; Item.nFormat = DT_RIGHT; str.Format("%.3f", q.getFloatField("point_a_z")); Item.strText = str; m_GridCtrl.SetItem(&Item); // 说明 Item.row = iRow; Item.col = iCol + 9; Item.nFormat = DT_LEFT; str.Format("%s", q.getStringField("point_desc")); Item.strText = str; m_GridCtrl.SetItem(&Item); q.nextRow(); } q.finalize(); return iRow; } /************************************************************************************************** 函 数 名 :PrintAngleData 功能描述 :显示数据-偏角 输出参数 :略 返 回 值 :略 **************************************************************************************************/ int StaticReport::PrintAngleData(LPCTSTR szEquipCode, int iStartRow) { // Get the font CFont* pFont = m_GridCtrl.GetFont(); CString str; int iRow = iStartRow + 1; int iCol = 1; GV_ITEM ItemCat; ItemCat.row = iRow; ItemCat.col = iCol; ItemCat.mask = (GVIF_TEXT | GVIF_BORDER | GVIF_FONT | GVIF_FORMAT); ItemCat.nFormat = DT_SINGLELINE | DT_VCENTER | DT_LEFT; ItemCat.nBorder = GVIS_BDR_BOTTOM; ItemCat.strText = _T("推力线"); LOGFONT lfTitle; pFont->GetLogFont(&lfTitle); // Make it true-type memcpy(lfTitle.lfFaceName, _T("Arial"), 6); lfTitle.lfWeight = FW_BOLD; memcpy(&(ItemCat.lfFont), &lfTitle, sizeof(LOGFONT)); //Item.lfFont = lf; m_GridCtrl.SetItem(&ItemCat); m_GridCtrl.MergeCells(iRow, iCol, iRow, 15); /*******************************************************************************************/ iRow += 1; GV_ITEM ItemTitle; ItemTitle.mask = GVIF_TEXT | GVIF_FORMAT | GVIF_BORDER; ItemTitle.nBorder = GVIS_BDR_BOTTOM; ItemTitle.nFormat = DT_SINGLELINE | DT_VCENTER; ItemTitle.row = iRow; ItemTitle.col = iCol; ItemTitle.nFormat = DT_CENTER; ItemTitle.strText = _T("序号"); m_GridCtrl.SetItem(&ItemTitle); m_GridCtrl.MergeCells(iRow, iCol, iRow + 1, iCol); ItemTitle.row = iRow; ItemTitle.col = iCol + 1; ItemTitle.nFormat = DT_CENTER; ItemTitle.strText = _T("名称"); m_GridCtrl.SetItem(&ItemTitle); m_GridCtrl.MergeCells(iRow, iCol + 1, iRow + 1, iCol + 1); ItemTitle.row = iRow; ItemTitle.col = iCol + 2; ItemTitle.nFormat = DT_CENTER; ItemTitle.strText = _T("编码"); m_GridCtrl.SetItem(&ItemTitle); m_GridCtrl.MergeCells(iRow, iCol + 2, iRow + 1, iCol + 2); // 偏移量 ItemTitle.row = iRow; ItemTitle.col = iCol + 3; ItemTitle.nFormat = DT_CENTER; ItemTitle.strText = _T("偏移量"); m_GridCtrl.SetItem(&ItemTitle); m_GridCtrl.MergeCells(iRow, iCol + 3, iRow, iCol + 5); ItemTitle.row = iRow + 1; ItemTitle.col = iCol + 3; ItemTitle.nFormat = DT_RIGHT; ItemTitle.strText = _T("X"); m_GridCtrl.SetItem(&ItemTitle); ItemTitle.row = iRow + 1; ItemTitle.col = iCol + 4; ItemTitle.nFormat = DT_RIGHT; ItemTitle.strText = _T("Y"); m_GridCtrl.SetItem(&ItemTitle); ItemTitle.row = iRow + 1; ItemTitle.col = iCol + 5; ItemTitle.nFormat = DT_RIGHT; ItemTitle.strText = _T("Z"); m_GridCtrl.SetItem(&ItemTitle); // 向量 ItemTitle.row = iRow; ItemTitle.col = iCol + 6; ItemTitle.nFormat = DT_CENTER; ItemTitle.strText = _T("向量"); m_GridCtrl.SetItem(&ItemTitle); m_GridCtrl.MergeCells(iRow, iCol + 6, iRow, iCol + 8); ItemTitle.row = iRow + 1; ItemTitle.col = iCol + 6; ItemTitle.nFormat = DT_RIGHT; ItemTitle.strText = _T("X"); m_GridCtrl.SetItem(&ItemTitle); ItemTitle.row = iRow + 1; ItemTitle.col = iCol + 7; ItemTitle.nFormat = DT_RIGHT; ItemTitle.strText = _T("Y"); m_GridCtrl.SetItem(&ItemTitle); ItemTitle.row = iRow + 1; ItemTitle.col = iCol + 8; ItemTitle.nFormat = DT_RIGHT; ItemTitle.strText = _T("Z"); m_GridCtrl.SetItem(&ItemTitle); // 起点 ItemTitle.row = iRow; ItemTitle.col = iCol + 9; ItemTitle.nFormat = DT_CENTER; ItemTitle.strText = _T("起点"); m_GridCtrl.SetItem(&ItemTitle); m_GridCtrl.MergeCells(iRow, iCol + 9, iRow, iCol + 11); ItemTitle.row = iRow + 1; ItemTitle.col = iCol + 9; ItemTitle.nFormat = DT_RIGHT; ItemTitle.strText = _T("X"); m_GridCtrl.SetItem(&ItemTitle); ItemTitle.row = iRow + 1; ItemTitle.col = iCol + 10; ItemTitle.nFormat = DT_RIGHT; ItemTitle.strText = _T("Y"); m_GridCtrl.SetItem(&ItemTitle); ItemTitle.row = iRow + 1; ItemTitle.col = iCol + 11; ItemTitle.nFormat = DT_RIGHT; ItemTitle.strText = _T("Z"); m_GridCtrl.SetItem(&ItemTitle); // 终点 ItemTitle.row = iRow; ItemTitle.col = iCol + 12; ItemTitle.nFormat = DT_CENTER; ItemTitle.strText = _T("终点"); m_GridCtrl.SetItem(&ItemTitle); m_GridCtrl.MergeCells(iRow, iCol + 12, iRow, iCol + 14); ItemTitle.row = iRow + 1; ItemTitle.col = iCol + 12; ItemTitle.nFormat = DT_RIGHT; ItemTitle.strText = _T("X"); m_GridCtrl.SetItem(&ItemTitle); ItemTitle.row = iRow + 1; ItemTitle.col = iCol + 13; ItemTitle.nFormat = DT_RIGHT; ItemTitle.strText = _T("Y"); m_GridCtrl.SetItem(&ItemTitle); ItemTitle.row = iRow + 1; ItemTitle.col = iCol + 14; ItemTitle.nFormat = DT_RIGHT; ItemTitle.strText = _T("Z"); m_GridCtrl.SetItem(&ItemTitle); /**********************************************************************************/ // Thrust Line数据访问入口 EquipDataAngleManager *pAngleManager = GetDocument()->GetEquipDataAngleManager(); ASSERT(pAngleManager != NULL); GV_ITEM Item; Item.mask = GVIF_TEXT | GVIF_FORMAT; Item.nFormat = DT_SINGLELINE | DT_VCENTER; iRow += 1; CppSQLite3Query q = pAngleManager->Query(m_taskId); int iIndex = 0; while (!q.eof()) { iRow += 1; iIndex++; Item.row = iRow; // 序号 Item.col = iCol; Item.nFormat = DT_CENTER; str.Format("%d", iIndex); Item.strText = str; m_GridCtrl.SetItem(&Item); // 名称 Item.col = iCol + 1; Item.nFormat = DT_CENTER; str.Format("%s", q.getStringField("line_title")); Item.strText = str; m_GridCtrl.SetItem(&Item); // CODE Item.col = iCol + 2; Item.nFormat = DT_CENTER; str.Format("%s", q.getStringField("line_code")); Item.strText = str; m_GridCtrl.SetItem(&Item); // 偏移量 - X Item.col = iCol + 3; Item.nFormat = DT_RIGHT; str.Format("%.2f'", q.getFloatField("angle_a_x")); Item.strText = str; m_GridCtrl.SetItem(&Item); // 偏移量 - Y Item.row = iRow; Item.col = iCol + 4; Item.nFormat = DT_RIGHT; str.Format("%.2f'", q.getFloatField("angle_a_y")); Item.strText = str; m_GridCtrl.SetItem(&Item); // 偏移量 - Z Item.col = iCol + 5; Item.nFormat = DT_RIGHT; str.Format("%.2f'", q.getFloatField("angle_a_z")); Item.strText = str; m_GridCtrl.SetItem(&Item); DOUBLE x1 = q.getFloatField("line_start_x"); DOUBLE y1 = q.getFloatField("line_start_y"); DOUBLE z1 = q.getFloatField("line_start_z"); DOUBLE x2 = q.getFloatField("line_end_x"); DOUBLE y2 = q.getFloatField("line_end_y"); DOUBLE z2 = q.getFloatField("line_end_z"); DOUBLE vx1 = x2-x1; DOUBLE vy1 = y2-y1; DOUBLE vz1 = z2-z1; // 向量 - X Item.col = iCol + 6; Item.nFormat = DT_RIGHT; str.Format("%.3f", vx1); Item.strText = str; m_GridCtrl.SetItem(&Item); // 向量 - Y Item.col = iCol + 7; Item.nFormat = DT_RIGHT; str.Format("%.3f", vy1); Item.strText = str; m_GridCtrl.SetItem(&Item); // 向量 - Z Item.col = iCol + 8; Item.nFormat = DT_RIGHT; str.Format("%.3f", vz1); Item.strText = str; m_GridCtrl.SetItem(&Item); // 起点 - X Item.col = iCol + 9; Item.nFormat = DT_RIGHT; str.Format("%.3f", x1); Item.strText = str; m_GridCtrl.SetItem(&Item); // 起点 - Y Item.col = iCol + 10; Item.nFormat = DT_RIGHT; str.Format("%.3f", y1); Item.strText = str; m_GridCtrl.SetItem(&Item); // 起点 - Z Item.col = iCol + 11; Item.nFormat = DT_RIGHT; str.Format("%.3f", z1); Item.strText = str; m_GridCtrl.SetItem(&Item); // 终点 - X Item.col = iCol + 12; Item.nFormat = DT_RIGHT; str.Format("%.3f", x2); Item.strText = str; m_GridCtrl.SetItem(&Item); // 终点 - Y Item.col = iCol + 13; Item.nFormat = DT_RIGHT; str.Format("%.3f", y2); Item.strText = str; m_GridCtrl.SetItem(&Item); // 终点 - Z Item.col = iCol + 14; Item.nFormat = DT_RIGHT; str.Format("%.3f", z2); Item.strText = str; m_GridCtrl.SetItem(&Item); q.nextRow(); } q.finalize(); return iRow + 1; } /************************************************************************************************** 函 数 名 :OnBnClickedBtnStaticReportToPdf 功能描述 :导出PDF 输入参数 :略 输出参数 :略 返 回 值 :略 **************************************************************************************************/ void StaticReport::OnBnClickedBtnStaticReportToPdf() { } /************************************************************************************************** 函 数 名 :OnBnClickedBtnStaticReportToPrint 功能描述 :打印 输入参数 :略 输出参数 :略 返 回 值 :略 **************************************************************************************************/ void StaticReport::OnBnClickedBtnStaticReportToPrint() { m_GridCtrl.Print(); } /************************************************************************************************** 函 数 名 :OnBnClickedBtnStaticReportToExcel 功能描述 :导出Excel 输入参数 :略 输出参数 :略 返 回 值 :略 **************************************************************************************************/ void StaticReport::OnBnClickedBtnStaticReportToExcel() { BOOL isOpen = FALSE; CFileDialog dlg(isOpen, 0, 0, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, "Excel Files(*.xlsx)|*.xlsx"); if (IDOK != dlg.DoModal()) { return; } CString szFilePath = dlg.GetPathName(); // 初始化数据 TaskManager *pTaskManager = GetDocument()->GetTaskManager(); ASSERT(pTaskManager != NULL); CppSQLite3Query q = pTaskManager->Query(m_taskId); if (q.eof()) { MessageBox(_T("没有数据")); q.finalize(); return; } CString szTaskTime = q.getStringField("task_time"); CString szTaskTitle = q.getStringField("task_title"); CString szEquipCode = q.getStringField("equip_code"); CString szEquipTypeCode = q.getStringField("equip_type_code"); CString szReportTitle; szReportTitle.Format("静态测量报告-%s", szTaskTitle); CExport2Excel excelApp; bool bRet = excelApp.CreateExcel(szFilePath); if (!bRet) { MessageBox(_T("本机的Excel未安装或安装不完整,请重新安装Office Excel")); return; } excelApp.CreateSheet(szReportTitle); excelApp.SetColWidth(1, 5); excelApp.SetColWidth(2, 10); excelApp.SetColWidth(3, 10); excelApp.SetColWidth(4, 10); excelApp.SetColWidth(5, 10); excelApp.SetColWidth(6, 10); excelApp.SetColWidth(7, 10); excelApp.SetColWidth(8, 10); excelApp.SetColWidth(9, 10); excelApp.SetColWidth(10, 10); excelApp.SetColWidth(11, 10); excelApp.SetColWidth(12, 10); excelApp.SetColWidth(13, 10); excelApp.SetColWidth(14, 10); excelApp.SetColWidth(15, 10); excelApp.SetColWidth(15, 10); excelApp.SetColWidth(16, 10); int iRow = 1; // 标题: 第1行 excelApp.SetFont(iRow, _T("宋体"), 16, true); excelApp.MergeCells(iRow, 1, iRow, 14); excelApp.SetHorizontalAlignment(iRow, 1, xlCenter); excelApp.WriteData(1, 1, szTaskTitle); // 任务内容:第2行 iRow += 1; CString strTaskInfo; strTaskInfo.Format("型号:%s 编号:%s 测量时间:%s", szEquipTypeCode, szEquipCode, szTaskTime); excelApp.MergeCells(iRow, 1, iRow, 14); excelApp.SetHorizontalAlignment(iRow, 1, xlLeft); excelApp.WriteData(2, 1, strTaskInfo); // 详情: 1. 平面, 2.圆; 3.直线; 4.点 5.Cylinder 6.Angle iRow += 1; iRow = ExcelPlaneData(&excelApp, szEquipCode, iRow); iRow = ExcelCircleData(&excelApp, szEquipCode, iRow); iRow = ExcelLineData(&excelApp, szEquipCode, iRow); iRow = ExcelCylinderData(&excelApp, szEquipCode, iRow); iRow = ExcelPointsData(&excelApp, szEquipCode, iRow); iRow = ExcelAngleData(&excelApp, szEquipCode, iRow); q.finalize(); excelApp.Save(); excelApp.Close(); CString szMsg; szMsg.Format("导出文件成功,保存在%s", szFilePath); MessageBox(szMsg); return; } /************************************************************************************************** 函 数 名 :ShowPlaneData 功能描述 :显示数据-面 输出参数 :略 返 回 值 :略 **************************************************************************************************/ int StaticReport::ExcelPlaneData(CExport2Excel *pExcel, LPCTSTR szEquipCode, int iStartRow) { CString str; int iRow = iStartRow + 2; // 标题: 第1行 pExcel->SetFont(iRow, _T("宋体"), 14, true); pExcel->MergeCells(iRow, 1, iRow, 9); pExcel->SetHorizontalAlignment(iRow, 1, xlLeft); pExcel->WriteData(iRow, 1, _T("平面")); // Header iRow += 1; str.Format(_T("序号")); pExcel->SetHorizontalAlignment(iRow, 1, xlCenter); pExcel->WriteData(iRow, 1, (LPCTSTR)str); str.Format(_T("名称")); pExcel->WriteData(iRow, 2, (LPCTSTR)str); pExcel->SetHorizontalAlignment(iRow, 2, xlCenter); str.Format(_T("编码")); pExcel->WriteData(iRow, 3, (LPCTSTR)str); pExcel->SetHorizontalAlignment(iRow, 3, xlCenter); str.Format(_T("A")); pExcel->WriteData(iRow, 4, (LPCTSTR)str); pExcel->SetHorizontalAlignment(iRow, 4, xlRight); str.Format(_T("B")); pExcel->WriteData(iRow, 5, (LPCTSTR)str); pExcel->SetHorizontalAlignment(iRow, 5, xlRight); str.Format(_T("C")); pExcel->WriteData(iRow, 6, (LPCTSTR)str); pExcel->SetHorizontalAlignment(iRow, 6, xlRight); str.Format(_T("D")); pExcel->WriteData(iRow, 7, (LPCTSTR)str); pExcel->SetHorizontalAlignment(iRow, 7, xlRight); str.Format(_T("RMS")); pExcel->WriteData(iRow, 8, (LPCTSTR)str); pExcel->SetHorizontalAlignment(iRow, 8, xlRight); str.Format(_T("平面度")); pExcel->WriteData(iRow, 9, (LPCTSTR)str); pExcel->SetHorizontalAlignment(iRow, 9, xlRight); str.Format(_T("说明")); pExcel->WriteData(iRow, 10, (LPCTSTR)str); pExcel->SetHorizontalAlignment(iRow, 10, xlLeft); // Data // Plane数据访问入口 EquipDataPlaneManager *pPlaneManager = GetDocument()->GetEquipDataPlaneManager(); ASSERT(pPlaneManager != NULL); CppSQLite3Query q = pPlaneManager->Query(m_taskId); int iIndex = 0; while (!q.eof()) { iRow++; iIndex += 1; // 序号 str.Format("%d", iIndex); pExcel->WriteData(iRow, 1, (LPCTSTR)str); pExcel->SetHorizontalAlignment(iRow, 1, xlCenter); // 名称 str.Format("%s", q.getStringField("plane_title")); pExcel->WriteData(iRow, 2, (LPCTSTR)str); pExcel->SetHorizontalAlignment(iRow, 2, xlCenter); // CODE str.Format("%s", q.getStringField("plane_code")); pExcel->WriteData(iRow, 3, (LPCTSTR)str); pExcel->SetHorizontalAlignment(iRow, 3, xlCenter); // A str.Format("%.3f", q.getFloatField("plane_a")); pExcel->WriteData(iRow, 4, (LPCTSTR)str); pExcel->SetHorizontalAlignment(iRow, 4, xlRight); pExcel->SetNumberFormatLocal(iRow, 4, "0.000"); // B str.Format("%.3f", q.getFloatField("plane_b")); pExcel->WriteData(iRow, 5, (LPCTSTR)str); pExcel->SetHorizontalAlignment(iRow, 5, xlRight); pExcel->SetNumberFormatLocal(iRow, 5, "0.000"); // C str.Format("%.3f", q.getFloatField("plane_c")); pExcel->WriteData(iRow, 6, (LPCTSTR)str); pExcel->SetHorizontalAlignment(iRow, 6, xlRight); pExcel->SetNumberFormatLocal(iRow, 6, "0.000"); // D str.Format("%.3f", q.getFloatField("plane_d")); pExcel->WriteData(iRow, 7, (LPCTSTR)str); pExcel->SetHorizontalAlignment(iRow, 7, xlRight); pExcel->SetNumberFormatLocal(iRow, 7, "0.000"); // RMS str.Format("%.3f", q.getFloatField("plane_rms")); pExcel->WriteData(iRow, 8, (LPCTSTR)str); pExcel->SetHorizontalAlignment(iRow, 8, xlRight); pExcel->SetNumberFormatLocal(iRow, 8, "0.000"); // 平面度 str.Format("%.3f", q.getFloatField("plane_flatness")); pExcel->WriteData(iRow, 9, (LPCTSTR)str); pExcel->SetHorizontalAlignment(iRow, 9, xlRight); pExcel->SetNumberFormatLocal(iRow, 9, "0.000"); // DESC str.Format("%s", q.getStringField("plane_desc")); pExcel->WriteData(iRow, 10, (LPCTSTR)str); pExcel->SetHorizontalAlignment(iRow, 10, xlLeft); q.nextRow(); } q.finalize(); pExcel->SetBorders(iStartRow+2, 1, iRow, 10, true, true, true, true, true, true, xlThin, xlThin, xlThin, xlThin, xlThin, xlThin); return iRow + 1; } /************************************************************************************************** 函 数 名 :ShowCircleData 功能描述 :Excel数据-圆 输出参数 :, 返 回 值 :略 **************************************************************************************************/ int StaticReport::ExcelCircleData(CExport2Excel *pExcel, LPCTSTR szEquipCode, int iStartRow) { CString str; int iRow = iStartRow + 2; // 标题: 第1行 pExcel->SetFont(iRow, _T("宋体"), 14, true); pExcel->MergeCells(iRow, 1, iRow, 9); pExcel->SetHorizontalAlignment(iRow, 1, xlLeft); pExcel->WriteData(iRow, 1, _T("圆")); // Header iRow += 1; str.Format(_T("序号")); pExcel->WriteData(iRow, 1, (LPCTSTR)str); pExcel->SetHorizontalAlignment(iRow, 1, xlCenter); pExcel->SetBorders(iStartRow+1, 1, iRow, 9, true, true, true, true, true, true, xlThin, xlThin, xlThin, xlThin, xlThin, xlThin); pExcel->MergeCells(iRow, 1, iRow + 1, 1); str.Format(_T("名称")); pExcel->WriteData(iRow, 2, (LPCTSTR)str); pExcel->SetHorizontalAlignment(iRow, 2, xlCenter); pExcel->MergeCells(iRow, 2, iRow + 1, 2); str.Format(_T("编码")); pExcel->WriteData(iRow, 3, (LPCTSTR)str); pExcel->SetHorizontalAlignment(iRow,3, xlCenter); pExcel->MergeCells(iRow, 3, iRow + 1, 3); str.Format(_T("圆心")); pExcel->WriteData(iRow, 4, (LPCTSTR)str); pExcel->SetHorizontalAlignment(iRow, 4, xlCenter); pExcel->MergeCells(iRow, 4, iRow , 6); str.Format(_T("X")); pExcel->WriteData(iRow + 1, 4, (LPCTSTR)str); pExcel->SetHorizontalAlignment(iRow+1, 4, xlRight); str.Format(_T("Y")); pExcel->WriteData(iRow + 1, 5, (LPCTSTR)str); pExcel->SetHorizontalAlignment(iRow + 1, 5, xlRight); str.Format(_T("Z")); pExcel->WriteData(iRow + 1, 6, (LPCTSTR)str); pExcel->SetHorizontalAlignment(iRow + 1, 6, xlRight); str.Format(_T("半径")); pExcel->WriteData(iRow, 7, (LPCTSTR)str); pExcel->SetHorizontalAlignment(iRow, 7, xlRight); pExcel->MergeCells(iRow, 7, iRow+1, 7); str.Format(_T("RMS")); pExcel->WriteData(iRow, 8, (LPCTSTR)str); pExcel->SetHorizontalAlignment(iRow, 8, xlRight); pExcel->MergeCells(iRow, 8, iRow + 1, 8); str.Format(_T("圆度")); pExcel->WriteData(iRow, 9, (LPCTSTR)str); pExcel->SetHorizontalAlignment(iRow, 9, xlRight); pExcel->MergeCells(iRow, 9, iRow + 1, 9); str.Format(_T("说明")); pExcel->WriteData(iRow, 10, (LPCTSTR)str); pExcel->SetHorizontalAlignment(iRow, 10, xlLeft); pExcel->MergeCells(iRow, 10, iRow + 1, 10); // Circle数据访问入口 EquipDataCircleManager *pCircleManager = GetDocument()->GetEquipDataCircleManager(); ASSERT(pCircleManager != NULL); iRow += 2; CppSQLite3Query q = pCircleManager->Query(m_taskId); while (!q.eof()) { // 序号 str.Format("%d", iRow - 1); pExcel->WriteData(iRow, 1, (LPCTSTR)str); pExcel->SetHorizontalAlignment(iRow, 1, xlCenter); // 名称 str.Format("%s", q.getStringField("circle_title")); pExcel->WriteData(iRow, 2, (LPCTSTR)str); pExcel->SetHorizontalAlignment(iRow, 2, xlCenter); // CODE str.Format("%s", q.getStringField("circle_code")); pExcel->WriteData(iRow, 3, (LPCTSTR)str); pExcel->SetHorizontalAlignment(iRow, 3, xlCenter); // 圆心 - X str.Format("%.3f", q.getFloatField("circle_center_x")); pExcel->WriteData(iRow, 4, (LPCTSTR)str); pExcel->SetHorizontalAlignment(iRow, 4, xlRight); pExcel->SetNumberFormatLocal(iRow, 4, "0.000"); // 圆心 - Y str.Format("%.3f", q.getFloatField("circle_center_y")); pExcel->WriteData(iRow, 5, (LPCTSTR)str); pExcel->SetHorizontalAlignment(iRow, 5, xlRight); pExcel->SetNumberFormatLocal(iRow, 5, "0.000"); // 圆心 - Z str.Format("%.3f", q.getFloatField("circle_center_z")); pExcel->WriteData(iRow, 6, (LPCTSTR)str); pExcel->SetHorizontalAlignment(iRow, 6, xlRight); pExcel->SetNumberFormatLocal(iRow, 6, "0.000"); // 半径 str.Format("%.3f", q.getFloatField("circle_radius")); pExcel->WriteData(iRow, 7, (LPCTSTR)str); pExcel->SetHorizontalAlignment(iRow, 7, xlRight); pExcel->SetNumberFormatLocal(iRow, 7, "0.000"); // RMS str.Format("%.3f", q.getFloatField("circle_rms")); pExcel->WriteData(iRow, 8, (LPCTSTR)str); pExcel->SetHorizontalAlignment(iRow, 8, xlRight); pExcel->SetNumberFormatLocal(iRow, 8, "0.000"); // 圆度 str.Format("%.3f", q.getFloatField("circle_roundness")); pExcel->WriteData(iRow, 9, (LPCTSTR)str); pExcel->SetHorizontalAlignment(iRow, 9, xlRight); pExcel->SetNumberFormatLocal(iRow, 9, "0.000"); // DESC str.Format("%s", q.getStringField("circle_desc")); pExcel->WriteData(iRow, 10, (LPCTSTR)str); pExcel->SetHorizontalAlignment(iRow, 10, xlLeft); iRow++; q.nextRow(); } q.finalize(); pExcel->SetBorders(iStartRow + 2, 1, iRow, 10, true, true, true, true, true, true, xlThin, xlThin, xlThin, xlThin, xlThin, xlThin); return iRow; } /************************************************************************************************** 函 数 名 :ExcelLineData 功能描述 :Excel数据-直线 输出参数 :略 返 回 值 :略 **************************************************************************************************/ int StaticReport::ExcelLineData(CExport2Excel *pExcel, LPCTSTR szEquipCode, int iStartRow) { CString str; int iRow = iStartRow + 2; // 标题: 第1行 pExcel->SetFont(iRow, _T("宋体"), 14, true); pExcel->MergeCells(iRow, 1, iRow, 14); pExcel->SetHorizontalAlignment(iRow, 1, xlLeft); pExcel->WriteData(iRow, 1, _T("直线")); // Header iRow += 1; str.Format(_T("序号")); pExcel->WriteData(iRow, 1, (LPCTSTR)str); pExcel->SetHorizontalAlignment(iRow, 1, xlCenter); pExcel->MergeCells(iRow, 1, iRow + 1, 1); str.Format(_T("名称")); pExcel->WriteData(iRow, 2, (LPCTSTR)str); pExcel->SetHorizontalAlignment(iRow, 2, xlCenter); pExcel->MergeCells(iRow, 2, iRow + 1, 2); str.Format(_T("编码")); pExcel->WriteData(iRow, 3, (LPCTSTR)str); pExcel->SetHorizontalAlignment(iRow, 3, xlCenter); pExcel->MergeCells(iRow, 3, iRow + 1, 3); str.Format(_T("向量")); pExcel->WriteData(iRow, 4, (LPCTSTR)str); pExcel->SetHorizontalAlignment(iRow, 4, xlCenter); pExcel->MergeCells(iRow, 4, iRow , 6); str.Format(_T("X")); pExcel->WriteData(iRow+1, 4, (LPCTSTR)str); pExcel->SetHorizontalAlignment(iRow+1, 4, xlRight); str.Format(_T("Y")); pExcel->WriteData(iRow + 1, 5, (LPCTSTR)str); pExcel->SetHorizontalAlignment(iRow + 1, 5, xlRight); str.Format(_T("Z")); pExcel->WriteData(iRow + 1, 6, (LPCTSTR)str); pExcel->SetHorizontalAlignment(iRow + 1, 6, xlRight); str.Format(_T("起点")); pExcel->WriteData(iRow , 7, (LPCTSTR)str); pExcel->SetHorizontalAlignment(iRow , 7, xlCenter); m_GridCtrl.MergeCells(iRow, 7, iRow, 9); str.Format(_T("X")); pExcel->WriteData(iRow + 1, 7, (LPCTSTR)str); pExcel->SetHorizontalAlignment(iRow + 1, 7, xlRight); str.Format(_T("Y")); pExcel->WriteData(iRow + 1, 8, (LPCTSTR)str); pExcel->SetHorizontalAlignment(iRow + 1, 8, xlRight); str.Format(_T("Z")); pExcel->WriteData(iRow + 1, 9, (LPCTSTR)str); pExcel->SetHorizontalAlignment(iRow + 1, 9, xlRight); str.Format(_T("终点")); pExcel->WriteData(iRow, 10, (LPCTSTR)str); pExcel->SetHorizontalAlignment(iRow, 10, xlCenter); pExcel->MergeCells(iRow, 10, iRow, 12); str.Format(_T("X")); pExcel->WriteData(iRow + 1, 10, (LPCTSTR)str); pExcel->SetHorizontalAlignment(iRow + 1, 10, xlRight); str.Format(_T("Y")); pExcel->WriteData(iRow + 1, 11, (LPCTSTR)str); pExcel->SetHorizontalAlignment(iRow + 1, 11, xlRight); str.Format(_T("Z")); pExcel->WriteData(iRow + 1, 12, (LPCTSTR)str); pExcel->SetHorizontalAlignment(iRow + 1, 12, xlRight); str.Format(_T("长度")); pExcel->WriteData(iRow, 13, (LPCTSTR)str); pExcel->SetHorizontalAlignment(iRow, 13, xlRight); pExcel->MergeCells(iRow, 13, iRow + 1, 13); str.Format(_T("说明")); pExcel->WriteData(iRow, 14, (LPCTSTR)str); pExcel->SetHorizontalAlignment(iRow, 14, xlLeft); pExcel->MergeCells(iRow, 14, iRow + 1, 14); // LINE数据访问入口 EquipDataLineManager *pLineManager = GetDocument()->GetEquipDataLineManager(); ASSERT(pLineManager != NULL); iRow += 2; CppSQLite3Query q = pLineManager->Query(m_taskId); while (!q.eof()) { // 序号 str.Format("%d", iRow - 1); pExcel->WriteData(iRow, 1, (LPCTSTR)str); pExcel->SetHorizontalAlignment(iRow, 1, xlCenter); // 名称 str.Format("%s", q.getStringField("line_title")); pExcel->WriteData(iRow, 2, (LPCTSTR)str); pExcel->SetHorizontalAlignment(iRow, 2, xlCenter); // CODE str.Format("%s", q.getStringField("line_code")); pExcel->WriteData(iRow, 3, (LPCTSTR)str); pExcel->SetHorizontalAlignment(iRow, 3, xlCenter); // 向量 - X str.Format("%.3f", q.getFloatField("line_vec_x")); pExcel->WriteData(iRow, 4, (LPCTSTR)str); pExcel->SetHorizontalAlignment(iRow, 4, xlRight); pExcel->SetNumberFormatLocal(iRow, 4, "0.000"); // 向量 - Y str.Format("%.3f", q.getFloatField("line_vec_y")); pExcel->WriteData(iRow, 5, (LPCTSTR)str); pExcel->SetHorizontalAlignment(iRow, 5, xlRight); pExcel->SetNumberFormatLocal(iRow, 5, "0.000"); // 向量 - Z str.Format("%.3f", q.getFloatField("line_vec_z")); pExcel->WriteData(iRow, 6, (LPCTSTR)str); pExcel->SetHorizontalAlignment(iRow, 6, xlRight); pExcel->SetNumberFormatLocal(iRow, 6, "0.000"); // 起点 - X str.Format("%.3f", q.getFloatField("line_start_x")); pExcel->WriteData(iRow, 7, (LPCTSTR)str); pExcel->SetHorizontalAlignment(iRow, 7, xlRight); pExcel->SetNumberFormatLocal(iRow, 7, "0.000"); // 起点 - Y str.Format("%.3f", q.getFloatField("line_start_y")); pExcel->WriteData(iRow, 8, (LPCTSTR)str); pExcel->SetHorizontalAlignment(iRow, 8, xlRight); pExcel->SetNumberFormatLocal(iRow, 8, "0.000"); // 起点 - Z str.Format("%.3f", q.getFloatField("line_start_z")); pExcel->WriteData(iRow, 9, (LPCTSTR)str); pExcel->SetHorizontalAlignment(iRow, 9, xlRight); pExcel->SetNumberFormatLocal(iRow, 9, "0.000"); // 终点 - X str.Format("%.3f", q.getFloatField("line_end_x")); pExcel->WriteData(iRow, 10, (LPCTSTR)str); pExcel->SetHorizontalAlignment(iRow, 10, xlRight); pExcel->SetNumberFormatLocal(iRow, 10, "0.000"); // 终点 - Y str.Format("%.3f", q.getFloatField("line_end_y")); pExcel->WriteData(iRow, 11, (LPCTSTR)str); pExcel->SetHorizontalAlignment(iRow, 11, xlRight); pExcel->SetNumberFormatLocal(iRow, 11, "0.000"); // 终点 - Z str.Format("%.3f", q.getFloatField("line_end_z")); pExcel->WriteData(iRow, 12, (LPCTSTR)str); pExcel->SetHorizontalAlignment(iRow, 12, xlRight); pExcel->SetNumberFormatLocal(iRow, 12, "0.000"); // 长度 str.Format("%.3f", q.getFloatField("line_length")); pExcel->WriteData(iRow, 13, (LPCTSTR)str); pExcel->SetHorizontalAlignment(iRow, 13, xlRight); pExcel->SetNumberFormatLocal(iRow, 13, "0.000"); // 说明 str.Format("%s", q.getStringField("line_desc")); pExcel->WriteData(iRow, 14, (LPCTSTR)str); pExcel->SetHorizontalAlignment(iRow, 14, xlLeft); iRow++; q.nextRow(); } q.finalize(); pExcel->SetBorders(iStartRow + 2, 1, iRow, 14, true, true, true, true, true, true, xlThin, xlThin, xlThin, xlThin, xlThin, xlThin); return iRow; } /************************************************************************************************** 函 数 名 :ExcelCylinderData 功能描述 :Excel数据-圆柱 输出参数 :, 返 回 值 :略 **************************************************************************************************/ int StaticReport::ExcelCylinderData(CExport2Excel *pExcel, LPCTSTR szEquipCode, int iStartRow) { CString str; int iRow = iStartRow + 2; // 标题: 第1行 pExcel->SetFont(iRow, _T("宋体"), 14, true); pExcel->MergeCells(iRow, 1, iRow, 12); pExcel->SetHorizontalAlignment(iRow, 1, xlLeft); pExcel->WriteData(iRow, 1, _T("圆柱")); // Header iRow += 1; str.Format(_T("序号")); pExcel->WriteData(iRow, 1, (LPCTSTR)str); pExcel->SetHorizontalAlignment(iRow, 1, xlCenter); pExcel->SetBorders(iStartRow+1, 1, iRow, 9, true, true, true, true, true, true, xlThin, xlThin, xlThin, xlThin, xlThin, xlThin); pExcel->MergeCells(iRow, 1, iRow + 1, 1); str.Format(_T("名称")); pExcel->WriteData(iRow, 2, (LPCTSTR)str); pExcel->SetHorizontalAlignment(iRow, 2, xlCenter); pExcel->MergeCells(iRow, 2, iRow + 1, 2); str.Format(_T("编码")); pExcel->WriteData(iRow, 3, (LPCTSTR)str); pExcel->SetHorizontalAlignment(iRow,3, xlCenter); pExcel->MergeCells(iRow, 3, iRow + 1, 3); str.Format(_T("终点1")); pExcel->WriteData(iRow, 4, (LPCTSTR)str); pExcel->SetHorizontalAlignment(iRow, 4, xlCenter); pExcel->MergeCells(iRow, 4, iRow , 6); str.Format(_T("X")); pExcel->WriteData(iRow + 1, 4, (LPCTSTR)str); pExcel->SetHorizontalAlignment(iRow+1, 4, xlRight); str.Format(_T("Y")); pExcel->WriteData(iRow + 1, 5, (LPCTSTR)str); pExcel->SetHorizontalAlignment(iRow + 1, 5, xlRight); str.Format(_T("Z")); pExcel->WriteData(iRow + 1, 6, (LPCTSTR)str); pExcel->SetHorizontalAlignment(iRow + 1, 6, xlRight); str.Format(_T("终点2")); pExcel->WriteData(iRow, 7, (LPCTSTR)str); pExcel->SetHorizontalAlignment(iRow, 7, xlCenter); pExcel->MergeCells(iRow, 7, iRow , 9); str.Format(_T("X")); pExcel->WriteData(iRow + 1, 7, (LPCTSTR)str); pExcel->SetHorizontalAlignment(iRow+1, 7, xlRight); str.Format(_T("Y")); pExcel->WriteData(iRow + 1, 8, (LPCTSTR)str); pExcel->SetHorizontalAlignment(iRow + 1, 8, xlRight); str.Format(_T("Z")); pExcel->WriteData(iRow + 1, 9, (LPCTSTR)str); pExcel->SetHorizontalAlignment(iRow + 1, 9, xlRight); str.Format(_T("半径")); pExcel->WriteData(iRow, 10, (LPCTSTR)str); pExcel->SetHorizontalAlignment(iRow, 10, xlRight); pExcel->MergeCells(iRow, 10, iRow+1, 10); str.Format(_T("长度")); pExcel->WriteData(iRow, 11, (LPCTSTR)str); pExcel->SetHorizontalAlignment(iRow, 11, xlRight); pExcel->MergeCells(iRow, 11, iRow + 1, 11); str.Format(_T("说明")); pExcel->WriteData(iRow, 12, (LPCTSTR)str); pExcel->SetHorizontalAlignment(iRow, 12, xlLeft); pExcel->MergeCells(iRow, 12, iRow + 1, 12); // Cylinder数据访问入口 EquipDataCylinderManager *pCylinderManager = GetDocument()->GetEquipDataCylinderManager(); ASSERT(pCylinderManager != NULL); iRow += 2; CppSQLite3Query q = pCylinderManager->Query(m_taskId); while (!q.eof()) { // 序号 str.Format("%d", iRow - 1); pExcel->WriteData(iRow, 1, (LPCTSTR)str); pExcel->SetHorizontalAlignment(iRow, 1, xlCenter); // 名称 str.Format("%s", q.getStringField("cylinder_title")); pExcel->WriteData(iRow, 2, (LPCTSTR)str); pExcel->SetHorizontalAlignment(iRow, 2, xlCenter); // CODE str.Format("%s", q.getStringField("cylinder_code")); pExcel->WriteData(iRow, 3, (LPCTSTR)str); pExcel->SetHorizontalAlignment(iRow, 3, xlCenter); // 终点1 - X str.Format("%.3f", q.getFloatField("point1_x")); pExcel->WriteData(iRow, 4, (LPCTSTR)str); pExcel->SetHorizontalAlignment(iRow, 4, xlRight); pExcel->SetNumberFormatLocal(iRow, 4, "0.000"); // 终点1 - Y str.Format("%.3f", q.getFloatField("point1_y")); pExcel->WriteData(iRow, 5, (LPCTSTR)str); pExcel->SetHorizontalAlignment(iRow, 5, xlRight); pExcel->SetNumberFormatLocal(iRow, 5, "0.000"); // 终点1 - Z str.Format("%.3f", q.getFloatField("point1_z")); pExcel->WriteData(iRow, 6, (LPCTSTR)str); pExcel->SetHorizontalAlignment(iRow, 6, xlRight); pExcel->SetNumberFormatLocal(iRow, 6, "0.000"); // 终点2 - X str.Format("%.3f", q.getFloatField("point2_x")); pExcel->WriteData(iRow, 7, (LPCTSTR)str); pExcel->SetHorizontalAlignment(iRow, 7, xlRight); pExcel->SetNumberFormatLocal(iRow, 7, "0.000"); // 终点2 - Y str.Format("%.3f", q.getFloatField("point2_y")); pExcel->WriteData(iRow, 8, (LPCTSTR)str); pExcel->SetHorizontalAlignment(iRow, 8, xlRight); pExcel->SetNumberFormatLocal(iRow, 8, "0.000"); // 终点2 - Z str.Format("%.3f", q.getFloatField("point2_z")); pExcel->WriteData(iRow, 9, (LPCTSTR)str); pExcel->SetHorizontalAlignment(iRow, 9, xlRight); pExcel->SetNumberFormatLocal(iRow, 9, "0.000"); // 半径 str.Format("%.3f", q.getFloatField("cylinder_radius")); pExcel->WriteData(iRow, 10, (LPCTSTR)str); pExcel->SetHorizontalAlignment(iRow, 10, xlRight); pExcel->SetNumberFormatLocal(iRow, 10, "0.000"); // Length str.Format("%.3f", q.getFloatField("cylinder_length")); pExcel->WriteData(iRow, 11, (LPCTSTR)str); pExcel->SetHorizontalAlignment(iRow, 11, xlRight); pExcel->SetNumberFormatLocal(iRow, 11, "0.000"); // DESC str.Format("%s", q.getStringField("cylinder_desc")); pExcel->WriteData(iRow, 12, (LPCTSTR)str); pExcel->SetHorizontalAlignment(iRow, 12, xlLeft); iRow++; q.nextRow(); } q.finalize(); pExcel->SetBorders(iStartRow + 2, 1, iRow, 12, true, true, true, true, true, true, xlThin, xlThin, xlThin, xlThin, xlThin, xlThin); return iRow; } /************************************************************************************************** 函 数 名 :ExcelPointsData 功能描述 :Excel数据-点 输出参数 :略 返 回 值 :略 **************************************************************************************************/ int StaticReport::ExcelPointsData(CExport2Excel *pExcel, LPCTSTR szEquipCode, int iStartRow) { CString str; int iRow = iStartRow + 2; // 标题: 第1行 pExcel->SetFont(iRow, _T("宋体"), 14, true); pExcel->MergeCells(iRow, 1, iRow, 10); pExcel->SetHorizontalAlignment(iRow, 1, xlLeft); pExcel->WriteData(iRow, 1, _T("点")); // Header iRow += 1; str.Format(_T("序号")); pExcel->WriteData(iRow, 1, (LPCTSTR)str); pExcel->SetHorizontalAlignment(iRow, 1, xlCenter); pExcel->MergeCells(iRow, 1, iRow + 1, 1); str.Format(_T("名称")); pExcel->WriteData(iRow, 2, (LPCTSTR)str); pExcel->SetHorizontalAlignment(iRow, 2, xlCenter); pExcel->MergeCells(iRow, 2, iRow + 1, 2); str.Format(_T("编码")); pExcel->WriteData(iRow, 3, (LPCTSTR)str); pExcel->SetHorizontalAlignment(iRow, 3, xlCenter); pExcel->MergeCells(iRow, 3, iRow + 1, 3); str.Format(_T("理论值")); pExcel->WriteData(iRow, 4, (LPCTSTR)str); pExcel->SetHorizontalAlignment(iRow, 4, xlCenter); pExcel->MergeCells(iRow, 4, iRow , 6); str.Format(_T("X")); pExcel->WriteData(iRow + 1, 4, (LPCTSTR)str); pExcel->SetHorizontalAlignment(iRow + 1, 4, xlRight); str.Format(_T("Y")); pExcel->WriteData(iRow + 1, 5, (LPCTSTR)str); pExcel->SetHorizontalAlignment(iRow + 1, 5, xlRight); str.Format(_T("Z")); pExcel->WriteData(iRow + 1, 6, (LPCTSTR)str); pExcel->SetHorizontalAlignment(iRow + 1, 6, xlRight); str.Format(_T("实测值")); pExcel->WriteData(iRow, 7, (LPCTSTR)str); pExcel->SetHorizontalAlignment(iRow, 7, xlCenter); pExcel->MergeCells(iRow, 7, iRow, 9); str.Format(_T("X")); pExcel->WriteData(iRow + 1, 7, (LPCTSTR)str); pExcel->SetHorizontalAlignment(iRow + 1, 7, xlRight); str.Format(_T("Y")); pExcel->WriteData(iRow + 1, 8, (LPCTSTR)str); pExcel->SetHorizontalAlignment(iRow + 1, 8, xlRight); str.Format(_T("Z")); pExcel->WriteData(iRow + 1, 9, (LPCTSTR)str); pExcel->SetHorizontalAlignment(iRow + 1, 9, xlRight); str.Format(_T("说明")); pExcel->WriteData(iRow, 10, (LPCTSTR)str); pExcel->SetHorizontalAlignment(iRow, 10, xlCenter); pExcel->MergeCells(iRow, 10, iRow + 1, 10); // POINT数据访问入口 EquipDataPointManager *pPointManager = GetDocument()->GetEquipDataPointManager(); ASSERT(pPointManager != NULL); iRow += 2; CppSQLite3Query q = pPointManager->QueryOfReport(m_taskId); while (!q.eof()) { // 序号 str.Format("%d", iRow - 1); pExcel->WriteData(iRow, 1, (LPCTSTR)str); pExcel->SetHorizontalAlignment(iRow, 1, xlCenter); // 名称 str.Format("%s", q.getStringField("point_title")); pExcel->WriteData(iRow, 2, (LPCTSTR)str); pExcel->SetHorizontalAlignment(iRow, 2, xlCenter); // CODE str.Format("%s", q.getStringField("point_code")); pExcel->WriteData(iRow, 3, (LPCTSTR)str); pExcel->SetHorizontalAlignment(iRow, 3, xlCenter); // 理论 - X str.Format("%.3f", q.getFloatField("point_e_x")); pExcel->WriteData(iRow, 4, (LPCTSTR)str); pExcel->SetHorizontalAlignment(iRow, 4, xlRight); pExcel->SetNumberFormatLocal(iRow, 4, "0.000"); // 理论 - Y str.Format("%.3f", q.getFloatField("point_e_y")); pExcel->WriteData(iRow, 5, (LPCTSTR)str); pExcel->SetHorizontalAlignment(iRow, 5, xlRight); pExcel->SetNumberFormatLocal(iRow, 5, "0.000"); // 理论 - Z str.Format("%.3f", q.getFloatField("point_e_z")); pExcel->WriteData(iRow, 6, (LPCTSTR)str); pExcel->SetHorizontalAlignment(iRow, 6, xlRight); pExcel->SetNumberFormatLocal(iRow, 6, "0.000"); // 实测 - X str.Format("%.3f", q.getFloatField("point_a_x")); pExcel->WriteData(iRow, 7, (LPCTSTR)str); pExcel->SetHorizontalAlignment(iRow, 7, xlRight); pExcel->SetNumberFormatLocal(iRow, 7, "0.000"); // 实测 - Y str.Format("%.3f", q.getFloatField("point_a_y")); pExcel->WriteData(iRow, 8, (LPCTSTR)str); pExcel->SetHorizontalAlignment(iRow, 8, xlRight); pExcel->SetNumberFormatLocal(iRow, 8, "0.000"); // 实测 - Z str.Format("%.3f", q.getFloatField("point_a_z")); pExcel->WriteData(iRow, 9, (LPCTSTR)str); pExcel->SetHorizontalAlignment(iRow, 9, xlRight); pExcel->SetNumberFormatLocal(iRow, 9, "0.000"); // 说明 str.Format("%s", q.getStringField("point_desc")); pExcel->WriteData(iRow, 10, (LPCTSTR)str); pExcel->SetHorizontalAlignment(iRow, 10, xlLeft); iRow++; q.nextRow(); } q.finalize(); pExcel->SetBorders(iStartRow +2, 1, iRow, 10, true, true, true, true, true, true, xlThin, xlThin, xlThin, xlThin, xlThin, xlThin); return iRow; } /************************************************************************************************** 函 数 名 :ExcelAngleData 功能描述 :显示数据-点 输出参数 :略 返 回 值 :略 **************************************************************************************************/ int StaticReport::ExcelAngleData(CExport2Excel *pExcel, LPCTSTR szEquipCode, int iStartRow) { CString str; int iRow = iStartRow + 2; // 标题: 第1行 pExcel->SetFont(iRow, _T("宋体"), 14, true); pExcel->MergeCells(iRow, 1, iRow, 16); pExcel->SetHorizontalAlignment(iRow, 1, xlLeft); pExcel->WriteData(iRow, 1, _T("推力线偏角")); // Header iRow += 1; str.Format(_T("序号")); pExcel->WriteData(iRow, 1, (LPCTSTR)str); pExcel->SetHorizontalAlignment(iRow, 1, xlCenter); pExcel->MergeCells(iRow, 1, iRow + 1, 1); str.Format(_T("推力线名称")); pExcel->WriteData(iRow, 2, (LPCTSTR)str); pExcel->SetHorizontalAlignment(iRow, 2, xlCenter); pExcel->MergeCells(iRow, 2, iRow + 1, 2); str.Format(_T("编码")); pExcel->WriteData(iRow, 3, (LPCTSTR)str); pExcel->SetHorizontalAlignment(iRow, 3, xlCenter); pExcel->MergeCells(iRow, 3, iRow + 1, 3); str.Format(_T("偏移量")); pExcel->WriteData(iRow, 4, (LPCTSTR)str); pExcel->SetHorizontalAlignment(iRow, 4, xlCenter); pExcel->MergeCells(iRow, 4, iRow, 6); str.Format(_T("X")); pExcel->WriteData(iRow + 1, 4, (LPCTSTR)str); pExcel->SetHorizontalAlignment(iRow + 1, 4, xlRight); str.Format(_T("Y")); pExcel->WriteData(iRow + 1, 5, (LPCTSTR)str); pExcel->SetHorizontalAlignment(iRow + 1, 5, xlRight); str.Format(_T("Z")); pExcel->WriteData(iRow + 1, 6, (LPCTSTR)str); pExcel->SetHorizontalAlignment(iRow + 1, 6, xlRight); str.Format(_T("调校量")); pExcel->WriteData(iRow, 7, (LPCTSTR)str); pExcel->SetHorizontalAlignment(iRow, 7, xlCenter); pExcel->MergeCells(iRow, 7, iRow, 9); str.Format(_T("X")); pExcel->WriteData(iRow + 1, 7, (LPCTSTR)str); pExcel->SetHorizontalAlignment(iRow + 1, 7, xlRight); str.Format(_T("Y")); pExcel->WriteData(iRow + 1, 8, (LPCTSTR)str); pExcel->SetHorizontalAlignment(iRow + 1, 8, xlRight); str.Format(_T("Z")); pExcel->WriteData(iRow + 1, 9, (LPCTSTR)str); pExcel->SetHorizontalAlignment(iRow + 1, 9, xlRight); str.Format(_T("向量")); pExcel->WriteData(iRow, 10, (LPCTSTR)str); pExcel->SetHorizontalAlignment(iRow, 10, xlCenter); pExcel->MergeCells(iRow, 10, iRow, 12); str.Format(_T("X")); pExcel->WriteData(iRow + 1, 10, (LPCTSTR)str); pExcel->SetHorizontalAlignment(iRow + 1, 10, xlRight); str.Format(_T("Y")); pExcel->WriteData(iRow + 1, 11, (LPCTSTR)str); pExcel->SetHorizontalAlignment(iRow + 1, 11, xlRight); str.Format(_T("Z")); pExcel->WriteData(iRow + 1, 12, (LPCTSTR)str); pExcel->SetHorizontalAlignment(iRow + 1, 12, xlRight); str.Format(_T("起点")); pExcel->WriteData(iRow, 13, (LPCTSTR)str); pExcel->SetHorizontalAlignment(iRow, 10, xlCenter); pExcel->MergeCells(iRow, 13, iRow, 15); str.Format(_T("X")); pExcel->WriteData(iRow + 1, 13, (LPCTSTR)str); pExcel->SetHorizontalAlignment(iRow + 1, 13, xlRight); str.Format(_T("Y")); pExcel->WriteData(iRow + 1, 14, (LPCTSTR)str); pExcel->SetHorizontalAlignment(iRow + 1, 14, xlRight); str.Format(_T("Z")); pExcel->WriteData(iRow + 1, 15, (LPCTSTR)str); pExcel->SetHorizontalAlignment(iRow + 1, 15, xlRight); str.Format(_T("终点")); pExcel->WriteData(iRow, 16, (LPCTSTR)str); pExcel->SetHorizontalAlignment(iRow, 16, xlCenter); pExcel->MergeCells(iRow, 16, iRow, 18); str.Format(_T("X")); pExcel->WriteData(iRow + 1, 16, (LPCTSTR)str); pExcel->SetHorizontalAlignment(iRow + 1, 16, xlRight); str.Format(_T("Y")); pExcel->WriteData(iRow + 1, 17, (LPCTSTR)str); pExcel->SetHorizontalAlignment(iRow + 1, 17, xlRight); str.Format(_T("Z")); pExcel->WriteData(iRow + 1, 18, (LPCTSTR)str); pExcel->SetHorizontalAlignment(iRow + 1, 18, xlRight); // Angle数据访问入口 EquipDataAngleManager *pAngleManager = GetDocument()->GetEquipDataAngleManager(); ASSERT(pAngleManager != NULL); iRow++; int iIndex = 0; CppSQLite3Query q = pAngleManager->Query(m_taskId); while (!q.eof()) { iRow += 1; iIndex += 1; // 序号 str.Format("%d", iIndex); pExcel->WriteData(iRow, 1, (LPCTSTR)str); pExcel->SetHorizontalAlignment(iRow, 1, xlCenter); // 名称 str.Format("%s", q.getStringField("line_title")); pExcel->WriteData(iRow, 2, (LPCTSTR)str); pExcel->SetHorizontalAlignment(iRow, 2, xlCenter); // CODE str.Format("%s", q.getStringField("line_code")); pExcel->WriteData(iRow, 3, (LPCTSTR)str); pExcel->SetHorizontalAlignment(iRow, 3, xlCenter); // 偏移量 - X str.Format("%.3f'", q.getFloatField("angle_a_x")); pExcel->WriteData(iRow, 4, (LPCTSTR)str); pExcel->SetHorizontalAlignment(iRow, 4, xlRight); // 偏移量 - Y str.Format("%.3f'", q.getFloatField("angle_a_y")); pExcel->WriteData(iRow, 5, (LPCTSTR)str); pExcel->SetHorizontalAlignment(iRow, 5, xlRight); // 偏移量 - Z str.Format("%.3f'", q.getFloatField("angle_a_z")); pExcel->WriteData(iRow, 6, (LPCTSTR)str); pExcel->SetHorizontalAlignment(iRow, 6, xlRight); // 调校量 - X str.Format("%.3f'", q.getFloatField("angle_e_x")); pExcel->WriteData(iRow, 7, (LPCTSTR)str); pExcel->SetHorizontalAlignment(iRow, 7, xlRight); pExcel->SetNumberFormatLocal(iRow, 7, _T("0.00")); // 调校量 - Y str.Format("%.3f'", q.getFloatField("angle_e_y")); pExcel->WriteData(iRow, 8, (LPCTSTR)str); pExcel->SetHorizontalAlignment(iRow, 8, xlRight); pExcel->SetNumberFormatLocal(iRow, 8, _T("0.00")); // 调校量 - Z str.Format("%.3f'", q.getFloatField("angle_e_z")); pExcel->WriteData(iRow, 9, (LPCTSTR)str); pExcel->SetHorizontalAlignment(iRow, 9, xlRight); DOUBLE x1 = q.getFloatField("line_start_x"); DOUBLE y1 = q.getFloatField("line_start_y"); DOUBLE z1 = q.getFloatField("line_start_z"); DOUBLE x2 = q.getFloatField("line_end_x"); DOUBLE y2 = q.getFloatField("line_end_y"); DOUBLE z2 = q.getFloatField("line_end_z"); DOUBLE vx1 = x2 - x1; DOUBLE vy1 = y2 - y1; DOUBLE vz1 = z2 - z1; // 向量 - X str.Format("%.3f", vx1); pExcel->WriteData(iRow, 10, (LPCTSTR)str); pExcel->SetHorizontalAlignment(iRow, 10, xlRight); pExcel->SetNumberFormatLocal(iRow, 10, "0.000"); // 向量 - Y str.Format("%.3f", vy1); pExcel->WriteData(iRow, 11, (LPCTSTR)str); pExcel->SetHorizontalAlignment(iRow, 11, xlRight); pExcel->SetNumberFormatLocal(iRow, 11, "0.000"); // 向量 - Z str.Format("%.3f", vz1); pExcel->WriteData(iRow, 12, (LPCTSTR)str); pExcel->SetHorizontalAlignment(iRow, 12, xlRight); pExcel->SetNumberFormatLocal(iRow, 12, "0.000"); // 起点 - X str.Format("%.3f", x1); pExcel->WriteData(iRow, 13, (LPCTSTR)str); pExcel->SetHorizontalAlignment(iRow, 13, xlRight); pExcel->SetNumberFormatLocal(iRow, 13, "0.000"); // 起点 - Y str.Format("%.3f", y1); pExcel->WriteData(iRow, 14, (LPCTSTR)str); pExcel->SetHorizontalAlignment(iRow, 14, xlRight); pExcel->SetNumberFormatLocal(iRow, 14, "0.000"); // 起点 - Z str.Format("%.3f", z1); pExcel->WriteData(iRow, 15, (LPCTSTR)str); pExcel->SetHorizontalAlignment(iRow, 15, xlRight); pExcel->SetNumberFormatLocal(iRow, 15, "0.000"); // 终点 - X str.Format("%.3f", x2); pExcel->WriteData(iRow, 16, (LPCTSTR)str); pExcel->SetHorizontalAlignment(iRow, 16, xlRight); pExcel->SetNumberFormatLocal(iRow, 16, "0.000"); // 终点 - Y str.Format("%.3f", y2); pExcel->WriteData(iRow, 17, (LPCTSTR)str); pExcel->SetHorizontalAlignment(iRow, 17, xlRight); pExcel->SetNumberFormatLocal(iRow, 17, "0.000"); // 终点 - Z str.Format("%.3f", z2); pExcel->WriteData(iRow, 18, (LPCTSTR)str); pExcel->SetHorizontalAlignment(iRow, 18, xlRight); pExcel->SetNumberFormatLocal(iRow, 18, "0.000"); q.nextRow(); } q.finalize(); pExcel->SetBorders(iStartRow + 2, 1, iRow, 18, true, true, true, true, true, true, xlThin, xlThin, xlThin, xlThin, xlThin, xlThin); return iRow; } void StaticReport::OnSize(UINT nType, int cx, int cy) { CDialogEx::OnSize(nType, cx, cy); //m_GridCtrl.ExpandToFit(TRUE); }