BOOL CGetOutlookPBDlg::InitOutlookContactApp() { COleException e; if (!m_pApp.CreateDispatch(_T("Outlook.Application"), &e)) { CString str; CString strAppName; strAppName.LoadString(IDS_APPNAME); AddPrefixName(strAppName); //str.Format("CreateDispatch() failed w/error 0x%08lx", e.m_sc); str.Format(IDS_NOTOUTLOOK); this->MessageBox(str, strAppName,MB_SETFOREGROUND); return FALSE; } m_pNS = m_pApp.GetNamespace(_T("MAPI")); //获得 NameSpace 类型 if (m_pNS.m_lpDispatch==NULL) { return FALSE; } COleVariant covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR); m_pNS.Logon(covOptional, covOptional, covOptional, covOptional); return TRUE; }
void Cwhu_FaxSettingDlg::Lin_ImportAutoForArr(CString m_FilePath,CStringArray &m_AutoForward) { int Number = 0; //m_DutyArr数组必须足够大// //导入 CApplication app; CWorkbook book; CWorkbooks books; CWorksheet sheet; CWorksheets sheets; CRange range; LPDISPATCH lpDisp; //定义变量// COleVariant covOptional((long) DISP_E_PARAMNOTFOUND,VT_ERROR); if (!app.CreateDispatch(_T("Excel.Application"))) { this->MessageBox(_T("无法创建Excel应用")); } books = app.get_Workbooks(); //打开Excel,其中m_FilePath为Excel表的路径名// lpDisp = books.Open(m_FilePath,covOptional ,covOptional,covOptional,covOptional ,covOptional,covOptional,covOptional ,covOptional,covOptional,covOptional ,covOptional,covOptional,covOptional ,covOptional); book.AttachDispatch(lpDisp); sheets = book.get_Worksheets(); sheet = sheets.get_Item(COleVariant((short)1)); CStringArray m_ContentArr; for (int ItemNum = 2;ItemNum<40;ItemNum++) { for (int ColumNum=1;ColumNum<11;ColumNum++) { CString m_pos = Lin_GetEnglishCharacter(ColumNum); CString m_Itempos; m_Itempos.Format(_T("%d"),ItemNum); CString m_str = m_pos+m_Itempos; range = sheet.get_Range(COleVariant(m_str),COleVariant(m_str)); //获得单元格的内容 COleVariant rValue; rValue = COleVariant(range.get_Value2()); //转换成宽字符// rValue.ChangeType(VT_BSTR); //转换格式,并输出// CString m_content = CString(rValue.bstrVal); if (m_content!=_T("")) { m_AutoForward.Add(m_content); } } } book.put_Saved(TRUE); app.Quit(); }
void CMyExcel::PrintOut(short CopySum) { if(CopySum<=0) CopySum=1; COleVariant covTrue((short)TRUE); COleVariant covFalse((short)FALSE); COleVariant covOptional((long)DISP_E_PARAMNOTFOUND,VT_ERROR); MySheet.PrintOut(vtMissing,vtMissing,(_variant_t)(short)CopySum,vtMissing ,vtMissing,vtMissing,covTrue,vtMissing); }
void ole_close_excel(const std::wstring &xlsx, CApplication &excel_application, CWorkbooks &books, CWorkbook &book, CWorksheets &sheets) { COleVariant covTrue((short)TRUE), covFalse((short)FALSE); COleVariant covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR); book.Close(COleVariant(short(FALSE)),COleVariant(xlsx.c_str()), covOptional); books.Close(); // 释放资源 sheets.ReleaseDispatch(); book.ReleaseDispatch(); books.ReleaseDispatch(); excel_application.Quit(); excel_application.ReleaseDispatch(); }
CMyExcel::~CMyExcel() { COleVariant covFalse((short)FALSE); COleVariant covOptional((long)DISP_E_PARAMNOTFOUND,VT_ERROR); MyRange.ReleaseDispatch(); MySheet.ReleaseDispatch(); MySheets.ReleaseDispatch(); MyBook.Close(covFalse,_variant_t(strFilePath),covOptional); MyBook.ReleaseDispatch(); MyBooks.Close(); MyBooks.ReleaseDispatch(); MyApp.Quit(); MyApp.ReleaseDispatch(); CoUninitialize(); }
IDispatchPtr COutlookButton::GetSelectedItem(Outlook::_ExplorerPtr spExplorer) { //HRESULT hr; IDispatchPtr olSelectedItem = NULL; // Since you don't know what type to expect, just use an IDispatch* COleVariant covOptional((long) DISP_E_PARAMNOTFOUND, VT_ERROR); //CComPtr<Outlook::_Explorer> spExplorer; CComPtr<Outlook::Selection> olSel; //Outlook::_ExplorerPtr spExplorer = m_OLAppPtr->ActiveExplorer(); //m_OLAppPtr->ActiveExplorer(&spExplorer); // Get the Selection object olSel = spExplorer->GetSelection(); //hr = spExplorer->get_Selection(&olSel); if (olSel==NULL) return NULL; /*if (FAILED(hr)) return NULL;*/ // Since more than one object can be selected at any one time, you loop through them // one at a time long count; olSel->get_Count(&count); if (count<=0) return NULL; COleVariant covIndex; covIndex.vt = VT_I4; covIndex.lVal = 1; /*_variant_t vv; vv.lVal=1; vv.vt=VT_I4;*/ olSelectedItem = olSel->Item(covIndex); /*for (long i = 1; i <= count; ++i){ //olSel->Item(covIndex,&olSelectedItem); // Get the selected item }*/ return olSelectedItem; }
BOOL CMyExcel::Open() { LPDISPATCH lpDisp=NULL; COleVariant covOptional((long)DISP_E_PARAMNOTFOUND,VT_ERROR); CoInitialize(NULL); if (!MyApp.CreateDispatch("Excel.Application",NULL)) { AfxMessageBox(_T("EXCEL初始化时出错!"),MB_OK|MB_ICONERROR); return FALSE; } lpDisp=MyApp.GetWorkbooks(); MyBooks.AttachDispatch(lpDisp,TRUE); lpDisp = MyBooks.Add(covOptional); MyBook.AttachDispatch(lpDisp,TRUE); lpDisp=MyBook.GetWorksheets(); MySheets.AttachDispatch(lpDisp,TRUE); return TRUE; }
void CModbusPollView::OnSetupExcelloging() { COleVariant covTrue((short)TRUE), covFalse((short)FALSE), covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR); //创建Excel 2000服务器(启动Excel) if (!m_ExcelApp.CreateDispatch(_T("Excel.Application"),NULL)) { AfxMessageBox(_T("Create Excel Fail!")); exit(1); } m_ExcelApp.SetVisible(TRUE); m_wbsMyBooks.AttachDispatch(m_ExcelApp.GetWorkbooks(),true); m_wbMyBook.AttachDispatch(m_wbsMyBooks.Add(covOptional)); //得到Worksheets m_wssMysheets.AttachDispatch(m_wbMyBook.GetWorksheets(),true); //得到sheet1 m_wsMysheet.AttachDispatch(m_wssMysheets.GetItem(_variant_t("Sheet1")),true); //得到全部Cells,此时,rgMyRge是cells的集合 m_rgMyRge.AttachDispatch(m_wsMysheet.GetCells(),true); m_rgMyRge.SetValue(_variant_t("")); m_curexcelrow=1; CString str; str=_T("Time"); m_rgMyRge.SetItem(_variant_t((long)m_curexcelrow),_variant_t((long)m_curexcelrow),_variant_t(str)); for (int i=0;i<m_Quantity;i++) { str.Format(_T("%d"),m_address+i); m_rgMyRge.SetItem(_variant_t((long)m_curexcelrow),_variant_t((long)i+2),_variant_t(str)); } m_logExcel=FALSE; }
void CDlgHistory::OnBnClickedButtonExport() { // TODO: 在此添加控件通知处理程序代码 UpdateData(TRUE); GetDlgItem(IDC_BUTTON_EXPORT)->EnableWindow(FALSE); COleVariant covTrue((short)TRUE),covFalse((short)FALSE),covOptional((long)DISP_E_PARAMNOTFOUND,VT_ERROR); book.PrintPreview(_variant_t(false)); CFileDialog FileDialog(FALSE,"xlsx",NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT, _T("Microsoft Excel 2007(*.xlsx)|*.xlsx|所有文件(*.*)"),this); if(FileDialog.DoModal()!=IDOK) { GetDlgItem(IDC_BUTTON_EXPORT)->EnableWindow(TRUE); return; } CString cStrFile=FileDialog.GetPathName(); //选择保存路径名称 if(::PathFileExists(cStrFile)) DeleteFile(cStrFile); CString AntID,SensorID,StrStartTime,StrStopTime,tmpData,passWord,StartTime,StopTime,message,strRecordTime,rowCount,strRow,strLimit; StrStartTime.Format("%f",m_DataBegin); StrStopTime.Format("%f",m_DataEnding); CTime m_Startdate; m_CtlDateTimeStartTime.GetTime(m_Startdate); StartTime.Format("%d%02d%02d",m_Startdate.GetYear(), m_Startdate.GetMonth(),m_Startdate.GetDay()); _RecordsetPtr m_pRecordsetch; m_pRecordsetch.CreateInstance(__uuidof(Recordset)); books = app.get_Workbooks(); book = books.Add(covOptional); sheets = book.get_Worksheets(); sheets.Add(vtMissing,vtMissing,vtMissing,vtMissing); int nCount; char cCell; for(int i=1;i<5;i++) { tmpData.Format("%d",i); AntID = "天线"+tmpData; sheet = sheets.get_Item(COleVariant((short)i)); //得到第一个工作表 sheet.put_Name(AntID); for(int j=1;j<13;j++) { nCount = 3; tmpData.Format("%d",j); SensorID = "传感器"+tmpData; cCell = 'A' + 2*(j-1); rowCount.Format(_T("%c"),cCell); rowCount+="1"; range = sheet.get_Range(COleVariant(rowCount),COleVariant(rowCount)); range.put_Value2(COleVariant(SensorID)); rowCount.Format(_T("%c"),cCell); rowCount+="2"; range = sheet.get_Range(COleVariant(rowCount),COleVariant(rowCount)); range.put_Value2(COleVariant("时间")); rowCount.Format(_T("%c"),cCell+1); rowCount+="2"; range = sheet.get_Range(COleVariant(rowCount),COleVariant(rowCount)); range.put_Value2(COleVariant("温度")); _bstr_t bstrSQLdata ="SELECT Temperature,RecordTime FROM DB_Data where ReaderID='"+strReader+"' and AntID='"+AntID+"' and SensorID='"+SensorID+"' and RecordTime<"+StrStopTime+" and RecordTime>"+StrStartTime+" and (Notes='正常' or Notes='超限') order by DataID;"; m_pRecordsetch->Open(bstrSQLdata,m_pConnection.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText); while(!m_pRecordsetch->adoEOF) { CString temper=(LPCSTR)(_bstr_t)m_pRecordsetch->GetCollect("Temperature"); CString time=(LPCSTR)(_bstr_t)m_pRecordsetch->GetCollect("RecordTime"); COleDateTime t=atof(time); strRecordTime=t.Format("%Y-%m-%d %H:%M:%S"); rowCount.Format(_T("%c"),cCell); strRow.Format(_T("%d"),nCount); rowCount+=strRow; range = sheet.get_Range(COleVariant(rowCount),COleVariant(rowCount)); range.put_NumberFormat(COleVariant("hh:mm:ss")); range.put_Value2(COleVariant(strRecordTime)); //设置时间 rowCount.Format(_T("%c"),cCell+1); rowCount+=strRow; range = sheet.get_Range(COleVariant(rowCount),COleVariant(rowCount)); range.put_Value2(COleVariant(temper)); //设置温度 time.ReleaseBuffer(); temper.ReleaseBuffer(); m_pRecordsetch->MoveNext(); nCount++; } m_pRecordsetch->Close(); } range = sheet.get_Range(COleVariant("A3"),COleVariant("A3")); COleVariant vResult =range.get_Value2(); if(vResult.vt==VT_EMPTY) { passWord="******"; } else { SYSTEMTIME st; VariantTimeToSystemTime(vResult.date, &st); passWord.Format("%d%02d%02d",st.wYear,st.wMonth,st.wDay); passWord+="hshiot"; } sheet.Protect(_variant_t(passWord),vtMissing,vtMissing,vtMissing,vtMissing,vtMissing,vtMissing,vtMissing,vtMissing,vtMissing,vtMissing,vtMissing,vtMissing,vtMissing,vtMissing,vtMissing); } book.SaveCopyAs(COleVariant(cStrFile)); //保存到cStrFile文件 book.put_Saved(true); books.Close(); book.ReleaseDispatch(); books.ReleaseDispatch(); app.ReleaseDispatch(); app.Quit(); message = "已导出数据,文件位置 :"+cStrFile; AfxMessageBox(message); GetDlgItem(IDC_BUTTON_EXPORT)->EnableWindow(TRUE); }
void COpenExcelDlg::Lin_InportExcelToList(CString m_FilePath,CListCtrl &m_List) { //先删除列表内容// m_List.DeleteAllItems(); while(m_List.GetHeaderCtrl()->GetItemCount()>0) { m_List.DeleteColumn(0); } //导入 CApplication app; CWorkbook book; CWorkbooks books; CWorksheet sheet; CWorksheets sheets; CRange range; LPDISPATCH lpDisp; //定义变量// COleVariant covOptional((long) DISP_E_PARAMNOTFOUND,VT_ERROR); if (!app.CreateDispatch(_T("Excel.Application"))) { this->MessageBox(_T("无法创建Excel应用")); return; } books = app.get_Workbooks(); //打开Excel,其中m_FilePath为Excel表的路径名// lpDisp = books.Open(m_FilePath,covOptional ,covOptional,covOptional,covOptional ,covOptional,covOptional,covOptional ,covOptional,covOptional,covOptional ,covOptional,covOptional,covOptional ,covOptional); book.AttachDispatch(lpDisp); sheets = book.get_Worksheets(); sheet = sheets.get_Item(COleVariant((short)1)); CStringArray m_HeadName; for (int i=1;i<26;i++) { CString m_pos = Lin_GetEnglishCharacter(i); m_pos = m_pos + _T("1"); range = sheet.get_Range(COleVariant(m_pos),COleVariant(m_pos)); //获得单元格的内容 COleVariant rValue; rValue = COleVariant(range.get_Value2()); //转换成宽字符// rValue.ChangeType(VT_BSTR); //转换格式,并输出// CString m_content = CString(rValue.bstrVal); if (m_content!=_T("")) { m_HeadName.Add(m_content); } } Lin_InitList(m_List,m_HeadName); CStringArray m_ContentArr; for (int ItemNum = 0;ItemNum<10000;ItemNum++) { for (int j=1;j<m_List.GetHeaderCtrl()->GetItemCount();j++) { CString m_pos = Lin_GetEnglishCharacter(j); CString m_Itempos; m_Itempos.Format(_T("%d"),ItemNum+2); CString m_str = m_pos+m_Itempos; range = sheet.get_Range(COleVariant(m_str),COleVariant(m_str)); //获得单元格的内容 COleVariant rValue; rValue = COleVariant(range.get_Value2()); //转换成宽字符// rValue.ChangeType(VT_BSTR); //转换格式,并输出// CString m_content = CString(rValue.bstrVal); m_ContentArr.Add(m_content); } if (m_ContentArr.GetAt(0)!=_T("")) { Lin_InsertList(m_List,m_ContentArr); m_ContentArr.RemoveAll(); } else{ break; } } book.put_Saved(TRUE); app.Quit(); }
void COpenExcelDlg::Lin_ExportListToExcel(CListCtrl &m_List) { if (m_List.GetHeaderCtrl()->GetItemCount()>0) { CApplication app; CWorkbooks books; CWorkbook book; CWorksheets sheets; CWorksheet sheet; CRange range; CRange cols; int i = 3; CString str1, str2; COleVariant covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR); if( !app.CreateDispatch(_T("Excel.Application"))) { MessageBox(_T("无法创建Excel应用!")); return; } books=app.get_Workbooks(); book=books.Add(covOptional); sheets=book.get_Sheets(); sheet=sheets.get_Item(COleVariant((short)1)); //写入表头// for (int ColumNum=1;ColumNum<m_List.GetHeaderCtrl()->GetItemCount();ColumNum++) { str2 = Lin_GetEnglishCharacter(ColumNum); str2 = str2 + _T("1"); LVCOLUMN lvColumn; TCHAR strChar[256]; lvColumn.pszText=strChar; lvColumn.cchTextMax=256 ; lvColumn.mask = LVCF_TEXT; m_List.GetColumn(ColumNum,&lvColumn); CString str=lvColumn.pszText; range=sheet.get_Range(COleVariant(str2),COleVariant(str2)); range.put_Value2(COleVariant(str)); } //获取单元格的位置// for (int ColumNum =1;ColumNum<m_List.GetHeaderCtrl()->GetItemCount();ColumNum++) { for (int ItemNum = 0;ItemNum<m_List.GetItemCount();ItemNum++) { str2 = Lin_GetEnglishCharacter(ColumNum); str1.Format(_T("%d"),ItemNum+2); str2 = str2+str1; CString str = m_List.GetItemText(ItemNum,ColumNum); range=sheet.get_Range(COleVariant(str2),COleVariant(str2)); range.put_Value2(COleVariant(str)); } } cols=range.get_EntireColumn(); cols.AutoFit(); app.put_Visible(TRUE); app.put_UserControl(TRUE); }else{ AfxMessageBox(_T("列表为空")); } }
void CLogAnalyzerView::OnGeneratereportExcel() { #ifdef EXCEL_REPORT try { if (m_logger->GetFileName().empty()) return; CApplication app; CWorkbook exlBook; CWorkbooks exlBooks; CWorksheet exlSheet; CWorksheets exlSheets; CChart chart; CRange range; CChartObjects chartobjects; LPDISPATCH lpDisp; COleVariant covTrue((short)TRUE), covFalse((short)FALSE), covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR); // Start Excel and get the Application object. if(!app.CreateDispatch("Excel.Application")) { ERROR_MESSAGEBOX("Couldn't start Excel and get an application 0bject"); return; } app.put_Visible(TRUE); // Get Workbooks collection. lpDisp = app.get_Workbooks(); ASSERT(lpDisp); // Attach the IDispatch pointer exlBooks.AttachDispatch(lpDisp); exlBook = exlBooks.Add(covOptional); // Get sheets. lpDisp = exlBook.get_Sheets(); ASSERT(lpDisp); exlSheets.AttachDispatch(lpDisp); lpDisp = exlSheets.get_Item( COleVariant((short)(1)) ); ASSERT(lpDisp); // Attach the lpDisp pointer to a Worksheet object. exlSheet.AttachDispatch(lpDisp); const std::map<tstring, Poco::SharedPtr<CComponent>>& componentMap = m_logger->GetComponents(); char charPos[32]; int nSize = 0; if (componentMap.size() > 0) { std::map<tstring, Poco::SharedPtr<CComponent>>::const_iterator ite = componentMap.begin(); int nIndex = 3; while (ite != componentMap.end()) { if (ite->second->GetTraceLogs().size() > 0) { sprintf(charPos, "A%d", nIndex); lpDisp = exlSheet.get_Range(COleVariant(charPos), COleVariant(charPos)); ASSERT(lpDisp); range.AttachDispatch(lpDisp); // Attach the IDispatch pointer range.put_Value(COleVariant((long)DISP_E_PARAMNOTFOUND, VT_ERROR), COleVariant(ite->second->GetComponentName().c_str())); range.put_Value2(COleVariant(ite->second->GetComponentName().c_str())); int nTrace = 0, nNotification = 0, nError = 0, nInformation = 0, nDebug = 0, nCritical = 0, nWarning = 0, nFatal = 0; if (nSize == 0) { nTrace = 10; nNotification = 10; nError = 5, nInformation = 50, nDebug = 2, nCritical = 2, nWarning = 9, nFatal = 1; } else if (nSize == 1) { nTrace = 10; nNotification = 25; nError = 4, nInformation = 36, nDebug = 5, nCritical = 0, nWarning = 20, nFatal = 1; } else if (nSize == 2) { nTrace = 0; nNotification = 5; nError = 4, nInformation = 100, nDebug = 5, nCritical = 5, nWarning = 15, nFatal = 0; } else if (nSize == 3) { nTrace = 0; nNotification = 5; nError = 4, nInformation = 82, nDebug = 36, nCritical = 1, nWarning = 50, nFatal = 0; } //ite->second->getLogTypeCount(nTrace, nNotification, nError, nInformation, nDebug, nCritical, nWarning, nFatal); //Trace sprintf(charPos, "B%d", nIndex); lpDisp = exlSheet.get_Range(COleVariant(charPos), COleVariant(charPos)); range.AttachDispatch(lpDisp); sprintf(charPos, "%d", nTrace); range.put_Value(COleVariant((long)DISP_E_PARAMNOTFOUND, VT_ERROR), COleVariant(charPos)); range.put_Value2(COleVariant(charPos)); //Debug sprintf(charPos, "C%d", nIndex); lpDisp = exlSheet.get_Range(COleVariant(charPos), COleVariant(charPos)); range.AttachDispatch(lpDisp); sprintf(charPos, "%d", nDebug); range.put_Value(COleVariant((long)DISP_E_PARAMNOTFOUND, VT_ERROR), COleVariant(charPos)); range.put_Value2(COleVariant(charPos)); //Information sprintf(charPos, "D%d", nIndex); lpDisp = exlSheet.get_Range(COleVariant(charPos), COleVariant(charPos)); range.AttachDispatch(lpDisp); sprintf(charPos, "%d", nInformation); range.put_Value(COleVariant((long)DISP_E_PARAMNOTFOUND, VT_ERROR), COleVariant(charPos)); range.put_Value2(COleVariant(charPos)); //Warning sprintf(charPos, "E%d", nIndex); lpDisp = exlSheet.get_Range(COleVariant(charPos), COleVariant(charPos)); range.AttachDispatch(lpDisp); sprintf(charPos, "%d", nWarning); range.put_Value(COleVariant((long)DISP_E_PARAMNOTFOUND, VT_ERROR), COleVariant(charPos)); range.put_Value2(COleVariant(charPos)); //Error sprintf(charPos, "F%d", nIndex); lpDisp = exlSheet.get_Range(COleVariant(charPos), COleVariant(charPos)); range.AttachDispatch(lpDisp); sprintf(charPos, "%d", nError); range.put_Value(COleVariant((long)DISP_E_PARAMNOTFOUND, VT_ERROR), COleVariant(charPos)); range.put_Value2(COleVariant(charPos)); //Critical sprintf(charPos, "G%d", nIndex); lpDisp = exlSheet.get_Range(COleVariant(charPos), COleVariant(charPos)); range.AttachDispatch(lpDisp); sprintf(charPos, "%d", nCritical); range.put_Value(COleVariant((long)DISP_E_PARAMNOTFOUND, VT_ERROR), COleVariant(charPos)); range.put_Value2(COleVariant(charPos)); //Notification sprintf(charPos, "H%d", nIndex); lpDisp = exlSheet.get_Range(COleVariant(charPos), COleVariant(charPos)); range.AttachDispatch(lpDisp); sprintf(charPos, "%d", nNotification); range.put_Value(COleVariant((long)DISP_E_PARAMNOTFOUND, VT_ERROR), COleVariant(charPos)); range.put_Value2(COleVariant(charPos)); //Fatal sprintf(charPos, "I%d", nIndex); lpDisp = exlSheet.get_Range(COleVariant(charPos), COleVariant(charPos)); range.AttachDispatch(lpDisp); sprintf(charPos, "%d", nFatal); range.put_Value(COleVariant((long)DISP_E_PARAMNOTFOUND, VT_ERROR), COleVariant(charPos)); range.put_Value2(COleVariant(charPos)); ++nIndex; ++nSize; } ++ite; } } lpDisp = exlSheet.get_Range(COleVariant("B2"), COleVariant("B2")); ASSERT(lpDisp); range.AttachDispatch(lpDisp); range.put_Value(COleVariant((long)DISP_E_PARAMNOTFOUND, VT_ERROR), COleVariant("TRACE")); range.put_Value2(COleVariant("TRACE")); lpDisp = exlSheet.get_Range(COleVariant("C2"), COleVariant("C2")); ASSERT(lpDisp); range.AttachDispatch(lpDisp); range.put_Value(COleVariant((long)DISP_E_PARAMNOTFOUND, VT_ERROR), COleVariant("DEBUG")); range.put_Value2(COleVariant("DEBUG")); lpDisp = exlSheet.get_Range(COleVariant("D2"), COleVariant("D2")); ASSERT(lpDisp); range.AttachDispatch(lpDisp); range.put_Value(COleVariant((long)DISP_E_PARAMNOTFOUND, VT_ERROR), COleVariant("INFORMATION")); range.put_Value2(COleVariant("INFORMATION")); lpDisp = exlSheet.get_Range(COleVariant("E2"), COleVariant("E2")); ASSERT(lpDisp); range.AttachDispatch(lpDisp); range.put_Value(COleVariant((long)DISP_E_PARAMNOTFOUND, VT_ERROR), COleVariant("WARNING")); range.put_Value2(COleVariant("WARNING")); lpDisp = exlSheet.get_Range(COleVariant("F2"), COleVariant("F2")); ASSERT(lpDisp); range.AttachDispatch(lpDisp); range.put_Value(COleVariant((long)DISP_E_PARAMNOTFOUND, VT_ERROR), COleVariant("ERROR")); range.put_Value2(COleVariant("ERROR")); lpDisp = exlSheet.get_Range(COleVariant("G2"), COleVariant("G2")); ASSERT(lpDisp); range.AttachDispatch(lpDisp); range.put_Value(COleVariant((long)DISP_E_PARAMNOTFOUND, VT_ERROR), COleVariant("CRITICAL")); range.put_Value2(COleVariant("CRITICAL")); lpDisp = exlSheet.get_Range(COleVariant("H2"), COleVariant("H2")); ASSERT(lpDisp); range.AttachDispatch(lpDisp); range.put_Value(COleVariant((long)DISP_E_PARAMNOTFOUND, VT_ERROR), COleVariant("NOTIFICATION")); range.put_Value2(COleVariant("NOTIFICATION")); lpDisp = exlSheet.get_Range(COleVariant("I2"), COleVariant("I2")); ASSERT(lpDisp); range.AttachDispatch(lpDisp); range.put_Value(COleVariant((long)DISP_E_PARAMNOTFOUND, VT_ERROR), COleVariant("FATAL")); range.put_Value2(COleVariant("FATAL")); // The cells are populated. To start the chart, // declare some long variables and site the chart. long left, top, width, height; left = 200; top = 200; width = 450; height = 350; lpDisp = exlSheet.ChartObjects(covOptional); ASSERT(lpDisp); chartobjects.AttachDispatch(lpDisp); // Attach the lpDisp pointer // for ChartObjects to the chartobjects // object. CChartObject chartobject = chartobjects.Add(left, top, width, height); //defines the rectangle, // adds a new chart at that rectangle and // assigns its object reference to a // ChartObject variable named chartobject chart.AttachDispatch(chartobject.get_Chart()); sprintf(charPos, "I%d", nSize + 2); lpDisp = exlSheet.get_Range(COleVariant("A2"), COleVariant(charPos)); // The range containing the data to be charted. ASSERT(lpDisp); range.AttachDispatch(lpDisp); VARIANT var; // ChartWizard needs a Variant for the Source range. var.vt = VT_DISPATCH; // .vt is the usable member of the tagVARIANT var.pdispVal = lpDisp; // Assign IDispatch pointer chart.ChartWizard(var, // Source. COleVariant((short)52), // Gallery: stacked column. covOptional, // Format, use default. COleVariant((short)1), // PlotBy: xlRows. COleVariant((short)1), // CategoryLabels. COleVariant((short)1), // SeriesLabels. COleVariant((short)TRUE), // HasLegend. COleVariant("Trace Report"), // Title. COleVariant("Components"), // CategoryTitle. COleVariant("Trace Count"), // ValueTitles. covOptional // ExtraTitle. ); range.ReleaseDispatch(); exlSheet.ReleaseDispatch(); exlSheets.ReleaseDispatch(); exlBook.ReleaseDispatch(); exlBooks.ReleaseDispatch(); chart.ReleaseDispatch(); chartobject.ReleaseDispatch(); app.ReleaseDispatch(); } catch(COleException *e) { char buf[1024]; sprintf(buf, "COleException. SCODE: %08lx.", (long)e->m_sc); ::MessageBox(NULL, buf, "COleException", MB_SETFOREGROUND | MB_OK); } catch(COleDispatchException *e) { char buf[1024]; sprintf(buf, "COleDispatchException. SCODE: %08lx, Description: \"%s\".", (long)e->m_wCode, (LPSTR)e->m_strDescription.GetBuffer(1024)); ::MessageBox(NULL, buf, "COleDispatchException", MB_SETFOREGROUND | MB_OK); } catch(...) { ::MessageBox(NULL, "General Exception caught.", "Catch-All", MB_SETFOREGROUND | MB_OK); } #endif }
void CBatchSNDlg::OnBnClickedCalibrationPointReport() { CString Product_Head_File_Name; CString strFilter; CString strFilename; CString strTemp; CString RegisterName; CString RegisterID; CString logstr; _variant_t temp_variant; _Application app; Workbooks books; _Workbook book; Worksheets sheets; _Worksheet sheet; Range range; Range rgMyRge1, rgMyRge2; COleVariant covTrue((short)TRUE), covFalse((short)FALSE), covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR); int CurrentRow; if (!app.CreateDispatch(_T("Excel.Application"),NULL)) { AfxMessageBox(_T("Create Excel false!")); return; } //遍历所有行 strFilename=g_strExePth+_T("Calibration Sensor Report.xls"); books.AttachDispatch(app.GetWorkbooks()); book.AttachDispatch(books.Add(_variant_t(strFilename))); sheets.AttachDispatch(book.GetWorksheets()); sheet.AttachDispatch(sheets.GetItem(_variant_t("Sheet1"))); range.AttachDispatch(sheet.GetCells()); CString ContentData; CTime time = CTime::GetCurrentTime(); ContentData.Format(_T("Calibration Date")); range.SetItem(_variant_t((long)(1)),_variant_t((long)(1)),_variant_t(ContentData)); ContentData.Format(_T("%d-%d-%d"),time.GetYear(),time.GetMonth(),time.GetDay()); range.SetItem(_variant_t((long)(1)),_variant_t((long)(3)),_variant_t(ContentData)); range.AttachDispatch(sheet.GetCells()); for (int i=0;i<(int)m_modbus_IDs.size();i++) { if (!m_modbus_IDs.at(i).Result) { continue; } CurrentRow = 3 + 7*i; unsigned short databuffer[30]; Read_Multi(m_modbus_IDs.at(i).ModbusID,&databuffer[0],2000,30); ContentData = _T("Serial Number"); range.SetItem(_variant_t((long)(CurrentRow)),_variant_t((long)(1)),_variant_t(ContentData)); ContentData.Format(_T("%d"),databuffer[2027 - 2000]); range.SetItem(_variant_t((long)(CurrentRow)),_variant_t((long)(2)),_variant_t(ContentData)); ContentData = _T("Points"); range.SetItem(_variant_t((long)(CurrentRow)),_variant_t((long)(3)),_variant_t(ContentData)); ContentData.Format(_T("%d"),databuffer[2003 - 2000]); range.SetItem(_variant_t((long)(CurrentRow)),_variant_t((long)(4)),_variant_t(ContentData)); ++CurrentRow; ContentData = _T("Temperature"); range.SetItem(_variant_t((long)(CurrentRow)),_variant_t((long)(1)),_variant_t(ContentData)); ContentData.Format(_T("%0.1f"),((float)((short)databuffer[2000 - 2000]))/10); range.SetItem(_variant_t((long)(CurrentRow)),_variant_t((long)(2)),_variant_t(ContentData)); ContentData = _T("Humidity"); range.SetItem(_variant_t((long)(CurrentRow)),_variant_t((long)(3)),_variant_t(ContentData)); ContentData.Format(_T("%0.1f"),((float)((short)databuffer[2001 - 2000]))/10); range.SetItem(_variant_t((long)(CurrentRow)),_variant_t((long)(4)),_variant_t(ContentData)); ++CurrentRow; ContentData = _T("RH"); range.SetItem(_variant_t((long)(CurrentRow)),_variant_t((long)(1)),_variant_t(ContentData)); for (int j = 0;j<10;j++) { ContentData.Format(_T("%0.1f"),((float)((short)databuffer[2004 - 2000 + 2*j]))/10); range.SetItem(_variant_t((long)(CurrentRow)),_variant_t((long)(2+j)),_variant_t(ContentData)); } ++CurrentRow; ContentData = _T("Frequency"); range.SetItem(_variant_t((long)(CurrentRow)),_variant_t((long)(1)),_variant_t(ContentData)); for (int j = 0;j<10;j++) { ContentData.Format(_T("%d"),databuffer[2005 - 2000 + 2*j]); range.SetItem(_variant_t((long)(CurrentRow)),_variant_t((long)(2+j)),_variant_t(ContentData)); } } AfxMessageBox(_T("Export Completely")); app.SetVisible(true); range.ReleaseDispatch(); sheet.ReleaseDispatch(); sheets.ReleaseDispatch(); book.ReleaseDispatch(); books.ReleaseDispatch(); app.ReleaseDispatch(); }
void Cwhu_FaxSettingDlg::Lin_ExportForArrToExcel(CStringArray &m_AutoForward,CString m_FilePath) { CApplication app; CWorkbooks books; CWorkbook book; CWorksheets sheets; CWorksheet sheet; CRange range; CRange cols; CString str1, str2; int m_ArrPos = 0; int m_ArrCount = m_AutoForward.GetSize(); COleVariant covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR); if( !app.CreateDispatch(_T("Excel.Application"))) { MessageBox(_T("无法创建Excel应用!")); return; } books=app.get_Workbooks(); book=books.Add(covOptional); sheets=book.get_Sheets(); sheet=sheets.get_Item(COleVariant((short)1)); //写入表头// str2 = _T("A1"); CString str = _T("源号码"); range=sheet.get_Range(COleVariant(str2),COleVariant(str2)); range.put_Value2(COleVariant(str)); str2 = _T("B1"); str = _T("转发号码个数"); range=sheet.get_Range(COleVariant(str2),COleVariant(str2)); range.put_Value2(COleVariant(str)); for (int j=3;j<11;j++) { str2 = Lin_GetEnglishCharacter(j); str2 = str2 +_T("1"); str= _T("转发号码"); range=sheet.get_Range(COleVariant(str2),COleVariant(str2)); range.put_Value2(COleVariant(str)); } CStringArray m_LineStart; for (int i=0;i<m_ArrCount;i++) { CString m_str= m_AutoForward.GetAt(i); int CharCount = m_str.GetLength(); if (CharCount<4) //如果是号码个数// { m_str.Format(_T("%d"),i-1); m_LineStart.Add(m_str); } } int ItemNum = 2; int ColumNum = 1; for (int i=0;i<m_LineStart.GetSize();i++) { int Pos = _ttoi(m_LineStart.GetAt(i)); CString m_str = m_AutoForward.GetAt(Pos+1); int Number = _ttoi(m_str); for (int j=0;j<Number+2;j++) { str2 = Lin_GetEnglishCharacter(ColumNum); str1.Format(_T("%d"),ItemNum); str2 = str2 +str1; CString content = _T("'")+m_AutoForward.GetAt(Pos+j); range=sheet.get_Range(COleVariant(str2),COleVariant(str2)); range.put_Value2(COleVariant(content)); ColumNum++; if (ColumNum>10) { ColumNum = 3; ItemNum++; } } ItemNum++; ColumNum = 1; } cols=range.get_EntireColumn(); cols.AutoFit(); //app.put_Visible(TRUE); //app.put_UserControl(TRUE); book.SaveAs(COleVariant(m_FilePath),covOptional,covOptional,covOptional,covOptional,covOptional,0,covOptional,covOptional,covOptional,covOptional,covOptional); app.Quit(); }
void CMyExcel::PrePrintOut(BOOL blnEnable) { COleVariant covOptional((short)blnEnable); MySheet.PrintPreview(covOptional); }
HRESULT CZZExcel2Word::BuildDataFromExcelFile(std::wstring ExcelFile,std::wstring stringDocKey) { CExcelApplication ExcelApp; CExcelWorkbooks wbsMyBooks; CExcelWorkbook wbMyBook; CExcelWorksheets wssMysheets; CExcelWorksheet wsMysheet; //创建Excel 2000服务器(启动Excel) // IID clsid; // HRESULT hr = IIDFromString(_T("Excel.Application"), &clsid); if (!ExcelApp.CreateDispatch(_T("Excel.Application"),NULL)) { AfxMessageBox(_T("创建Excel服务失败!")); exit(1); } //利用模板文件建立新文档 wbsMyBooks = ExcelApp.get_Workbooks(); COleVariant avar((long)DISP_E_PARAMNOTFOUND,VT_ERROR); wbMyBook = wbsMyBooks.Open(ExcelFile.c_str(),avar,avar,avar,avar,avar,avar,avar,avar,avar,avar,avar,avar,avar,avar); //得到Worksheets wssMysheets = wbMyBook.get_Sheets(); COleVariant covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR); CExcelRange useRange; for (int iSheetIdx = 1; iSheetIdx <= wssMysheets.get_Count() ; iSheetIdx++) { //得到sheet wsMysheet=wssMysheets.get_Item(COleVariant((short)iSheetIdx)); #ifdef _DEBUG CString sheetname = wsMysheet.get_Name(); #endif // _DEBUG //首先分析表的第一行,得到数据关键字 int iKeyColumnIdx = -1; CExcelRange useRange = wsMysheet.get_UsedRange(); long iRowNum = useRange.get_Count(); useRange = useRange.get_Columns(); long iStartRow = useRange.get_Row(); int nColumn = useRange.get_Count(); long iStartCol = useRange.get_Column(); long iValueNameRow = m_iValueNameRow; //find keyName Column index for (int iColIdx = iStartCol; iColIdx <= nColumn ; iColIdx++) { useRange = wsMysheet.get_Cells(); COleVariant keyValue=useRange.get_Item(_variant_t(iValueNameRow),_variant_t(iColIdx)); useRange = keyValue.pdispVal; std::wstring itemString = GetStringFromExcelCell(useRange); if (stringDocKey == itemString ) { iKeyColumnIdx = iColIdx; break; } } if (iKeyColumnIdx < 0) { continue;//no valid data with doc key string } //根据关键字列创建doc for (int iRodIdx = 3; iRodIdx <= iRowNum ; iRodIdx++) { useRange = wsMysheet.get_Cells(); COleVariant keyValue=useRange.get_Item(_variant_t(iRodIdx),_variant_t(iKeyColumnIdx)); useRange = keyValue.pdispVal; std::wstring keyitemString = GetStringFromExcelCell(useRange); if (keyitemString.empty()) { continue; } PZZWordDoc pDoc = GetDocFromKeyString(keyitemString); if (pDoc == NULL) { pDoc = CreateDoc(keyitemString); if (pDoc == NULL) { continue; } SetExportReportSetting(pDoc); m_vecWordDoc.push_back(pDoc); } //逐个读取相关doc的数据 for (int iColIdx = iStartCol; iColIdx <= nColumn ; iColIdx++) { if (iColIdx == iKeyColumnIdx) { continue; } useRange = wsMysheet.get_Cells(); keyValue=useRange.get_Item(_variant_t(iRodIdx),_variant_t(iColIdx)); useRange = keyValue.pdispVal; std::wstring valueitemString = GetStringFromExcelCell(useRange); if (valueitemString.empty()) { //无效数据 continue; } //查找这个值对应的名字 useRange = wsMysheet.get_Cells(); keyValue=useRange.get_Item(_variant_t(iValueNameRow),_variant_t(iColIdx)); useRange = keyValue.pdispVal; std::wstring valuenameitemString = GetStringFromExcelCell(useRange); if (valuenameitemString.empty()) { //无效数据名字 continue; } pDoc->AddDataItem(valuenameitemString,valueitemString); } } if (m_ioutputOnlyoneFile ==1) { break; } wsMysheet.ReleaseDispatch(); }//sheet scan wssMysheets.ReleaseDispatch(); wbsMyBooks.Close(); wbMyBook.ReleaseDispatch(); wbsMyBooks.ReleaseDispatch(); ExcelApp.Quit(); ExcelApp.ReleaseDispatch(); return S_OK; }
void CXunJianDlg::OnOK() { try{ pList= (CListBox *)GetDlgItem(IDC_HOSTLIST); /*if( pList->GetTextLen(0)>15 || pList->GetTextLen(0)<7 ) { MessageBox("主机列表文件未加载,请重新选择!"); return; }*/ _GUID clsid; IUnknown *pUnk; IDispatch *pDisp; LPDISPATCH lpDisp; _Application app; Workbooks xj_books; _Workbook xj_book; Worksheets xj_sheets; _Worksheet xj_sheet; Range range; Range unionRange; Range cols; Font font; // COleVariant background; COleVariant covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR); ::CLSIDFromProgID(L"Excel.Application",&clsid); // from registry if(GetActiveObject(clsid, NULL,&pUnk) == S_OK) { VERIFY(pUnk->QueryInterface(IID_IDispatch,(void**) &pDisp) == S_OK); app.AttachDispatch(pDisp); pUnk->Release(); } else { if(!app.CreateDispatch("Excel.Application")) { MessageBox("Excel program not found"); app.Quit(); return; } } xj_books=app.GetWorkbooks(); xj_book= xj_books.Add(covOptional); xj_sheets= xj_book.GetSheets(); xj_sheet= xj_sheets.GetItem(COleVariant((short)1)); int i; Range item; range=xj_sheet.GetRange(COleVariant("A1"),COleVariant("F1")); for(i= 0; i < 6; i++) { item.AttachDispatch(range.GetItem(COleVariant((long)1),COleVariant((long)i+1)).pdispVal); item.SetValue2(COleVariant(PROJ[i])); } //描绘第一行目录 //range=xj_sheet.GetRange(COleVariant("A1"),COleVariant("F1")); lpDisp=range.GetInterior(); Interior cellinterior; cellinterior.AttachDispatch(lpDisp); cellinterior.SetColor(COleVariant((long)0xc0c0c0)); //设置背景色为灰色 cellinterior.ReleaseDispatch(); //range=xj_sheet.GetRange(COleVariant("A1"),COleVariant("F1")); range.SetHorizontalAlignment(COleVariant((long)-4108)); //全部居中 Borders bord; bord=range.GetBorders(); bord.SetLineStyle(COleVariant((short)1)); //设置边框 //range=xj_sheet.GetRange(COleVariant("A1"),COleVariant("F1")); cols=range.GetEntireColumn(); cols.AutoFit(); //自动调整 /**************************表格初始绘画完成************************************/ long usedRowNum; //行计数 CString handleFile; CString hostFileName,hostip; bool error = false; CString infos,info; ExcelFile excelFile; ReadTxt xj_txt; xj_HostCount=pList->GetCount(); for(int n_host=0;n_host<xj_HostCount;n_host++) //主循环,一个文件一次循环。 { pList->GetText(n_host,hostFileName); hostip = hostFileName; handleFile = hostFileName + _T(" 正在处理..."); pList->DeleteString(n_host); pList->InsertString(n_host,handleFile); pList->SetCurSel(n_host); pList->UpdateWindow(); hostFileName = xj_FilePath + hostFileName; hostFileName += _T(".txt"); CStdioFile hostFile; if(!hostFile.Open(hostFileName,CFile::modeRead,0)) { //记录不存在文件名 handleFile.Replace("正在处理...","失败!"); error = true; pList->DeleteString(n_host); pList->InsertString(n_host,handleFile); pList->UpdateWindow(); continue; } usedRowNum = excelFile.GetRowCount(xj_sheet); range.AttachDispatch(xj_sheet.GetCells()); //info.Format( _T("%d"), n_host+1); info = xj_txt.ReadHostName(&hostFile,COMMAND[0],COMMAND[1]); //获取节点名称 range.SetItem(COleVariant(usedRowNum+1),COleVariant(long(1)),COleVariant(info)); int portCount = 0; //端口数目,不包括7/1 CString nSend, nRecv; float n_Send,n_Recv; while(hostFile.ReadString(info)) if(info.Find( COMMAND[4]) > -1) break; while( hostFile.ReadString(info) && info.Find( "[local]" ) == -1 ) //端口号和流量 { if( info.Find( "/" ) == -1 || info.Find( "7/1" ) > -1 ) continue; info.Replace( "ethernet",""); info = _T("'") + info; infos = info; while( hostFile.ReadString(info) ) if( info.Find( "send bit rate" ) > -1 ) break; nSend = info.Mid( 60 ); hostFile.ReadString(info); nRecv = info.Mid( 60 ); nSend.Trim(); nRecv.Trim(); n_Send = (float)atof(nSend); n_Recv = (float)atof(nRecv); if( n_Send < 1000 && n_Recv < 1000 ) continue; portCount++; range.SetItem(COleVariant(usedRowNum+portCount),COleVariant(long(2)),COleVariant(infos.Trim())); range.SetItem(COleVariant(usedRowNum+portCount),COleVariant(long(4)),COleVariant((n_Send>n_Recv)?nSend:nRecv)); } hostFile.SeekToBegin(); infos = xj_txt.ReadLine(&hostFile,"ubscriber Address"); //历史在线最大用户数 if( infos == _T("") ) info = _T("0"); else { int token = 0; for(i = 0; i < 5 ; i++) info = infos.Tokenize(" ",token); } range.SetItem(COleVariant(usedRowNum+1),COleVariant(long(6)),COleVariant(info.Trim())); hostFile.Close(); if(portCount > 1) { unionRange.AttachDispatch(range.GetItem(COleVariant(usedRowNum+1),COleVariant((long)1)).pdispVal); unionRange.AttachDispatch(unionRange.GetResize(COleVariant((long)portCount),COleVariant((long)1))); unionRange.Merge(COleVariant((long)0)); //节点名称单元格合并 unionRange.AttachDispatch(range.GetItem(COleVariant(usedRowNum+1),COleVariant((long)6)).pdispVal); unionRange.AttachDispatch(unionRange.GetResize(COleVariant((long)portCount),COleVariant((long)1))); unionRange.Merge(COleVariant((long)0)); //历史最大用户数合并 } unionRange.AttachDispatch(range.GetItem(COleVariant(usedRowNum+1),COleVariant((long)1)).pdispVal); unionRange.AttachDispatch(unionRange.GetResize(COleVariant((long)portCount),COleVariant((long)6))); unionRange.SetRowHeight(COleVariant(13.5)); bord = unionRange.GetBorders(); bord.SetLineStyle(COleVariant((short)1)); //设置边框 handleFile.Replace("正在处理...","已完成"); pList->DeleteString(n_host); pList->InsertString(n_host,handleFile); pList->UpdateWindow(); } CTime time; time = time.GetCurrentTime(); infos = time.Format("%Y%m%d%H%M%S"); //time.Format(); info = _T("巡检报表") + infos + _T(".xlsx"); info = xj_FilePath + info; info.Replace("\\\\","\\"); xj_book.SaveAs(COleVariant(info),covOptional,covOptional,covOptional,covOptional,covOptional,0,covOptional,covOptional,covOptional,covOptional,covOptional); if(error == true ) { MessageBox("巡检报表已完成,已保存到\r\n" + info + "\r\n有文件打开错误,点击\"确定\"返回查看","有文件打开错误!",MB_OK|MB_ICONWARNING); app.Quit(); } else { if(MessageBox("巡检报表已完成,已保存到\r\n" + info + "\r\n点击\"确定\"打开文件查看","生成报表完成",MB_OKCANCEL) == IDOK) { app.SetVisible(TRUE); app.SetUserControl(TRUE); } else app.Quit(); } } catch (CFileException* e) { e->ReportError(); e->Delete(); } //CDialog::OnOK(); }
void CSendRedPacketRecord::ExportSendRedPacketToexel() { // TODO: 在此添加控件通知处理程序代码 string conditon; conditon= "where 1=1 order by send_time desc"; uistruct::REDPACKETSENDLIST SendRedPacketList; int nItem = theApp.m_SqliteDeal.GetRedPacketSendRecordList(conditon ,&SendRedPacketList ) ; if (SendRedPacketList.size() == 0) { UiFun::MessageBoxEx(UiFun::UI_LoadString("TRAD_MODULE" , "TRAD_NOT_RECORD_OUT" ,theApp.gsLanguage) , UiFun::UI_LoadString("COMM_MODULE" , "COMM_TIP" ,theApp.gsLanguage) ,MFB_OK|MFB_TIP ); return; } CFileDialog dlg(FALSE,NULL,UiFun::UI_LoadString("MENU" , "MENU_SENDRED" ,theApp.gsLanguage),OFN_HIDEREADONLY|OFN_FILEMUSTEXIST ,UiFun::UI_LoadString("COMM_MODULE" , "COMM_FILE" ,theApp.gsLanguage)+" (*.xls)|*.xls||"); if (IDOK != dlg.DoModal()) { return; } CString strFile = dlg.GetPathName(); if (!((CDacrsUIDlg*)(theApp.m_pMainWnd))->GetFileName(strFile,_T(".xls"))) { return; } struct LISTCol { string name ; UINT size ; } listheadr[7] = { {UiFun::UI_LoadString("P2P_MODULE" , "MORTTARD_SENDGIFT" ,theApp.gsLanguage) , 70}, {UiFun::UI_LoadString("MORTTARD_MODULE" , "P2P_PROMOTER" ,theApp.gsLanguage), 30}, {UiFun::UI_LoadString("MORTTARD_MODULE" , "MORTTARD_TYPE" ,theApp.gsLanguage) , 10}, {UiFun::UI_LoadString("MORTTARD_MODULE" , "MORTTARD_GRABTIME" ,theApp.gsLanguage) , 20}, {UiFun::UI_LoadString("MORTTARD_MODULE" , "MORTTARD_TOTALMONEY" ,theApp.gsLanguage) ,30}, {UiFun::UI_LoadString("MORTTARD_MODULE" , "MORTTARD_COUNT" ,theApp.gsLanguage) ,10}, {UiFun::UI_LoadString("RECEIVE_MODULE" , "RECEIVE_ACTIVATION_STATE" ,theApp.gsLanguage) , 10} }; COleVariant covTrue((short)TRUE), covFalse((short)FALSE), covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR); CApplication app; CWorkbooks books; CWorkbook book; CWorksheets sheets; CWorksheet sheet; CRange range; CFont0 font; if (!app.CreateDispatch(_T("Excel.Application"))) { UiFun::MessageBoxEx(UiFun::UI_LoadString("TRAD_MODULE" , "TRAD_NOT_OFFICE" ,theApp.gsLanguage) , UiFun::UI_LoadString("COMM_MODULE" , "COMM_TIP" ,theApp.gsLanguage),MFB_OK|MFB_TIP ); return; } //Get a new workbook. books = app.get_Workbooks(); book = books.Add(covOptional); sheets = book.get_Worksheets(); sheet = sheets.get_Item(COleVariant((short)1)); ////////////////////////////////////CListCtrl控件report风格////////////////////////////////////////////////////////// //CHeaderCtrl *pmyHeaderCtrl; //pmyHeaderCtrl = m_listCtrl.GetHeaderCtrl();//此句取得CListCtrl控件的列表頭 int iRow,iCol; int m_cols = 7; int m_rows = SendRedPacketList.size(); HDITEM hdi; TCHAR lpBuffer[256]; bool fFound = false; hdi.mask = HDI_TEXT; hdi.pszText = lpBuffer; hdi.cchTextMax = 256; CString colname; CString strTemp; for(iCol=0; iCol <m_cols; iCol++)//将列表的标题头写入EXCEL { UiFun::GetCellName(1 ,iCol + 1, colname); range = sheet.get_Range(COleVariant(colname),COleVariant(colname)); //pmyHeaderCtrl-> GetItem(iCol, &hdi); range.put_Value2(COleVariant(listheadr[iCol].name.c_str())); int nWidth = listheadr[iCol].size; //m_listCtrl.GetColumnWidth(iCol)/6; //得到第iCol+1列 range.AttachDispatch(range.get_Item(_variant_t((long)(iCol+1)),vtMissing).pdispVal,true); //设置列宽 range.put_ColumnWidth(_variant_t((long)nWidth)); } range = sheet.get_Range(COleVariant( _T("A1 ")), COleVariant(colname)); range.put_RowHeight(_variant_t((long)50));//设置行的高度 font = range.get_Font(); font.put_Bold(covTrue); range.put_VerticalAlignment(COleVariant((short)-4108));//xlVAlignCenter = -4108 COleSafeArray saRet; DWORD numElements[]={m_rows,m_cols}; //5x2 element array saRet.Create(VT_BSTR, 2, numElements); range = sheet.get_Range(COleVariant( _T("A2 ")),covOptional); range = range.get_Resize(COleVariant((short)m_rows),COleVariant((short)m_cols)); long index[2]; range = sheet.get_Range(COleVariant( _T("A2 ")),covOptional); range = range.get_Resize(COleVariant((short)m_rows),COleVariant((short)m_cols)); int iLine = 0; iRow = 1; iCol = 1; vector<uistruct::REDPACKETSEND_t>::const_iterator pitem = SendRedPacketList.begin(); for(;pitem != SendRedPacketList.end();pitem++,iRow++) { map<int,string> item; GetExportCol(item,*pitem); for ( iCol = 1; iCol <= m_cols; iCol++) { index[0]=iRow-1; index[1]=iCol-1; string strTemp = item[iCol-1]; CString szTemp = strTemp.c_str(); BSTR bstr = szTemp.AllocSysString(); saRet.PutElement(index,bstr); SysFreeString(bstr); } } range.put_Value2(COleVariant(saRet)); saRet.Detach(); ////////////////////////////////////////////////////////////////////////////////////////////////////////////////// book.SaveCopyAs(COleVariant(strFile)); // cellinterior.ReleaseDispatch(); book.put_Saved(true); book.ReleaseDispatch(); books.ReleaseDispatch(); app.Quit(); app.ReleaseDispatch(); }