bool ole_open_excel(const string &xlsx, CApplication &excel_application, CWorkbooks &books, CWorkbook &book, CWorksheets &sheets) { if(!init_ole()){ return false; } if(false == filetool::exist(xlsx)){ std::string err = xlsx + "文件不存在!"; AfxMessageBox(strtool::string2wstring(err).c_str()); return false; } //创建Excel 服务器(启动Excel) if(!excel_application.CreateDispatch(_T("Excel.Application"),NULL)){ AfxMessageBox(_T("启动Excel服务器失败!")); return false; } excel_application.put_Visible(FALSE); excel_application.put_DisplayAlerts(FALSE); excel_application.put_UserControl(FALSE); //得到工作簿容器 books.AttachDispatch(excel_application.get_Workbooks(), TRUE); // const std::wstring wstr = const std::wstring w_xlsx = strtool::string2wstring(xlsx); //L"E:\\proj\\github_tokit\\trunk\\example\\excel\\测试用例.xlsx"; //打开一个工作簿,如不存在,则新增一个工作簿 LPDISPATCH lpDisp = books.Add(COleVariant(w_xlsx.c_str())); if (lpDisp){ book.AttachDispatch(lpDisp); // 得到工作簿中的Sheet的容器 sheets.AttachDispatch(book.get_Sheets()); } return true; }
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("列表为空")); } }